You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by zh...@apache.org on 2010/08/26 03:25:50 UTC

svn commit: r989422 - in /shindig/trunk/java/gadgets/src: main/java/org/apache/shindig/gadgets/parse/caja/ main/java/org/apache/shindig/gadgets/render/ main/java/org/apache/shindig/gadgets/rewrite/ test/java/org/apache/shindig/gadgets/rewrite/ test/res...

Author: zhoresh
Date: Thu Aug 26 01:25:49 2010
New Revision: 989422

URL: http://svn.apache.org/viewvc?rev=989422&view=rev
Log:
url: http://codereview.appspot.com/2004042/
 CSS rewriter doesnt take container into account when rewriting embedded URL's 
 patch provided by jcian

Modified:
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/caja/CajaCssSanitizer.java
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/CajaResponseRewriter.java
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CssResponseRewriter.java
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DomWalker.java
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/StyleTagExtractorVisitor.java
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/StyleTagProxyEmbeddedUrlsVisitor.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/CssResponseRewriterTest.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/StyleTagExtractorVisitorTest.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/StyleTagProxyEmbeddedUrlsVisitorTest.java
    shindig/trunk/java/gadgets/src/test/resources/org/apache/shindig/gadgets/rewrite/rewritebasic-expected.css

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/caja/CajaCssSanitizer.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/caja/CajaCssSanitizer.java?rev=989422&r1=989421&r2=989422&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/caja/CajaCssSanitizer.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/caja/CajaCssSanitizer.java Thu Aug 26 01:25:49 2010
@@ -19,6 +19,7 @@ package org.apache.shindig.gadgets.parse
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.shindig.common.uri.Uri;
+import org.apache.shindig.gadgets.GadgetContext;
 import org.apache.shindig.gadgets.GadgetException;
 import org.apache.shindig.gadgets.rewrite.DomWalker;
 import org.apache.shindig.gadgets.uri.ProxyUriManager;
@@ -175,7 +176,7 @@ public class CajaCssSanitizer {
     }, null);
   }
   
-  private static String rewriteUri(ProxyUriManager proxyUriManager, String input, Uri context) {
+  private static String rewriteUri(ProxyUriManager proxyUriManager, String input, final Uri context) {
     Uri inboundUri = null;
     try {
       inboundUri = Uri.parse(input);
@@ -187,7 +188,13 @@ public class CajaCssSanitizer {
       inboundUri = context.resolve(inboundUri);
     }
     List<ProxyUriManager.ProxyUri> uris = ImmutableList.of(
-        new ProxyUriManager.ProxyUri(DomWalker.makeGadget(context), inboundUri));
+        new ProxyUriManager.ProxyUri(DomWalker.makeGadget(new GadgetContext() {
+          // TODO: Refactor this method to pass on the container as well.          
+          @Override
+          public Uri getUrl() {
+            return context;
+          }
+        }), inboundUri));
     List<Uri> rewritten = proxyUriManager.make(uris, null);
     return rewritten.get(0).toString();
   }

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/CajaResponseRewriter.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/CajaResponseRewriter.java?rev=989422&r1=989421&r2=989422&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/CajaResponseRewriter.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/CajaResponseRewriter.java Thu Aug 26 01:25:49 2010
@@ -96,7 +96,7 @@ public class CajaResponseRewriter implem
     InputSource is = new InputSource(contextUri.toJavaUri());
 
     PluginMeta pluginMeta = new PluginMeta(
-            proxyFetcher(req, contextUri), proxyUriPolicy(contextUri));
+            proxyFetcher(req, contextUri), proxyUriPolicy(req));
     PluginCompiler compiler = new PluginCompiler(BuildInfo.getInstance(),
             pluginMeta, mq);
     compiler.setMessageContext(mc);
@@ -148,8 +148,9 @@ public class CajaResponseRewriter implem
     }
   }
 
