Index: third_party/WebKit/Source/web/tests/PageSerializerTest.cpp |
diff --git a/third_party/WebKit/Source/web/tests/PageSerializerTest.cpp b/third_party/WebKit/Source/web/tests/PageSerializerTest.cpp |
index d367080470dbf5a475f100fd0fb848fc177bffdf..2e240b1e1688d92ce6948f92d35fbb9454aff939 100644 |
--- a/third_party/WebKit/Source/web/tests/PageSerializerTest.cpp |
+++ b/third_party/WebKit/Source/web/tests/PageSerializerTest.cpp |
@@ -56,7 +56,9 @@ using blink::URLTestHelpers::registerMockedURLLoad; |
namespace blink { |
-class PageSerializerTest : public testing::Test { |
+class PageSerializerTest |
+ : public testing::Test |
+ , public PageSerializer::Delegate { |
public: |
PageSerializerTest() |
: m_folder(WebString::fromUTF8("pageserializer/")) |
@@ -118,12 +120,7 @@ protected: |
void serialize(const char* url) |
{ |
FrameTestHelpers::loadFrame(m_helper.webView()->mainFrame(), KURL(m_baseUrl, url).string().utf8().data()); |
- PageSerializer serializer(&m_resources, nullptr); |
- |
- serializer.setRewriteURLFolder(m_rewriteFolder); |
- for (const auto& rewriteURL: m_rewriteURLs) |
- serializer.registerRewriteURL(rewriteURL.key, rewriteURL.value); |
- |
+ PageSerializer serializer(m_resources, this); |
Frame* frame = m_helper.webViewImpl()->mainFrameImpl()->frame(); |
for (; frame; frame = frame->tree().traverseNext()) { |
// This is safe, because tests do not do cross-site navigation |
@@ -171,6 +168,34 @@ private: |
settings->setJavaScriptEnabled(true); |
} |
+ // PageSerializer::Delegate implementation. |
+ bool shouldIgnoreAttribute(const Attribute&) override |
+ { |
+ return false; |
+ } |
+ |
+ // PageSerializer::Delegate implementation. |
+ bool rewriteLink(const Element& element, String& rewrittenLink) |
+ { |
+ String completeURL; |
+ for (const auto& attribute : element.attributes()) { |
+ if (element.hasLegalLinkAttribute(attribute.name())) { |
+ completeURL = element.document().completeURL(attribute.value()); |
+ break; |
+ } |
+ } |
+ |
+ if (completeURL.isNull() || !m_rewriteURLs.contains(completeURL)) |
+ return false; |
+ |
+ StringBuilder uriBuilder; |
+ uriBuilder.append(m_rewriteFolder); |
+ uriBuilder.appendLiteral("/"); |
+ uriBuilder.append(m_rewriteURLs.get(completeURL)); |
+ rewrittenLink = uriBuilder.toString(); |
+ return true; |
+ } |
+ |
FrameTestHelpers::WebViewHelper m_helper; |
WebString m_folder; |
KURL m_baseUrl; |
@@ -266,10 +291,10 @@ TEST_F(PageSerializerTest, IFrames) |
serialize("top_frame.html"); |
- EXPECT_EQ(9U, getResources().size()); |
+ EXPECT_EQ(10U, getResources().size()); |
EXPECT_TRUE(isSerialized("top_frame.html", "text/html")); |
- EXPECT_TRUE(isSerialized("simple_iframe.html", "text/html")); |
+ EXPECT_TRUE(isSerialized("simple_iframe.html", "text/html")); // Twice. |
EXPECT_TRUE(isSerialized("object_iframe.html", "text/html")); |
EXPECT_TRUE(isSerialized("embed_iframe.html", "text/html")); |
EXPECT_TRUE(isSerialized("encoded_iframe.html", "text/html")); |
@@ -303,10 +328,12 @@ TEST_F(PageSerializerTest, BlankFrames) |
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")); |
+ |
+ // The blank frames no longer get magic URL (i.e. wyciwyg://frame/0), so we |
+ // can't really assert their presence via URL. We also can't use content-id |
+ // in assertions (since it is not deterministic). Therefore we need to rely |
+ // on getResources().size() assertion above and on browser-level tests |
+ // (i.e. SavePageMultiFrameBrowserTest.AboutBlank). |
} |
TEST_F(PageSerializerTest, CSS) |
@@ -457,27 +484,6 @@ TEST_F(PageSerializerTest, RewriteLinksSimple) |
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) |
{ |