You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by jo...@apache.org on 2010/05/25 01:41:58 UTC
svn commit: r947863 - in /shindig/trunk: ./ java/gadgets/
java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/
java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/caja/
java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ java...
Author: johnh
Date: Mon May 24 23:41:57 2010
New Revision: 947863
URL: http://svn.apache.org/viewvc?rev=947863&view=rev
Log:
This patch updates use of Caja to rev 4057.
It updates the calling API as well as its resource-fetching mechanism to
use an injected RequestPipeline.
Using CajaHtmlParser as GadgetHtmlParser, due to its use/support of
namespaces, is required for caja to work as of this CL. Instances using
NekoSimplifiedHtmlParser will *not* work when cajoling content!
This CL does not switch Shindig's default HTML parser to CajaHtmlParser
just yet - a move which is the intended "real" solution - due to a few
small lingering issues with namespaced attributes that are being fixed
by Caja-team shortly.
An enterprising instantiation wishing to support cajoling could
implement a GadgetHtmlParser wrapper to both Neko and Caja, delegating
to the latter only when the gadget is to be cajoled.
Added:
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/caja/CajaHtmlSerializer.java
Modified:
shindig/trunk/java/gadgets/pom.xml
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/GadgetHtmlParser.java
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/caja/CajaHtmlParser.java
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/CajaContentRewriter.java
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/RpcServlet.java
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/parse/caja/CajaCssSanitizerTest.java
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/parse/caja/CajaSocialMarkupHtmlParserTest.java
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/parse/caja/old/CajaCssSanitizerTest.java
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/SanitizingGadgetRewriterTest.java
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/old/SanitizingGadgetRewriterTest.java
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/old/SanitizingRequestRewriterTest.java
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/RewriterTestBase.java
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/old/BaseRewriterTestCase.java
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/old/HTMLContentRewriterTest.java
shindig/trunk/pom.xml
Modified: shindig/trunk/java/gadgets/pom.xml
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/pom.xml?rev=947863&r1=947862&r2=947863&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/pom.xml (original)
+++ shindig/trunk/java/gadgets/pom.xml Mon May 24 23:41:57 2010
@@ -138,6 +138,10 @@
<artifactId>caja</artifactId>
</dependency>
<dependency>
+ <groupId>caja</groupId>
+ <artifactId>htmlparser</artifactId>
+ </dependency>
+ <dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
</dependency>
Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/GadgetHtmlParser.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/GadgetHtmlParser.java?rev=947863&r1=947862&r2=947863&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/GadgetHtmlParser.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/GadgetHtmlParser.java Mon May 24 23:41:57 2010
@@ -34,6 +34,7 @@ import org.w3c.dom.DOMException;
import org.w3c.dom.DOMImplementation;
import org.w3c.dom.Document;
import org.w3c.dom.DocumentFragment;
+import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
@@ -180,14 +181,14 @@ public abstract class GadgetHtmlParser {
prependToNode(head, beforeHead);
prependToNode(body, beforeBody);
- // One exception. <style> nodes from <body> end up at the end of <head>, since doing so
- // is HTML compliant and can never break rendering due to ordering concerns.
+ // One exception. <style>/<link rel="stylesheet" nodes from <body> end up at the end of <head>,
+ // since doing so is HTML compliant and can never break rendering due to ordering concerns.
LinkedList<Node> styleNodes = Lists.newLinkedList();
NodeList bodyKids = body.getChildNodes();
for (int i = 0; i < bodyKids.getLength(); ++i) {
Node bodyKid = bodyKids.item(i);
if (bodyKid.getNodeType() == Node.ELEMENT_NODE &&
- "style".equalsIgnoreCase(bodyKid.getNodeName())) {
+ isStyleElement((Element)bodyKid)) {
styleNodes.add(bodyKid);
}
}
@@ -224,6 +225,13 @@ public abstract class GadgetHtmlParser {
to.insertBefore(from.removeLast(), to.getFirstChild());
}
}
+
+ private boolean isStyleElement(Element elem) {
+ return "style".equalsIgnoreCase(elem.getNodeName()) ||
+ ("link".equalsIgnoreCase(elem.getNodeName()) &&
+ ("stylesheet".equalsIgnoreCase(elem.getAttribute("rel")) ||
+ elem.getAttribute("type").toLowerCase().contains("css")));
+ }
/**
* Parses a snippet of markup and appends the result as children to the
Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/caja/CajaHtmlParser.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/caja/CajaHtmlParser.java?rev=947863&r1=947862&r2=947863&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/caja/CajaHtmlParser.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/caja/CajaHtmlParser.java Mon May 24 23:41:57 2010
@@ -89,8 +89,21 @@ public class CajaHtmlParser extends Gadg
throws GadgetException {
try {
MessageQueue mq = makeMessageQueue();
- DomParser parser = getDomParser(source, mq);
+ // Newline works around Caja parser issue with certain short-form
+ // HTML - the internal Lexer gets confused. A bug has been filed w/ Caja.
+ // Even so, adding the newline is innocuous for any HTML.
+ DomParser parser = getDomParser(source + "\n", mq);
DocumentFragment fragment = parser.parseFragment();
+ // Get rid of the newline, if maintained.
+ Node lastChild = fragment != null ? fragment.getLastChild() : null;
+ if (lastChild != null && lastChild.getNodeType() == Node.TEXT_NODE) {
+ String lastText = lastChild.getTextContent();
+ if (lastText.equals("\n")) {
+ fragment.removeChild(lastChild);
+ } else if (lastText.endsWith("\n")) {
+ lastChild.setTextContent(lastText.substring(0, lastText.length() - 1));
+ }
+ }
if (mq.hasMessageAtLevel(MessageLevel.ERROR)) {
StringBuilder err = new StringBuilder();
for (Message m : mq.getMessages()) {
Added: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/caja/CajaHtmlSerializer.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/caja/CajaHtmlSerializer.java?rev=947863&view=auto
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/caja/CajaHtmlSerializer.java (added)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/caja/CajaHtmlSerializer.java Mon May 24 23:41:57 2010
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.shindig.gadgets.parse.caja;
+
+import org.apache.shindig.gadgets.parse.HtmlSerialization;
+import org.apache.shindig.gadgets.parse.HtmlSerializer;
+import org.w3c.dom.Document;
+
+import com.google.caja.parser.html.Nodes;
+import com.google.caja.render.Concatenator;
+import com.google.caja.reporting.RenderContext;
+
+import java.io.StringWriter;
+
+/**
+ * HtmlSerializer using Caja's Nodes.render(...) method under the hood.
+ */
+public class CajaHtmlSerializer implements HtmlSerializer {
+ public String serialize(Document doc) {
+ StringWriter sw = HtmlSerialization.createWriter(doc);
+ return Nodes.render(doc, new RenderContext(new Concatenator(sw, null)).asXml());
+ }
+}
\ No newline at end of file
Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/CajaContentRewriter.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/CajaContentRewriter.java?rev=947863&r1=947862&r2=947863&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/CajaContentRewriter.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/CajaContentRewriter.java Mon May 24 23:41:57 2010
@@ -18,21 +18,18 @@
*/
package org.apache.shindig.gadgets.servlet;
+import com.google.caja.lexer.CharProducer;
import com.google.caja.lexer.ExternalReference;
import com.google.caja.lexer.InputSource;
import com.google.caja.lexer.escaping.Escaping;
import com.google.caja.opensocial.DefaultGadgetRewriter;
import com.google.caja.opensocial.GadgetRewriteException;
-import com.google.caja.opensocial.UriCallback;
-import com.google.caja.opensocial.UriCallbackException;
-import com.google.caja.parser.html.Nodes;
-import com.google.caja.render.Concatenator;
+import com.google.caja.plugin.PluginEnvironment;
import com.google.caja.reporting.BuildInfo;
import com.google.caja.reporting.Message;
import com.google.caja.reporting.MessageContext;
import com.google.caja.reporting.MessageLevel;
import com.google.caja.reporting.MessageQueue;
-import com.google.caja.reporting.RenderContext;
import com.google.caja.reporting.SimpleMessageQueue;
import com.google.caja.reporting.SnippetProducer;
import com.google.caja.util.Pair;
@@ -42,141 +39,148 @@ import com.google.inject.Inject;
import org.apache.shindig.common.cache.Cache;
import org.apache.shindig.common.cache.CacheProvider;
import org.apache.shindig.common.util.HashUtil;
+import org.apache.shindig.common.uri.Uri;
import org.apache.shindig.gadgets.Gadget;
+import org.apache.shindig.gadgets.GadgetException;
+import org.apache.shindig.gadgets.http.HttpRequest;
+import org.apache.shindig.gadgets.http.HttpResponse;
+import org.apache.shindig.gadgets.http.RequestPipeline;
import org.apache.shindig.gadgets.parse.HtmlSerialization;
import org.apache.shindig.gadgets.parse.HtmlSerializer;
+import org.apache.shindig.gadgets.rewrite.GadgetRewriter;
import org.apache.shindig.gadgets.rewrite.MutableContent;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.Reader;
-import java.io.StringReader;
-import java.io.StringWriter;
import java.net.URI;
import java.util.Map;
import java.util.logging.Logger;
-public class CajaContentRewriter implements org.apache.shindig.gadgets.rewrite.GadgetRewriter {
+public class CajaContentRewriter implements GadgetRewriter {
public static final String CAJOLED_DOCUMENTS = "cajoledDocuments";
private final Logger logger = Logger.getLogger(CajaContentRewriter.class.getName());
- private Cache<String, Element> cajoledCache;
+
+ private final Cache<String, Element> cajoledCache;
+ private final RequestPipeline requestPipeline;
+ private final HtmlSerializer htmlSerializer;
@Inject
- public void setCacheProvider(CacheProvider cacheProvider) {
- cajoledCache = cacheProvider.createCache(CAJOLED_DOCUMENTS);
+ public CajaContentRewriter(CacheProvider cacheProvider, RequestPipeline requestPipeline,
+ HtmlSerializer htmlSerializer) {
+ this.cajoledCache = cacheProvider.createCache(CAJOLED_DOCUMENTS);
logger.info("Cajoled cache created" + cajoledCache);
+ this.requestPipeline = requestPipeline;
+ this.htmlSerializer = htmlSerializer;
}
- public void rewrite(Gadget gadget, MutableContent content) {
- if (gadget.getSpec().getModulePrefs().getFeatures().containsKey("caja") ||
- "1".equals(gadget.getContext().getParameter("caja"))) {
-
- final URI retrievedUri = gadget.getContext().getUrl().toJavaUri();
- UriCallback cb = new UriCallback() {
- public Reader retrieve(ExternalReference externalReference, String string)
- throws UriCallbackException {
- logger.info("Retrieving " + externalReference.toString());
- Reader in = null;
- try {
- URI resourceUri = retrievedUri.resolve(externalReference.getUri());
- in = new InputStreamReader(
- resourceUri.toURL().openConnection().getInputStream(), "UTF-8");
- char[] buf = new char[4096];
- StringBuilder sb = new StringBuilder();
- for (int n; (n = in.read(buf)) > 0;) {
- sb.append(buf, 0, n);
- }
- return new StringReader(sb.toString());
- } catch (java.net.MalformedURLException ex) {
- throw new UriCallbackException(externalReference, ex);
- } catch (IOException ex) {
- throw new UriCallbackException(externalReference, ex);
- } finally {
- try {
- in.close();
- } catch (IOException e) {
- // Not sure what else we can do here
- throw new RuntimeException(e);
- }
- }
- }
-
- public URI rewrite(ExternalReference externalReference, String mimeType) {
- URI uri = externalReference.getUri();
- if (uri.getScheme().equalsIgnoreCase("https") ||
- uri.getScheme().equalsIgnoreCase("http")) {
- return retrievedUri.resolve(uri);
- } else if ("javascript".equalsIgnoreCase(uri.getScheme())) {
- // Commonly used javascript url for links with onclick handlers
- return uri.toString().equals("javascript:void(0)") ? uri : null;
- } else {
- return null;
- }
- }
- };
- String key = HashUtil.rawChecksum(content.getContent().getBytes());
- Document doc = content.getDocument();
- Node root = doc.createDocumentFragment();
- root.appendChild(doc.getDocumentElement());
- Element cajoledOutput = null;
- if (null != cajoledCache) {
- cajoledOutput = cajoledCache.getElement(key);
- if (null != cajoledOutput) {
- createContainerFor(doc, doc.adoptNode(cajoledOutput));
- content.documentChanged();
- HtmlSerialization.attach(doc, new CajaHtmlSerializer(), null);
- return;
- }
+ public void rewrite(Gadget gadget, MutableContent mc) {
+ if (!cajaEnabled(gadget)) return;
+
+ Document doc = mc.getDocument();
+
+ // Serialize outside of MutableContent, to prevent a re-parse.
+ String docContent = HtmlSerialization.serialize(doc);
+ String cacheKey = HashUtil.rawChecksum(docContent.getBytes());
+ Node root = doc.createDocumentFragment();
+ root.appendChild(doc.getDocumentElement());
+
+ Node cajoledData = null;
+ if (cajoledCache != null) {
+ Element cajoledOutput = cajoledCache.getElement(cacheKey);
+ if (cajoledOutput != null) {
+ cajoledData = doc.adoptNode(cajoledOutput);
}
+ }
+
+ if (cajoledData == null) {
+ PluginEnvironment pluginEnv = makePluginEnv(gadget);
+ URI javaGadgetUri = gadget.getContext().getUrl().toJavaUri();
MessageQueue mq = new SimpleMessageQueue();
BuildInfo bi = BuildInfo.getInstance();
DefaultGadgetRewriter rw = new DefaultGadgetRewriter(bi, mq);
- InputSource is = new InputSource(retrievedUri);
+ InputSource is = new InputSource(javaGadgetUri);
boolean safe = false;
-
+
try {
- Pair<Node, Element> htmlAndJs = rw.rewriteContent(retrievedUri, root, cb);
+ Pair<Node, Element> htmlAndJs = rw.rewriteContent(javaGadgetUri, root, pluginEnv, null);
Node html = htmlAndJs.a;
Element script = htmlAndJs.b;
-
- cajoledOutput = doc.createElement("div");
+
+ Element cajoledOutput = doc.createElement("div");
cajoledOutput.setAttribute("id", "cajoled-output");
cajoledOutput.setAttribute("classes", "g___");
cajoledOutput.setAttribute("style", "position: relative;");
-
+
cajoledOutput.appendChild(doc.adoptNode(html));
cajoledOutput.appendChild(tameCajaClientApi(doc));
cajoledOutput.appendChild(doc.adoptNode(script));
-
- Element messagesNode = formatErrors(doc, is, content.getContent(), mq,
- /* visible */ false);
+
+ Element messagesNode = formatErrors(doc, is, docContent, mq,
+ /* is invisible */ false);
cajoledOutput.appendChild(messagesNode);
if (cajoledCache != null) {
- cajoledCache.addElement(key, cajoledOutput);
+ cajoledCache.addElement(cacheKey, cajoledOutput);
}
- createContainerFor(doc, cajoledOutput);
- content.documentChanged();
safe = true;
- HtmlSerialization.attach(doc, new CajaHtmlSerializer(), null);
+ cajoledData = cajoledOutput;
+ createContainerFor(doc, cajoledData);
+ mc.documentChanged();
+ safe = true;
+ HtmlSerialization.attach(doc, htmlSerializer, null);
} catch (GadgetRewriteException e) {
// There were cajoling errors
// Content is only used to produce useful snippets with error messages
createContainerFor(doc,
- formatErrors(doc, is, content.getContent(), mq, true /* visible */));
+ formatErrors(doc, is, docContent, mq, true /* visible */));
logException(e, mq);
safe = true;
} finally {
if (!safe) {
// Fail safe
- content.setContent("");
+ mc.setContent("");
+ return;
}
}
}
}
+
+ private boolean cajaEnabled(Gadget gadget) {
+ return (gadget.getAllFeatures().contains("caja") ||
+ "1".equals(gadget.getContext().getParameter("caja")));
+ }
+
+ private PluginEnvironment makePluginEnv(Gadget gadget) {
+ final Uri gadgetUri = gadget.getContext().getUrl();
+ final String container = gadget.getContext().getContainer();
+
+ return new PluginEnvironment() {
+ public CharProducer loadExternalResource(
+ ExternalReference externalReference, String string) {
+ logger.info("Retrieving " + externalReference.toString());
+ Uri resourceUri = gadgetUri.resolve(Uri.fromJavaUri(externalReference.getUri()));
+ HttpRequest request =
+ new HttpRequest(resourceUri).setContainer(container).setGadget(gadgetUri);
+ try {
+ HttpResponse response = requestPipeline.execute(request);
+ return CharProducer.Factory.fromString(response.getResponseAsString(), externalReference.getReferencePosition());
+ } catch (GadgetException e) {
+ logger.info("Failed to retrieve: " + externalReference.toString());
+ return null;
+ }
+ }
+
+ public String rewriteUri(ExternalReference externalReference, String mimeType) {
+ URI uri = externalReference.getUri();
+ if (uri.getScheme().equalsIgnoreCase("https") ||
+ uri.getScheme().equalsIgnoreCase("http")) {
+ return gadgetUri.resolve(Uri.fromJavaUri(uri)).toString();
+ }
+ return null;
+ }
+ };
+ }
private void createContainerFor(Document doc, Node el) {
Element docEl = doc.createElement("html");
@@ -240,11 +244,4 @@ public class CajaContentRewriter impleme
}
logger.info("Unable to cajole gadget: " + errbuilder);
}
-
- private static class CajaHtmlSerializer implements HtmlSerializer {
- public String serialize(Document doc) {
- StringWriter sw = HtmlSerialization.createWriter(doc);
- return Nodes.render(doc, new RenderContext(new Concatenator(sw, null)).asXml());
- }
- }
}
Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/RpcServlet.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/RpcServlet.java?rev=947863&r1=947862&r2=947863&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/RpcServlet.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/RpcServlet.java Mon May 24 23:41:57 2010
@@ -42,7 +42,6 @@ public class RpcServlet extends Injected
static final String GET_REQUEST_REQ_PARAM = "req";
static final String GET_REQUEST_CALLBACK_PARAM = "callback";
- private static final int POST_REQUEST_MAX_SIZE = 1024 * 128;
private static final Logger logger = Logger.getLogger("org.apache.shindig.gadgets");
private JsonRpcHandler jsonHandler;
Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/parse/caja/CajaCssSanitizerTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/parse/caja/CajaCssSanitizerTest.java?rev=947863&r1=947862&r2=947863&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/parse/caja/CajaCssSanitizerTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/parse/caja/CajaCssSanitizerTest.java Mon May 24 23:41:57 2010
@@ -88,7 +88,7 @@ public class CajaCssSanitizerTest extend
assertStyleEquals(
".xyz { background: url('http://test.com/proxy/path?url=" +
"http%3A%2F%2Fwww.example.org%2Fimg.gif" +
- "&sanitize=1&rewriteMime=image%2F%2A');}", styleSheet);
+ "&sanitize=1&rewriteMime=image%2F%2a');}", styleSheet);
}
@Test
@@ -97,7 +97,7 @@ public class CajaCssSanitizerTest extend
CssTree.StyleSheet styleSheet = parser.parseDom(css);
sanitizer.sanitize(styleSheet, DUMMY, importRewriter, imageRewriter);
assertEquals(".xyz{background:url('http://test.com/proxy/path?url=http%3A%2F%2Fwww.example.org%2F" +
- "img.gif&sanitize=1&rewriteMime=image%2F%2A');}",
+ "img.gif&sanitize=1&rewriteMime=image%2F%2a');}",
parser.serialize(styleSheet).replaceAll("\\s", ""));
}
Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/parse/caja/CajaSocialMarkupHtmlParserTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/parse/caja/CajaSocialMarkupHtmlParserTest.java?rev=947863&r1=947862&r2=947863&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/parse/caja/CajaSocialMarkupHtmlParserTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/parse/caja/CajaSocialMarkupHtmlParserTest.java Mon May 24 23:41:57 2010
@@ -45,5 +45,24 @@ public class CajaSocialMarkupHtmlParserT
@Override
@Ignore("Until xmlnamespace issues have been resolved")
public void testInvalid() throws Exception { super.testInvalid(); }
+
+ @Test
+ @Override
+ @Ignore("Until xml-in-HTML NPE issues have been resolved")
+ public void testSocialTemplateSerialization() { super.testSocialTemplateSerialization(); }
+
+ @Test
+ @Override
+ @Ignore("Until xml-in-HTML NPE issues have been resolved")
+ public void testJavascript() { super.testJavascript(); }
+ @Test
+ @Override
+ @Ignore("Until xml-in-HTML NPE issues have been resolved")
+ public void testPlainContent() { super.testPlainContent(); }
+
+ @Test
+ @Override
+ @Ignore("Until xml-in-HTML NPE issues have been resolved")
+ public void testCommentOrdering() { super.testCommentOrdering(); }
}
Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/parse/caja/old/CajaCssSanitizerTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/parse/caja/old/CajaCssSanitizerTest.java?rev=947863&r1=947862&r2=947863&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/parse/caja/old/CajaCssSanitizerTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/parse/caja/old/CajaCssSanitizerTest.java Mon May 24 23:41:57 2010
@@ -101,7 +101,7 @@ public class CajaCssSanitizerTest extend
String css = ".xyz { background: url('http://www.example.org/img.gif');}";
CssTree.StyleSheet styleSheet = parser.parseDom(css);
sanitizer.sanitize(styleSheet, DUMMY, importRewriter, imageRewriter);
- assertEquals(".xyz{background:url('http://www.example.org/img.gif%26sanitize%3D1%26rewriteMime%3Dimage/%2A');}",
+ assertEquals(".xyz{background:url('http://www.example.org/img.gif%26sanitize%3d1%26rewriteMime%3dimage/%2a');}",
parser.serialize(styleSheet).replaceAll("\\s", ""));
}
Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/SanitizingGadgetRewriterTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/SanitizingGadgetRewriterTest.java?rev=947863&r1=947862&r2=947863&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/SanitizingGadgetRewriterTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/SanitizingGadgetRewriterTest.java Mon May 24 23:41:57 2010
@@ -21,8 +21,10 @@ package org.apache.shindig.gadgets.rende
import org.apache.shindig.common.uri.Uri;
import org.apache.shindig.gadgets.Gadget;
import org.apache.shindig.gadgets.GadgetContext;
+import org.apache.shindig.gadgets.parse.GadgetHtmlParser;
import org.apache.shindig.gadgets.parse.caja.CajaCssParser;
import org.apache.shindig.gadgets.parse.caja.CajaCssSanitizer;
+import org.apache.shindig.gadgets.parse.caja.CajaHtmlParser;
import org.apache.shindig.gadgets.rewrite.RewriterTestBase;
import org.apache.shindig.gadgets.rewrite.ContentRewriterFeature;
import org.apache.shindig.gadgets.rewrite.GadgetRewriter;
@@ -88,7 +90,12 @@ public class SanitizingGadgetRewriterTes
gadgetNoCacheAndDebug.setSpec(new GadgetSpec(Uri.parse("www.example.org/gadget.xml"),
"<Module><ModulePrefs title=''/><Content type='x-html-sanitized'/></Module>"));
gadgetNoCacheAndDebug.setCurrentView(gadgetNoCacheAndDebug.getSpec().getViews().values().iterator().next());
-}
+ }
+
+ @Override
+ protected Class<? extends GadgetHtmlParser> getParserClass() {
+ return CajaHtmlParser.class;
+ }
private String rewrite(Gadget gadget, String content, Set<String> tags, Set<String> attributes)
throws Exception {
@@ -151,7 +158,7 @@ public class SanitizingGadgetRewriterTes
String sanitized =
"<html><head><link href=\"http://host.com/proxy?url=http%3A%2F%2Fwww.test.com%2Fdir%2F" +
"proxy%3Furl%3Dhttp%253A%252F%252Fwww.evil.com%252Fx.css%26gadget%3Dwww.example.org%252F" +
- "gadget.xml%26fp%3D45508%26rewriteMime%3Dtext%2Fcss&sanitize=1&rewriteMime=text%2Fcss\" " +
+ "gadget.xml%26fp%3D45508%26rewriteMime%3Dtext%2Fcss&sanitize=1&rewriteMime=text%2Fcss\" " +
"rel=\"stylesheet\"></head><body></body></html>";
String rewritten = rewrite(gadget, markup, set("link"), set("rel", "href"));
assertEquals(sanitized, rewritten);
@@ -167,8 +174,8 @@ public class SanitizingGadgetRewriterTes
String sanitized =
"<html><head><link href=\"http://host.com/proxy?url=http%3A%2F%2Fwww.test.com%2F"
+ "dir%2Fproxy%3Furl%3Dhttp%253A%252F%252Fwww.evil.com%252Fx.css%26gadget%3D"
- + "www.example.org%252Fgadget.xml%26fp%3D45508%26rewriteMime%3Dtext%2Fcss&"
- + "sanitize=1&rewriteMime=text%2Fcss\" rel=\"stylesheet\">"
+ + "www.example.org%252Fgadget.xml%26fp%3D45508%26rewriteMime%3Dtext%2Fcss&"
+ + "sanitize=1&rewriteMime=text%2Fcss\" rel=\"stylesheet\">"
+ "</head><body></body></html>";
String rewritten = rewrite(gadgetNoCacheAndDebug, markup, set("link"), set("rel", "href"));
assertEquals(sanitized, rewritten);
@@ -242,7 +249,7 @@ public class SanitizingGadgetRewriterTes
public void enforceImageSrcProxied() throws Exception {
String markup = "<img src='http://www.evil.com/x.js'>Evil happens</img>";
String sanitized = "<img src=\"http://host.com/proxy?url=http%3A%2F%2F" +
- "www.evil.com%2Fx.js&sanitize=1&rewriteMime=image%2F*\">Evil happens";
+ "www.evil.com%2Fx.js&sanitize=1&rewriteMime=image%2F*\">Evil happens";
assertEquals(sanitized, rewrite(gadget, markup, set("img"), set("src")));
}
@@ -250,7 +257,7 @@ public class SanitizingGadgetRewriterTes
public void enforceImageSrcProxiedNoCacheAndDebug() throws Exception {
String markup = "<img src='http://www.evil.com/x.js'>Evil happens</img>";
String sanitized = "<img src=\"http://host.com/proxy?url=http%3A%2F%2Fwww.evil.com" +
- "%2Fx.js&sanitize=1&rewriteMime=image%2F*\">Evil happens";
+ "%2Fx.js&sanitize=1&rewriteMime=image%2F*\">Evil happens";
assertEquals(sanitized, rewrite(gadgetNoCacheAndDebug, markup, set("img"), set("src")));
}
@@ -347,44 +354,6 @@ public class SanitizingGadgetRewriterTes
matcher.matches();
assertEquals("<p foo=\"bar\"></p>", matcher.group(1));
}
-
- @Test
- public void restrictHrefAndSrcAttributes() throws Exception {
- String markup =
- "<element " +
- "href=\"http://example.org/valid-href\" " +
- "src=\"http://example.org/valid-src\"/> " +
- "<element " +
- "href=\"https://example.org/valid-href\" " +
- "src=\"https://example.org/valid-src\"/> " +
- "<element " +
- "href=\"http-evil://example.org/valid-href\" " +
- "src=\"http-evil://example.org/valid-src\"/> " +
- "<element " +
- "href=\"javascript:evil()\" " +
- "src=\"javascript:evil()\" /> " +
- "<element " +
- "href=\"//example.org/valid-href\" " +
- "src=\"//example.org/valid-src\"/>";
-
- // TODO: This test is only valid when using a parser that converts empty tags to
- // balanced tags. The default (Neko) parser does this, with special case logic for handling
- // empty tags like br or link.
- String sanitized =
- "<element " +
- "href=\"http://example.org/valid-href\" " +
- "src=\"http://example.org/valid-src\"></element> " +
- "<element " +
- "href=\"https://example.org/valid-href\" " +
- "src=\"https://example.org/valid-src\"></element> " +
- "<element></element> " +
- "<element></element> " +
- "<element " +
- "href=\"//example.org/valid-href\" " +
- "src=\"//example.org/valid-src\"></element>";
-
- assertEquals(sanitized, rewrite(gadget, markup, set("element"), set("href", "src")));
- }
@Test
public void allCommentsStripped() throws Exception {
Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/old/SanitizingGadgetRewriterTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/old/SanitizingGadgetRewriterTest.java?rev=947863&r1=947862&r2=947863&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/old/SanitizingGadgetRewriterTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/old/SanitizingGadgetRewriterTest.java Mon May 24 23:41:57 2010
@@ -26,7 +26,9 @@ import com.google.common.collect.Sets;
import org.apache.shindig.common.uri.Uri;
import org.apache.shindig.gadgets.Gadget;
import org.apache.shindig.gadgets.GadgetContext;
+import org.apache.shindig.gadgets.parse.GadgetHtmlParser;
import org.apache.shindig.gadgets.parse.caja.CajaCssParser;
+import org.apache.shindig.gadgets.parse.caja.CajaHtmlParser;
import org.apache.shindig.gadgets.parse.caja.old.CajaCssSanitizer;
import org.apache.shindig.gadgets.rewrite.ContentRewriterFeature;
import org.apache.shindig.gadgets.rewrite.GadgetRewriter;
@@ -88,7 +90,12 @@ public class SanitizingGadgetRewriterTes
gadgetNoCacheAndDebug.setSpec(new GadgetSpec(Uri.parse("www.example.org/gadget.xml"),
"<Module><ModulePrefs title=''/><Content type='x-html-sanitized'/></Module>"));
gadgetNoCacheAndDebug.setCurrentView(gadgetNoCacheAndDebug.getSpec().getViews().values().iterator().next());
-}
+ }
+
+ @Override
+ protected Class<? extends GadgetHtmlParser> getParserClass() {
+ return CajaHtmlParser.class;
+ }
private String rewrite(Gadget gadget, String content, Set<String> tags, Set<String> attributes)
throws Exception {
@@ -149,8 +156,8 @@ public class SanitizingGadgetRewriterTes
+ "fp=45508rewriteMime=text/css\"/>";
String sanitized =
"<html><head><link href=\"http://www.test.com/dir/proxy?"
- + "url=http%3A%2F%2Fwww.evil.com%2Fx.css&gadget=www.example.org%2Fgadget.xml&"
- + "fp=45508&sanitize=1&rewriteMime=text/css\" rel=\"stylesheet\"></head><body></body></html>";
+ + "url=http%3A%2F%2Fwww.evil.com%2Fx.css&gadget=www.example.org%2Fgadget.xml&"
+ + "fp=45508&sanitize=1&rewriteMime=text/css\" rel=\"stylesheet\"></head><body></body></html>";
String rewritten = rewrite(gadget, markup, set("link"), set("rel", "href"));
assertEquals(sanitized, rewritten);
}
@@ -164,8 +171,9 @@ public class SanitizingGadgetRewriterTes
+ "fp=45508rewriteMime=text/css\"/>";
String sanitized =
"<html><head><link href=\"http://www.test.com/dir/proxy?"
- + "url=http%3A%2F%2Fwww.evil.com%2Fx.css&gadget=www.example.org%2Fgadget.xml&"
- + "fp=45508&debug=1&nocache=1&sanitize=1&rewriteMime=text/css\" rel=\"stylesheet\"></head><body></body></html>";
+ + "url=http%3A%2F%2Fwww.evil.com%2Fx.css&gadget=www.example.org%2Fgadget.xml&"
+ + "fp=45508&debug=1&nocache=1&sanitize=1&rewriteMime=text/css\" "
+ + "rel=\"stylesheet\"></head><body></body></html>";
String rewritten = rewrite(gadgetNoCacheAndDebug, markup, set("link"), set("rel", "href"));
assertEquals(sanitized, rewritten);
}
@@ -198,7 +206,7 @@ public class SanitizingGadgetRewriterTes
"<html><head><style>"
+ "@import url('http://www.test.com/dir/proxy?url=www.example.org%2F"
+ "www.evil.com%2Fx.js&gadget=www.example.org%2Fgadget.xml&"
- + "fp=45508&sanitize=1&rewriteMime=text%2Fcss');"
+ + "fp=45508&sanitize=1&rewriteMime=text%2fcss');"
+ "</style></head><body></body></html>";
String rewritten = rewrite(gadget, markup, set("style"), set());
assertEquals(sanitized, rewritten);
@@ -214,7 +222,7 @@ public class SanitizingGadgetRewriterTes
"<html><head><style>"
+ "@import url('http://www.test.com/dir/proxy?url=www.example.org%2F"
+ "www.evil.com%2Fx.js&gadget=www.example.org%2Fgadget.xml&"
- + "fp=45508&debug=1&nocache=1&sanitize=1&rewriteMime=text%2Fcss');"
+ + "fp=45508&debug=1&nocache=1&sanitize=1&rewriteMime=text%2fcss');"
+ "</style></head><body></body></html>";
String rewritten = rewrite(gadgetNoCacheAndDebug, markup, set("style"), set());
assertEquals(sanitized, rewritten);
@@ -240,14 +248,17 @@ public class SanitizingGadgetRewriterTes
@Test
public void enforceImageSrcProxied() throws Exception {
String markup = "<img src='http://www.evil.com/x.js'>Evil happens</img>";
- String sanitized = "<img src=\"http://www.test.com/dir/proxy?url=http%3A%2F%2Fwww.evil.com%2Fx.js&gadget=www.example.org%2Fgadget.xml&fp=45508&sanitize=1&rewriteMime=image/*\">Evil happens";
+ String sanitized = "<img src=\"http://www.test.com/dir/proxy?url=http%3A%2F%2Fwww.evil.com%2Fx.js&"
+ + "gadget=www.example.org%2Fgadget.xml&fp=45508&sanitize=1&rewriteMime=image/*\">Evil happens";
assertEquals(sanitized, rewrite(gadget, markup, set("img"), set("src")));
}
@Test
public void enforceImageSrcProxiedNoCacheAndDebug() throws Exception {
String markup = "<img src='http://www.evil.com/x.js'>Evil happens</img>";
- String sanitized = "<img src=\"http://www.test.com/dir/proxy?url=http%3A%2F%2Fwww.evil.com%2Fx.js&gadget=www.example.org%2Fgadget.xml&fp=45508&debug=1&nocache=1&sanitize=1&rewriteMime=image/*\">Evil happens";
+ String sanitized = "<img src=\"http://www.test.com/dir/proxy?url=http%3A%2F%2Fwww.evil.com%2Fx.js&"
+ + "gadget=www.example.org%2Fgadget.xml&fp=45508&debug=1&nocache=1&sanitize=1&"
+ + "rewriteMime=image/*\">Evil happens";
assertEquals(sanitized, rewrite(gadgetNoCacheAndDebug, markup, set("img"), set("src")));
}
@@ -347,44 +358,6 @@ public class SanitizingGadgetRewriterTes
matcher.matches();
assertEquals("<p foo=\"bar\"></p>", matcher.group(1));
}
-
- @Test
- public void restrictHrefAndSrcAttributes() throws Exception {
- String markup =
- "<element " +
- "href=\"http://example.org/valid-href\" " +
- "src=\"http://example.org/valid-src\"/> " +
- "<element " +
- "href=\"https://example.org/valid-href\" " +
- "src=\"https://example.org/valid-src\"/> " +
- "<element " +
- "href=\"http-evil://example.org/valid-href\" " +
- "src=\"http-evil://example.org/valid-src\"/> " +
- "<element " +
- "href=\"javascript:evil()\" " +
- "src=\"javascript:evil()\" /> " +
- "<element " +
- "href=\"//example.org/valid-href\" " +
- "src=\"//example.org/valid-src\"/>";
-
- // TODO: This test is only valid when using a parser that converts empty tags to
- // balanced tags. The default (Neko) parser does this, with special case logic for handling
- // empty tags like br or link.
- String sanitized =
- "<element " +
- "href=\"http://example.org/valid-href\" " +
- "src=\"http://example.org/valid-src\"></element> " +
- "<element " +
- "href=\"https://example.org/valid-href\" " +
- "src=\"https://example.org/valid-src\"></element> " +
- "<element></element> " +
- "<element></element> " +
- "<element " +
- "href=\"//example.org/valid-href\" " +
- "src=\"//example.org/valid-src\"></element>";
-
- assertEquals(sanitized, rewrite(gadget, markup, set("element"), set("href", "src")));
- }
@Test
public void allCommentsStripped() throws Exception {
Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/old/SanitizingRequestRewriterTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/old/SanitizingRequestRewriterTest.java?rev=947863&r1=947862&r2=947863&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/old/SanitizingRequestRewriterTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/old/SanitizingRequestRewriterTest.java Mon May 24 23:41:57 2010
@@ -82,7 +82,7 @@ public class SanitizingRequestRewriterTe
String sanitized =
"@import url('http://www.test.com/dir/proxy?"
+ "url=http%3A%2F%2Fwww.evil.com%2Fmore.css"
- + "&fp=45508&sanitize=1&rewriteMime=text%2Fcss');\n"
+ + "&fp=45508&sanitize=1&rewriteMime=text%2fcss');\n"
+ "A {\n"
+ " font: BOLD\n"
+ '}';
@@ -102,7 +102,7 @@ public class SanitizingRequestRewriterTe
String sanitized =
"@import url('http://www.test.com/dir/proxy?"
+ "url=http%3A%2F%2Fwww.evil.com%2Fmore.css"
- + "&fp=45508&nocache=1&sanitize=1&rewriteMime=text%2Fcss');\n"
+ + "&fp=45508&nocache=1&sanitize=1&rewriteMime=text%2fcss');\n"
+ "A {\n"
+ " font: BOLD\n"
+ '}';
Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/RewriterTestBase.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/RewriterTestBase.java?rev=947863&r1=947862&r2=947863&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/RewriterTestBase.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/RewriterTestBase.java Mon May 24 23:41:57 2010
@@ -29,11 +29,14 @@ import org.apache.shindig.gadgets.http.H
import org.apache.shindig.gadgets.http.RequestPipeline;
import org.apache.shindig.gadgets.parse.GadgetHtmlParser;
import org.apache.shindig.gadgets.parse.ParseModule;
+import org.apache.shindig.gadgets.parse.nekohtml.NekoSimplifiedHtmlParser;
import org.apache.shindig.gadgets.spec.GadgetSpec;
import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Injector;
+import com.google.inject.Module;
+import com.google.inject.util.Modules;
import org.apache.commons.lang.StringUtils;
import org.easymock.EasyMock;
@@ -72,12 +75,25 @@ public abstract class RewriterTestBase {
TAGS, "false", "false"));
defaultRewriterFeature = rewriterFeatureFactory.getDefault();
tags = defaultRewriterFeature.getIncludedTags();
- injector = Guice.createInjector(new ParseModule(), new PropertiesModule(), new TestModule());
+ injector = Guice.createInjector(getParseModule(), new PropertiesModule(), new TestModule());
parser = injector.getInstance(GadgetHtmlParser.class);
fakeResponse = new HttpResponseBuilder().setHeader("Content-Type", "unknown")
.setResponse(new byte[]{ (byte)0xFE, (byte)0xFF}).create();
control = EasyMock.createControl();
}
+
+ private Module getParseModule() {
+ return Modules.override(new ParseModule()).with(new AbstractModule() {
+ @Override
+ protected void configure() {
+ bind(GadgetHtmlParser.class).to(getParserClass());
+ }
+ });
+ }
+
+ protected Class<? extends GadgetHtmlParser> getParserClass() {
+ return NekoSimplifiedHtmlParser.class;
+ }
public static GadgetSpec createSpecWithRewrite(String include, String exclude, String expires,
Set<String> tags) throws GadgetException {
@@ -200,7 +216,6 @@ public abstract class RewriterTestBase {
protected void configure() {
bind(RequestPipeline.class).toInstance(new RequestPipeline() {
public HttpResponse execute(HttpRequest request) { return null; }
- public void normalizeProtocol(HttpRequest request) throws GadgetException {}
});
bind(GadgetSpecFactory.class).toInstance(new GadgetSpecFactory() {
Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/old/BaseRewriterTestCase.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/old/BaseRewriterTestCase.java?rev=947863&r1=947862&r2=947863&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/old/BaseRewriterTestCase.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/old/BaseRewriterTestCase.java Mon May 24 23:41:57 2010
@@ -31,6 +31,7 @@ import org.apache.shindig.gadgets.http.H
import org.apache.shindig.gadgets.http.RequestPipeline;
import org.apache.shindig.gadgets.parse.GadgetHtmlParser;
import org.apache.shindig.gadgets.parse.ParseModule;
+import org.apache.shindig.gadgets.parse.nekohtml.NekoSimplifiedHtmlParser;
import org.apache.shindig.gadgets.rewrite.ContentRewriterFeature;
import org.apache.shindig.gadgets.rewrite.GadgetRewriter;
import org.apache.shindig.gadgets.rewrite.MutableContent;
@@ -42,6 +43,8 @@ import org.apache.shindig.gadgets.spec.G
import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Injector;
+import com.google.inject.Module;
+import com.google.inject.util.Modules;
import org.apache.commons.lang.StringUtils;
import org.easymock.EasyMock;
@@ -101,7 +104,7 @@ public abstract class BaseRewriterTestCa
defaultLinkRewriterNoCacheAndDebug = new DefaultProxyingLinkRewriterFactory(
defaultContainerRewriterUris).create(SPEC_URL, defaultRewriterFeature,
"default", true, true);
- injector = Guice.createInjector(new ParseModule(), new PropertiesModule(), new TestModule());
+ injector = Guice.createInjector(getParseModule(), new PropertiesModule(), new TestModule());
parser = injector.getInstance(GadgetHtmlParser.class);
fakeResponse = new HttpResponseBuilder().setHeader("Content-Type", "unknown")
.setResponse(new byte[]{ (byte)0xFE, (byte)0xFF}).create();
@@ -125,6 +128,19 @@ public abstract class BaseRewriterTestCa
DEFAULT_CONCAT_BASE);
control = EasyMock.createControl();
}
+
+ private Module getParseModule() {
+ return Modules.override(new ParseModule()).with(new AbstractModule() {
+ @Override
+ protected void configure() {
+ bind(GadgetHtmlParser.class).to(getParserClass());
+ }
+ });
+ }
+
+ protected Class<? extends GadgetHtmlParser> getParserClass() {
+ return NekoSimplifiedHtmlParser.class;
+ }
public static GadgetSpec createSpecWithRewrite(String include, String exclude, String expires,
Set<String> tags) throws GadgetException {
Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/old/HTMLContentRewriterTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/old/HTMLContentRewriterTest.java?rev=947863&r1=947862&r2=947863&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/old/HTMLContentRewriterTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/old/HTMLContentRewriterTest.java Mon May 24 23:41:57 2010
@@ -167,6 +167,7 @@ public class HTMLContentRewriterTest ext
getResourceAsStream("org/apache/shindig/gadgets/rewrite/rewritescriptbasic.html"));
Document doc = rewriteContent(rewriter, content, "default", false, true).getDocument();
+ // TODO: figure out why XPathWrapper can't seem to handle CajaHtmlParser's output (ns issues?)
XPathWrapper wrapper = new XPathWrapper(doc);
// Second script should contain two concatenated urls with nocache
Modified: shindig/trunk/pom.xml
URL: http://svn.apache.org/viewvc/shindig/trunk/pom.xml?rev=947863&r1=947862&r2=947863&view=diff
==============================================================================
--- shindig/trunk/pom.xml (original)
+++ shindig/trunk/pom.xml Mon May 24 23:41:57 2010
@@ -1393,10 +1393,16 @@
<artifactId>json</artifactId>
<version>20070829</version>
</dependency>
+ <dependency>
+ <groupId>caja</groupId>
+ <artifactId>htmlparser</artifactId>
+ <version>r4067</version>
+ <scope>compile</scope>
+ </dependency>
<dependency>
<groupId>caja</groupId>
<artifactId>caja</artifactId>
- <version>r3950</version>
+ <version>r4067</version>
<scope>compile</scope>
</dependency>
<dependency>