Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(809)

Unified Diff: third_party/WebKit/Source/web/tests/PageSerializerTest.cpp

Issue 1441553002: Generating CIDs in Blink during MHTML serialization. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@mhtml-per-frame-page-serializer-only
Patch Set: Replace list Replaced initializer lists with array initialization. Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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)
{

Powered by Google App Engine
This is Rietveld 408576698