Author: lindner
Date: Fri Aug 27 13:18:01 2010
New Revision: 990143
URL: http://svn.apache.org/viewvc?rev=990143&view=rev
Log:
Patch from Gagandeep Singh | Adding the html tag context for the ProxyUri
resource
Modified:
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizingGadgetRewriter.java
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ProxyingVisitor.java
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RewriterUtils.java
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/AccelHandler.java
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultProxyUriManager.java
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/ProxyUriManager.java
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/UriCommon.java
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ProxyingVisitorTest.java
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultProxyUriManagerTest.java
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/PassthruManager.java
Modified:
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizingGadgetRewriter.java
URL:
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizingGadgetRewriter.java?rev=990143&r1=990142&r2=990143&view=diff
==============================================================================
---
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizingGadgetRewriter.java
(original)
+++
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizingGadgetRewriter.java
Fri Aug 27 13:18:01 2010
@@ -283,8 +283,10 @@ public class SanitizingGadgetRewriter ex
"src".equalsIgnoreCase(attr.getName())) {
try {
Uri uri = Uri.parse(attr.getValue());
- attr.setValue(imageRewriter.make(
- ProxyUriManager.ProxyUri.fromList(gadget,
ImmutableList.of(uri)), null)
+ ProxyUriManager.ProxyUri proxiedUri =
ProxyUriManager.ProxyUri.fromList(
+ gadget, ImmutableList.of(uri)).get(0);
+
proxiedUri.setHtmlTagContext(attr.getOwnerElement().getNodeName().toLowerCase());
+ attr.setValue(imageRewriter.make(ImmutableList.of(proxiedUri), null)
.get(0).toString());
} catch (IllegalArgumentException e) {
// Invalid Uri, remove.
@@ -348,9 +350,11 @@ public class SanitizingGadgetRewriter ex
hasType |= "text/css".equalsIgnoreCase(attr.getValue());
} else if ("href".equalsIgnoreCase(attr.getName())) {
try {
- attr.setValue(cssImportRewriter.make(
- ProxyUriManager.ProxyUri.fromList(gadget,
- ImmutableList.of(Uri.parse(attr.getValue()))),
null).get(0).toString());
+ ProxyUriManager.ProxyUri proxiedUri =
ProxyUriManager.ProxyUri.fromList(gadget,
+ ImmutableList.of(Uri.parse(attr.getValue()))).get(0);
+ proxiedUri.setHtmlTagContext(elem.getNodeName().toLowerCase());
+ attr.setValue(cssImportRewriter.make(ImmutableList.of(proxiedUri),
null)
+ .get(0).toString());
} catch (IllegalArgumentException e) {
return true;
}
Modified:
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ProxyingVisitor.java
URL:
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ProxyingVisitor.java?rev=990143&r1=990142&r2=990143&view=diff
==============================================================================
---
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ProxyingVisitor.java
(original)
+++
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ProxyingVisitor.java
Fri Aug 27 13:18:01 2010
@@ -151,6 +151,9 @@ public class ProxyingVisitor implements
try {
ProxyUriManager.ProxyUri proxiedUri = new ProxyUriManager.ProxyUri(
gadget, Uri.parse(uriStr));
+
+ // Set the html tag context as the current node being processed.
+ proxiedUri.setHtmlTagContext(nodeName);
reservedUris.add(proxiedUri);
reservedNodes.add(node);
} catch (UriException e) {
Modified:
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RewriterUtils.java
URL:
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RewriterUtils.java?rev=990143&r1=990142&r2=990143&view=diff
==============================================================================
---
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RewriterUtils.java
(original)
+++
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RewriterUtils.java
Fri Aug 27 13:18:01 2010
@@ -21,6 +21,9 @@ package org.apache.shindig.gadgets.rewri
import org.apache.shindig.gadgets.http.HttpRequest;
import org.apache.shindig.gadgets.http.HttpResponse;
import org.apache.shindig.gadgets.http.HttpResponseBuilder;
+import org.apache.shindig.gadgets.uri.UriCommon;
+
+import javax.annotation.Nullable;
/**
* Various utility functions used by rewriters
@@ -32,10 +35,23 @@ public final class RewriterUtils {
String mimeType = getMimeType(request, original);
return mimeType != null && (mimeType.contains("html"));
}
-
+
public static boolean isHtml(HttpRequest request, HttpResponseBuilder
original) {
String mimeType = getMimeType(request, original);
- return mimeType != null && (mimeType.contains("html"));
+ return mimeType != null && (mimeType.contains("html")) &&
+
maybeAcceptHtml(request.getParam(UriCommon.Param.HTML_TAG_CONTEXT.getKey()));
+ }
+
+ /**
+ * Returns true if the given html tag can accept text/html data. For now,
+ * all html tags other than "script" are treated as html accepting tags.
+ *
+ * @param htmlTagName The html tag in question.
+ * @return True if {...@code htmlTagName} accepts text/html data, false
+ * otherwise.
+ */
+ public static boolean maybeAcceptHtml(@Nullable String htmlTagName) {
+ return !"script".equalsIgnoreCase(htmlTagName);
}
public static boolean isCss(HttpRequest request, HttpResponse original) {
@@ -48,6 +64,7 @@ public final class RewriterUtils {
return mimeType != null && mimeType.contains("css");
}
+ // TODO: Also check if the HTML_TAG_CONTEXT is script.
public static boolean isJavascript(HttpRequest request, HttpResponse
original) {
String mimeType = getMimeType(request, original);
return mimeType != null && mimeType.contains("javascript");
Modified:
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/AccelHandler.java
URL:
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/AccelHandler.java?rev=990143&r1=990142&r2=990143&view=diff
==============================================================================
---
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/AccelHandler.java
(original)
+++
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/AccelHandler.java
Fri Aug 27 13:18:01 2010
@@ -20,6 +20,7 @@ package org.apache.shindig.gadgets.servl
import com.google.inject.Inject;
import com.google.inject.Singleton;
import com.google.inject.name.Named;
+
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.shindig.common.uri.Uri;
@@ -121,9 +122,9 @@ public class AccelHandler {
String uriString =
proxiedUri.getQueryParameter(UriCommon.Param.URL.getKey());
// Throw BAD_GATEWAY in case parsing of url fails.
- Uri normalizedUri;
+ Uri requestedResource;
try {
- normalizedUri = Uri.parse(uriString);
+ requestedResource = Uri.parse(uriString);
} catch (Uri.UriException e) {
throw new GadgetException(GadgetException.Code.INTERNAL_SERVER_ERROR,
"Failed to parse uri: " + uriString,
@@ -131,7 +132,10 @@ public class AccelHandler {
}
Gadget gadget = DomWalker.makeGadget(httpRequest);
- return new ProxyUriManager.ProxyUri(gadget, normalizedUri);
+ ProxyUriManager.ProxyUri proxyUri = new ProxyUriManager.ProxyUri(gadget,
requestedResource);
+ proxyUri.setHtmlTagContext(proxiedUri.getQueryParameter(
+ UriCommon.Param.HTML_TAG_CONTEXT.getKey()));
+ return proxyUri;
}
/**
Modified:
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultProxyUriManager.java
URL:
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultProxyUriManager.java?rev=990143&r1=990142&r2=990143&view=diff
==============================================================================
---
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultProxyUriManager.java
(original)
+++
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultProxyUriManager.java
Fri Aug 27 13:18:01 2010
@@ -257,7 +257,9 @@ public class DefaultProxyUriManager impl
status = versioner.validate(uri, container, version);
}
- return new ProxyUri(status, uri, queryUri);
+ ProxyUri proxied = new ProxyUri(status, uri, queryUri);
+
proxied.setHtmlTagContext(uriIn.getQueryParameter(Param.HTML_TAG_CONTEXT.getKey()));
+ return proxied;
}
private String getReqConfig(String container, String key) {
Modified:
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/ProxyUriManager.java
URL:
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/ProxyUriManager.java?rev=990143&r1=990142&r2=990143&view=diff
==============================================================================
---
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/ProxyUriManager.java
(original)
+++
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/ProxyUriManager.java
Fri Aug 27 13:18:01 2010
@@ -53,7 +53,10 @@ public interface ProxyUriManager {
// If "true" then the original content should be returned to the user
// instead of internal server errors.
private String returnOriginalContentOnError;
-
+
+ // The html tag that requested this ProxyUri.
+ private String htmlTagContext;
+
public ProxyUri(Gadget gadget, Uri resource) {
super(gadget);
this.resource = resource;
@@ -74,7 +77,14 @@ public interface ProxyUriManager {
public void setReturnOriginalContentOnError(boolean
returnOriginalContentOnError) {
this.returnOriginalContentOnError = returnOriginalContentOnError ? "1" :
null;
}
-
+
+ public void setHtmlTagContext(String htmlTagContext) {
+ this.htmlTagContext = htmlTagContext;
+ }
+ public String getHtmlTagContext() {
+ return htmlTagContext;
+ }
+
@Override
public boolean equals(Object obj) {
if (obj == this) {
@@ -91,13 +101,15 @@ public interface ProxyUriManager {
&& Objects.equal(this.resizeWidth, objUri.resizeWidth)
&& Objects.equal(this.resizeQuality, objUri.resizeQuality)
&& Objects.equal(this.resizeNoExpand, objUri.resizeNoExpand)
- && Objects.equal(this.returnOriginalContentOnError,
objUri.returnOriginalContentOnError));
+ && Objects.equal(this.returnOriginalContentOnError,
objUri.returnOriginalContentOnError)
+ && Objects.equal(this.htmlTagContext, objUri.htmlTagContext));
}
@Override
public int hashCode() {
return Objects.hashCode(super.hashCode(), resource, fallbackUrl,
resizeHeight,
- resizeWidth, resizeQuality, resizeNoExpand,
returnOriginalContentOnError);
+ resizeWidth, resizeQuality, resizeNoExpand,
returnOriginalContentOnError,
+ htmlTagContext);
}
/* (non-Javadoc)
@@ -114,6 +126,7 @@ public interface ProxyUriManager {
resizeNoExpand =
getBooleanValue(uri.getQueryParameter(Param.NO_EXPAND.getKey()));
returnOriginalContentOnError = uri.getQueryParameter(
Param.RETURN_ORIGINAL_CONTENT_ON_ERROR.getKey());
+ htmlTagContext =
uri.getQueryParameter(Param.HTML_TAG_CONTEXT.getKey());
}
}
@@ -171,10 +184,14 @@ public interface ProxyUriManager {
if (fallbackUrl != null) {
builder.addQueryParameter(Param.FALLBACK_URL_PARAM.getKey(),
fallbackUrl);
}
+
if (returnOriginalContentOnError != null) {
builder.addQueryParameter(Param.RETURN_ORIGINAL_CONTENT_ON_ERROR.getKey(),
returnOriginalContentOnError);
}
+ if (htmlTagContext != null) {
+ builder.addQueryParameter(Param.HTML_TAG_CONTEXT.getKey(),
htmlTagContext);
+ }
return builder;
}
@@ -187,10 +204,15 @@ public interface ProxyUriManager {
req.setParam(Param.RESIZE_WIDTH.getKey(), resizeWidth);
req.setParam(Param.RESIZE_QUALITY.getKey(), resizeQuality);
req.setParam(Param.NO_EXPAND.getKey(), resizeNoExpand ? "1" : "0");
+
+ req.setParam(Param.RETURN_ORIGINAL_CONTENT_ON_ERROR.getKey(),
+ returnOriginalContentOnError);
+ req.setParam(Param.HTML_TAG_CONTEXT.getKey(), htmlTagContext);
return req;
}
-
+ // Creates new ProxyUri's for the given list of resource uri's. Note that
+ // the proxy uri's will have default values for internal parameters.
public static List<ProxyUri> fromList(Gadget gadget, List<Uri> uris) {
List<ProxyUri> res = Lists.newArrayListWithCapacity(uris.size());
for (Uri uri : uris) {
Modified:
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/UriCommon.java
URL:
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/UriCommon.java?rev=990143&r1=990142&r2=990143&view=diff
==============================================================================
---
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/UriCommon.java
(original)
+++
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/UriCommon.java
Fri Aug 27 13:18:01 2010
@@ -48,8 +48,12 @@ public interface UriCommon {
RESIZE_QUALITY("resize_q"),
NO_EXPAND("no_expand"),
FALLBACK_URL_PARAM("fallback_url"),
+
RETURN_ORIGINAL_CONTENT_ON_ERROR("rooe"),
-
+ // The html tag which requested this proxy uri. For example, "script" when
+ // "<script src='blah.js'></script>" is being proxied.
+ HTML_TAG_CONTEXT("html_tag_context"),
+
// This is a legacy param, superseded by container.
@Deprecated
SYND("synd");
Modified:
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ProxyingVisitorTest.java
URL:
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ProxyingVisitorTest.java?rev=990143&r1=990142&r2=990143&view=diff
==============================================================================
---
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ProxyingVisitorTest.java
(original)
+++
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ProxyingVisitorTest.java
Fri Aug 27 13:18:01 2010
@@ -191,5 +191,10 @@ public class ProxyingVisitorTest extends
assertEquals("^!,,|BLARGH", e2.getAttribute("src"));
assertEquals(rewrittenUri.toString(), e3.getAttribute("src"));
assertEquals(rewrittenUri.toString(), e4.getAttribute("src"));
+
+ // Test that the html tag context has been correctly filled.
+ assertEquals("script", cap.getValue().get(0).getHtmlTagContext());
+ assertEquals("img", cap.getValue().get(1).getHtmlTagContext());
+ assertEquals("script", cap.getValue().get(2).getHtmlTagContext());
}
}
Modified:
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultProxyUriManagerTest.java
URL:
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultProxyUriManagerTest.java?rev=990143&r1=990142&r2=990143&view=diff
==============================================================================
---
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultProxyUriManagerTest.java
(original)
+++
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultProxyUriManagerTest.java
Fri Aug 27 13:18:01 2010
@@ -383,6 +383,27 @@ public class DefaultProxyUriManagerTest
manager.process(testUri);
}
+ @Test
+ public void testHtmlTagContext() throws Exception {
+ String host = "host.com";
+ String path = "/proxy/path";
+ DefaultProxyUriManager manager = makeManager(host, path, null);
+ Uri testUri = new UriBuilder().setAuthority(host).setPath(path)
+ .addQueryParameter(Param.CONTAINER.getKey(), CONTAINER)
+ .addQueryParameter(Param.URL.getKey(), "http://www.example.org/")
+ .addQueryParameter(Param.HTML_TAG_CONTEXT.getKey(), "htmlTag")
+ .toUri();
+ ProxyUri proxyUri = manager.process(testUri);
+ assertEquals("htmlTag", proxyUri.getHtmlTagContext());
+
+ Uri targetUri = Uri.parse("http://www.example2.org/");
+ HttpRequest req = proxyUri.makeHttpRequest(targetUri);
+ assertEquals("htmlTag", req.getParam(Param.HTML_TAG_CONTEXT.getKey()));
+
+ UriBuilder builder = proxyUri.makeQueryParams(1, "2");
+ assertEquals("htmlTag",
builder.getQueryParameter(Param.HTML_TAG_CONTEXT.getKey()));
+ }
+
private List<Uri> makeAndGet(String host, String path, boolean debug,
boolean noCache,
List<Uri> resources, String... version) {
return makeAndGetWithRefresh(host, path, debug, noCache, resources, 123,
version);
Modified:
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/PassthruManager.java
URL:
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/PassthruManager.java?rev=990143&r1=990142&r2=990143&view=diff
==============================================================================
---
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/PassthruManager.java
(original)
+++
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/PassthruManager.java
Fri Aug 27 13:18:01 2010
@@ -63,8 +63,10 @@ public class PassthruManager implements
public ProxyUri process(Uri uri) throws GadgetException {
String proxied = uri.getQueryParameter(Param.URL.getKey());
- return new ProxyUri(expectStatus,
+ ProxyUri proxyUri = new ProxyUri(expectStatus,
proxied != null ? Uri.parse(proxied) : null, uri);
+
proxyUri.setHtmlTagContext(uri.getQueryParameter(Param.HTML_TAG_CONTEXT.getKey()));
+ return proxyUri;
}
public void expectStatus(UriStatus status) {