You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@shindig.apache.org by lr...@apache.org on 2008/11/06 23:47:35 UTC
svn commit: r712000 - in /incubator/shindig/trunk/java/gadgets/src:
main/java/org/apache/shindig/gadgets/rewrite/
test/java/org/apache/shindig/gadgets/rewrite/
test/java/org/apache/shindig/gadgets/rewrite/lexer/
Author: lryan
Date: Thu Nov 6 14:47:09 2008
New Revision: 712000
URL: http://svn.apache.org/viewvc?rev=712000&view=rev
Log:
Fix relative link generation in LinkingTagRewriter
Re-work initializtion of DOM rewriters
Simplification of DOM rewriter tests
More thorough DOM vs Lex benchmarking
Added:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeatureFactory.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RewriterUtils.java
Removed:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/HtmlContentRewriter.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/FeatureBasedRewriterTestBase.java
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeature.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/JsTagConcatContentRewriter.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/LinkingTagContentRewriter.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/MutableContent.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ProxyingLinkRewriter.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/StyleLinksContentRewriter.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/BaseRewriterTestCase.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeatureTestCase.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/CssRewriterTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/JsTagConcatContentRewriterTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/LexerVsDomRewriteBenchmark.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/LinkingTagContentRewriterTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ProxyingLinkRewriterTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/StyleLinksContentRewriterTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/lexer/JavascriptTagMergerTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/lexer/LinkingTagRewriterTest.java
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeature.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeature.java?rev=712000&r1=711999&r2=712000&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeature.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeature.java Thu Nov 6 14:47:09 2008
@@ -17,11 +17,10 @@
*/
package org.apache.shindig.gadgets.rewrite;
+import com.google.common.collect.Lists;
import org.apache.shindig.gadgets.spec.Feature;
import org.apache.shindig.gadgets.spec.GadgetSpec;
-import com.google.common.collect.Lists;
-
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
@@ -72,7 +71,10 @@
String defaultExclude,
String defaultExpires,
Set<String> defaultTags) {
- Feature f = spec.getModulePrefs().getFeatures().get("content-rewrite");
+ Feature f = null;
+ if (spec != null) {
+ f = spec.getModulePrefs().getFeatures().get("content-rewrite");
+ }
String includeRegex = normalizeParam(defaultInclude, null);
String excludeRegex = normalizeParam(defaultExclude, null);
@@ -195,30 +197,4 @@
}
return fingerprint;
}
-
- public static class Factory {
- private final String defaultIncludeUrls;
- private final String defaultExcludeUrls;
- private final String defaultExpires;
- private final Set<String> defaultIncludeTags;
-
- public Factory(String includeUrls, String excludeUrls, String expires,
- Set<String> includeTags) {
- defaultIncludeUrls = includeUrls;
- defaultExcludeUrls = excludeUrls;
- defaultExpires = expires;
- defaultIncludeTags = includeTags;
- }
-
- public ContentRewriterFeature get(GadgetSpec spec) {
- ContentRewriterFeature rewriterFeature =
- (ContentRewriterFeature)spec.getAttribute("content-rewrite");
- if (rewriterFeature == null) {
- rewriterFeature = new ContentRewriterFeature(spec, defaultIncludeUrls,
- defaultExcludeUrls, defaultExpires, defaultIncludeTags);
- spec.setAttribute("content-rewrite", rewriterFeature);
- }
- return rewriterFeature;
- }
- }
}
Added: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeatureFactory.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeatureFactory.java?rev=712000&view=auto
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeatureFactory.java (added)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeatureFactory.java Thu Nov 6 14:47:09 2008
@@ -0,0 +1,96 @@
+/*
+ * 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.rewrite;
+
+import com.google.inject.Inject;
+import com.google.inject.name.Named;
+import org.apache.shindig.common.uri.Uri;
+import org.apache.shindig.gadgets.GadgetException;
+import org.apache.shindig.gadgets.GadgetSpecFactory;
+import org.apache.shindig.gadgets.http.HttpRequest;
+import org.apache.shindig.gadgets.spec.GadgetSpec;
+
+import java.net.URI;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * Factory for content rewriter features
+ */
+public class ContentRewriterFeatureFactory {
+
+ private final GadgetSpecFactory specFactory;
+ private final String includeUrls;
+ private final String excludeUrls;
+ private final String expires;
+ private final Set<String> includeTags;
+
+ private ContentRewriterFeature defaultFeature;
+
+ @Inject
+ public ContentRewriterFeatureFactory(
+ GadgetSpecFactory specFactory,
+ @Named("shindig.content-rewrite.include-urls")String includeUrls,
+ @Named("shindig.content-rewrite.exclude-urls")String excludeUrls,
+ @Named("shindig.content-rewrite.expires")String expires,
+ @Named("shindig.content-rewrite.include-tags")String includeTags) {
+ this.specFactory = specFactory;
+ this.includeUrls = includeUrls;
+ this.excludeUrls = excludeUrls;
+ this.expires = expires;
+ this.includeTags = new HashSet<String>();
+ for (String s : includeTags.split(",")) {
+ if (s != null && s.trim().length() > 0) {
+ this.includeTags.add(s.trim().toLowerCase());
+ }
+ }
+ defaultFeature = new ContentRewriterFeature(null, includeUrls, excludeUrls, expires,
+ this.includeTags);
+ }
+
+ public ContentRewriterFeature getDefault() {
+ return defaultFeature;
+ }
+
+ public ContentRewriterFeature get(HttpRequest request) {
+ Uri gadgetUri = request.getGadget();
+ GadgetSpec spec;
+ if (gadgetUri != null) {
+ URI gadgetJavaUri = gadgetUri.toJavaUri();
+ try {
+ spec = specFactory.getGadgetSpec(gadgetJavaUri, false);
+ if (spec != null) {
+ return get(spec);
+ }
+ } catch (GadgetException ge) {
+ return defaultFeature;
+ }
+ }
+ return defaultFeature;
+ }
+
+ public ContentRewriterFeature get(GadgetSpec spec) {
+ ContentRewriterFeature rewriterFeature =
+ (ContentRewriterFeature)spec.getAttribute("content-rewriter");
+ if (rewriterFeature != null) return rewriterFeature;
+ rewriterFeature
+ = new ContentRewriterFeature(spec, includeUrls, excludeUrls, expires, includeTags);
+ spec.setAttribute("content-rewriter", rewriterFeature);
+ return rewriterFeature;
+ }
+}
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/JsTagConcatContentRewriter.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/JsTagConcatContentRewriter.java?rev=712000&r1=711999&r2=712000&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/JsTagConcatContentRewriter.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/JsTagConcatContentRewriter.java Thu Nov 6 14:47:09 2008
@@ -20,13 +20,14 @@
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
+import com.google.inject.Inject;
+import com.google.inject.name.Named;
import org.apache.shindig.common.uri.Uri;
import org.apache.shindig.common.util.Utf8UrlCoder;
import org.apache.shindig.gadgets.Gadget;
import org.apache.shindig.gadgets.http.HttpRequest;
import org.apache.shindig.gadgets.http.HttpResponse;
import org.apache.shindig.gadgets.servlet.ProxyBase;
-import org.apache.shindig.gadgets.spec.GadgetSpec;
import org.apache.shindig.gadgets.spec.View;
import org.w3c.dom.Node;
@@ -39,15 +40,15 @@
public class JsTagConcatContentRewriter implements ContentRewriter {
private final static int MAX_URL_LENGTH = 1500;
-
- private final ContentRewriterFeature.Factory rewriterFeatureFactory;
- private final String concatUrlBase;
-
private static final String DEFAULT_CONCAT_URL_BASE = "/gadgets/concat?";
private static final HashSet<String> TAG_NAMES = Sets.newHashSet("script");
- public JsTagConcatContentRewriter(ContentRewriterFeature.Factory rewriterFeatureFactory,
- String concatUrlBase) {
+ private final ContentRewriterFeatureFactory rewriterFeatureFactory;
+ private final String concatUrlBase;
+
+ @Inject
+ public JsTagConcatContentRewriter(ContentRewriterFeatureFactory rewriterFeatureFactory,
+ @Named("shindig.content-rewrite.concat-url")String concatUrlBase) {
this.rewriterFeatureFactory = rewriterFeatureFactory;
if (concatUrlBase != null) {
this.concatUrlBase = concatUrlBase;
@@ -58,28 +59,36 @@
public RewriterResults rewrite(HttpRequest request, HttpResponse original,
MutableContent content) {
- // JS Concatenation not supported for HTTP responses at present.
+ if (RewriterUtils.isHtml(request, original)) {
+ ContentRewriterFeature feature = rewriterFeatureFactory.get(request);
+ return rewriteImpl(feature, getJsConcatBase(request.getGadget(), feature),
+ request.getUri(), content);
+ }
return null;
}
public RewriterResults rewrite(Gadget gadget, MutableContent content) {
- ContentRewriterFeature rewriterFeature = rewriterFeatureFactory.get(gadget.getSpec());
- if (!rewriterFeature.isRewriteEnabled() ||
- !rewriterFeature.getIncludedTags().contains("script")) {
- return null;
- }
-
- // Get all the script tags
- List<Node> nodeList =
- HtmlContentRewriter.getElementsByTagNameCaseInsensitive(content.getDocument(), TAG_NAMES);
-
-
- String concatBase = getJsConcatBase(gadget.getSpec(), rewriterFeature);
+ ContentRewriterFeature feature = rewriterFeatureFactory.get(gadget.getSpec());
Uri contentBase = gadget.getSpec().getUrl();
View view = gadget.getCurrentView();
if (view != null && view.getHref() != null) {
contentBase = view.getHref();
}
+ return rewriteImpl(feature, getJsConcatBase(gadget.getSpec().getUrl(), feature), contentBase,
+ content);
+ }
+
+ protected RewriterResults rewriteImpl(ContentRewriterFeature feature, String concatBase,
+ Uri contentBase, MutableContent content) {
+ if (!feature.isRewriteEnabled() ||
+ !feature.getIncludedTags().contains("script") ||
+ content.getDocument() == null) {
+ return null;
+ }
+
+ // Get all the script tags
+ List<Node> nodeList =
+ RewriterUtils.getElementsByTagNameCaseInsensitive(content.getDocument(), TAG_NAMES);
boolean mutated = false;
List<Node> concatenateable = new ArrayList<Node>();
@@ -171,12 +180,11 @@
return concatUris;
}
- String getJsConcatBase(GadgetSpec spec, ContentRewriterFeature rewriterFeature) {
+ String getJsConcatBase(Uri gadgetUri, ContentRewriterFeature rewriterFeature) {
return concatUrlBase +
ProxyBase.REWRITE_MIME_TYPE_PARAM +
"=text/javascript&" +
- "gadget=" +
- Utf8UrlCoder.encode(spec.getUrl().toString()) +
+ ((gadgetUri == null) ? "" : "&gadget=" + Utf8UrlCoder.encode(gadgetUri.toString())) +
"&fp=" +
rewriterFeature.getFingerprint() +
'&';
@@ -189,5 +197,4 @@
}
return n;
}
-
}
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/LinkingTagContentRewriter.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/LinkingTagContentRewriter.java?rev=712000&r1=711999&r2=712000&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/LinkingTagContentRewriter.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/LinkingTagContentRewriter.java Thu Nov 6 14:47:09 2008
@@ -18,80 +18,83 @@
*/
package org.apache.shindig.gadgets.rewrite;
-import org.w3c.dom.Document;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
+import com.google.inject.Inject;
+import com.google.inject.name.Named;
+import org.apache.shindig.common.uri.Uri;
+import org.apache.shindig.gadgets.Gadget;
+import org.apache.shindig.gadgets.http.HttpRequest;
+import org.apache.shindig.gadgets.http.HttpResponse;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
-import org.w3c.dom.traversal.DocumentTraversal;
-import org.w3c.dom.traversal.NodeFilter;
-import org.w3c.dom.traversal.NodeIterator;
import java.net.URI;
-import java.util.*;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+public class LinkingTagContentRewriter implements ContentRewriter {
+
+ private final static Map<String, Set<String>> SUPPORTED_TAG_ATTRS = Maps.newHashMap();
+
+ static {
+ SUPPORTED_TAG_ATTRS.put("img", Sets.newHashSet("src"));
+ SUPPORTED_TAG_ATTRS.put("embed", Sets.newHashSet("src"));
+ SUPPORTED_TAG_ATTRS.put("link", Sets.newHashSet("href"));
+ }
-public class LinkingTagContentRewriter extends HtmlContentRewriter {
- private final LinkRewriter linkRewriter;
- private final Map<String, Set<String>> tagAttributeTargets;
-
- public LinkingTagContentRewriter(LinkRewriter linkRewriter,
- Map<String, Set<String>> attributeTargets) {
- this.linkRewriter = linkRewriter;
- if (attributeTargets != null) {
- this.tagAttributeTargets = attributeTargets;
- } else {
- this.tagAttributeTargets = getDefaultTargets();
- }
+ private final ContentRewriterFeatureFactory rewriterFactory;
+ private String proxyUrl;
+
+ @Inject
+ public LinkingTagContentRewriter(ContentRewriterFeatureFactory rewriterFactory,
+ @Named("shindig.content-rewrite.proxy-url")String proxyUrl) {
+ this.rewriterFactory = rewriterFactory;
+ this.proxyUrl = proxyUrl;
}
- @Override
- protected RewriterResults rewrite(Document root, final URI baseUri) {
- if (linkRewriter == null) {
- // Sanity test.
- return null;
- }
+ public RewriterResults rewrite(HttpRequest request, HttpResponse original, MutableContent content) {
+ return rewriteImpl(rewriterFactory.get(request), content,
+ request.getUri(), request.getGadget());
+ }
+
+ public RewriterResults rewrite(Gadget gadget, MutableContent content) {
+ return rewriteImpl(rewriterFactory.get(gadget.getSpec()), content,
+ gadget.getSpec().getUrl(), gadget.getSpec().getUrl());
+ }
+
+ protected RewriterResults rewriteImpl(ContentRewriterFeature feature, MutableContent content,
+ Uri baseUri, Uri gadgetUri) {
+ if (content.getDocument() == null) return null;
+
boolean mutated = false;
+ LinkRewriter rewriter = createLinkRewriter(gadgetUri.toJavaUri(), feature);
- if (root instanceof DocumentTraversal) {
- NodeIterator nodeIterator = ((DocumentTraversal) root)
- .createNodeIterator(root, NodeFilter.SHOW_ELEMENT,
- new NodeFilter() {
- public short acceptNode(Node n) {
- Set<String> stringSet = tagAttributeTargets.get(n.getNodeName().toUpperCase());
- if (stringSet != null) {
- NamedNodeMap attributes = n.getAttributes();
- // TODO - Check is NodeMap lookup is case insensitive, if so use that
- for (String attribute : stringSet) {
- for (int j = 0; j < attributes.getLength(); j++) {
- Node attributeNode = attributes.item(j);
- if (attributeNode.getNodeName().equalsIgnoreCase(attribute)) {
- attributeNode.setNodeValue(linkRewriter.rewrite(
- attributeNode.getNodeValue(), baseUri));
- }
- }
- }
- return NodeFilter.FILTER_ACCEPT;
- } else {
- return NodeFilter.FILTER_REJECT;
- }
- }
- }, false);
-
- while (nodeIterator.nextNode() != null) {
- mutated= true;
+ Set<String> tags = SUPPORTED_TAG_ATTRS.keySet();
+ tags.retainAll(feature.getIncludedTags());
+ List<Node> nodes = RewriterUtils.getElementsByTagNameCaseInsensitive(
+ content.getDocument(), tags);
+
+ for (Node node : nodes) {
+ NamedNodeMap attributes = node.getAttributes();
+ Set<String> rewriteable = SUPPORTED_TAG_ATTRS.get(node.getNodeName().toLowerCase());
+ for (int i = 0; i < attributes.getLength(); i++) {
+ Node attr = attributes.item(i);
+ if (rewriteable.contains(attr.getNodeName().toLowerCase())) {
+ mutated = true;
+ attr.setNodeValue(rewriter.rewrite(attr.getNodeValue(), baseUri.toJavaUri()));
+ }
}
}
-
if (mutated) {
- MutableContent.notifyEdit(root);
+ MutableContent.notifyEdit(content.getDocument());
}
return RewriterResults.cacheableIndefinitely();
}
- private static Map<String, Set<String>> getDefaultTargets() {
- Map<String, Set<String>> targets = new HashMap<String, Set<String>>();
- targets.put("IMG", new HashSet<String>(Arrays.asList("src")));
- targets.put("EMBED", new HashSet<String>(Arrays.asList("src")));
- targets.put("LINK", new HashSet<String>(Arrays.asList("href")));
- return targets;
+ protected LinkRewriter createLinkRewriter(URI gadgetUri, ContentRewriterFeature feature) {
+ return new ProxyingLinkRewriter(gadgetUri, feature, proxyUrl);
}
}
\ No newline at end of file
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/MutableContent.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/MutableContent.java?rev=712000&r1=711999&r2=712000&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/MutableContent.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/MutableContent.java Thu Nov 6 14:47:09 2008
@@ -91,6 +91,22 @@
}
}
}
+
+
+ /**
+ * Sets the object's document. Note, this operation
+ * may be done at any time, even after a parse tree node has been retrieved
+ * and modified (though a warning will be emitted in this case).
+ * @param doc New document.
+ */
+ public void setDocument(Document doc) {
+ document = doc;
+ if (editListener != null) {
+ editListener.nodeEdited();
+ } else {
+ editListener = new ContentEditListener();
+ }
+ }
/**
* Retrieves the object contents in parse tree form, if a
@@ -136,7 +152,7 @@
}
// Intermediary object tracking edit behavior for the MutableHtmlContent to help maintain
- // state consistency. GadgetHtmlNode calls nodeEdited whenever a modification
+ // state consistency. Modifiers of doucments call nodeEdited whenever a modification
// is made to its original source.
private class ContentEditListener {
private boolean stringEdited = false;
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ProxyingLinkRewriter.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ProxyingLinkRewriter.java?rev=712000&r1=711999&r2=712000&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ProxyingLinkRewriter.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ProxyingLinkRewriter.java Thu Nov 6 14:47:09 2008
@@ -56,8 +56,7 @@
if (rewriterFeature.shouldRewriteURL(uri.toString())) {
String result = prefix
+ Utf8UrlCoder.encode(uri.toString())
- + "&gadget="
- + Utf8UrlCoder.encode(gadgetUri.toString())
+ + ((gadgetUri == null) ? "" : "&gadget=" + Utf8UrlCoder.encode(gadgetUri.toString()))
+ "&fp="
+ rewriterFeature.getFingerprint();
if (rewriterFeature.getExpires() != null) {
Added: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RewriterUtils.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RewriterUtils.java?rev=712000&view=auto
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RewriterUtils.java (added)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/RewriterUtils.java Thu Nov 6 14:47:09 2008
@@ -0,0 +1,78 @@
+/*
+ * 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.rewrite;
+
+import com.google.common.collect.Lists;
+import org.apache.shindig.gadgets.http.HttpRequest;
+import org.apache.shindig.gadgets.http.HttpResponse;
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+import org.w3c.dom.traversal.DocumentTraversal;
+import org.w3c.dom.traversal.NodeFilter;
+import org.w3c.dom.traversal.NodeIterator;
+
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Various utility functions used by rewriters
+ */
+public class RewriterUtils {
+ public static List<Node> getElementsByTagNameCaseInsensitive(Document doc,
+ final Set<String> lowerCaseNames) {
+ final List<Node> result = Lists.newArrayList();
+ NodeIterator nodeIterator = ((DocumentTraversal) doc)
+ .createNodeIterator(doc, NodeFilter.SHOW_ELEMENT,
+ new NodeFilter() {
+ public short acceptNode(Node n) {
+ if (lowerCaseNames.contains(n.getNodeName().toLowerCase())) {
+ return NodeFilter.FILTER_ACCEPT;
+ }
+ return NodeFilter.FILTER_REJECT;
+ }
+ }, false);
+ for (Node n = nodeIterator.nextNode(); n != null ; n = nodeIterator.nextNode()) {
+ result.add(n);
+ }
+ return result;
+ }
+
+ public static boolean isHtml(HttpRequest request, HttpResponse original) {
+ String mimeType = getMimeType(request, original);
+ return mimeType != null && (mimeType.contains("html"));
+ }
+
+ public static boolean isCss(HttpRequest request, HttpResponse original) {
+ String mimeType = getMimeType(request, original);
+ return mimeType != null && mimeType.contains("css");
+ }
+
+ public static boolean isJavascript(HttpRequest request, HttpResponse original) {
+ String mimeType = getMimeType(request, original);
+ return mimeType != null && mimeType.contains("javascript");
+ }
+
+ public static String getMimeType(HttpRequest request, HttpResponse original) {
+ String mimeType = request.getRewriteMimeType();
+ if (mimeType == null) {
+ mimeType = original.getHeader("Content-Type");
+ }
+ return mimeType != null ? mimeType.toLowerCase() : null;
+ }
+}
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/StyleLinksContentRewriter.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/StyleLinksContentRewriter.java?rev=712000&r1=711999&r2=712000&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/StyleLinksContentRewriter.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/StyleLinksContentRewriter.java Thu Nov 6 14:47:09 2008
@@ -19,6 +19,8 @@
package org.apache.shindig.gadgets.rewrite;
import com.google.common.collect.Sets;
+import com.google.inject.Inject;
+import com.google.inject.name.Named;
import org.apache.shindig.common.uri.Uri;
import org.apache.shindig.common.xml.XmlUtil;
import org.apache.shindig.gadgets.Gadget;
@@ -32,31 +34,37 @@
import java.util.List;
public class StyleLinksContentRewriter implements ContentRewriter {
- // TODO: consider providing helper base class for node-visitor content rewriters
- private final ContentRewriterFeature.Factory rewriterFeatureFactory;
- private final LinkRewriter linkRewriter;
+ private final ContentRewriterFeatureFactory rewriterFeatureFactory;
+ private final String proxyUrl;
- public StyleLinksContentRewriter(ContentRewriterFeature.Factory rewriterFeatureFactory,
- LinkRewriter linkRewriter) {
+ @Inject
+ public StyleLinksContentRewriter(ContentRewriterFeatureFactory rewriterFeatureFactory,
+ @Named("shindig.content-rewrite.proxy-url")String proxyUrl) {
this.rewriterFeatureFactory = rewriterFeatureFactory;
- this.linkRewriter = linkRewriter;
+ this.proxyUrl = proxyUrl;
}
public RewriterResults rewrite(HttpRequest request, HttpResponse original,
MutableContent content) {
- String mimeType = HtmlContentRewriter.getMimeType(request, original);
- if (mimeType.contains("html")) {
- rewriteHtml(content.getDocument(), request.getUri().toJavaUri());
- } else if (mimeType.contains("css")) {
- content.setContent(rewriteCss(content.getContent(), request.getUri().toJavaUri()));
+ ContentRewriterFeature rewriterFeature = rewriterFeatureFactory.get(request);
+ if (!rewriterFeature.isRewriteEnabled() ||
+ !rewriterFeature.getIncludedTags().contains("style")) {
+ return null;
+ }
+
+ if (RewriterUtils.isHtml(request, original)) {
+ rewriteHtml(content.getDocument(), request.getUri().toJavaUri(),
+ createLinkRewriter(request.getGadget().toJavaUri(), rewriterFeature));
+ } else if (RewriterUtils.isCss(request, original)) {
+ content.setContent(rewriteCss(content.getContent(), request.getUri().toJavaUri(),
+ createLinkRewriter(request.getGadget().toJavaUri(), rewriterFeature)));
}
return RewriterResults.cacheableIndefinitely();
}
public RewriterResults rewrite(Gadget gadget, MutableContent content) {
ContentRewriterFeature rewriterFeature = rewriterFeatureFactory.get(gadget.getSpec());
- if (linkRewriter == null ||
- !rewriterFeature.isRewriteEnabled() ||
+ if (!rewriterFeature.isRewriteEnabled() ||
!rewriterFeature.getIncludedTags().contains("style")) {
return null;
}
@@ -67,10 +75,15 @@
base = view.getHref();
}
- return rewriteHtml(content.getDocument(), base.toJavaUri());
+ return rewriteHtml(content.getDocument(), base.toJavaUri(),
+ createLinkRewriter(gadget.getSpec().getUrl().toJavaUri(), rewriterFeature));
+ }
+
+ protected LinkRewriter createLinkRewriter(URI gadgetUri, ContentRewriterFeature feature) {
+ return new ProxyingLinkRewriter(gadgetUri, feature, proxyUrl);
}
- private RewriterResults rewriteHtml(Document doc, URI baseUri) {
+ private RewriterResults rewriteHtml(Document doc, URI baseUri, LinkRewriter linkRewriter) {
if (doc == null) {
return null;
}
@@ -85,7 +98,7 @@
// Move all style tags into head
// TODO Convert all @imports into a concatenated link tag
- List<Node> styleTags = HtmlContentRewriter.getElementsByTagNameCaseInsensitive(doc,
+ List<Node> styleTags = RewriterUtils.getElementsByTagNameCaseInsensitive(doc,
Sets.newHashSet("style"));
for (Node styleNode : styleTags) {
mutated = true;
@@ -93,7 +106,7 @@
styleNode.getParentNode().removeChild(styleNode);
head.appendChild(styleNode);
}
- styleNode.setTextContent(rewriteCss(styleNode.getTextContent(), baseUri));
+ styleNode.setTextContent(rewriteCss(styleNode.getTextContent(), baseUri, linkRewriter));
}
if (mutated) {
@@ -102,7 +115,7 @@
return RewriterResults.cacheableIndefinitely();
}
- private String rewriteCss(String styleText, URI baseUri) {
+ private String rewriteCss(String styleText, URI baseUri, LinkRewriter linkRewriter) {
return CssRewriter.rewrite(styleText, baseUri, linkRewriter);
}
}
Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/BaseRewriterTestCase.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/BaseRewriterTestCase.java?rev=712000&r1=711999&r2=712000&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/BaseRewriterTestCase.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/BaseRewriterTestCase.java Thu Nov 6 14:47:09 2008
@@ -17,39 +17,52 @@
*/
package org.apache.shindig.gadgets.rewrite;
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+import org.apache.commons.lang.StringUtils;
import org.apache.shindig.common.uri.Uri;
import org.apache.shindig.gadgets.EasyMockTestCase;
+import org.apache.shindig.gadgets.Gadget;
+import org.apache.shindig.gadgets.GadgetContext;
import org.apache.shindig.gadgets.GadgetException;
+import org.apache.shindig.gadgets.http.HttpRequest;
+import org.apache.shindig.gadgets.parse.GadgetHtmlParser;
+import org.apache.shindig.gadgets.parse.ParseModule;
import org.apache.shindig.gadgets.spec.GadgetSpec;
-import com.google.common.collect.Sets;
-
-import org.apache.commons.lang.StringUtils;
-
+import java.net.URI;
import java.util.Set;
/**
* Base class for testing content rewriting functionality
*/
public abstract class BaseRewriterTestCase extends EasyMockTestCase {
- static final Uri SPEC_URL = Uri.parse("http://example.org/g.xml");
+ public static final Uri SPEC_URL = Uri.parse("http://example.org/dir/g.xml");
+ public static final String DEFAULT_PROXY_BASE = "http://www.test.com/dir/proxy?url=";
+
protected Set<String> tags;
- protected ContentRewriterFeature contentRewriterFeature;
- protected LinkRewriter defaultRewriter;
+ protected ContentRewriterFeature defaultRewriterFeature;
+ protected ContentRewriterFeatureFactory rewriterFeatureFactory;
+ protected LinkRewriter defaultLinkRewriter;
+ protected GadgetHtmlParser parser;
+ protected Injector injector;
@Override
protected void setUp() throws Exception {
super.setUp();
- tags = Sets.newHashSet("embed", "img", "script", "link");
- contentRewriterFeature = new ContentRewriterFeature(getSpecWithoutRewrite(), ".*", "", "HTTP",
- tags);
- defaultRewriter = new ProxyingLinkRewriter(
+ rewriterFeatureFactory = new ContentRewriterFeatureFactory(null, ".*", "", "HTTP",
+ "embed,img,script,link,style");
+ defaultRewriterFeature = rewriterFeatureFactory.getDefault();
+ tags = defaultRewriterFeature.getIncludedTags();
+ defaultLinkRewriter = new ProxyingLinkRewriter(
SPEC_URL.toJavaUri(),
- contentRewriterFeature,
- "http://www.test.com/proxy?url=");
+ defaultRewriterFeature,
+ DEFAULT_PROXY_BASE);
+ injector = Guice.createInjector(new ParseModule());
+ parser = injector.getInstance(GadgetHtmlParser.class);
}
- protected GadgetSpec getSpecWithRewrite(String include, String exclude, String expires,
+ public static GadgetSpec createSpecWithRewrite(String include, String exclude, String expires,
Set<String> tags) throws GadgetException {
String xml = "<Module>" +
"<ModulePrefs title=\"title\">" +
@@ -65,7 +78,7 @@
return new GadgetSpec(SPEC_URL, xml);
}
- protected GadgetSpec getSpecWithoutRewrite() throws GadgetException {
+ public static GadgetSpec createSpecWithoutRewrite() throws GadgetException {
String xml = "<Module>" +
"<ModulePrefs title=\"title\">" +
"</ModulePrefs>" +
@@ -73,4 +86,64 @@
"</Module>";
return new GadgetSpec(SPEC_URL, xml);
}
+
+ ContentRewriterFeatureFactory mockContentRewriterFeatureFactory(
+ ContentRewriterFeature feature) {
+ return new FakeRewriterFeatureFactory(feature);
+ }
+
+ String rewriteHelper(ContentRewriter rewriter, String s)
+ throws Exception {
+ MutableContent mc = rewriteContent(rewriter, s);
+ String rewrittenContent = mc.getContent();
+
+ // Strip around the HTML tags for convenience
+ int htmlTagIndex = rewrittenContent.indexOf("<HTML>");
+ if (htmlTagIndex != -1) {
+ return rewrittenContent.substring(htmlTagIndex + 6,
+ rewrittenContent.lastIndexOf("</HTML>"));
+ }
+ return rewrittenContent;
+ }
+
+ MutableContent rewriteContent(ContentRewriter rewriter, String s)
+ throws Exception {
+ MutableContent mc = new MutableContent(parser);
+ mc.setContent(s);
+
+ GadgetSpec spec = new GadgetSpec(SPEC_URL,
+ "<Module><ModulePrefs title=''/><Content><![CDATA[" + s + "]]></Content></Module>");
+
+ GadgetContext context = new GadgetContext() {
+ @Override
+ public URI getUrl() {
+ return SPEC_URL.toJavaUri();
+ }
+ };
+
+ Gadget gadget = new Gadget()
+ .setContext(context)
+ .setSpec(spec);
+ rewriter.rewrite(gadget, mc);
+ return mc;
+ }
+
+ private static class FakeRewriterFeatureFactory extends ContentRewriterFeatureFactory {
+ private final ContentRewriterFeature feature;
+
+ public FakeRewriterFeatureFactory(ContentRewriterFeature feature) {
+ super(null, ".*", "", "HTTP", "");
+ this.feature = feature;
+ }
+
+ @Override
+ public ContentRewriterFeature get(GadgetSpec spec) {
+ return feature;
+ }
+
+ @Override
+ public ContentRewriterFeature get(HttpRequest request) {
+ return feature;
+ }
+ }
}
Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeatureTestCase.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeatureTestCase.java?rev=712000&r1=711999&r2=712000&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeatureTestCase.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeatureTestCase.java Thu Nov 6 14:47:09 2008
@@ -27,89 +27,89 @@
public class ContentRewriterFeatureTestCase extends BaseRewriterTestCase {
public void testContainerDefaultIncludeAll() throws Exception {
- contentRewriterFeature = new ContentRewriterFeature(getSpecWithoutRewrite(), ".*", "", "0", tags);
- assertTrue(contentRewriterFeature.isRewriteEnabled());
- assertTrue(contentRewriterFeature.shouldRewriteURL("http://www.test.com"));
+ defaultRewriterFeature = new ContentRewriterFeature(createSpecWithoutRewrite(), ".*", "", "0", tags);
+ assertTrue(defaultRewriterFeature.isRewriteEnabled());
+ assertTrue(defaultRewriterFeature.shouldRewriteURL("http://www.test.com"));
}
public void testContainerDefaultIncludeNone() throws Exception {
- contentRewriterFeature = new ContentRewriterFeature(getSpecWithoutRewrite(), "", ".*", "0", tags);
- assertFalse(contentRewriterFeature.isRewriteEnabled());
- assertFalse(contentRewriterFeature.shouldRewriteURL("http://www.test.com"));
+ defaultRewriterFeature = new ContentRewriterFeature(createSpecWithoutRewrite(), "", ".*", "0", tags);
+ assertFalse(defaultRewriterFeature.isRewriteEnabled());
+ assertFalse(defaultRewriterFeature.shouldRewriteURL("http://www.test.com"));
}
public void testContainerDefaultExcludeOverridesInclude() throws Exception {
- contentRewriterFeature = new ContentRewriterFeature(getSpecWithoutRewrite(), ".*", ".*", "0",
+ defaultRewriterFeature = new ContentRewriterFeature(createSpecWithoutRewrite(), ".*", ".*", "0",
tags);
- assertFalse(contentRewriterFeature.isRewriteEnabled());
- assertFalse(contentRewriterFeature.shouldRewriteURL("http://www.test.com"));
+ assertFalse(defaultRewriterFeature.isRewriteEnabled());
+ assertFalse(defaultRewriterFeature.shouldRewriteURL("http://www.test.com"));
}
public void testSpecExcludeOverridesContainerDefaultInclude() throws Exception {
- contentRewriterFeature = new ContentRewriterFeature(getSpecWithRewrite("", ".*", "0", tags), ".*",
+ defaultRewriterFeature = new ContentRewriterFeature(createSpecWithRewrite("", ".*", "0", tags), ".*",
"", "0", tags);
- assertFalse(contentRewriterFeature.isRewriteEnabled());
- assertFalse(contentRewriterFeature.shouldRewriteURL("http://www.test.com"));
+ assertFalse(defaultRewriterFeature.isRewriteEnabled());
+ assertFalse(defaultRewriterFeature.shouldRewriteURL("http://www.test.com"));
}
public void testSpecIncludeOverridesContainerDefaultExclude() throws Exception {
- contentRewriterFeature = new ContentRewriterFeature(getSpecWithRewrite(".*", "", "0", tags), "",
+ defaultRewriterFeature = new ContentRewriterFeature(createSpecWithRewrite(".*", "", "0", tags), "",
".*", "0", tags);
- assertTrue(contentRewriterFeature.isRewriteEnabled());
- assertTrue(contentRewriterFeature.shouldRewriteURL("http://www.test.com"));
+ assertTrue(defaultRewriterFeature.isRewriteEnabled());
+ assertTrue(defaultRewriterFeature.shouldRewriteURL("http://www.test.com"));
}
public void testExcludeOverridesInclude() throws Exception {
- contentRewriterFeature = new ContentRewriterFeature(
- getSpecWithRewrite("test\\.com", "test", "0", tags), "", "", "0", tags);
- assertTrue(contentRewriterFeature.isRewriteEnabled());
- assertFalse(contentRewriterFeature.shouldRewriteURL("http://www.test.com"));
+ defaultRewriterFeature = new ContentRewriterFeature(
+ createSpecWithRewrite("test\\.com", "test", "0", tags), "", "", "0", tags);
+ assertTrue(defaultRewriterFeature.isRewriteEnabled());
+ assertFalse(defaultRewriterFeature.shouldRewriteURL("http://www.test.com"));
}
public void testIncludeOnlyMatch() throws Exception {
- contentRewriterFeature = new ContentRewriterFeature(
- getSpecWithRewrite("test\\.com", "testx", "0", tags), "", "", "0", tags);
- assertTrue(contentRewriterFeature.isRewriteEnabled());
- assertTrue(contentRewriterFeature.shouldRewriteURL("http://www.test.com"));
- assertFalse(contentRewriterFeature.shouldRewriteURL("http://testx.test.com"));
+ defaultRewriterFeature = new ContentRewriterFeature(
+ createSpecWithRewrite("test\\.com", "testx", "0", tags), "", "", "0", tags);
+ assertTrue(defaultRewriterFeature.isRewriteEnabled());
+ assertTrue(defaultRewriterFeature.shouldRewriteURL("http://www.test.com"));
+ assertFalse(defaultRewriterFeature.shouldRewriteURL("http://testx.test.com"));
}
public void testTagRewrite() throws Exception {
- contentRewriterFeature = new ContentRewriterFeature(
- getSpecWithRewrite("test\\.com", "testx", "0", tags), "", "", "0", tags);
- assertFalse(contentRewriterFeature.shouldRewriteTag("IFRAME"));
- assertTrue(contentRewriterFeature.shouldRewriteTag("img"));
- assertTrue(contentRewriterFeature.shouldRewriteTag("ScripT"));
+ defaultRewriterFeature = new ContentRewriterFeature(
+ createSpecWithRewrite("test\\.com", "testx", "0", tags), "", "", "0", tags);
+ assertFalse(defaultRewriterFeature.shouldRewriteTag("IFRAME"));
+ assertTrue(defaultRewriterFeature.shouldRewriteTag("img"));
+ assertTrue(defaultRewriterFeature.shouldRewriteTag("ScripT"));
}
public void testOverrideTagRewrite() throws Exception {
Set<String> newTags = Sets.newHashSet("iframe");
- contentRewriterFeature = new ContentRewriterFeature(
- getSpecWithRewrite("test\\.com", "testx", "0", newTags), "", "", "0", tags);
- assertTrue(contentRewriterFeature.shouldRewriteTag("IFRAME"));
- assertFalse(contentRewriterFeature.shouldRewriteTag("img"));
- assertFalse(contentRewriterFeature.shouldRewriteTag("ScripT"));
- assertFalse(contentRewriterFeature.shouldRewriteTag("link"));
+ defaultRewriterFeature = new ContentRewriterFeature(
+ createSpecWithRewrite("test\\.com", "testx", "0", newTags), "", "", "0", tags);
+ assertTrue(defaultRewriterFeature.shouldRewriteTag("IFRAME"));
+ assertFalse(defaultRewriterFeature.shouldRewriteTag("img"));
+ assertFalse(defaultRewriterFeature.shouldRewriteTag("ScripT"));
+ assertFalse(defaultRewriterFeature.shouldRewriteTag("link"));
}
public void testExpiresTimeParse() throws Exception {
- contentRewriterFeature = new ContentRewriterFeature(
- getSpecWithRewrite("test\\.com", "testx", "12345", tags), "", "", "0", tags);
- assertNotNull(contentRewriterFeature.getExpires());
- assertNotNull(contentRewriterFeature.getExpires() == 12345);
+ defaultRewriterFeature = new ContentRewriterFeature(
+ createSpecWithRewrite("test\\.com", "testx", "12345", tags), "", "", "0", tags);
+ assertNotNull(defaultRewriterFeature.getExpires());
+ assertNotNull(defaultRewriterFeature.getExpires() == 12345);
}
public void testExpiresHTTPParse() throws Exception {
- contentRewriterFeature = new ContentRewriterFeature(
- getSpecWithRewrite("test\\.com", "testx", "htTp ", tags), "", "", "12345", tags);
- assertNull(contentRewriterFeature.getExpires());
+ defaultRewriterFeature = new ContentRewriterFeature(
+ createSpecWithRewrite("test\\.com", "testx", "htTp ", tags), "", "", "12345", tags);
+ assertNull(defaultRewriterFeature.getExpires());
}
public void testExpiresInvalidParse() throws Exception {
- contentRewriterFeature = new ContentRewriterFeature(
- getSpecWithRewrite("test\\.com", "testx", "junk", tags), "", "", "12345", tags);
- assertNotNull(contentRewriterFeature.getExpires());
- assertNotNull(contentRewriterFeature.getExpires() == 12345);
+ defaultRewriterFeature = new ContentRewriterFeature(
+ createSpecWithRewrite("test\\.com", "testx", "junk", tags), "", "", "12345", tags);
+ assertNotNull(defaultRewriterFeature.getExpires());
+ assertNotNull(defaultRewriterFeature.getExpires() == 12345);
}
}
Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/CssRewriterTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/CssRewriterTest.java?rev=712000&r1=711999&r2=712000&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/CssRewriterTest.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/CssRewriterTest.java Thu Nov 6 14:47:09 2008
@@ -38,7 +38,7 @@
}
private void validateRewritten(String content, String expected) {
- validateRewritten(content, dummyUri, defaultRewriter, expected);
+ validateRewritten(content, dummyUri, defaultLinkRewriter, expected);
}
public void testUrlDeclarationRewrite() {
@@ -46,8 +46,8 @@
"div {list-style-image:url('http://a.b.com/bullet.gif');list-style-position:outside;margin:5px;padding:0}\n" +
".someid {background-image:url(http://a.b.com/bigimg.png);float:right;width:165px;height:23px;margin-top:4px;margin-left:5px}";
String rewritten =
- "div {list-style-image:url(\"http://www.test.com/proxy?url=http%3A%2F%2Fa.b.com%2Fbullet.gif&gadget=http%3A%2F%2Fexample.org%2Fg.xml&fp=-840722081\");list-style-position:outside;margin:5px;padding:0}\n" +
- ".someid {background-image:url(\"http://www.test.com/proxy?url=http%3A%2F%2Fa.b.com%2Fbigimg.png&gadget=http%3A%2F%2Fexample.org%2Fg.xml&fp=-840722081\");float:right;width:165px;height:23px;margin-top:4px;margin-left:5px}";
+ "div {list-style-image:url(\"http://www.test.com/dir/proxy?url=http%3A%2F%2Fa.b.com%2Fbullet.gif&gadget=http%3A%2F%2Fexample.org%2Fdir%2Fg.xml&fp=-182800334\");list-style-position:outside;margin:5px;padding:0}\n" +
+ ".someid {background-image:url(\"http://www.test.com/dir/proxy?url=http%3A%2F%2Fa.b.com%2Fbigimg.png&gadget=http%3A%2F%2Fexample.org%2Fdir%2Fg.xml&fp=-182800334\");float:right;width:165px;height:23px;margin-top:4px;margin-left:5px}";
validateRewritten(original, rewritten);
}
Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/JsTagConcatContentRewriterTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/JsTagConcatContentRewriterTest.java?rev=712000&r1=711999&r2=712000&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/JsTagConcatContentRewriterTest.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/JsTagConcatContentRewriterTest.java Thu Nov 6 14:47:09 2008
@@ -18,34 +18,15 @@
*/
package org.apache.shindig.gadgets.rewrite;
-import com.google.inject.Guice;
-import com.google.inject.Injector;
-import org.apache.shindig.common.uri.Uri;
-import org.apache.shindig.gadgets.parse.GadgetHtmlParser;
-import org.apache.shindig.gadgets.parse.ParseModule;
-import org.apache.shindig.gadgets.spec.GadgetSpec;
-import static org.easymock.EasyMock.expect;
-import org.easymock.classextension.EasyMock;
-import static org.easymock.classextension.EasyMock.replay;
-import org.w3c.dom.Document;
-
-public class JsTagConcatContentRewriterTest extends FeatureBasedRewriterTestBase {
+public class JsTagConcatContentRewriterTest extends BaseRewriterTestCase {
private JsTagConcatContentRewriter rewriter;
private String concatBase;
- private GadgetHtmlParser htmlParser;
@Override
protected void setUp() throws Exception {
super.setUp();
- ContentRewriterFeature jsFeature = makeFeature("script");
- Injector injector = Guice.createInjector(new ParseModule());
- htmlParser = injector.getInstance(GadgetHtmlParser.class);
- ContentRewriterFeature.Factory factory = mockContentRewriterFeatureFactory(jsFeature);
- rewriter = new JsTagConcatContentRewriter(factory, null);
- GadgetSpec spec = EasyMock.createNiceMock(GadgetSpec.class);
- expect(spec.getUrl()).andReturn(Uri.fromJavaUri(baseUri)).anyTimes();
- replay(spec);
- concatBase = rewriter.getJsConcatBase(spec, jsFeature);
+ rewriter = new JsTagConcatContentRewriter(rewriterFeatureFactory, DEFAULT_PROXY_BASE);
+ concatBase = rewriter.getJsConcatBase(SPEC_URL, defaultRewriterFeature);
}
public void testJSMergePreserveNoExternal() throws Exception {
@@ -53,16 +34,14 @@
+ "doSomething\n"
+ "</script>";
- Document document = htmlParser.parseDom(s);
- String rewritten = rewriteHelper(rewriter, s, document);
+ String rewritten = rewriteHelper(rewriter, s);
assertEquals(rewritten, s);
}
public void testJSMergePreserveNoScript() throws Exception {
String s
= "<DIV id=\"test\">ceci ne pas une script</DIV>";
- Document document = htmlParser.parseDom(s);
- String rewritten = rewriteHelper(rewriter, s, document);
+ String rewritten = rewriteHelper(rewriter, s);
assertEquals(rewritten, s);
}
@@ -70,16 +49,14 @@
String s = "<script>" +
"<!--\ndoSomething\n-->" +
"</script>";
- Document document = htmlParser.parseDom(s);
- String rewritten = rewriteHelper(rewriter, s, document);
+ String rewritten = rewriteHelper(rewriter, s);
assertEquals(rewritten, s);
}
public void testJSMergeSingleScriptReWrite() throws Exception {
String s = "<script src=\"http://a.b.com/1.js\"></script>";
String expected = "<script src=\"" + concatBase + "1=http%3A%2F%2Fa.b.com%2F1.js\"></script>";
- Document document = htmlParser.parseDom(s);
- String rewritten = rewriteHelper(rewriter, s, document);
+ String rewritten = rewriteHelper(rewriter, s);
assertEquals(rewritten, expected);
}
@@ -88,8 +65,7 @@
+ "<script src=\"http://a.b.com/2.js\"></script>";
String expected
= "<script src=\"" + concatBase + "1=http%3A%2F%2Fa.b.com%2F1.js&2=http%3A%2F%2Fa.b.com%2F2.js\"></script>";
- Document document = htmlParser.parseDom(s);
- String rewritten = rewriteHelper(rewriter, s, document);
+ String rewritten = rewriteHelper(rewriter, s);
assertEquals(rewritten, expected);
}
@@ -109,8 +85,7 @@
+ "<script>\n"
+ "doSomething\n"
+ "</script>";
- Document document = htmlParser.parseDom(s);
- String rewritten = rewriteHelper(rewriter, s, document);
+ String rewritten = rewriteHelper(rewriter, s);
assertEquals(rewritten, expected);
}
@@ -124,26 +99,23 @@
"<script src=\"" + concatBase + "1=http%3A%2F%2Fa.b.com%2F1.js&2=http%3A%2F%2Fa.b.com%2F2.js\"></script>" +
"<script><!-- doSomething --></script>" +
"<script src=\"" + concatBase + "1=http%3A%2F%2Fa.b.com%2F3.js&2=http%3A%2F%2Fa.b.com%2F4.js\"></script>";
- Document document = htmlParser.parseDom(s);
- String rewritten = rewriteHelper(rewriter, s, document);
+ String rewritten = rewriteHelper(rewriter, s);
assertEquals(expected, rewritten);
}
public void testJSMergeDerelativizeHostRelative() throws Exception {
String s = "<script src=\"/1.js\"></script>";
String expected
- = "<script src=\"" + concatBase + "1=http%3A%2F%2Fgadget.org%2F1.js\"></script>";
- Document document = htmlParser.parseDom(s);
- String rewritten = rewriteHelper(rewriter, s, document);
+ = "<script src=\"" + concatBase + "1=http%3A%2F%2Fexample.org%2F1.js\"></script>";
+ String rewritten = rewriteHelper(rewriter, s);
assertEquals(rewritten, expected);
}
public void testJSMergeDerelativizePathRelative() throws Exception {
String s = "<script src=\"1.js\"></script>";
String expected
- = "<script src=\"" + concatBase + "1=http%3A%2F%2Fgadget.org%2Fdir%2F1.js\"></script>";
- Document document = htmlParser.parseDom(s);
- String rewritten = rewriteHelper(rewriter, s, document);
+ = "<script src=\"" + concatBase + "1=http%3A%2F%2Fexample.org%2Fdir%2F1.js\"></script>";
+ String rewritten = rewriteHelper(rewriter, s);
assertEquals(rewritten, expected);
}
}
Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/LexerVsDomRewriteBenchmark.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/LexerVsDomRewriteBenchmark.java?rev=712000&r1=711999&r2=712000&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/LexerVsDomRewriteBenchmark.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/LexerVsDomRewriteBenchmark.java Thu Nov 6 14:47:09 2008
@@ -18,22 +18,28 @@
*/
package org.apache.shindig.gadgets.rewrite;
+import com.google.inject.Guice;
+import com.google.inject.Injector;
import org.apache.commons.io.IOUtils;
+import org.apache.shindig.common.PropertiesModule;
+import org.apache.shindig.common.uri.Uri;
+import org.apache.shindig.gadgets.DefaultGuiceModule;
+import org.apache.shindig.gadgets.Gadget;
+import org.apache.shindig.gadgets.GadgetContext;
+import org.apache.shindig.gadgets.oauth.OAuthModule;
import org.apache.shindig.gadgets.parse.GadgetHtmlParser;
-import org.apache.shindig.gadgets.parse.HtmlSerializer;
import org.apache.shindig.gadgets.parse.ParseModule;
import org.apache.shindig.gadgets.parse.caja.CajaHtmlParser;
import org.apache.shindig.gadgets.parse.nekohtml.NekoHtmlParser;
import org.apache.shindig.gadgets.parse.nekohtml.NekoSimplifiedHtmlParser;
-import org.apache.shindig.gadgets.rewrite.lexer.HtmlRewriter;
+import org.apache.shindig.gadgets.rewrite.lexer.DefaultContentRewriter;
import org.apache.shindig.gadgets.rewrite.lexer.HtmlTagTransformer;
-import org.apache.shindig.gadgets.rewrite.lexer.LinkingTagRewriter;
+import org.apache.shindig.gadgets.spec.GadgetSpec;
import org.w3c.dom.Document;
import java.io.File;
import java.io.FileInputStream;
import java.net.URI;
-import java.util.HashMap;
import java.util.Map;
/**
@@ -55,10 +61,14 @@
// Caja lexer
private Map<String, HtmlTagTransformer> defaultTransformerMap;
- private URI dummyUri;
- private LinkingTagContentRewriter domRewriter;
+ private LinkingTagContentRewriter linkRewriter;
+ private JsTagConcatContentRewriter jsConcatRewriter;
+ private StyleLinksContentRewriter styleLinksRewriter;
private boolean warmup;
+ private ContentRewriterFeatureFactory factory;
+ private DefaultContentRewriter lexerRewriter;
+ private Gadget gadget;
private LexerVsDomRewriteBenchmark(String file, int numRuns) throws Exception {
File inputFile = new File(file);
@@ -67,27 +77,35 @@
System.exit(1);
}
- LinkRewriter linkRewriter = new LinkRewriter() {
- public String rewrite(String link, URI context) {
- return link;
- }
- };
+ Injector injector = Guice.createInjector(new PropertiesModule(), new OAuthModule(),
+ new DefaultGuiceModule());
// Lexer setup
- dummyUri = new URI("http://www.w3c.org");
- URI relativeBase = new URI("http://a.b.com/");
- LinkingTagRewriter lexerRewriter = new LinkingTagRewriter(
- linkRewriter, new URI("http://a.b.com/"));
- defaultTransformerMap = new HashMap<String, HtmlTagTransformer>();
- for (String tag : lexerRewriter.getSupportedTags()) {
- defaultTransformerMap .put(tag, lexerRewriter);
- }
+ lexerRewriter = injector.getInstance(DefaultContentRewriter.class);
// End lexer setup
// DOM setup
- domRewriter = new LinkingTagContentRewriter(linkRewriter, null);
+ this.linkRewriter = injector.getInstance(LinkingTagContentRewriter.class);
+ this.jsConcatRewriter = injector.getInstance(JsTagConcatContentRewriter.class);
+ this.styleLinksRewriter = injector.getInstance(StyleLinksContentRewriter.class);
+ factory = injector.getInstance(ContentRewriterFeatureFactory.class);
// End DOM setup
+ final Uri url = Uri.parse("http://www.example.org/dummy.xml");
+ GadgetSpec spec = new GadgetSpec(url,
+ "<Module><ModulePrefs title=''/><Content><![CDATA[]]></Content></Module>");
+
+ GadgetContext context = new GadgetContext() {
+ @Override
+ public URI getUrl() {
+ return url.toJavaUri();
+ }
+ };
+
+ gadget = new Gadget()
+ .setContext(context)
+ .setSpec(spec);
+
content = new String(IOUtils.toByteArray(new FileInputStream(file)));
this.numRuns = numRuns;
warmup = true;
@@ -95,6 +113,7 @@
//run(cajaParser);
run(nekoParser);
run(nekoSimpleParser);
+ runNoParse(nekoSimpleParser);
Thread.sleep(5000L);
warmup = false;
System.out.println("Lexer------");
@@ -105,6 +124,10 @@
run(nekoParser);
System.out.println("NekoSimple-------");
run(nekoSimpleParser);
+ System.out.println("No-Parse rewrite full DOM-------");
+ runNoParse(nekoParser);
+ System.out.println("No-Parse rewrite simple DOM-------");
+ runNoParse(nekoSimpleParser);
}
private void output(String content) {
@@ -116,7 +139,10 @@
private void runLexer() throws Exception {
long startTime = System.currentTimeMillis();
for (int i = 0; i < numRuns; i++) {
- HtmlRewriter.rewrite(content, dummyUri, defaultTransformerMap);
+ MutableContent mc = new MutableContent(null);
+ mc.setContent(content);
+ lexerRewriter.rewrite(gadget, mc);
+ mc.getContent();
}
long time = System.currentTimeMillis() - startTime;
output("Lexer Rewrite [" + time + " ms total: " +
@@ -126,9 +152,12 @@
private void run(GadgetHtmlParser parser) throws Exception {
long startTime = System.currentTimeMillis();
for (int i = 0; i < numRuns; i++) {
- Document document = parser.parseDom(content);
- domRewriter.rewrite(document, dummyUri);
- HtmlSerializer.serialize(document);
+ MutableContent mc = new MutableContent(parser);
+ mc.setContent(content);
+ linkRewriter.rewrite(gadget, mc);
+ jsConcatRewriter.rewrite(gadget, mc);
+ styleLinksRewriter.rewrite(gadget, mc);
+ mc.getContent();
}
long time = System.currentTimeMillis() - startTime;
output("DOM Rewrite [" + time + " ms total: " +
@@ -136,6 +165,23 @@
}
+ private void runNoParse(GadgetHtmlParser parser) throws Exception {
+ Document doc = parser.parseDom(content);
+ long startTime = System.currentTimeMillis();
+ for (int i = 0; i < numRuns; i++) {
+ MutableContent mc = new MutableContent(parser);
+ mc.setDocument((Document)doc.cloneNode(true));
+ linkRewriter.rewrite(gadget, mc);
+ jsConcatRewriter.rewrite(gadget, mc);
+ styleLinksRewriter.rewrite(gadget, mc);
+ mc.getContent();
+ }
+ long time = System.currentTimeMillis() - startTime;
+ output("DOM no-parse Rewrite [" + time + " ms total: " +
+ ((double)time)/numRuns + "ms/run]");
+
+ }
+
public static void main(String[] args) {
// Test can be run as standalone program to test out serialization and parsing
Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/LinkingTagContentRewriterTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/LinkingTagContentRewriterTest.java?rev=712000&r1=711999&r2=712000&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/LinkingTagContentRewriterTest.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/LinkingTagContentRewriterTest.java Thu Nov 6 14:47:09 2008
@@ -18,32 +18,27 @@
*/
package org.apache.shindig.gadgets.rewrite;
-import com.google.inject.Guice;
-import com.google.inject.Injector;
-import org.apache.shindig.gadgets.parse.GadgetHtmlParser;
-import org.apache.shindig.gadgets.parse.ParseModule;
-import org.w3c.dom.Document;
-
import java.net.URI;
-public class LinkingTagContentRewriterTest extends FeatureBasedRewriterTestBase {
+public class LinkingTagContentRewriterTest extends BaseRewriterTestCase {
private LinkingTagContentRewriter rewriter;
- private GadgetHtmlParser htmlParser;
private static final String LINK_PREFIX = "px-";
@Override
protected void setUp() throws Exception {
super.setUp();
- Injector injector = Guice.createInjector(new ParseModule());
- htmlParser = injector.getInstance(GadgetHtmlParser.class);
- LinkRewriter pfxLinkRewriter = new LinkRewriter() {
- public String rewrite(String uri, URI context) {
- // Just prefixes with LINK_PREFIX
- return LINK_PREFIX + uri;
+ rewriter = new LinkingTagContentRewriter(rewriterFeatureFactory, DEFAULT_PROXY_BASE) {
+ @Override
+ protected LinkRewriter createLinkRewriter(URI gadgetUri, ContentRewriterFeature feature) {
+ return new LinkRewriter() {
+ public String rewrite(String uri, URI context) {
+ // Just prefixes with LINK_PREFIX
+ return LINK_PREFIX + uri;
+ }
+ };
}
};
- rewriter = new LinkingTagContentRewriter(pfxLinkRewriter, null);
}
public void testLinkingTagStandardRewrite() throws Exception {
@@ -55,21 +50,14 @@
+ "<img src=\"" + LINK_PREFIX + "http://a.b.com/img2.gif\">"
+ "<embed src=\"" + LINK_PREFIX + "http://a.b.com/some.mov\"></embed>"
+ "<link href=\"" + LINK_PREFIX + "http://a.b.com/link.html\">";
- Document document = htmlParser.parseDom(s);
- String rewritten = rewriteHelper(rewriter, s, document);
+ String rewritten = rewriteHelper(rewriter, s);
assertEquals(rewritten, expected);
}
+
- public void testLinkingTagIgnoredWithNoRewriter() throws Exception {
- String s = "<img src=\"http://a.b.com/img.gif\"></img>";
- Document document = htmlParser.parseDom(s);
- String rewritten = rewriteHelper(new LinkingTagContentRewriter(null, null), s, document);
- assertEquals(s, rewritten);
- }
-
- public void testLinkingTagIgnoredWithBadParse() throws Exception {
+ public void testLinkingTagWithBadParse() throws Exception {
String s = "<img src=\"http://a.b.com/img.gif></img>";
- String rewritten = rewriteHelper(rewriter, s, null);
+ String rewritten = rewriteHelper(rewriter, s);
assertEquals(s, rewritten); // null = couldn't parse
}
}
Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ProxyingLinkRewriterTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ProxyingLinkRewriterTest.java?rev=712000&r1=711999&r2=712000&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ProxyingLinkRewriterTest.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ProxyingLinkRewriterTest.java Thu Nov 6 14:47:09 2008
@@ -25,43 +25,43 @@
public class ProxyingLinkRewriterTest extends BaseRewriterTestCase {
private String rewrite(String uri) {
- return defaultRewriter.rewrite(uri, SPEC_URL.toJavaUri());
+ return defaultLinkRewriter.rewrite(uri, SPEC_URL.toJavaUri());
}
public void testAbsoluteRewrite() {
String val = "http://a.b.com";
- assertEquals("http://www.test.com/proxy?url=http%3A%2F%2Fa.b.com&gadget=http%3A%2F%2Fexample.org%2Fg.xml&fp=-840722081",
+ assertEquals("http://www.test.com/dir/proxy?url=http%3A%2F%2Fa.b.com&gadget=http%3A%2F%2Fexample.org%2Fdir%2Fg.xml&fp=-182800334",
rewrite(val));
}
public void testHostRelativeRewrite() {
String val = "/somepath/test.gif";
- assertEquals("http://www.test.com/proxy?url=http%3A%2F%2Fexample.org%2Fsomepath%2Ftest.gif&gadget=http%3A%2F%2Fexample.org%2Fg.xml&fp=-840722081",
+ assertEquals("http://www.test.com/dir/proxy?url=http%3A%2F%2Fexample.org%2Fsomepath%2Ftest.gif&gadget=http%3A%2F%2Fexample.org%2Fdir%2Fg.xml&fp=-182800334",
rewrite(val));
}
public void testPathRelativeRewrite() {
String val = "test.gif";
- assertEquals("http://www.test.com/proxy?url=http%3A%2F%2Fexample.org%2Ftest.gif&gadget=http%3A%2F%2Fexample.org%2Fg.xml&fp=-840722081",
+ assertEquals("http://www.test.com/dir/proxy?url=http%3A%2F%2Fexample.org%2Fdir%2Ftest.gif&gadget=http%3A%2F%2Fexample.org%2Fdir%2Fg.xml&fp=-182800334",
rewrite(val));
}
public void testLeadingAndTrailingSpace() {
String val = " test.gif ";
- assertEquals("http://www.test.com/proxy?url=http%3A%2F%2Fexample.org%2Ftest.gif&gadget=http%3A%2F%2Fexample.org%2Fg.xml&fp=-840722081",
+ assertEquals("http://www.test.com/dir/proxy?url=http%3A%2F%2Fexample.org%2Fdir%2Ftest.gif&gadget=http%3A%2F%2Fexample.org%2Fdir%2Fg.xml&fp=-182800334",
rewrite(val));
}
public void testWithRefresh() throws Exception {
ContentRewriterFeature contentRewriterFeature = new ContentRewriterFeature(
- getSpecWithoutRewrite(), ".*", "", "86400",
- Sets.newHashSet("embed", "img", "script", "link"));
+ createSpecWithoutRewrite(), ".*", "", "86400",
+ Sets.newHashSet("embed", "img", "script", "link", "style"));
ProxyingLinkRewriter rewriter = new ProxyingLinkRewriter(
SPEC_URL.toJavaUri(),
contentRewriterFeature,
- "http://www.test.com/proxy?url=");
+ DEFAULT_PROXY_BASE);
String val = " test.gif ";
- assertEquals("http://www.test.com/proxy?url=http%3A%2F%2Fexample.org%2Ftest.gif&gadget=http%3A%2F%2Fexample.org%2Fg.xml&fp=-840722081&refresh=86400",
+ assertEquals("http://www.test.com/dir/proxy?url=http%3A%2F%2Fexample.org%2Fdir%2Ftest.gif&gadget=http%3A%2F%2Fexample.org%2Fdir%2Fg.xml&fp=-182800334&refresh=86400",
rewriter.rewrite(val, SPEC_URL.toJavaUri()));
}
Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/StyleLinksContentRewriterTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/StyleLinksContentRewriterTest.java?rev=712000&r1=711999&r2=712000&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/StyleLinksContentRewriterTest.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/StyleLinksContentRewriterTest.java Thu Nov 6 14:47:09 2008
@@ -19,37 +19,27 @@
package org.apache.shindig.gadgets.rewrite;
import com.google.common.collect.Sets;
-import com.google.inject.Guice;
-import com.google.inject.Injector;
-import org.apache.shindig.gadgets.parse.GadgetHtmlParser;
-import org.apache.shindig.gadgets.parse.ParseModule;
-import org.w3c.dom.Document;
import java.net.URI;
-public class StyleLinksContentRewriterTest extends FeatureBasedRewriterTestBase {
- private LinkRewriter pfxLinkRewriter;
- private ContentRewriterFeature styleFeature;
+public class StyleLinksContentRewriterTest extends BaseRewriterTestCase {
private StyleLinksContentRewriter rewriter;
private static final String LINK_PREFIX = "px-";
- private GadgetHtmlParser htmlParser;
-
@Override
protected void setUp() throws Exception {
super.setUp();
- Injector injector = Guice.createInjector(new ParseModule());
- htmlParser = injector.getInstance(GadgetHtmlParser.class);
- pfxLinkRewriter = new LinkRewriter() {
- public String rewrite(String uri, URI context) {
- // Just prefixes with LINK_PREFIX
- return LINK_PREFIX + uri;
+ rewriter = new StyleLinksContentRewriter(rewriterFeatureFactory, DEFAULT_PROXY_BASE) {
+ protected LinkRewriter createLinkRewriter(URI gadgetUri, ContentRewriterFeature feature) {
+ return new LinkRewriter() {
+ public String rewrite(String uri, URI context) {
+ // Just prefixes with LINK_PREFIX
+ return LINK_PREFIX + uri;
+ }
+ };
}
};
- styleFeature = makeFeature("style");
- ContentRewriterFeature.Factory factory = mockContentRewriterFeatureFactory(styleFeature);
- rewriter = new StyleLinksContentRewriter(factory, pfxLinkRewriter);
}
public void testStyleTagRewrites() throws Exception {
@@ -58,46 +48,27 @@
".someid {background-image:url(http://a.b.com/bigimg.png);float:right;width:165px;height:23px;margin-top:4px;margin-left:5px}";
String s = "<style>" + css + "</style>";
- Document document = htmlParser.parseDom(s);
-
String rewritten =
"div {list-style-image:url(\"" + LINK_PREFIX + "http://a.b.com/bullet.gif\");list-style-position:outside;margin:5px;padding:0}\n" +
".someid {background-image:url(\"" + LINK_PREFIX + "http://a.b.com/bigimg.png\");float:right;width:165px;height:23px;margin-top:4px;margin-left:5px}";
// Rewrite, document is mutated in-place
- rewriteHelper(rewriter, s, document);
+ MutableContent content = rewriteContent(rewriter, s);
assertEquals(rewritten,
- HtmlContentRewriter.getElementsByTagNameCaseInsensitive(document,
+ RewriterUtils.getElementsByTagNameCaseInsensitive(content.getDocument(),
Sets.newHashSet("style")).get(0).getTextContent());
}
- public void testStyleTagRewritesIgnoredOnBadParse() throws Exception {
- String css =
- "div {list-style-image:url('http://a.b.com/bullet.gif');list-style-position:outside;margin:5px;padding:0}\n" +
- ".someid {background-image:url(http://a.b.com/bigimg.png);float:right;width:165px;height:23px;margin-top:4px;margin-left:5px}";
- String s = "<style>" + css + "</style";
- assertEquals(s, rewriteHelper(rewriter, s, null));
- }
-
public void testStyleTagRewritesIgnoredOnNoFeatureKey() throws Exception {
- ContentRewriterFeature overrideFeature = makeFeature("foo"); // doesn't include "style"
- ContentRewriterFeature.Factory factory = mockContentRewriterFeatureFactory(overrideFeature);
- StyleLinksContentRewriter overrideRewriter = new StyleLinksContentRewriter(factory, pfxLinkRewriter);
- String css =
- "div {list-style-image:url('http://a.b.com/bullet.gif');list-style-position:outside;margin:5px;padding:0}\n" +
- ".someid {background-image:url(http://a.b.com/bigimg.png);float:right;width:165px;height:23px;margin-top:4px;margin-left:5px}";
- String s = "<style>" + css + "</style>";
- Document document = htmlParser.parseDom(s);
- assertEquals(s, rewriteHelper(overrideRewriter, s, document));
- }
-
- public void testStyleTagRewritesIgnoredOnNullLinkRewriter() throws Exception {
- ContentRewriterFeature.Factory factory = mockContentRewriterFeatureFactory(styleFeature);
- StyleLinksContentRewriter overrideRewriter = new StyleLinksContentRewriter(factory, null);
+ ContentRewriterFeature overrideFeature =
+ rewriterFeatureFactory.get(createSpecWithRewrite(".*", "", "HTTP",
+ Sets.newConcurrentHashSet("foo"))); // doesn't include "style"
+ ContentRewriterFeatureFactory factory = mockContentRewriterFeatureFactory(overrideFeature);
+ StyleLinksContentRewriter overrideRewriter =
+ new StyleLinksContentRewriter(factory, LINK_PREFIX);
String css =
"div {list-style-image:url('http://a.b.com/bullet.gif');list-style-position:outside;margin:5px;padding:0}\n" +
".someid {background-image:url(http://a.b.com/bigimg.png);float:right;width:165px;height:23px;margin-top:4px;margin-left:5px}";
String s = "<style>" + css + "</style>";
- Document document = htmlParser.parseDom(s);
- assertEquals(s, rewriteHelper(overrideRewriter, s, document));
+ assertEquals(s, rewriteHelper(overrideRewriter, s));
}
}
Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/lexer/JavascriptTagMergerTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/lexer/JavascriptTagMergerTest.java?rev=712000&r1=711999&r2=712000&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/lexer/JavascriptTagMergerTest.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/lexer/JavascriptTagMergerTest.java Thu Nov 6 14:47:09 2008
@@ -40,7 +40,7 @@
URI relativeBase = new URI("http://a.b.com/");
defaultTransformerMap = new HashMap<String, HtmlTagTransformer>();
defaultTransformerMap
- .put("script", new JavascriptTagMerger(getSpecWithoutRewrite(), contentRewriterFeature,
+ .put("script", new JavascriptTagMerger(createSpecWithoutRewrite(), defaultRewriterFeature,
"http://www.test.com/concat?", relativeBase));
}
@@ -77,7 +77,7 @@
public void testSingleScriptReWrite() {
String original = "<script src=\"http://a.b.com/1.js\"></script>";
String rewritten
- = "<script src=\"http://www.test.com/concat?rewriteMime=text/javascript&gadget=http%3A%2F%2Fexample.org%2Fg.xml&fp=-840722081&1=http%3A%2F%2Fa.b.com%2F1.js\" type=\"text/javascript\"></script>";
+ = "<script src=\"http://www.test.com/concat?rewriteMime=text/javascript&gadget=http%3A%2F%2Fexample.org%2Fdir%2Fg.xml&fp=-182800334&1=http%3A%2F%2Fa.b.com%2F1.js\" type=\"text/javascript\"></script>";
validateRewritten(original, rewritten);
}
@@ -85,7 +85,7 @@
String original = "<script src=\"http://a.b.com/1.js\"></script>\n"
+ "<script src=\"http://a.b.com/2.js\"></script>";
String rewritten
- = "<script src=\"http://www.test.com/concat?rewriteMime=text/javascript&gadget=http%3A%2F%2Fexample.org%2Fg.xml&fp=-840722081&1=http%3A%2F%2Fa.b.com%2F1.js&2=http%3A%2F%2Fa.b.com%2F2.js\" type=\"text/javascript\"></script>";
+ = "<script src=\"http://www.test.com/concat?rewriteMime=text/javascript&gadget=http%3A%2F%2Fexample.org%2Fdir%2Fg.xml&fp=-182800334&1=http%3A%2F%2Fa.b.com%2F1.js&2=http%3A%2F%2Fa.b.com%2F2.js\" type=\"text/javascript\"></script>";
validateRewritten(original, rewritten);
}
@@ -101,7 +101,7 @@
String rewritten = "<script type=\"text/javascript\">\n"
+ "doSomething\n"
+ "</script>"
- + "<script src=\"http://www.test.com/concat?rewriteMime=text/javascript&gadget=http%3A%2F%2Fexample.org%2Fg.xml&fp=-840722081&1=http%3A%2F%2Fa.b.com%2F1.js&2=http%3A%2F%2Fa.b.com%2F2.js\" type=\"text/javascript\"></script>"
+ + "<script src=\"http://www.test.com/concat?rewriteMime=text/javascript&gadget=http%3A%2F%2Fexample.org%2Fdir%2Fg.xml&fp=-182800334&1=http%3A%2F%2Fa.b.com%2F1.js&2=http%3A%2F%2Fa.b.com%2F2.js\" type=\"text/javascript\"></script>"
+ "<script type=\"text/javascript\">\n"
+ "doSomething\n"
+ "</script>";
@@ -115,23 +115,23 @@
+ "<script src=\"http://a.b.com/3.js\"></script>\n"
+ "<script src=\"http://a.b.com/4.js\"></script>";
String rewritten =
- "<script src=\"http://www.test.com/concat?rewriteMime=text/javascript&gadget=http%3A%2F%2Fexample.org%2Fg.xml&fp=-840722081&1=http%3A%2F%2Fa.b.com%2F1.js&2=http%3A%2F%2Fa.b.com%2F2.js\" type=\"text/javascript\"></script>"
+ "<script src=\"http://www.test.com/concat?rewriteMime=text/javascript&gadget=http%3A%2F%2Fexample.org%2Fdir%2Fg.xml&fp=-182800334&1=http%3A%2F%2Fa.b.com%2F1.js&2=http%3A%2F%2Fa.b.com%2F2.js\" type=\"text/javascript\"></script>"
+ "<script type=\"text/javascript\"><!-- doSomething --></script>"
- + "<script src=\"http://www.test.com/concat?rewriteMime=text/javascript&gadget=http%3A%2F%2Fexample.org%2Fg.xml&fp=-840722081&1=http%3A%2F%2Fa.b.com%2F3.js&2=http%3A%2F%2Fa.b.com%2F4.js\" type=\"text/javascript\"></script>";
+ + "<script src=\"http://www.test.com/concat?rewriteMime=text/javascript&gadget=http%3A%2F%2Fexample.org%2Fdir%2Fg.xml&fp=-182800334&1=http%3A%2F%2Fa.b.com%2F3.js&2=http%3A%2F%2Fa.b.com%2F4.js\" type=\"text/javascript\"></script>";
validateRewritten(original, rewritten);
}
public void testDerelativizeHostRelative() {
String original = "<script src=\"/1.js\"></script>";
String rewritten
- = "<script src=\"http://www.test.com/concat?rewriteMime=text/javascript&gadget=http%3A%2F%2Fexample.org%2Fg.xml&fp=-840722081&1=http%3A%2F%2Fa.b.com%2F1.js\" type=\"text/javascript\"></script>";
+ = "<script src=\"http://www.test.com/concat?rewriteMime=text/javascript&gadget=http%3A%2F%2Fexample.org%2Fdir%2Fg.xml&fp=-182800334&1=http%3A%2F%2Fa.b.com%2F1.js\" type=\"text/javascript\"></script>";
validateRewritten(original, rewritten);
}
public void testDerelativizePathRelative() {
String original = "<script src=\"1.js\"></script>";
String rewritten
- = "<script src=\"http://www.test.com/concat?rewriteMime=text/javascript&gadget=http%3A%2F%2Fexample.org%2Fg.xml&fp=-840722081&1=http%3A%2F%2Fa.b.com%2F1.js\" type=\"text/javascript\"></script>";
+ = "<script src=\"http://www.test.com/concat?rewriteMime=text/javascript&gadget=http%3A%2F%2Fexample.org%2Fdir%2Fg.xml&fp=-182800334&1=http%3A%2F%2Fa.b.com%2F1.js\" type=\"text/javascript\"></script>";
validateRewritten(original, rewritten);
}
Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/lexer/LinkingTagRewriterTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/lexer/LinkingTagRewriterTest.java?rev=712000&r1=711999&r2=712000&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/lexer/LinkingTagRewriterTest.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/lexer/LinkingTagRewriterTest.java Thu Nov 6 14:47:09 2008
@@ -38,8 +38,7 @@
super.setUp();
dummyUri = new URI("http://www.w3c.org");
URI relativeBase = new URI("http://a.b.com/");
- LinkingTagRewriter rewriter = new LinkingTagRewriter(defaultRewriter, relativeBase);
-
+ LinkingTagRewriter rewriter = new LinkingTagRewriter(defaultLinkRewriter, relativeBase);
defaultTransformerMap = new HashMap<String, HtmlTagTransformer>();
for (String tag : rewriter.getSupportedTags()) {
defaultTransformerMap
@@ -61,9 +60,9 @@
String original = "<img src=\"http://a.b.com/img.gif\"></img>\n"
+ "<IMG src=\"http://a.b.com/img.gif\"/>\n"
+ "<eMbeD src=\"http://a.b.com/some.mov\" width=\"100\" height=\"30px\"/>";
- String expected = "<img src=\"http://www.test.com/proxy?url=http%3A%2F%2Fa.b.com%2Fimg.gif&gadget=http%3A%2F%2Fexample.org%2Fg.xml&fp=-840722081\"></img>\n"
- + "<IMG src=\"http://www.test.com/proxy?url=http%3A%2F%2Fa.b.com%2Fimg.gif&gadget=http%3A%2F%2Fexample.org%2Fg.xml&fp=-840722081\"/>\n"
- + "<eMbeD src=\"http://www.test.com/proxy?url=http%3A%2F%2Fa.b.com%2Fsome.mov&gadget=http%3A%2F%2Fexample.org%2Fg.xml&fp=-840722081\" width=\"100\" height=\"30px\"/>";
+ String expected = "<img src=\"http://www.test.com/dir/proxy?url=http%3A%2F%2Fa.b.com%2Fimg.gif&gadget=http%3A%2F%2Fexample.org%2Fdir%2Fg.xml&fp=-182800334\"></img>\n"
+ + "<IMG src=\"http://www.test.com/dir/proxy?url=http%3A%2F%2Fa.b.com%2Fimg.gif&gadget=http%3A%2F%2Fexample.org%2Fdir%2Fg.xml&fp=-182800334\"/>\n"
+ + "<eMbeD src=\"http://www.test.com/dir/proxy?url=http%3A%2F%2Fa.b.com%2Fsome.mov&gadget=http%3A%2F%2Fexample.org%2Fdir%2Fg.xml&fp=-182800334\" width=\"100\" height=\"30px\"/>";
validateRewritten(original, expected);
}