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

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

Issue 2538953002: Remove hidden elements from MHTML (Closed)
Patch Set: Fix trybots Created 4 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/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

Powered by Google App Engine
This is Rietveld 408576698