-  private UriPolicy proxyUriPolicy(final Uri contextUri) {
-    final Gadget stubGadget = DomWalker.makeGadget(contextUri);
+  private UriPolicy proxyUriPolicy(HttpRequest request) {
+    final Uri contextUri = request.getUri();
+    final Gadget stubGadget = DomWalker.makeGadget(request);
 
     return new UriPolicy() {
       public String rewriteUri(ExternalReference ref, UriEffect effect,

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CssResponseRewriter.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CssResponseRewriter.java?rev=989422&r1=989421&r2=989422&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CssResponseRewriter.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CssResponseRewriter.java Thu Aug 26 01:25:49 2010
@@ -20,6 +20,7 @@ package org.apache.shindig.gadgets.rewri
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.shindig.common.uri.Uri;
+import org.apache.shindig.gadgets.GadgetContext;
 import org.apache.shindig.gadgets.GadgetException;
 import org.apache.shindig.gadgets.http.HttpRequest;
 import org.apache.shindig.gadgets.http.HttpResponse;
@@ -70,11 +71,12 @@ public class CssResponseRewriter impleme
     if (!RewriterUtils.isCss(request, original)) {
       return;
     }
-    
+
     String css = original.getContent();
     StringWriter sw = new StringWriter((css.length() * 110) / 100);
     rewrite(new StringReader(css), request.getUri(),
-        new UriMaker(proxyUriManager, config), sw, false);
+        new UriMaker(proxyUriManager, config), sw, false,
+            DomWalker.makeGadget(request).getContext());
     original.setContent(sw.toString());
   }
 
@@ -86,15 +88,18 @@ public class CssResponseRewriter impleme
    * @param writer Output
    * @param extractImports If true remove the import statements from the output and return their
    *            referenced URIs.
+   * @param gadgetContext The gadgetContext
+   *
    * @return Empty list of extracted import URIs.
    */
-  public List<String> rewrite(Reader content, Uri source,
-      UriMaker uriMaker, Writer writer, boolean extractImports) throws RewritingException {
+  public List<String> rewrite(Reader content, Uri source, UriMaker uriMaker, Writer writer,
+      boolean extractImports, GadgetContext gadgetContext) throws RewritingException {
     try {
       String original = IOUtils.toString(content);
       try {
         CssTree.StyleSheet stylesheet = cssParser.parseDom(original, source);
-        List<String> stringList = rewrite(stylesheet, source, uriMaker, extractImports);
+        List<String> stringList = rewrite(stylesheet, source, uriMaker, extractImports,
+            gadgetContext);
         // Serialize the stylesheet
         cssParser.serialize(stylesheet, writer);
         return stringList;
@@ -120,14 +125,15 @@ public class CssResponseRewriter impleme
    * @param uriMaker a UriMaker
    * @param extractImports If true remove the import statements from the output and return their
    *            referenced URIs.
+   * @param gadgetContext The gadgetContext
    * @return Empty list of extracted import URIs.
    */
-  public List<String> rewrite(Element styleNode, Uri source,
-      UriMaker uriMaker, boolean extractImports) throws RewritingException {
+  public List<String> rewrite(Element styleNode, Uri source, UriMaker uriMaker,
+      boolean extractImports, GadgetContext gadgetContext) throws RewritingException {
     try {
       CssTree.StyleSheet stylesheet =
         cssParser.parseDom(styleNode.getTextContent(), source);
-      List<String> imports = rewrite(stylesheet, source, uriMaker, extractImports);
+      List<String> imports = rewrite(stylesheet, source, uriMaker, extractImports, gadgetContext);
       // Write the rewritten CSS back into the element
       String content = cssParser.serialize(stylesheet);
       if (StringUtils.isEmpty(content) || StringUtils.isWhitespace(content)) {
@@ -140,7 +146,7 @@ public class CssResponseRewriter impleme
     } catch (GadgetException ge) {
       if (ge.getCause() instanceof ParseException) {
         LOG.log(Level.WARNING,
-              "Caja CSS parse failure: " + ge.getCause().getMessage() + " for " + source);
+            "Caja CSS parse failure: " + ge.getCause().getMessage() + " for " + source);
         return Collections.emptyList();
       } else {
         throw new RewritingException(ge, ge.getHttpStatusCode());
@@ -158,10 +164,10 @@ public class CssResponseRewriter impleme
    * @return Empty list of extracted import URIs.
    */
   public static List<String> rewrite(CssTree.StyleSheet styleSheet, final Uri source,
-      final UriMaker uriMaker, final boolean extractImports) {
+      final UriMaker uriMaker, final boolean extractImports, final GadgetContext gadgetContext) {
     final List<String> imports = Lists.newLinkedList();
     final List<CssTree.UriLiteral> skip = Lists.newLinkedList();
-    
+
     styleSheet.acceptPreOrder(new Visitor() {
       public boolean visit(AncestorChain<?> chain) {
         if (chain.node instanceof CssTree.Import) {
@@ -172,13 +178,13 @@ public class CssResponseRewriter impleme
             imports.add(uriLiteral.getValue());
             ((AbstractParseTreeNode) chain.getParentNode()).removeChild(chain.node);
           } else {
-            String rewritten = rewriteUri(uriMaker, uriLiteral.getValue(), source);
+            String rewritten = rewriteUri(uriMaker, uriLiteral.getValue(), source, gadgetContext);
             uriLiteral.setValue(rewritten);
           }
         } else if (chain.node instanceof CssTree.UriLiteral &&
             !skip.contains(chain.node)) {
           CssTree.UriLiteral uriDecl = (CssTree.UriLiteral) chain.node;
-          String rewritten = rewriteUri(uriMaker, uriDecl.getValue(), source);
+          String rewritten = rewriteUri(uriMaker, uriDecl.getValue(), source, gadgetContext);
           uriDecl.setValue(rewritten);
         }
         return true;
@@ -186,8 +192,9 @@ public class CssResponseRewriter impleme
 
     return imports;
   }
-  
-  private static String rewriteUri(UriMaker uriMaker, String input, Uri context) {
+
+  private static String rewriteUri(UriMaker uriMaker, String input, Uri context,
+      GadgetContext gadgetContext) {
     Uri inboundUri = null;
     try {
       inboundUri = Uri.parse(input);
@@ -199,23 +206,23 @@ public class CssResponseRewriter impleme
       inboundUri = context.resolve(inboundUri);
     }
     ProxyUriManager.ProxyUri proxyUri =
-        new ProxyUriManager.ProxyUri(DomWalker.makeGadget(context), inboundUri);
+        new ProxyUriManager.ProxyUri(DomWalker.makeGadget(gadgetContext), inboundUri);
     return uriMaker.make(proxyUri, context).toString();
   }
-  
+
   public static UriMaker uriMaker(ProxyUriManager wrapped, ContentRewriterFeature.Config config) {
     return new UriMaker(wrapped, config);
   }
-  
+
   public static final class UriMaker {
     private final ProxyUriManager wrapped;
     private final ContentRewriterFeature.Config config;
-    
+
     private UriMaker(ProxyUriManager wrapped, ContentRewriterFeature.Config config) {
       this.wrapped = wrapped;
       this.config = config;
     }
-    
+
     public Uri make(ProxyUriManager.ProxyUri uri, Uri context) {
       if (config.shouldRewriteURL(uri.getResource().toString())) {
         List<ProxyUriManager.ProxyUri> puris = Lists.newArrayList(uri);
@@ -226,4 +233,3 @@ public class CssResponseRewriter impleme
     }
   }
 }
-

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DomWalker.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DomWalker.java?rev=989422&r1=989421&r2=989422&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DomWalker.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DomWalker.java Thu Aug 26 01:25:49 2010
@@ -213,52 +213,45 @@ public final class DomWalker {
       return mutated;
     }
   }
-  
+
   // TODO: Remove these lame hacks by changing Gadget to a proper general Context object.
-  public static Gadget makeGadget(final Uri context) {
+  public static Gadget makeGadget(GadgetContext context) {
     try {
-      final GadgetSpec spec = new GadgetSpec(context,
-        "<Module><ModulePrefs author=\"a\" title=\"t\"></ModulePrefs>" +
-        "<Content></Content></Module>");
-      return new Gadget() {
-        @Override
-        public GadgetSpec getSpec() {
-          return spec;
-        }
-      }.setContext(new GadgetContext() {
-        @Override
-        public Uri getUrl() {
-          return context;
-        }
-      });
+      final GadgetSpec spec = new GadgetSpec(context.getUrl(),
+          "<Module><ModulePrefs author=\"a\" title=\"t\"></ModulePrefs>" +
+          "<Content></Content></Module>");
+      return new Gadget().setSpec(spec).setContext(context);
     } catch (Exception e) {
       throw new RuntimeException("Unexpected boilerplate parse failure");
     }
   }
-  
+
   public static Gadget makeGadget(final HttpRequest request) {
-    Gadget gadget = makeGadget(request.getUri());
-    gadget.setContext(new GadgetContext(gadget.getContext()) {
+    return makeGadget(new GadgetContext() {
+      @Override
+      public Uri getUrl() {
+        return request.getUri();
+      }
+
       @Override
       public String getParameter(String key) {
         return request.getParam(key);
       }
-      
+
       @Override
       public boolean getIgnoreCache() {
         return request.getIgnoreCache();
       }
-      
+
       @Override
       public String getContainer() {
         return request.getContainer();
       }
-      
+
       @Override
       public boolean getDebug() {
         return "1".equalsIgnoreCase(getParameter(Param.DEBUG.getKey()));
       }
     });
-    return gadget;
   }
 }

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/StyleTagExtractorVisitor.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/StyleTagExtractorVisitor.java?rev=989422&r1=989421&r2=989422&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/StyleTagExtractorVisitor.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/StyleTagExtractorVisitor.java Thu Aug 26 01:25:49 2010
@@ -74,7 +74,7 @@ public class StyleTagExtractorVisitor im
       // Guaranteed safe cast due to reservation logic.
       Element elem = (Element)node;
       List<String> extractedUrls = cssRewriter.rewrite(
-          elem, contentBase, CssResponseRewriter.uriMaker(proxyUriManager, config), true);
+          elem, contentBase, CssResponseRewriter.uriMaker(proxyUriManager, config), true, gadget.getContext());
       for (String extractedUrl : extractedUrls) {
         // Add extracted urls as link elements to head
         Element newLink = head.getOwnerDocument().createElement("link");
@@ -88,5 +88,4 @@ public class StyleTagExtractorVisitor im
     
     return mutated;
   }
-
-}
+}
\ No newline at end of file

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/StyleTagProxyEmbeddedUrlsVisitor.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/StyleTagProxyEmbeddedUrlsVisitor.java?rev=989422&r1=989421&r2=989422&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/StyleTagProxyEmbeddedUrlsVisitor.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/StyleTagProxyEmbeddedUrlsVisitor.java Thu Aug 26 01:25:49 2010
@@ -62,7 +62,7 @@ public class StyleTagProxyEmbeddedUrlsVi
       Element elem = (Element) node;
       cssRewriter.rewrite(
           elem, contentBase,
-          CssResponseRewriter.uriMaker(proxyUriManager, config), false);
+          CssResponseRewriter.uriMaker(proxyUriManager, config), false, gadget.getContext());
     }
     return !nodes.isEmpty();
   }

Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/CssResponseRewriterTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/CssResponseRewriterTest.java?rev=989422&r1=989421&r2=989422&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/CssResponseRewriterTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/CssResponseRewriterTest.java Thu Aug 26 01:25:49 2010
@@ -19,13 +19,17 @@ package org.apache.shindig.gadgets.rewri
 
 import static org.junit.Assert.assertEquals;
 
+import com.google.common.collect.ImmutableMap;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.shindig.common.uri.Uri;
+import org.apache.shindig.config.AbstractContainerConfig;
+import org.apache.shindig.config.ContainerConfig;
+import org.apache.shindig.gadgets.GadgetContext;
 import org.apache.shindig.gadgets.http.HttpRequest;
 import org.apache.shindig.gadgets.http.HttpResponseBuilder;
 import org.apache.shindig.gadgets.parse.caja.CajaCssParser;
-import org.apache.shindig.gadgets.uri.PassthruManager;
+import org.apache.shindig.gadgets.uri.DefaultProxyUriManager;
 import org.apache.shindig.gadgets.uri.ProxyUriManager;
 import org.easymock.EasyMock;
 import org.junit.Before;
@@ -33,7 +37,9 @@ import org.junit.Test;
 
 import java.io.StringReader;
 import java.io.StringWriter;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import com.google.common.collect.Lists;
 
@@ -41,6 +47,33 @@ import com.google.common.collect.Lists;
  *
  */
 public class CssResponseRewriterTest extends RewriterTestBase {
+  private static class FakeContainerConfig extends AbstractContainerConfig {
+    private Map<String, Map<String, Object>> containers = new HashMap<String, Map<String, Object>>();
+
+    private FakeContainerConfig() {
+      containers.put(ContainerConfig.DEFAULT_CONTAINER, ImmutableMap.<String, Object>builder()
+        .put(DefaultProxyUriManager.PROXY_HOST_PARAM, "www.test.com")
+        .put(DefaultProxyUriManager.PROXY_PATH_PARAM, "/dir/proxy")
+        .build());
+
+      containers.put(MOCK_CONTAINER, ImmutableMap.<String, Object>builder()
+        .put(DefaultProxyUriManager.PROXY_HOST_PARAM, "www.mock.com")
+        .build());
+    }
+
+    @Override
+    public Object getProperty(String container, String name) {
+      Map<String, Object> data = containers.get(container);
+
+      //if there is no value by this key inherit from default
+      if (!data.containsKey(name)) {
+        data = containers.get(ContainerConfig.DEFAULT_CONTAINER);
+      }
+
+      return data.get(name);
+    }
+  }
+
   private CssResponseRewriter rewriter;
   private CssResponseRewriter rewriterNoOverrideExpires;
   private Uri dummyUri;
@@ -60,7 +93,8 @@ public class CssResponseRewriterTest ext
             return overrideFeatureNoOverrideExpires;
           }
         };
-    proxyUriManager = new PassthruManager("www.test.com", "/dir/proxy");
+    ContainerConfig config = new FakeContainerConfig();
+    proxyUriManager = new DefaultProxyUriManager(config, null);
     rewriterNoOverrideExpires = new CssResponseRewriter(new CajaCssParser(),
         proxyUriManager, factoryNoOverrideExpires);
     final ContentRewriterFeature.Config overrideFeature =
@@ -120,7 +154,7 @@ public class CssResponseRewriterTest ext
         getResourceAsStream("org/apache/shindig/gadgets/rewrite/rewritebasic.css"));
     String expected = IOUtils.toString(this.getClass().getClassLoader().
         getResourceAsStream("org/apache/shindig/gadgets/rewrite/rewritebasic-expected.css"));
-    expected = expected.replace("fp=1150739864", "fp=1150739864&nocache=1");
+    expected = expected.replace("nocache=0", "nocache=1");
     HttpRequest request = new HttpRequest(Uri.parse("http://www.example.org/path/rewritebasic.css"));
     request.setMethod("GET");
     request.setGadget(SPEC_URL);
@@ -141,7 +175,7 @@ public class CssResponseRewriterTest ext
     String expected = IOUtils.toString(this.getClass().getClassLoader().
         getResourceAsStream("org/apache/shindig/gadgets/rewrite/rewritebasic-expected.css"));
     expected = replaceDefaultWithMockServer(expected);
-    proxyUriManager = new PassthruManager("www.mock.com", "/dir/proxy");
+    expected = expected.replace("container=default", "container=" + MOCK_CONTAINER);
     rewriter = new CssResponseRewriter(new CajaCssParser(),
         proxyUriManager, factory);
     
@@ -189,9 +223,13 @@ public class CssResponseRewriterTest ext
         "div {list-style-image:url('http://a.b.com/bullet.gif');list-style-position:outside;margin:5px;padding:0}\n" +
          ".someid {background-image:url(http://a.b.com/bigimg.png);float:right;width:165px;height:23px;margin-top:4px;margin-left:5px}";
     String rewritten =
-        "div {list-style-image:url('http://www.test.com/dir/proxy?url=http%3A%2F%2Fa.b.com%2Fbullet.gif');\n"
+        "div {list-style-image:url('//www.test.com/dir/proxy?container=default"
+            + "&gadget=http%3A%2F%2Fwww.w3c.org&debug=0&nocache=0"
+            + "&url=http%3A%2F%2Fa.b.com%2Fbullet.gif');\n"
             + "list-style-position:outside;margin:5px;padding:0}\n"
-            + ".someid {background-image:url('http://www.test.com/dir/proxy?url=http%3A%2F%2Fa.b.com%2Fbigimg.png');\n"
+            + ".someid {background-image:url('//www.test.com/dir/proxy?container=default"
+            + "&gadget=http%3A%2F%2Fwww.w3c.org&debug=0&nocache=0" 
+            + "&url=http%3A%2F%2Fa.b.com%2Fbigimg.png');\n"
             + "float:right;width:165px;height:23px;margin-top:4px;margin-left:5px}";
     validateRewritten(original, rewritten);
   }
@@ -210,7 +248,12 @@ public class CssResponseRewriterTest ext
     StringWriter sw = new StringWriter();
     List<String> stringList = rewriter
         .rewrite(new StringReader(original), dummyUri,
-          CssResponseRewriter.uriMaker(proxyUriManager, defaultRewriterFeature), sw, true);
+            CssResponseRewriter.uriMaker(proxyUriManager, defaultRewriterFeature), sw, true, new GadgetContext() {
+              @Override
+              public Uri getUrl() {
+                return dummyUri;
+              }
+            });
     assertEquals(StringUtils.deleteWhitespace(expected),
         StringUtils.deleteWhitespace(sw.toString()));
     assertEquals(Lists.newArrayList("www.example.org/some.css",
@@ -225,7 +268,12 @@ public class CssResponseRewriterTest ext
     StringWriter sw = new StringWriter();
     List<String> stringList = rewriter
         .rewrite(new StringReader(original), dummyUri,
-          CssResponseRewriter.uriMaker(proxyUriManager, defaultRewriterFeature), sw, true);
+            CssResponseRewriter.uriMaker(proxyUriManager, defaultRewriterFeature), sw, true, new GadgetContext() {
+              @Override
+              public Uri getUrl() {
+                return dummyUri;
+              }
+            });
     assertEquals(StringUtils.deleteWhitespace(expected),
         StringUtils.deleteWhitespace(sw.toString()));
     assertEquals(Lists.newArrayList("www.example.org/some.css"), stringList);

Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/StyleTagExtractorVisitorTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/StyleTagExtractorVisitorTest.java?rev=989422&r1=989421&r2=989422&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/StyleTagExtractorVisitorTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/StyleTagExtractorVisitorTest.java Thu Aug 26 01:25:49 2010
@@ -122,9 +122,9 @@ public class StyleTagExtractorVisitorTes
     List<String> extractedUrls1 = ImmutableList.of(urlStr1);
     String urlStr2 = "http://bar.com/1.css";
     List<String> extractedUrls2 = ImmutableList.of(urlStr2);
-    expect(cssRewriter.rewrite(eq(elem1), eq(base), isA(UriMaker.class), eq(true)))
+    expect(cssRewriter.rewrite(eq(elem1), eq(base), isA(UriMaker.class), eq(true), eq(gadget.getContext())))
         .andReturn(extractedUrls1).once();
-    expect(cssRewriter.rewrite(eq(elem2), eq(base), isA(UriMaker.class), eq(true)))
+    expect(cssRewriter.rewrite(eq(elem2), eq(base), isA(UriMaker.class), eq(true), eq(gadget.getContext())))
         .andReturn(extractedUrls2).once();
     replay(cssRewriter);
     
@@ -160,9 +160,9 @@ public class StyleTagExtractorVisitorTes
     List<String> extractedUrls1 = ImmutableList.of(urlStr1);
     String urlStr2 = "http://bar.com/1.css";
     List<String> extractedUrls2 = ImmutableList.of(urlStr2);
-    expect(cssRewriter.rewrite(eq(elem1), eq(base), isA(UriMaker.class), eq(true)))
+    expect(cssRewriter.rewrite(eq(elem1), eq(base), isA(UriMaker.class), eq(true), eq(gadget.getContext())))
         .andReturn(extractedUrls1).once();
-    expect(cssRewriter.rewrite(eq(elem2), eq(base), isA(UriMaker.class), eq(true)))
+    expect(cssRewriter.rewrite(eq(elem2), eq(base), isA(UriMaker.class), eq(true), eq(gadget.getContext())))
         .andReturn(extractedUrls2).once();
     replay(cssRewriter);
     
@@ -196,9 +196,9 @@ public class StyleTagExtractorVisitorTes
     Element elem2 = elem("elem2");
     List<String> extractedUrls1 = ImmutableList.of();
     List<String> extractedUrls2 = ImmutableList.of();
-    expect(cssRewriter.rewrite(eq(elem1), eq(base), isA(UriMaker.class), eq(true)))
+    expect(cssRewriter.rewrite(eq(elem1), eq(base), isA(UriMaker.class), eq(true), eq(gadget.getContext())))
         .andReturn(extractedUrls1).once();
-    expect(cssRewriter.rewrite(eq(elem2), eq(base), isA(UriMaker.class), eq(true)))
+    expect(cssRewriter.rewrite(eq(elem2), eq(base), isA(UriMaker.class), eq(true), eq(gadget.getContext())))
         .andReturn(extractedUrls2).once();
     replay(cssRewriter);
     

Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/StyleTagProxyEmbeddedUrlsVisitorTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/StyleTagProxyEmbeddedUrlsVisitorTest.java?rev=989422&r1=989421&r2=989422&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/StyleTagProxyEmbeddedUrlsVisitorTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/StyleTagProxyEmbeddedUrlsVisitorTest.java Thu Aug 26 01:25:49 2010
@@ -19,17 +19,22 @@
 package org.apache.shindig.gadgets.rewrite;
 
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
 import com.google.inject.Guice;
 import com.google.inject.Injector;
 import org.apache.commons.lang.StringUtils;
 import org.apache.shindig.common.PropertiesModule;
 import org.apache.shindig.common.uri.Uri;
+import org.apache.shindig.config.AbstractContainerConfig;
+import org.apache.shindig.config.ContainerConfig;
 import org.apache.shindig.gadgets.DefaultGuiceModule;
 import org.apache.shindig.gadgets.Gadget;
+import org.apache.shindig.gadgets.http.HttpRequest;
 import org.apache.shindig.gadgets.oauth.OAuthModule;
 import org.apache.shindig.gadgets.parse.ParseModule;
 import org.apache.shindig.gadgets.parse.caja.CajaHtmlParser;
 import org.apache.shindig.gadgets.parse.caja.CajaHtmlSerializer;
+import org.apache.shindig.gadgets.uri.DefaultProxyUriManager;
 import org.apache.shindig.gadgets.uri.ProxyUriManager;
 import org.easymock.EasyMock;
 import org.junit.Before;
@@ -37,15 +42,46 @@ import org.junit.Test;
 import org.w3c.dom.Document;
 import org.w3c.dom.NodeList;
 
+import java.util.HashMap;
+import java.util.Map;
+
 import static org.junit.Assert.assertEquals;
 
 /**
  * Tests for StyleTagProxyEmbeddedUrlsVisitor.
  */
 public class StyleTagProxyEmbeddedUrlsVisitorTest extends DomWalkerTestBase {
+  protected static final String MOCK_CONTAINER = "mock";
+
+  private static class FakeContainerConfig extends AbstractContainerConfig {
+    private Map<String, Map<String, Object>> containers = new HashMap<String, Map<String, Object>>();
+
+    private FakeContainerConfig(ContainerConfig defaultContainerConfig) {
+      containers.put(ContainerConfig.DEFAULT_CONTAINER,
+          defaultContainerConfig.getProperties(ContainerConfig.DEFAULT_CONTAINER));
+
+      containers.put(MOCK_CONTAINER, ImmutableMap.<String, Object>builder()
+          .put(DefaultProxyUriManager.PROXY_HOST_PARAM, "www.mock.com")
+          .build());
+    }
+
+    @Override
+    public Object getProperty(String container, String name) {
+      Map<String, Object> data = containers.get(container);
+
+      //if there is no value by this key inherit from default
+      if (!data.containsKey(name)) {
+        data = containers.get(ContainerConfig.DEFAULT_CONTAINER);
+      }
+
+      return data.get(name);
+    }
+  }
+
   private Injector injector;
   private CajaHtmlParser htmlParser;
-  CajaHtmlSerializer serializer;
+  private CajaHtmlSerializer serializer;
+  private ProxyUriManager proxyUriManager;
 
   @Before
   public void setUp() {
@@ -56,33 +92,48 @@ public class StyleTagProxyEmbeddedUrlsVi
         new ParseModule.DOMImplementationProvider();
     htmlParser = new CajaHtmlParser(domImpl.get());
     serializer = new CajaHtmlSerializer();
+    ContainerConfig config = new FakeContainerConfig(injector.getInstance(ContainerConfig.class));
+    proxyUriManager = new DefaultProxyUriManager(config, null);
+  }
+
+  private static final String ORIGINAL = "<html><head>"
+      + "<style>"
+      + "@import url(/1.css);"
+      + "P {color:blue;}"
+      + "P {color:red;}"
+      + "A {background: url(/2.jpg);}"
+      + "</style>"
+      + "</head><body><a href=\"hello\">Hello</a>"
+      + "</body></html>";
+
+  private static final String EXPECTED = "<html><head>"
+      + "<style>"
+      + "@import url('//localhost:8080/gadgets/proxy?container=default&"
+      + "gadget=http%3A%2F%2F1.com%2F&debug=0&nocache=0"
+      + "&url=http%3A%2F%2F1.com%2F1.css');\n"
+      + "P {color:blue;}"
+      + "P {color:red;}"
+      + "A {background: url('//localhost:8080/gadgets/proxy?container=default"
+      + "&gadget=http%3A%2F%2F1.com%2F&debug=0&nocache=0"
+      + "&url=http%3A%2F%2F1.com%2F2.jpg');}"
+      + "</style></head>"
+      + "<body><a href=\"hello\">Hello</a>\n"
+      + "</body></html>";
+
+  @Test
+  public void testImportsAndBackgroundUrlsInStyleTagDefaultContainer() throws Exception {
+    testImportsAndBackgroundUrlsInStyleTag(ORIGINAL, EXPECTED, ContainerConfig.DEFAULT_CONTAINER);
   }
 
   @Test
-  public void testImportsAndBackgroundUrlsInStyleTag() throws Exception {
-    String html = "<html><head>"
-                  + "<style>"
-                  + "@import url(/1.css);"
-                  + "P {color:blue;}"
-                  + "P {color:red;}"
-                  + "A {background: url(/2.jpg);}"
-                  + "</style>"
-                  + "</head><body><a href=\"hello\">Hello</a>"
-                  + "</body></html>";
-    String expected =
-        "<html><head>"
-        + "<style>"
-        + "@import url('//localhost:8080/gadgets/proxy?container=default&"
-        + "gadget=http%3A%2F%2F1.com%2F&debug=0&nocache=0"
-        + "&url=http%3A%2F%2F1.com%2F1.css');\n"
-        + "P {color:blue;}"
-        + "P {color:red;}"
-        + "A {background: url('//localhost:8080/gadgets/proxy?container=default"
-        + "&gadget=http%3A%2F%2F1.com%2F&debug=0&nocache=0"
-        + "&url=http%3A%2F%2F1.com%2F2.jpg');}"
-        + "</style></head>"
-        + "<body><a href=\"hello\">Hello</a>\n"
-        + "</body></html>";
+  public void testImportsAndBackgroundUrlsInStyleTagMockContainer() throws Exception {
+    testImportsAndBackgroundUrlsInStyleTag(ORIGINAL, EXPECTED.replace(
+        "localhost:8080/gadgets/proxy?container=default", "www.mock.com/gadgets/proxy?container=mock"), 
+        MOCK_CONTAINER);
+  }
+  
+  private void testImportsAndBackgroundUrlsInStyleTag(String html, String expected, String container) 
+      throws Exception {
     Document doc = htmlParser.parseDom(html);
 
     ContentRewriterFeature.Config config = injector.getInstance(
@@ -90,10 +141,12 @@ public class StyleTagProxyEmbeddedUrlsVi
     EasyMock.replay();
 
     StyleTagProxyEmbeddedUrlsVisitor visitor = new StyleTagProxyEmbeddedUrlsVisitor(
-        config, injector.getInstance(ProxyUriManager.class),
+        config, proxyUriManager,
         injector.getInstance(CssResponseRewriter.class));
 
-    Gadget gadget = DomWalker.makeGadget(Uri.parse("http://1.com/"));
+    Gadget gadget = DomWalker.makeGadget(new HttpRequest(Uri.parse("http://1.com/")).setContainer(
+        container));
+
     NodeList list = doc.getElementsByTagName("style");
     visitor.revisit(gadget, ImmutableList.of(list.item(0)));
     EasyMock.verify();
@@ -101,4 +154,4 @@ public class StyleTagProxyEmbeddedUrlsVi
     assertEquals(StringUtils.deleteWhitespace(expected),
         StringUtils.deleteWhitespace(serializer.serialize(doc)));
   }
-}
+}
\ No newline at end of file

Modified: shindig/trunk/java/gadgets/src/test/resources/org/apache/shindig/gadgets/rewrite/rewritebasic-expected.css
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/resources/org/apache/shindig/gadgets/rewrite/rewritebasic-expected.css?rev=989422&r1=989421&r2=989422&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/resources/org/apache/shindig/gadgets/rewrite/rewritebasic-expected.css (original)
+++ shindig/trunk/java/gadgets/src/test/resources/org/apache/shindig/gadgets/rewrite/rewritebasic-expected.css Thu Aug 26 01:25:49 2010
@@ -1,8 +1,8 @@
-@import url('http://www.test.com/dir/proxy?url=http%3A%2F%2Fwww.example.org%2Fother1.css');
-@import url('http://www.test.com/dir/proxy?url=http%3A%2F%2Fwww.example.org%2Fpath%2Frelative%2Fother2.css');
+@import url('//www.test.com/dir/proxy?container=default&gadget=http%3A%2F%2Fwww.example.org%2Fpath%2Frewritebasic.css&debug=0&nocache=0&url=http%3A%2F%2Fwww.example.org%2Fother1.css');
+@import url('//www.test.com/dir/proxy?container=default&gadget=http%3A%2F%2Fwww.example.org%2Fpath%2Frewritebasic.css&debug=0&nocache=0&url=http%3A%2F%2Fwww.example.org%2Fpath%2Frelative%2Fother2.css');
 @import url('http://www.example.org/hostrelative/excluded/other1.css');
 
 DiV {
   font: arial;
-  background-image : url('http://www.test.com/dir/proxy?url=http%3A%2F%2Fwww.some.site%2Fimage.gif');
+  background-image : url('//www.test.com/dir/proxy?container=default&gadget=http%3A%2F%2Fwww.example.org%2Fpath%2Frewritebasic.css&debug=0&nocache=0&url=http%3A%2F%2Fwww.some.site%2Fimage.gif');
 }