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 2011/03/12 01:02:38 UTC

svn commit: r1080807 - in /shindig/trunk/java/gadgets/src: main/java/org/apache/shindig/gadgets/ main/java/org/apache/shindig/gadgets/servlet/ main/java/org/apache/shindig/gadgets/uri/ test/java/org/apache/shindig/gadgets/servlet/ test/java/org/apache/...

Author: zhoresh
Date: Sat Mar 12 00:02:37 2011
New Revision: 1080807

URL: http://svn.apache.org/viewvc?rev=1080807&view=rev
Log:
Support caja santization for GadgetHandler metadata | http://codereview.appspot.com/4252069/
And fix NPE for metadata request for view that does not exists

Modified:
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetContext.java
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerService.java
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultIframeUriManager.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/FakeProcessor.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerServiceTest.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultIframeUriManagerTest.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/UriManagerTestBase.java

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetContext.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetContext.java?rev=1080807&r1=1080806&r2=1080807&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetContext.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetContext.java Sat Mar 12 00:02:37 2011
@@ -132,18 +132,25 @@ public class GadgetContext {
   public SecurityToken getToken() {
     return delegate == null ? null : delegate.getToken();
   }
-  
+
   /**
    * @return The user agent string, or null if not present.
    */
   public String getUserAgent() {
     return delegate == null ? null : delegate.getUserAgent();
   }
-  
+
   /**
    * @return Whether the gadget output should be sanitized.
    */
   public boolean getSanitize() {
     return delegate == null ? false : delegate.getSanitize();
   }
+
+  /**
+   * @return Whether the gadget output should be cajoled.
+   */
+  public boolean getCajoled() {
+    return delegate == null ? false : delegate.getCajoled();
+  }
 }

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerService.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerService.java?rev=1080807&r1=1080806&r2=1080807&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerService.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerService.java Sat Mar 12 00:02:37 2011
@@ -163,9 +163,12 @@ public class GadgetsHandlerService {
 
     GadgetContext context = new MetadataGadgetContext(request);
     Gadget gadget = processor.process(context);
-    String iframeUrl =
-        isFieldIncluded(fields, "iframeurl")  ?
-            iframeUriManager.makeRenderingUri(gadget).toString() : null;
+    boolean needIfrUrl = isFieldIncluded(fields, "iframeurl");
+    if (needIfrUrl && gadget.getCurrentView() == null) {
+      throw new ProcessingException("View " + request.getView() + " does not exist",
+          HttpResponse.SC_BAD_REQUEST);
+    }
+    String iframeUrl = needIfrUrl ? iframeUriManager.makeRenderingUri(gadget).toString() : null;
     Boolean needsTokenRefresh =
         isFieldIncluded(fields, "needstokenrefresh") ?
             gadget.getAllFeatures().contains("auth-refresh") : null;
@@ -402,6 +405,11 @@ public class GadgetsHandlerService {
     public boolean getSanitize() {
       return (request.getRenderingType() == GadgetsHandlerApi.RenderingType.SANITIZED);
     }
+
+    @Override
+    public boolean getCajoled() {
+      return (request.getRenderingType() == GadgetsHandlerApi.RenderingType.IFRAME_CAJOLED);
+    }
   }
 
   private SecurityToken convertAuthContext(GadgetsHandlerApi.AuthContext authContext,

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultIframeUriManager.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultIframeUriManager.java?rev=1080807&r1=1080806&r2=1080807&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultIframeUriManager.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultIframeUriManager.java Sat Mar 12 00:02:37 2011
@@ -140,7 +140,7 @@ public class DefaultIframeUriManager imp
       } else {
         uri.setAuthority(gadgetUri.getAuthority());
         uri.setScheme(gadgetUri.getScheme());
-      }      
+      }
 
       // 4. Add the URL.
       uri.addQueryParameter(Param.URL.getKey(), context.getUrl().toString());
@@ -157,6 +157,9 @@ public class DefaultIframeUriManager imp
     addParam(uri, Param.DEBUG.getKey(), context.getDebug() ? "1" : "0", useTpl, false);
     addParam(uri, Param.NO_CACHE.getKey(), context.getIgnoreCache() ? "1" : "0", useTpl, false);
     addParam(uri, Param.SANITIZE.getKey(), context.getSanitize() ? "1" : "0", useTpl, false);
