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) {


Reply via email to