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

Side by Side Diff: third_party/WebKit/Source/web/tests/WebFrameSerializerTest.cpp

Issue 2654933003: platform/testing/{URL|Unit}TestHelpers improvements (Closed)
Patch Set: header changes Created 3 years, 10 months 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2011 Google Inc. All rights reserved. 2 * Copyright (C) 2011 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 13 matching lines...) Expand all
24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */ 29 */
30 30
31 #include "public/web/WebFrameSerializer.h" 31 #include "public/web/WebFrameSerializer.h"
32 32
33 #include "platform/testing/URLTestHelpers.h" 33 #include "platform/testing/URLTestHelpers.h"
34 #include "platform/testing/UnitTestHelpers.h"
34 #include "platform/weborigin/KURL.h" 35 #include "platform/weborigin/KURL.h"
35 #include "public/platform/Platform.h" 36 #include "public/platform/Platform.h"
36 #include "public/platform/WebCString.h" 37 #include "public/platform/WebCString.h"
37 #include "public/platform/WebString.h" 38 #include "public/platform/WebString.h"
38 #include "public/platform/WebURL.h" 39 #include "public/platform/WebURL.h"
39 #include "public/platform/WebURLLoaderMockFactory.h" 40 #include "public/platform/WebURLLoaderMockFactory.h"
40 #include "public/web/WebCache.h" 41 #include "public/web/WebCache.h"
41 #include "public/web/WebFrameSerializerClient.h" 42 #include "public/web/WebFrameSerializerClient.h"
42 #include "testing/gtest/include/gtest/gtest.h" 43 #include "testing/gtest/include/gtest/gtest.h"
43 #include "web/WebLocalFrameImpl.h" 44 #include "web/WebLocalFrameImpl.h"
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
94 if (pos == WTF::kNotFound) 95 if (pos == WTF::kNotFound)
95 break; 96 break;
96 matches++; 97 matches++;
97 start = pos + size; 98 start = pos + size;
98 } 99 }
99 return matches; 100 return matches;
100 } 101 }
101 102
102 } // namespace 103 } // namespace
103 104
104 class WebFrameSerializerTest : public testing::Test { 105 class WebFrameSerializerTest : public ::testing::Test {
105 protected: 106 protected:
106 WebFrameSerializerTest() { m_helper.initialize(); } 107 WebFrameSerializerTest() { m_helper.initialize(); }
107 108
108 ~WebFrameSerializerTest() override { 109 ~WebFrameSerializerTest() override {
109 Platform::current()->getURLLoaderMockFactory()->unregisterAllURLs(); 110 Platform::current()->getURLLoaderMockFactory()->unregisterAllURLs();
110 WebCache::clear(); 111 WebCache::clear();
111 } 112 }
112 113
113 void registerMockedImageURL(const String& url) { 114 void registerMockedImageURLLoad(const String& url) {
114 // Image resources need to be mocked, but irrelevant here what image they 115 // Image resources need to be mocked, but irrelevant here what image they
115 // map to. 116 // map to.
116 URLTestHelpers::registerMockedURLLoad(KURL(ParsedURLString, url), 117 registerMockedFileURLLoad(URLTestHelpers::toKURL(url.utf8().data()),
117 "frameserialization/awesome.png"); 118 "frameserialization/awesome.png");
119 }
120 void registerMockedFileURLLoad(const KURL& url,
121 const String& filePath,
122 const String& mimeType = "image/png") {
123 URLTestHelpers::registerMockedURLLoad(
124 url, testing::webTestDataPath(filePath.utf8().data()), mimeType);
118 } 125 }
119 126
120 class SingleLinkRewritingDelegate 127 class SingleLinkRewritingDelegate
121 : public WebFrameSerializer::LinkRewritingDelegate { 128 : public WebFrameSerializer::LinkRewritingDelegate {
122 public: 129 public:
123 SingleLinkRewritingDelegate(const WebURL& url, const WebString& localPath) 130 SingleLinkRewritingDelegate(const WebURL& url, const WebString& localPath)
124 : m_url(url), m_localPath(localPath) {} 131 : m_url(url), m_localPath(localPath) {}
125 132
126 bool rewriteFrameSource(WebFrame* frame, 133 bool rewriteFrameSource(WebFrame* frame,
127 WebString* rewrittenLink) override { 134 WebString* rewrittenLink) override {
128 return false; 135 return false;
129 } 136 }
130 137
131 bool rewriteLink(const WebURL& url, WebString* rewrittenLink) override { 138 bool rewriteLink(const WebURL& url, WebString* rewrittenLink) override {
132 if (url != m_url) 139 if (url != m_url)
133 return false; 140 return false;
134 141
135 *rewrittenLink = m_localPath; 142 *rewrittenLink = m_localPath;
136 return true; 143 return true;
137 } 144 }
138 145
139 private: 146 private:
140 const WebURL m_url; 147 const WebURL m_url;
141 const WebString m_localPath; 148 const WebString m_localPath;
142 }; 149 };
143 150
144 String serializeFile(const String& url, const String& fileName) { 151 String serializeFile(const String& url, const String& fileName) {
145 KURL parsedURL(ParsedURLString, url); 152 KURL parsedURL(ParsedURLString, url);
146 URLTestHelpers::registerMockedURLLoad(parsedURL, fileName, 153 String filePath("frameserialization/" + fileName);
147 "frameserialization/", "text/html"); 154 registerMockedFileURLLoad(parsedURL, filePath, "text/html");
148 FrameTestHelpers::loadFrame(mainFrameImpl(), url.utf8().data()); 155 FrameTestHelpers::loadFrame(mainFrameImpl(), url.utf8().data());
149 SingleLinkRewritingDelegate delegate(parsedURL, WebString("local")); 156 SingleLinkRewritingDelegate delegate(parsedURL, WebString("local"));
150 SimpleWebFrameSerializerClient serializerClient; 157 SimpleWebFrameSerializerClient serializerClient;
151 WebFrameSerializer::serialize(mainFrameImpl(), &serializerClient, 158 WebFrameSerializer::serialize(mainFrameImpl(), &serializerClient,
152 &delegate); 159 &delegate);
153 return serializerClient.toString(); 160 return serializerClient.toString();
154 } 161 }
155 162
156 WebViewImpl* webView() { return m_helper.webView(); } 163 WebViewImpl* webView() { return m_helper.webView(); }
157 164
158 WebLocalFrameImpl* mainFrameImpl() { 165 WebLocalFrameImpl* mainFrameImpl() {
159 return m_helper.webView()->mainFrameImpl(); 166 return m_helper.webView()->mainFrameImpl();
160 } 167 }
161 168
162 private: 169 private:
163 FrameTestHelpers::WebViewHelper m_helper; 170 FrameTestHelpers::WebViewHelper m_helper;
164 }; 171 };
165 172
166 TEST_F(WebFrameSerializerTest, URLAttributeValues) { 173 TEST_F(WebFrameSerializerTest, URLAttributeValues) {
167 registerMockedImageURL("javascript:\""); 174 registerMockedImageURLLoad("javascript:\"");
168 175
169 const char* expectedHTML = 176 const char* expectedHTML =
170 "\n<!-- saved from url=(0020)http://www.test.com/ -->\n" 177 "\n<!-- saved from url=(0020)http://www.test.com/ -->\n"
171 "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; " 178 "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; "
172 "charset=UTF-8\">\n" 179 "charset=UTF-8\">\n"
173 "</head><body><img src=\"javascript:&quot;\">\n" 180 "</head><body><img src=\"javascript:&quot;\">\n"
174 "<a href=\"http://www.test.com/local#&quot;\">local</a>\n" 181 "<a href=\"http://www.test.com/local#&quot;\">local</a>\n"
175 "<a " 182 "<a "
176 "href=\"http://www.example.com/#&quot;&gt;&lt;script&gt;alert(0)&lt;/" 183 "href=\"http://www.example.com/#&quot;&gt;&lt;script&gt;alert(0)&lt;/"
177 "script&gt;\">external</a>\n" 184 "script&gt;\">external</a>\n"
(...skipping 29 matching lines...) Expand all
207 class WebFrameSerializerSanitizationTest : public WebFrameSerializerTest { 214 class WebFrameSerializerSanitizationTest : public WebFrameSerializerTest {
208 protected: 215 protected:
209 WebFrameSerializerSanitizationTest() {} 216 WebFrameSerializerSanitizationTest() {}
210 217
211 ~WebFrameSerializerSanitizationTest() override {} 218 ~WebFrameSerializerSanitizationTest() override {}
212 219
213 String generateMHTMLParts(const String& url, 220 String generateMHTMLParts(const String& url,
214 const String& fileName, 221 const String& fileName,
215 const String& mimeType = "text/html") { 222 const String& mimeType = "text/html") {
216 KURL parsedURL(ParsedURLString, url); 223 KURL parsedURL(ParsedURLString, url);
217 URLTestHelpers::registerMockedURLLoad(parsedURL, fileName, 224 String filePath("frameserialization/" + fileName);
218 "frameserialization/", mimeType); 225 registerMockedFileURLLoad(parsedURL, filePath, mimeType);
219 FrameTestHelpers::loadFrame(mainFrameImpl(), url.utf8().data()); 226 FrameTestHelpers::loadFrame(mainFrameImpl(), url.utf8().data());
220 WebThreadSafeData result = WebFrameSerializer::generateMHTMLParts( 227 WebThreadSafeData result = WebFrameSerializer::generateMHTMLParts(
221 WebString("boundary"), mainFrameImpl(), &m_mhtmlDelegate); 228 WebString("boundary"), mainFrameImpl(), &m_mhtmlDelegate);
222 return String(result.data(), result.size()); 229 return String(result.data(), result.size());
223 } 230 }
224 231
225 void setRemovePopupOverlay(bool removePopupOverlay) { 232 void setRemovePopupOverlay(bool removePopupOverlay) {
226 m_mhtmlDelegate.setRemovePopupOverlay(removePopupOverlay); 233 m_mhtmlDelegate.setRemovePopupOverlay(removePopupOverlay);
227 } 234 }
228 235
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
296 303
297 // Regression test for crbug.com/678893, where in some cases serializing an 304 // Regression test for crbug.com/678893, where in some cases serializing an
298 // image document could cause code to pick an element from an empty container. 305 // image document could cause code to pick an element from an empty container.
299 TEST_F(WebFrameSerializerSanitizationTest, FromBrokenImageDocument) { 306 TEST_F(WebFrameSerializerSanitizationTest, FromBrokenImageDocument) {
300 String mhtml = generateMHTMLParts("http://www.test.com", "broken-image.png", 307 String mhtml = generateMHTMLParts("http://www.test.com", "broken-image.png",
301 "image/png"); 308 "image/png");
302 EXPECT_TRUE(mhtml.isEmpty()); 309 EXPECT_TRUE(mhtml.isEmpty());
303 } 310 }
304 311
305 TEST_F(WebFrameSerializerSanitizationTest, ImageLoadedFromSrcsetForHiDPI) { 312 TEST_F(WebFrameSerializerSanitizationTest, ImageLoadedFromSrcsetForHiDPI) {
306 URLTestHelpers::registerMockedURLLoad( 313 registerMockedFileURLLoad(KURL(ParsedURLString, "http://www.test.com/1x.png"),
307 KURL(ParsedURLString, "http://www.test.com/1x.png"), 314 "frameserialization/1x.png");
308 "frameserialization/1x.png"); 315 registerMockedFileURLLoad(KURL(ParsedURLString, "http://www.test.com/2x.png"),
309 URLTestHelpers::registerMockedURLLoad( 316 "frameserialization/2x.png");
310 KURL(ParsedURLString, "http://www.test.com/2x.png"),
311 "frameserialization/2x.png");
312 317
313 // Set high DPR in order to load image from srcset, instead of src. 318 // Set high DPR in order to load image from srcset, instead of src.
314 webView()->setDeviceScaleFactor(2.0f); 319 webView()->setDeviceScaleFactor(2.0f);
315 320
316 String mhtml = generateMHTMLParts("http://www.test.com", "img_srcset.html"); 321 String mhtml = generateMHTMLParts("http://www.test.com", "img_srcset.html");
317 322
318 // srcset attribute should be skipped. 323 // srcset attribute should be skipped.
319 EXPECT_EQ(WTF::kNotFound, mhtml.find("srcset=")); 324 EXPECT_EQ(WTF::kNotFound, mhtml.find("srcset="));
320 325
321 // Width and height attributes should be set when none is present in <img>. 326 // Width and height attributes should be set when none is present in <img>.
322 EXPECT_NE(WTF::kNotFound, 327 EXPECT_NE(WTF::kNotFound,
323 mhtml.find("id=3D\"i1\" width=3D\"6\" height=3D\"6\">")); 328 mhtml.find("id=3D\"i1\" width=3D\"6\" height=3D\"6\">"));
324 329
325 // Height attribute should not be set if width attribute is already present in 330 // Height attribute should not be set if width attribute is already present in
326 // <img> 331 // <img>
327 EXPECT_NE(WTF::kNotFound, mhtml.find("id=3D\"i2\" width=3D\"8\">")); 332 EXPECT_NE(WTF::kNotFound, mhtml.find("id=3D\"i2\" width=3D\"8\">"));
328 } 333 }
329 334
330 TEST_F(WebFrameSerializerSanitizationTest, ImageLoadedFromSrcForNormalDPI) { 335 TEST_F(WebFrameSerializerSanitizationTest, ImageLoadedFromSrcForNormalDPI) {
331 URLTestHelpers::registerMockedURLLoad( 336 registerMockedFileURLLoad(KURL(ParsedURLString, "http://www.test.com/1x.png"),
332 KURL(ParsedURLString, "http://www.test.com/1x.png"), 337 "frameserialization/1x.png");
333 "frameserialization/1x.png"); 338 registerMockedFileURLLoad(KURL(ParsedURLString, "http://www.test.com/2x.png"),
334 URLTestHelpers::registerMockedURLLoad( 339 "frameserialization/2x.png");
335 KURL(ParsedURLString, "http://www.test.com/2x.png"),
336 "frameserialization/2x.png");
337 340
338 String mhtml = generateMHTMLParts("http://www.test.com", "img_srcset.html"); 341 String mhtml = generateMHTMLParts("http://www.test.com", "img_srcset.html");
339 342
340 // srcset attribute should be skipped. 343 // srcset attribute should be skipped.
341 EXPECT_EQ(WTF::kNotFound, mhtml.find("srcset=")); 344 EXPECT_EQ(WTF::kNotFound, mhtml.find("srcset="));
342 345
343 // New width and height attributes should not be set. 346 // New width and height attributes should not be set.
344 EXPECT_NE(WTF::kNotFound, mhtml.find("id=3D\"i1\">")); 347 EXPECT_NE(WTF::kNotFound, mhtml.find("id=3D\"i1\">"));
345 EXPECT_NE(WTF::kNotFound, mhtml.find("id=3D\"i2\" width=3D\"8\">")); 348 EXPECT_NE(WTF::kNotFound, mhtml.find("id=3D\"i2\" width=3D\"8\">"));
346 } 349 }
347 350
348 TEST_F(WebFrameSerializerSanitizationTest, RemovePopupOverlayIfRequested) { 351 TEST_F(WebFrameSerializerSanitizationTest, RemovePopupOverlayIfRequested) {
349 webView()->resize(WebSize(500, 500)); 352 webView()->resize(WebSize(500, 500));
350 setRemovePopupOverlay(true); 353 setRemovePopupOverlay(true);
351 String mhtml = generateMHTMLParts("http://www.test.com", "popup.html"); 354 String mhtml = generateMHTMLParts("http://www.test.com", "popup.html");
352 EXPECT_EQ(WTF::kNotFound, mhtml.find("class=3D\"overlay")); 355 EXPECT_EQ(WTF::kNotFound, mhtml.find("class=3D\"overlay"));
353 EXPECT_EQ(WTF::kNotFound, mhtml.find("class=3D\"modal")); 356 EXPECT_EQ(WTF::kNotFound, mhtml.find("class=3D\"modal"));
354 } 357 }
355 358
356 TEST_F(WebFrameSerializerSanitizationTest, KeepPopupOverlayIfNotRequested) { 359 TEST_F(WebFrameSerializerSanitizationTest, KeepPopupOverlayIfNotRequested) {
357 webView()->resize(WebSize(500, 500)); 360 webView()->resize(WebSize(500, 500));
358 setRemovePopupOverlay(false); 361 setRemovePopupOverlay(false);
359 String mhtml = generateMHTMLParts("http://www.test.com", "popup.html"); 362 String mhtml = generateMHTMLParts("http://www.test.com", "popup.html");
360 EXPECT_NE(WTF::kNotFound, mhtml.find("class=3D\"overlay")); 363 EXPECT_NE(WTF::kNotFound, mhtml.find("class=3D\"overlay"));
361 EXPECT_NE(WTF::kNotFound, mhtml.find("class=3D\"modal")); 364 EXPECT_NE(WTF::kNotFound, mhtml.find("class=3D\"modal"));
362 } 365 }
363 366
364 } // namespace blink 367 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/web/tests/WebDocumentTest.cpp ('k') | third_party/WebKit/Source/web/tests/WebFrameTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698