+    if (context.getCajoled()) {
+      addParam(uri, Param.CAJOLE.getKey(), "1", useTpl, false);
+    }
 
     // Add all UserPrefs
     UserPrefs prefs = context.getUserPrefs();

Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/FakeProcessor.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/FakeProcessor.java?rev=1080807&r1=1080806&r2=1080807&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/FakeProcessor.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/FakeProcessor.java Sat Mar 12 00:02:37 2011
@@ -36,6 +36,7 @@ public class FakeProcessor extends Proce
   protected final Map<Uri, String> gadgets = Maps.newHashMap();
   public static final Uri SPEC_URL = Uri.parse("http://example.org/g.xml");
   public static final Uri SPEC_URL2 = Uri.parse("http://example.org/g2.xml");
+  public static final Uri SPEC_URL3 = Uri.parse("http://example.org/g3.xml");
   public static final String SPEC_TITLE = "JSON-TEST";
   public static final String SPEC_TITLE2 = "JSON-TEST2";
   public static final int PREFERRED_HEIGHT = 100;
@@ -65,6 +66,12 @@ public class FakeProcessor extends Proce
           "<Content type=\"html\">Hello, world</Content>" +
           "</Module>";
 
+  public static final String SPEC_XML3 =
+      "<Module>" +
+      "<ModulePrefs title=\"" + SPEC_TITLE2 + "\"/>" +
+      "<Content name=\"canvas\">Hello, world</Content>" +
+      "</Module>";
+
   private final FeatureRegistry featureRegistry;
 
   public FakeProcessor() {
@@ -75,6 +82,7 @@ public class FakeProcessor extends Proce
     super(null, null, null, null, null);
     this.gadgets.put(FakeProcessor.SPEC_URL, FakeProcessor.SPEC_XML);
     this.gadgets.put(FakeProcessor.SPEC_URL2, FakeProcessor.SPEC_XML2);
+    this.gadgets.put(FakeProcessor.SPEC_URL3, FakeProcessor.SPEC_XML3);
     this.featureRegistry = featureRegistry;
   }
 

Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerServiceTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerServiceTest.java?rev=1080807&r1=1080806&r2=1080807&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerServiceTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerServiceTest.java Sat Mar 12 00:02:37 2011
@@ -105,7 +105,7 @@ public class GadgetsHandlerServiceTest e
   @Test
   public void testGetMetadata() throws Exception {
     GadgetsHandlerApi.MetadataRequest request = createMetadataRequest(
-        FakeProcessor.SPEC_URL, CONTAINER, "view",
+        FakeProcessor.SPEC_URL, CONTAINER, "default",
         createAuthContext(null, null), ImmutableList.of("*"));
     EasyMock.expect(mockRegistry.getFeatures(EasyMock.isA(List.class)))
         .andReturn(Lists.newArrayList("auth-refresh"));
@@ -145,6 +145,16 @@ public class GadgetsHandlerServiceTest e
   }
 
   @Test(expected = ProcessingException.class)
