Author: etnu
Date: Wed Oct  8 12:03:08 2008
New Revision: 702968

URL: http://svn.apache.org/viewvc?rev=702968&view=rev
Log:
Ensured that our code is always injected before user's code to avoid breaking 
gadgets that have code in the head of the document that depends on injected 
javascript.


Modified:
    
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderingContentRewriter.java
    
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RenderingContentRewriterTest.java

Modified: 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderingContentRewriter.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderingContentRewriter.java?rev=702968&r1=702967&r2=702968&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderingContentRewriter.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderingContentRewriter.java
 Wed Oct  8 12:03:08 2008
@@ -370,10 +370,10 @@
       if (matcher.matches()) {
         GadgetContent content = new GadgetContent();
         content.appendHead(matcher.group(BEFORE_HEAD_GROUP))
-               .appendHead("<head>")
-               .appendHead(matcher.group(HEAD_GROUP));
+               .appendHead("<head>");
 
-        content.appendBody("</head>")
+        content.appendBody(matcher.group(HEAD_GROUP))
+               .appendBody("</head>")
                .appendBody(createBodyTag(gadget, 
matcher.group(BODY_ATTRIBUTES_GROUP)))
                .appendBody(matcher.group(BODY_GROUP));
 

Modified: 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RenderingContentRewriterTest.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RenderingContentRewriterTest.java?rev=702968&r1=702967&r2=702968&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RenderingContentRewriterTest.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RenderingContentRewriterTest.java
 Wed Oct  8 12:03:08 2008
@@ -302,6 +302,28 @@
   }
 
   @Test
+  public void featuresInjectedBeforeExistingScript() throws Exception {
+    Gadget gadget = makeDefaultGadget();
+    control.replay();
+
+    String rewritten = rewrite(gadget,
+        "<html><head><script 
src='foo.js'></script></head><body>hello</body></html>");
+
+    Matcher matcher = DOCUMENT_SPLIT_PATTERN.matcher(rewritten);
+    assertTrue("Output is not valid HTML.", matcher.matches());
+
+    String headContent = matcher.group(HEAD_GROUP);
+
+    // Locate user script.
+    int userPosition = headContent.indexOf("<script src='foo.js'></script>");
+
+    // Anything else here, we added.
+    int ourPosition = headContent.indexOf("<script>");
+
+    assertTrue("Injected script must come before user script.", ourPosition < 
userPosition);
+  }
+
+  @Test
   public void urlFeaturesForcedExternal() throws Exception {
     String gadgetXml =
       "<Module><ModulePrefs title=''>" +


Reply via email to