| Index: third_party/WebKit/Source/web/tests/WebFrameSerializerTest.cpp
|
| diff --git a/third_party/WebKit/Source/web/tests/WebFrameSerializerTest.cpp b/third_party/WebKit/Source/web/tests/WebFrameSerializerTest.cpp
|
| index c55b93924d12eae3889e970b0712da1b072b2419..d196b2b19a0490179b782435e78aa8a9271ddcc6 100644
|
| --- a/third_party/WebKit/Source/web/tests/WebFrameSerializerTest.cpp
|
| +++ b/third_party/WebKit/Source/web/tests/WebFrameSerializerTest.cpp
|
| @@ -75,6 +75,20 @@ class SimpleMHTMLPartsGenerationDelegate
|
| bool useBinaryEncoding() final { return false; }
|
| };
|
|
|
| +// Returns the count of match for substring |pattern| in string |str|.
|
| +int matchSubstring(const String& str, const char* pattern, size_t size) {
|
| + int matches = 0;
|
| + size_t start = 0;
|
| + while (true) {
|
| + size_t pos = str.find(pattern, start);
|
| + if (pos == WTF::kNotFound)
|
| + break;
|
| + matches++;
|
| + start = pos + size;
|
| + }
|
| + return matches;
|
| +}
|
| +
|
| } // namespace
|
|
|
| class WebFrameSerializerTest : public testing::Test {
|
| @@ -223,17 +237,41 @@ TEST_F(WebFrameSerializerSanitizationTest, RemoveInlineScriptInAttributes) {
|
| TEST_F(WebFrameSerializerSanitizationTest, DisableFormElements) {
|
| String mhtml = generateMHTMLParts("http://www.test.com", "form.html");
|
|
|
| - int matches = 0;
|
| - size_t start = 0;
|
| - while (true) {
|
| - const char kDisabledAttr[] = "disabled=3D\"\"";
|
| - size_t pos = mhtml.find(kDisabledAttr, start);
|
| - if (pos == WTF::kNotFound)
|
| - break;
|
| - matches++;
|
| - start = pos + arraysize(kDisabledAttr) - 1;
|
| - }
|
| + const char kDisabledAttr[] = "disabled=3D\"\"";
|
| + int matches =
|
| + matchSubstring(mhtml, kDisabledAttr, arraysize(kDisabledAttr) - 1);
|
| EXPECT_EQ(21, matches);
|
| }
|
|
|
| +TEST_F(WebFrameSerializerSanitizationTest, RemoveHiddenElements) {
|
| + String mhtml =
|
| + generateMHTMLParts("http://www.test.com", "hidden_elements.html");
|
| +
|
| + // These hidden elements that do not affect layout should be removed.
|
| + EXPECT_EQ(WTF::kNotFound, mhtml.find("<h1"));
|
| + EXPECT_EQ(WTF::kNotFound, mhtml.find("<p id=3D\"hidden_id\""));
|
| + EXPECT_EQ(WTF::kNotFound, mhtml.find("<input type=3D\"hidden\""));
|
| +
|
| + // These default-hidden elements should not be removed.
|
| + EXPECT_NE(WTF::kNotFound, mhtml.find("<html"));
|
| + EXPECT_NE(WTF::kNotFound, mhtml.find("<head"));
|
| + EXPECT_NE(WTF::kNotFound, mhtml.find("<style"));
|
| + EXPECT_NE(WTF::kNotFound, mhtml.find("<title"));
|
| + EXPECT_NE(WTF::kNotFound, mhtml.find("<link"));
|
| + EXPECT_NE(WTF::kNotFound, mhtml.find("<datalist"));
|
| + EXPECT_NE(WTF::kNotFound, mhtml.find("<option"));
|
| + // One for meta in head and another for meta in body.
|
| + EXPECT_EQ(2, matchSubstring(mhtml, "<meta", 5));
|
| +
|
| + // These hidden elements that affect layout should remain intact.
|
| + EXPECT_NE(WTF::kNotFound, mhtml.find("<h2"));
|
| +
|
| + // These visible elements should remain intact.
|
| + EXPECT_NE(WTF::kNotFound, mhtml.find("<h2"));
|
| + EXPECT_NE(WTF::kNotFound, mhtml.find("<p id=3D\"visible_id\""));
|
| + EXPECT_NE(WTF::kNotFound, mhtml.find("<form"));
|
| + EXPECT_NE(WTF::kNotFound, mhtml.find("<input type=3D\"text\""));
|
| + EXPECT_NE(WTF::kNotFound, mhtml.find("<div"));
|
| +}
|
| +
|
| } // namespace blink
|
|
|