+  public void testGetMetadataNoView() throws Exception {
+    GadgetsHandlerApi.MetadataRequest request = createMetadataRequest(
+        FakeProcessor.SPEC_URL3, CONTAINER, "invalid_view",
+        createAuthContext(null, null), ImmutableList.of("*"));
+    replay();
+    GadgetsHandlerApi.MetadataResponse response =
+        gadgetHandler.getMetadata(request);
+  }
+
+  @Test(expected = ProcessingException.class)
   public void testGetMetadataNoContainer() throws Exception {
     GadgetsHandlerApi.MetadataRequest request = createMetadataRequest(
         FakeProcessor.SPEC_URL, null, null,
@@ -185,7 +195,7 @@ public class GadgetsHandlerServiceTest e
   @Test
   public void testGetMetadataNoToken() throws Exception {
     GadgetsHandlerApi.MetadataRequest request = createMetadataRequest(
-        FakeProcessor.SPEC_URL, CONTAINER, "view", null, ImmutableList.of("*"));
+        FakeProcessor.SPEC_URL, CONTAINER, "default", null, ImmutableList.of("*"));
     EasyMock.expect(mockRegistry.getFeatures(EasyMock.isA(List.class)))
         .andReturn(Lists.newArrayList("auth-refresh"));
     replay();

Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultIframeUriManagerTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultIframeUriManagerTest.java?rev=1080807&r1=1080806&r2=1080807&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultIframeUriManagerTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultIframeUriManagerTest.java Sat Mar 12 00:02:37 2011
@@ -88,6 +88,7 @@ public class DefaultIframeUriManagerTest
         false,  // isDebug
         false,  // ignoreCache
         false,  // sanitize
+        false,  // cajoled
         prefs,  // spec-contained prefs
         prefs,  // prefs supplied by the requester, same k/v as spec w/ default val for simplicity
         false,  // no pref substitution needed, ergo prefs in fragment
@@ -127,6 +128,51 @@ public class DefaultIframeUriManagerTest
   }
 
   @Test
+  public void typeHtmlCajoled() throws Exception {
+    String prefKey = "prefKey";
+    String prefVal = "prefVal";
+    Map<String, String> prefs = Maps.newHashMap();
+    prefs.put(prefKey, prefVal);
+    List<String> features = Lists.newArrayList();
+
+    // Make the gadget.
+    Gadget gadget = mockGadget(
+        SPEC_URI.toString(),
+        false,  // not type=url
+        false,  // isDebug
+        false,  // ignoreCache
+        false,  // sanitize
+        true,  // cajoled
+        prefs,  // spec-contained prefs
+        prefs,  // prefs supplied by the requester, same k/v as spec w/ default val for simplicity
+        false,  // no pref substitution needed, ergo prefs in fragment
+        features);
+
+    // Generate a default-option manager
+    TestDefaultIframeUriManager manager = makeManager(
+        false,   // security token beacon not required
+        false);  // locked domain not required
+
+    // Generate URI, turn into UriBuilder for validation
+    Uri result = manager.makeRenderingUri(gadget);
+    assertNotNull(result);
+
+    UriBuilder uri = new UriBuilder(result);
+    assertEquals("0", uri.getQueryParameter(Param.SANITIZE.getKey()));
+    assertEquals("1", uri.getQueryParameter(Param.CAJOLE.getKey()));
+    assertEquals(prefVal, uri.getFragmentParameter("up_" + prefKey));
+
+    // Cajoled is and added param
+    assertEquals(TYPE_HTML_NUM_BASE_PARAMS + 1, uri.getQueryParameters().size());
+    assertEquals(1, uri.getFragmentParameters().size());
+
+    assertFalse(manager.tokenForRenderingCalled());
+    assertTrue(manager.schemeCalled());
+    assertTrue(manager.ldExclusionCalled());
+    assertTrue(manager.addExtrasCalled());
+  }
+
+  @Test
   public void typeHtmlBasicOptionsTpl() throws Exception {
     String prefKey = "prefKey";
     String prefVal = "prefVal";
@@ -141,6 +187,7 @@ public class DefaultIframeUriManagerTest
         false,  // isDebug
         false,  // ignoreCache
         false,  // sanitize
+        false,  // cajoled
         prefs,  // spec-contained prefs
         prefs,  // prefs supplied by the requester, same k/v as spec w/ default val for simplicity
         false,  // no pref substitution needed, ergo prefs in fragment
@@ -198,6 +245,7 @@ public class DefaultIframeUriManagerTest
         true,   // isDebug
         true,   // ignoreCache
         true,   // sanitize
+        false,  // cajoled
         prefs,  // spec-contained prefs
         prefs,  // prefs supplied by the requester, same k/v as spec w/ default val for simplicity
         false,  // no pref substitution needed, ergo prefs in fragment
@@ -252,6 +300,7 @@ public class DefaultIframeUriManagerTest
         true,   // isDebug
         true,   // ignoreCache
         true,   // sanitize
+        false,  // cajoled
         prefs,  // spec-contained prefs
         prefs,  // prefs supplied by the requester, same k/v as spec w/ default val for simplicity
         false,  // no pref substitution needed, ergo prefs in fragment
@@ -596,7 +645,7 @@ public class DefaultIframeUriManagerTest
 
     Uri testUri = Uri.parse("http://foobar" + LD_SUFFIX + "/?url=http://example.com");
     assertEquals(UriStatus.INVALID_DOMAIN, manager.validateRenderingUri(testUri));
-    
+
     config.newTransaction().addContainer(ImmutableMap
         .<String, Object>builder()
         .put(ContainerConfig.CONTAINER_KEY, ContainerConfig.DEFAULT_CONTAINER)
@@ -604,7 +653,7 @@ public class DefaultIframeUriManagerTest
         .build()).commit();
     assertEquals(UriStatus.VALID_UNVERSIONED, manager.validateRenderingUri(testUri));
   }
-  
+
   private Uri makeValidationTestUri(String domain, String version) {
     UriBuilder uri = new UriBuilder();
     uri.setAuthority(domain);

Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/UriManagerTestBase.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/UriManagerTestBase.java?rev=1080807&r1=1080806&r2=1080807&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/UriManagerTestBase.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/UriManagerTestBase.java Sat Mar 12 00:02:37 2011
@@ -51,35 +51,35 @@ public class UriManagerTestBase {
   // Used for "feature-focused" tests, eg. security token and locked domain
   protected Gadget mockGadget(String... features) {
     Map<String, String> prefs = Maps.newHashMap();
-    return mockGadget(SPEC_URI.toString(), false, false, false, false, prefs, prefs,
+    return mockGadget(SPEC_URI.toString(), false, false, false, false, false, prefs, prefs,
         false, Lists.newArrayList(features));
   }
 
   // Used for prefs-focused tests
   protected Gadget mockGadget(boolean prefsForRendering, Map<String, String> specPrefs,
       Map<String, String> inPrefs) {
-    return mockGadget(SPEC_URI.toString(), false, false, false, false, specPrefs,
+    return mockGadget(SPEC_URI.toString(), false, false, false, false, false, specPrefs,
         inPrefs, prefsForRendering, Lists.<String>newArrayList());
   }
 
   // Used for "base" tests.
   protected Gadget mockGadget(String targetUrl, boolean isTypeUrl, boolean isDebug,
-      boolean ignoreCache, boolean sanitize, Map<String, String> specPrefs,
+      boolean ignoreCache, boolean sanitize, boolean cajoled, Map<String, String> specPrefs,
       Map<String, String> inPrefs, boolean needsPrefSubst, List<String> features) {
     return mockGadget(targetUrl, isTypeUrl, VIEW, LANG, COUNTRY, isDebug, ignoreCache,
-        sanitize, specPrefs, inPrefs, needsPrefSubst, features);
+        sanitize, cajoled, specPrefs, inPrefs, needsPrefSubst, features);
   }
 
   // Used for tests that don't care much about prefs or gadget type.
   protected Gadget mockGadget(boolean isDebug, boolean ignoreCache) {
     return mockGadget(SPEC_URI.toString(), false, isDebug, ignoreCache,
-        false, Maps.<String, String>newHashMap(),
+        false, false, Maps.<String, String>newHashMap(),
         Maps.<String, String>newHashMap(), false, Lists.<String>newArrayList());
   }
 
   // Actually generates the mock gadget. Used for error (null value) tests.
   protected Gadget mockGadget(String targetUrl, boolean isTypeUrl, String viewStr, String lang,
-      String country, boolean isDebug, boolean ignoreCache, boolean sanitize,
+      String country, boolean isDebug, boolean ignoreCache, boolean sanitize, boolean cajoled,
       Map<String, String> specPrefs, Map<String, String> inPrefs, boolean needsPrefSubst, List<String> features) {
     View view = createMock(View.class);
     ModulePrefs modulePrefs = createMock(ModulePrefs.class);
@@ -107,6 +107,7 @@ public class UriManagerTestBase {
     expect(context.getIgnoreCache()).andReturn(ignoreCache).anyTimes();
     expect(context.getToken()).andReturn(null).anyTimes();
     expect(context.getSanitize()).andReturn(sanitize).anyTimes();
+    expect(context.getCajoled()).andReturn(cajoled).anyTimes();
 
     // All Features (doesn't distinguish between transitive and not)
     expect(gadget.getAllFeatures()).andReturn(features).anyTimes();