Index: Source/web/tests/PageSerializerTest.cpp |
diff --git a/Source/web/tests/PageSerializerTest.cpp b/Source/web/tests/PageSerializerTest.cpp |
index 3fbc0a841a1419ce6d27afaed13becd5b821e10e..acb4b9bbc94d691a22a742cfb7d3522393e184bd 100644 |
--- a/Source/web/tests/PageSerializerTest.cpp |
+++ b/Source/web/tests/PageSerializerTest.cpp |
@@ -105,9 +105,19 @@ protected: |
m_folder = WebString::fromUTF8(folder); |
} |
+ void setRewriteURLFolder(const char* folder) |
+ { |
+ m_rewriteFolder = folder; |
+ } |
+ |
+ void registerURL(const char* url, const char* file, const char* mimeType) |
+ { |
+ registerMockedURLLoad(KURL(m_baseUrl, url), WebString::fromUTF8(file), m_folder, WebString::fromUTF8(mimeType)); |
+ } |
+ |
void registerURL(const char* file, const char* mimeType) |
{ |
- registerMockedURLLoad(KURL(m_baseUrl, file), WebString::fromUTF8(file), m_folder, WebString::fromUTF8(mimeType)); |
+ registerURL(file, file, mimeType); |
} |
void registerErrorURL(const char* file, int statusCode) |
@@ -124,6 +134,11 @@ protected: |
Platform::current()->unitTestSupport()->registerMockedErrorURL(KURL(m_baseUrl, file), response, error); |
} |
+ void registerRewriteURL(const char* fromURL, const char* toURL) |
+ { |
+ m_rewriteURLs.add(fromURL, toURL); |
+ } |
+ |
void serialize(const char* url) |
{ |
WebURLRequest urlRequest; |
@@ -137,7 +152,8 @@ protected: |
// Server the delayed resources. |
Platform::current()->unitTestSupport()->serveAsynchronousMockedRequests(); |
- PageSerializer serializer(&m_resources); |
+ PageSerializer serializer(&m_resources, |
+ m_rewriteURLs.isEmpty() ? 0: &m_rewriteURLs, m_rewriteFolder); |
serializer.serialize(m_webViewImpl->mainFrameImpl()->frame()->page()); |
} |
@@ -173,6 +189,16 @@ protected: |
return String(); |
} |
+ // For debugging |
+ void printResources() |
+ { |
+ printf("Printing resources (%zu resources in total)\n", m_resources.size()); |
+ for (size_t i = 0; i < m_resources.size(); ++i) { |
+ printf("%zu. '%s', '%s'\n", i, m_resources[i].url.string().utf8().data(), |
+ m_resources[i].mimeType.utf8().data()); |
+ } |
+ } |
+ |
WebViewImpl* m_webViewImpl; |
private: |
@@ -181,26 +207,173 @@ private: |
WebString m_folder; |
KURL m_baseUrl; |
Vector<SerializedResource> m_resources; |
+ LinkLocalPathMap m_rewriteURLs; |
+ String m_rewriteFolder; |
}; |
+TEST_F(PageSerializerTest, HTMLElements) |
+{ |
+ setBaseFolder("pageserializer/elements/"); |
+ |
+ registerURL("elements.html", "text/html"); |
+ registerURL("style.css", "style.css", "text/css"); |
+ registerURL("copyright.html", "text.txt", "text/html"); |
+ registerURL("script.js", "text.txt", "text/javascript"); |
+ |
+ registerURL("bodyBackground.png", "image.png", "image/png"); |
+ |
+ registerURL("imageSrc.png", "image.png", "image/png"); |
+ |
+ registerURL("inputImage.png", "image.png", "image/png"); |
+ |
+ registerURL("tableBackground.png", "image.png", "image/png"); |
+ registerURL("trBackground.png", "image.png", "image/png"); |
+ registerURL("tdBackground.png", "image.png", "image/png"); |
+ |
+ registerURL("blockquoteCite.html", "text.txt", "text/html"); |
+ registerURL("qCite.html", "text.txt", "text/html"); |
+ registerURL("delCite.html", "text.txt", "text/html"); |
+ registerURL("insCite.html", "text.txt", "text/html"); |
-TEST_F(PageSerializerTest, InputImage) |
+ registerErrorURL("nonExisting.png", 404); |
+ |
+ serialize("elements.html"); |
+ |
+ EXPECT_EQ(8U, getResources().size()); |
+ |
+ EXPECT_TRUE(isSerialized("elements.html", "text/html")); |
+ EXPECT_TRUE(isSerialized("style.css", "text/css")); |
+ EXPECT_TRUE(isSerialized("bodyBackground.png", "image/png")); |
+ EXPECT_TRUE(isSerialized("imageSrc.png", "image/png")); |
+ EXPECT_TRUE(isSerialized("inputImage.png", "image/png")); |
+ EXPECT_TRUE(isSerialized("tableBackground.png", "image/png")); |
+ EXPECT_TRUE(isSerialized("trBackground.png", "image/png")); |
+ EXPECT_TRUE(isSerialized("tdBackground.png", "image/png")); |
+ EXPECT_FALSE(isSerialized("nonExisting.png", "image/png")); |
+} |
+ |
+TEST_F(PageSerializerTest, Frames) |
{ |
- setBaseFolder("pageserializer/input-image/"); |
+ setBaseFolder("pageserializer/frames/"); |
+ |
+ registerURL("simple_frames.html", "text/html"); |
+ registerURL("simple_frames_top.html", "text/html"); |
+ registerURL("simple_frames_1.html", "text/html"); |
+ registerURL("simple_frames_3.html", "text/html"); |
- registerURL("input-image.html", "text/html"); |
- registerURL("button.png", "image/png"); |
- registerErrorURL("non-existing-button.png", 404); |
+ registerURL("frame_1.png", "image.png", "image/png"); |
+ registerURL("frame_2.png", "image.png", "image/png"); |
+ registerURL("frame_3.png", "image.png", "image/png"); |
+ registerURL("frame_4.png", "image.png", "image/png"); |
- serialize("input-image.html"); |
+ serialize("simple_frames.html"); |
- EXPECT_TRUE(isSerialized("button.png", "image/png")); |
- EXPECT_FALSE(isSerialized("non-existing-button.png", "image/png")); |
+ EXPECT_EQ(8U, getResources().size()); |
+ |
+ EXPECT_TRUE(isSerialized("simple_frames.html", "text/html")); |
+ EXPECT_TRUE(isSerialized("simple_frames_top.html", "text/html")); |
+ EXPECT_TRUE(isSerialized("simple_frames_1.html", "text/html")); |
+ EXPECT_TRUE(isSerialized("simple_frames_3.html", "text/html")); |
+ |
+ EXPECT_TRUE(isSerialized("frame_1.png", "image/png")); |
+ EXPECT_TRUE(isSerialized("frame_2.png", "image/png")); |
+ EXPECT_TRUE(isSerialized("frame_3.png", "image/png")); |
+ EXPECT_TRUE(isSerialized("frame_4.png", "image/png")); |
+} |
+ |
+ |
+TEST_F(PageSerializerTest, IFrames) |
+{ |
+ // FIXME: Iframes in object and embed tags should work, but recently stopped doing so. |
+ setBaseFolder("pageserializer/frames/"); |
+ |
+ registerURL("top_frame.html", "text/html"); |
+ registerURL("simple_iframe.html", "text/html"); |
+ registerURL("object_iframe.html", "text/html"); |
+ registerURL("embed_iframe.html", "text/html"); |
+ |
+ registerURL("top.png", "image.png", "image/png"); |
+ registerURL("simple.png", "image.png", "image/png"); |
+ registerURL("object.png", "image.png", "image/png"); |
+ registerURL("embed.png", "image.png", "image/png"); |
+ |
+ serialize("top_frame.html"); |
+ |
+ EXPECT_EQ(4U, getResources().size()); |
+ //EXPECT_EQ(8U, getResources().size()); |
+ |
+ EXPECT_TRUE(isSerialized("top_frame.html", "text/html")); |
+ EXPECT_TRUE(isSerialized("simple_iframe.html", "text/html")); |
+ //EXPECT_TRUE(isSerialized("object_iframe.html", "text/html")); |
+ //EXPECT_TRUE(isSerialized("embed_iframe.html", "text/html")); |
+ |
+ EXPECT_TRUE(isSerialized("top.png", "image/png")); |
+ EXPECT_TRUE(isSerialized("simple.png", "image/png")); |
+ //EXPECT_TRUE(isSerialized("object.png", "image/png")); |
+ //EXPECT_TRUE(isSerialized("embed.png", "image/png")); |
+} |
+ |
+// Tests that when serializing a page with blank frames these are reported with their resources. |
+TEST_F(PageSerializerTest, BlankFrames) |
+{ |
+ setBaseFolder("pageserializer/frames/"); |
+ |
+ registerURL("blank_frames.html", "text/html"); |
+ registerURL("red_background.png", "image.png", "image/png"); |
+ registerURL("orange_background.png", "image.png", "image/png"); |
+ registerURL("blue_background.png", "image.png", "image/png"); |
+ |
+ serialize("blank_frames.html"); |
+ |
+ EXPECT_EQ(7U, getResources().size()); |
+ |
+ EXPECT_TRUE(isSerialized("http://www.test.com/red_background.png", "image/png")); |
+ EXPECT_TRUE(isSerialized("http://www.test.com/orange_background.png", "image/png")); |
+ EXPECT_TRUE(isSerialized("http://www.test.com/blue_background.png", "image/png")); |
+ // The blank frames should have got a magic URL. |
+ EXPECT_TRUE(isSerialized("wyciwyg://frame/0", "text/html")); |
+ EXPECT_TRUE(isSerialized("wyciwyg://frame/1", "text/html")); |
+ EXPECT_TRUE(isSerialized("wyciwyg://frame/2", "text/html")); |
+} |
+ |
+TEST_F(PageSerializerTest, CSS) |
+{ |
+ setBaseFolder("pageserializer/css/"); |
+ |
+ registerURL("css_test_page.html", "text/html"); |
+ registerURL("link_styles.css", "text/css"); |
+ registerURL("import_style_from_link.css", "text/css"); |
+ registerURL("import_styles.css", "text/css"); |
+ registerURL("red_background.png", "image.png", "image/png"); |
+ registerURL("orange_background.png", "image.png", "image/png"); |
+ registerURL("yellow_background.png", "image.png", "image/png"); |
+ registerURL("green_background.png", "image.png", "image/png"); |
+ registerURL("blue_background.png", "image.png", "image/png"); |
+ registerURL("purple_background.png", "image.png", "image/png"); |
+ registerURL("ul-dot.png", "image.png", "image/png"); |
+ registerURL("ol-dot.png", "image.png", "image/png"); |
+ |
+ serialize("css_test_page.html"); |
+ |
+ EXPECT_EQ(12U, getResources().size()); |
+ |
+ EXPECT_TRUE(isSerialized("css_test_page.html", "text/html")); |
+ EXPECT_TRUE(isSerialized("link_styles.css", "text/css")); |
+ EXPECT_TRUE(isSerialized("import_styles.css", "text/css")); |
+ EXPECT_TRUE(isSerialized("import_style_from_link.css", "text/css")); |
+ EXPECT_TRUE(isSerialized("red_background.png", "image/png")); |
+ EXPECT_TRUE(isSerialized("orange_background.png", "image/png")); |
+ EXPECT_TRUE(isSerialized("yellow_background.png", "image/png")); |
+ EXPECT_TRUE(isSerialized("green_background.png", "image/png")); |
+ EXPECT_TRUE(isSerialized("blue_background.png", "image/png")); |
+ EXPECT_TRUE(isSerialized("purple_background.png", "image/png")); |
+ EXPECT_TRUE(isSerialized("ul-dot.png", "image/png")); |
+ EXPECT_TRUE(isSerialized("ol-dot.png", "image/png")); |
} |
TEST_F(PageSerializerTest, XMLDeclaration) |
{ |
- setBaseFolder("pageserializer/xmldecl/"); |
+ setBaseFolder("pageserializer/xml/"); |
registerURL("xmldecl.xml", "text/xml"); |
serialize("xmldecl.xml"); |
@@ -213,11 +386,11 @@ TEST_F(PageSerializerTest, DTD) |
{ |
setBaseFolder("pageserializer/dtd/"); |
- registerURL("dtd.html", "text/html"); |
- serialize("dtd.html"); |
+ registerURL("html5.html", "text/html"); |
+ serialize("html5.html"); |
String expectedStart("<!DOCTYPE html>"); |
- EXPECT_TRUE(getSerializedData("dtd.html").startsWith(expectedStart)); |
+ EXPECT_TRUE(getSerializedData("html5.html").startsWith(expectedStart)); |
} |
TEST_F(PageSerializerTest, Font) |
@@ -232,4 +405,96 @@ TEST_F(PageSerializerTest, Font) |
EXPECT_TRUE(isSerialized("font.ttf", "application/octet-stream")); |
} |
+TEST_F(PageSerializerTest, DataURI) |
+{ |
+ setBaseFolder("pageserializer/datauri/"); |
+ |
+ registerURL("page_with_data.html", "text/html"); |
+ |
+ serialize("page_with_data.html"); |
+ |
+ EXPECT_EQ(1U, getResources().size()); |
+ EXPECT_TRUE(isSerialized("page_with_data.html", "text/html")); |
+} |
+ |
+TEST_F(PageSerializerTest, DataURIMorphing) |
+{ |
+ setBaseFolder("pageserializer/datauri/"); |
+ |
+ registerURL("page_with_morphing_data.html", "text/html"); |
+ |
+ serialize("page_with_morphing_data.html"); |
+ |
+ EXPECT_EQ(2U, getResources().size()); |
+ EXPECT_TRUE(isSerialized("page_with_morphing_data.html", "text/html")); |
+} |
+ |
+TEST_F(PageSerializerTest, RewriteLinksSimple) |
+{ |
+ setBaseFolder("pageserializer/rewritelinks/"); |
+ setRewriteURLFolder("folder"); |
+ |
+ registerURL("rewritelinks_simple.html", "text/html"); |
+ registerURL("absolute.png", "image.png", "image/png"); |
+ registerURL("relative.png", "image.png", "image/png"); |
+ registerRewriteURL("http://www.test.com/absolute.png", "a.png"); |
+ registerRewriteURL("http://www.test.com/relative.png", "b.png"); |
+ |
+ serialize("rewritelinks_simple.html"); |
+ |
+ EXPECT_EQ(3U, getResources().size()); |
+ EXPECT_NE(getSerializedData("rewritelinks_simple.html", "text/html").find("./folder/a.png"), kNotFound); |
+ EXPECT_NE(getSerializedData("rewritelinks_simple.html", "text/html").find("./folder/b.png"), kNotFound); |
+} |
+ |
+TEST_F(PageSerializerTest, RewriteLinksBase) |
+{ |
+ setBaseFolder("pageserializer/rewritelinks/"); |
+ setRewriteURLFolder("folder"); |
+ |
+ registerURL("rewritelinks_base.html", "text/html"); |
+ registerURL("images/here/image.png", "image.png", "image/png"); |
+ registerURL("images/here/or/in/here/image.png", "image.png", "image/png"); |
+ registerURL("or/absolute.png", "image.png", "image/png"); |
+ registerRewriteURL("http://www.test.com/images/here/image.png", "a.png"); |
+ registerRewriteURL("http://www.test.com/images/here/or/in/here/image.png", "b.png"); |
+ registerRewriteURL("http://www.test.com/or/absolute.png", "c.png"); |
+ |
+ serialize("rewritelinks_base.html"); |
+ |
+ EXPECT_EQ(4U, getResources().size()); |
+ EXPECT_NE(getSerializedData("rewritelinks_base.html", "text/html").find("./folder/a.png"), kNotFound); |
+ EXPECT_NE(getSerializedData("rewritelinks_base.html", "text/html").find("./folder/b.png"), kNotFound); |
+ EXPECT_NE(getSerializedData("rewritelinks_base.html", "text/html").find("./folder/c.png"), kNotFound); |
+} |
+ |
+// Test that we don't regress https://bugs.webkit.org/show_bug.cgi?id=99105 |
+TEST_F(PageSerializerTest, SVGImageDontCrash) |
+{ |
+ setBaseFolder("pageserializer/svg/"); |
+ |
+ registerURL("page_with_svg_image.html", "text/html"); |
+ registerURL("green_rectangle.svg", "image/svg+xml"); |
+ |
+ serialize("page_with_svg_image.html"); |
+ |
+ EXPECT_EQ(2U, getResources().size()); |
+ |
+ EXPECT_TRUE(isSerialized("green_rectangle.svg", "image/svg+xml")); |
+ EXPECT_GT(getSerializedData("green_rectangle.svg", "image/svg+xml").length(), 250U); |
+} |
+ |
+TEST_F(PageSerializerTest, NamespaceElementsDontCrash) |
+{ |
+ setBaseFolder("pageserializer/namespace/"); |
+ |
+ registerURL("namespace_element.html", "text/html"); |
+ |
+ serialize("namespace_element.html"); |
+ |
+ EXPECT_EQ(1U, getResources().size()); |
+ EXPECT_TRUE(isSerialized("namespace_element.html", "text/html")); |
+ EXPECT_GT(getSerializedData("namespace_element.html", "text/html").length(), 0U); |
+} |
+ |
} |