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');
}