Author: zhoresh
Date: Mon Jun 21 21:51:14 2010
New Revision: 956714
URL: http://svn.apache.org/viewvc?rev=956714&view=rev
Log:
Adding a response rewriter that can remove base tag from html content
http://codereview.appspot.com/1630042/show
Added:
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/BaseTagRemoverRewriter.java
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/BaseTagRemoverRewriterTest.java
Added:
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/BaseTagRemoverRewriter.java
URL:
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/BaseTagRemoverRewriter.java?rev=956714&view=auto
==============================================================================
---
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/BaseTagRemoverRewriter.java
(added)
+++
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/BaseTagRemoverRewriter.java
Mon Jun 21 21:51:14 2010
@@ -0,0 +1,60 @@
+/*
+ * 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 org.apache.shindig.gadgets.Gadget;
+import org.apache.shindig.gadgets.http.HttpRequest;
+import org.apache.shindig.gadgets.http.HttpResponseBuilder;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+
+import java.util.logging.Logger;
+
+/**
+ * Simple rewriter that deletes the base tag from the html document.
+ */
+public class BaseTagRemoverRewriter implements GadgetRewriter,
ResponseRewriter {
+ private static Logger logger =
Logger.getLogger(BaseTagRemoverRewriter.class.getName());
+
+ public void rewrite(Gadget gadget, MutableContent mc) {
+ Document doc = mc.getDocument();
+
+ NodeList list = doc.getElementsByTagName("base");
+ for (int i = 0; i < list.getLength(); i++) {
+ Element baseElement = (Element) list.item(i);
+ baseElement.getParentNode().removeChild(baseElement);
+
+ if (baseElement.hasAttribute("href")) {
+ logger.fine("Removing base tag pointing to: "
+ + baseElement.getAttribute("href") + "for gadget: "
+ + gadget.getContext().getUrl().toString());
+ }
+ }
+
+ mc.documentChanged();
+ }
+
+ public void rewrite(HttpRequest request, HttpResponseBuilder response) {
+ if (RewriterUtils.isHtml(request, response)) {
+ Gadget context = DomWalker.makeGadget(request);
+ rewrite(context, response);
+ }
+ }
+}
\ No newline at end of file
Added:
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/BaseTagRemoverRewriterTest.java
URL:
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/BaseTagRemoverRewriterTest.java?rev=956714&view=auto
==============================================================================
---
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/BaseTagRemoverRewriterTest.java
(added)
+++
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/BaseTagRemoverRewriterTest.java
Mon Jun 21 21:51:14 2010
@@ -0,0 +1,147 @@
+/*
+ * 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 org.apache.commons.lang.StringUtils;
+import org.apache.shindig.common.uri.Uri;
+import org.apache.shindig.gadgets.http.HttpRequest;
+import org.apache.shindig.gadgets.http.HttpResponse;
+import org.apache.shindig.gadgets.http.HttpResponseBuilder;
+import org.apache.shindig.gadgets.parse.ParseModule;
+import org.apache.shindig.gadgets.parse.caja.CajaHtmlParser;
+import static org.junit.Assert.assertEquals;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Test case for BaseTagRemoverRewriter.
+ */
+public class BaseTagRemoverRewriterTest {
+ BaseTagRemoverRewriter rewriter;
+
+ CajaHtmlParser parser;
+ ParseModule.DOMImplementationProvider domImpl;
+
+ @Before
+ public void setUp() {
+ rewriter = new BaseTagRemoverRewriter();
+ domImpl = new ParseModule.DOMImplementationProvider();
+ parser = new CajaHtmlParser(domImpl.get());
+ }
+
+ @Test
+ public void testRemoveBaseTag() throws Exception {
+ String content = "<html><head><base href='http://www.ppq.com/'>"
+ + "</head><body>"
+ + "<img src='/img1.png'>"
+ + "</body></html>";
+ String expected = "<html><head>"
+ + "</head><body>"
+ + "<img src=\"/img1.png\">"
+ + "</body></html>";
+
+ HttpRequest req = new HttpRequest(Uri.parse("http://www.google.com/"));
+ HttpResponse resp = new HttpResponseBuilder()
+ .setHttpStatusCode(200)
+ .setHeader("Content-Type", "text/html")
+ .setResponse(content.getBytes())
+ .create();
+ HttpResponseBuilder builder = new HttpResponseBuilder(parser, resp);
+
+ rewriter.rewrite(req, builder);
+
+ assertEquals(StringUtils.deleteWhitespace(expected),
+ StringUtils.deleteWhitespace(builder.getContent()));
+ }
+
+ @Test
+ public void testNoBaseTag() throws Exception {
+ String content = "<html><head>"
+ + "</head><body>"
+ + "<img src='/img1.png'>"
+ + "</body></html>";
+ String expected = "<html><head>"
+ + "</head><body>"
+ + "<img src=\"/img1.png\">"
+ + "</body></html>";
+
+ HttpRequest req = new HttpRequest(Uri.parse("http://www.google.com/"));
+ HttpResponse resp = new HttpResponseBuilder()
+ .setHttpStatusCode(200)
+ .setHeader("Content-Type", "text/html")
+ .setResponse(content.getBytes())
+ .create();
+ HttpResponseBuilder builder = new HttpResponseBuilder(parser, resp);
+
+ rewriter.rewrite(req, builder);
+
+ assertEquals(StringUtils.deleteWhitespace(expected),
+ StringUtils.deleteWhitespace(builder.getContent()));
+ }
+
+ @Test
+ public void testContentTypeString() throws Exception {
+ String content = "Hello world. My name is gagan<html><head>"
+ + "<base href='http://hello.com/'></head><body>"
+ + "<img src='/img1.png'>"
+ + "</body></html>";
+ String expected = "Hello world. My name is gagan<html><head>"
+ + "<base href='http://hello.com/'></head><body>"
+ + "<img src='/img1.png'>"
+ + "</body></html>";
+
+ HttpRequest req = new HttpRequest(Uri.parse("http://www.google.com/"));
+ HttpResponse resp = new HttpResponseBuilder()
+ .setHttpStatusCode(200)
+ .setHeader("Content-Type", "text/plain")
+ .setResponse(content.getBytes())
+ .create();
+ HttpResponseBuilder builder = new HttpResponseBuilder(parser, resp);
+
+ rewriter.rewrite(req, builder);
+
+ assertEquals(StringUtils.deleteWhitespace(expected),
+ StringUtils.deleteWhitespace(builder.getContent()));
+ }
+
+ @Test
+ public void testContentTypeXml() throws Exception {
+ String content = "Hello world. My name is gagan<html><head>"
+ + "<base href='http://hello.com/'></head><body>"
+ + "<img src='/img1.png'>"
+ + "</body></html>";
+ String expected = "Hello world. My name is gagan<html><head>"
+ + "<base href='http://hello.com/'></head><body>"
+ + "<img src='/img1.png'>"
+ + "</body></html>";
+
+ HttpRequest req = new HttpRequest(Uri.parse("http://www.google.com/"));
+ HttpResponse resp = new HttpResponseBuilder()
+ .setHttpStatusCode(200)
+ .setHeader("Content-Type", "text/xml")
+ .setResponse(content.getBytes())
+ .create();
+ HttpResponseBuilder builder = new HttpResponseBuilder(parser, resp);
+
+ rewriter.rewrite(req, builder);
+
+ assertEquals(StringUtils.deleteWhitespace(expected),
+ StringUtils.deleteWhitespace(builder.getContent()));
+ }
+}