| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2013, Opera Software ASA. All rights reserved. | 2 * Copyright (c) 2013, Opera Software ASA. 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 | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * | 7 * |
| 8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. 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 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 72 Platform::current()->getURLLoaderMockFactory()->unregisterAllURLs(); | 72 Platform::current()->getURLLoaderMockFactory()->unregisterAllURLs(); |
| 73 WebCache::clear(); | 73 WebCache::clear(); |
| 74 } | 74 } |
| 75 | 75 |
| 76 void setBaseFolder(const char* folder) { | 76 void setBaseFolder(const char* folder) { |
| 77 m_folder = WebString::fromUTF8(folder); | 77 m_folder = WebString::fromUTF8(folder); |
| 78 } | 78 } |
| 79 | 79 |
| 80 void setRewriteURLFolder(const char* folder) { m_rewriteFolder = folder; } | 80 void setRewriteURLFolder(const char* folder) { m_rewriteFolder = folder; } |
| 81 | 81 |
| 82 void registerURL(const KURL& url, const char* file, const char* mimeType) { |
| 83 registerMockedURLLoad(url, WebString::fromUTF8(file), m_folder, |
| 84 WebString::fromUTF8(mimeType)); |
| 85 } |
| 86 |
| 82 void registerURL(const char* url, const char* file, const char* mimeType) { | 87 void registerURL(const char* url, const char* file, const char* mimeType) { |
| 83 registerMockedURLLoad(KURL(m_baseUrl, url), WebString::fromUTF8(file), | 88 registerURL(KURL(m_baseUrl, url), file, mimeType); |
| 84 m_folder, WebString::fromUTF8(mimeType)); | |
| 85 } | 89 } |
| 86 | 90 |
| 87 void registerURL(const char* file, const char* mimeType) { | 91 void registerURL(const char* file, const char* mimeType) { |
| 88 registerURL(file, file, mimeType); | 92 registerURL(file, file, mimeType); |
| 89 } | 93 } |
| 90 | 94 |
| 91 void registerErrorURL(const char* file, int statusCode) { | 95 void registerErrorURL(const char* file, int statusCode) { |
| 92 WebURLError error; | 96 WebURLError error; |
| 93 error.reason = 0xdead + statusCode; | 97 error.reason = 0xdead + statusCode; |
| 94 error.domain = "FrameSerializerTest"; | 98 error.domain = "FrameSerializerTest"; |
| 95 | 99 |
| 96 WebURLResponse response; | 100 WebURLResponse response; |
| 97 response.setMIMEType("text/html"); | 101 response.setMIMEType("text/html"); |
| 98 response.setHTTPStatusCode(statusCode); | 102 response.setHTTPStatusCode(statusCode); |
| 99 | 103 |
| 100 Platform::current()->getURLLoaderMockFactory()->registerErrorURL( | 104 Platform::current()->getURLLoaderMockFactory()->registerErrorURL( |
| 101 KURL(m_baseUrl, file), response, error); | 105 KURL(m_baseUrl, file), response, error); |
| 102 } | 106 } |
| 103 | 107 |
| 104 void registerRewriteURL(const char* fromURL, const char* toURL) { | 108 void registerRewriteURL(const char* fromURL, const char* toURL) { |
| 105 m_rewriteURLs.add(fromURL, toURL); | 109 m_rewriteURLs.add(fromURL, toURL); |
| 106 } | 110 } |
| 107 | 111 |
| 112 void registerSkipURL(const char* url) { |
| 113 m_skipURLs.append(KURL(m_baseUrl, url)); |
| 114 } |
| 115 |
| 108 void serialize(const char* url) { | 116 void serialize(const char* url) { |
| 109 FrameTestHelpers::loadFrame(m_helper.webView()->mainFrame(), | 117 FrameTestHelpers::loadFrame(m_helper.webView()->mainFrame(), |
| 110 KURL(m_baseUrl, url).getString().utf8().data()); | 118 KURL(m_baseUrl, url).getString().utf8().data()); |
| 111 FrameSerializer serializer(m_resources, *this); | 119 FrameSerializer serializer(m_resources, *this); |
| 112 Frame* frame = m_helper.webView()->mainFrameImpl()->frame(); | 120 Frame* frame = m_helper.webView()->mainFrameImpl()->frame(); |
| 113 for (; frame; frame = frame->tree().traverseNext()) { | 121 for (; frame; frame = frame->tree().traverseNext()) { |
| 114 // This is safe, because tests do not do cross-site navigation | 122 // This is safe, because tests do not do cross-site navigation |
| 115 // (and therefore don't have remote frames). | 123 // (and therefore don't have remote frames). |
| 116 serializer.serializeFrame(*toLocalFrame(frame)); | 124 serializer.serializeFrame(*toLocalFrame(frame)); |
| 117 } | 125 } |
| 118 } | 126 } |
| 119 | 127 |
| 120 Vector<SerializedResource>& getResources() { return m_resources; } | 128 Vector<SerializedResource>& getResources() { return m_resources; } |
| 121 | 129 |
| 122 const SerializedResource* getResource(const char* urlString, | 130 const SerializedResource* getResource(const KURL& url, const char* mimeType) { |
| 123 const char* mimeType) { | |
| 124 const KURL url(m_baseUrl, urlString); | |
| 125 String mime(mimeType); | 131 String mime(mimeType); |
| 126 for (size_t i = 0; i < m_resources.size(); ++i) { | 132 for (size_t i = 0; i < m_resources.size(); ++i) { |
| 127 const SerializedResource& resource = m_resources[i]; | 133 const SerializedResource& resource = m_resources[i]; |
| 128 if (resource.url == url && !resource.data->isEmpty() && | 134 if (resource.url == url && !resource.data->isEmpty() && |
| 129 (mime.isNull() || equalIgnoringASCIICase(resource.mimeType, mime))) | 135 (mime.isNull() || equalIgnoringASCIICase(resource.mimeType, mime))) |
| 130 return &resource; | 136 return &resource; |
| 131 } | 137 } |
| 132 return nullptr; | 138 return nullptr; |
| 133 } | 139 } |
| 134 | 140 |
| 141 const SerializedResource* getResource(const char* urlString, |
| 142 const char* mimeType) { |
| 143 const KURL url(m_baseUrl, urlString); |
| 144 return getResource(url, mimeType); |
| 145 } |
| 146 |
| 135 bool isSerialized(const char* url, const char* mimeType = 0) { | 147 bool isSerialized(const char* url, const char* mimeType = 0) { |
| 136 return getResource(url, mimeType); | 148 return getResource(url, mimeType); |
| 137 } | 149 } |
| 138 | 150 |
| 139 String getSerializedData(const char* url, const char* mimeType = 0) { | 151 String getSerializedData(const char* url, const char* mimeType = 0) { |
| 140 const SerializedResource* resource = getResource(url, mimeType); | 152 const SerializedResource* resource = getResource(url, mimeType); |
| 141 if (resource) | 153 if (resource) |
| 142 return String(resource->data->data(), resource->data->size()); | 154 return String(resource->data->data(), resource->data->size()); |
| 143 return String(); | 155 return String(); |
| 144 } | 156 } |
| (...skipping 19 matching lines...) Expand all Loading... |
| 164 return false; | 176 return false; |
| 165 | 177 |
| 166 StringBuilder uriBuilder; | 178 StringBuilder uriBuilder; |
| 167 uriBuilder.append(m_rewriteFolder); | 179 uriBuilder.append(m_rewriteFolder); |
| 168 uriBuilder.append('/'); | 180 uriBuilder.append('/'); |
| 169 uriBuilder.append(m_rewriteURLs.get(completeURL)); | 181 uriBuilder.append(m_rewriteURLs.get(completeURL)); |
| 170 rewrittenLink = uriBuilder.toString(); | 182 rewrittenLink = uriBuilder.toString(); |
| 171 return true; | 183 return true; |
| 172 } | 184 } |
| 173 | 185 |
| 186 bool shouldSkipResourceWithURL(const KURL& url) { |
| 187 return m_skipURLs.contains(url); |
| 188 } |
| 189 |
| 174 FrameTestHelpers::WebViewHelper m_helper; | 190 FrameTestHelpers::WebViewHelper m_helper; |
| 175 WebString m_folder; | 191 WebString m_folder; |
| 176 KURL m_baseUrl; | 192 KURL m_baseUrl; |
| 177 Vector<SerializedResource> m_resources; | 193 Vector<SerializedResource> m_resources; |
| 178 HashMap<String, String> m_rewriteURLs; | 194 HashMap<String, String> m_rewriteURLs; |
| 195 Vector<String> m_skipURLs; |
| 179 String m_rewriteFolder; | 196 String m_rewriteFolder; |
| 180 }; | 197 }; |
| 181 | 198 |
| 182 TEST_F(FrameSerializerTest, HTMLElements) { | 199 TEST_F(FrameSerializerTest, HTMLElements) { |
| 183 setBaseFolder("frameserializer/elements/"); | 200 setBaseFolder("frameserializer/elements/"); |
| 184 | 201 |
| 185 registerURL("elements.html", "text/html"); | 202 registerURL("elements.html", "text/html"); |
| 186 registerURL("style.css", "style.css", "text/css"); | 203 registerURL("style.css", "style.css", "text/css"); |
| 187 registerURL("copyright.html", "empty.txt", "text/html"); | 204 registerURL("copyright.html", "empty.txt", "text/html"); |
| 188 registerURL("script.js", "empty.txt", "text/javascript"); | 205 registerURL("script.js", "empty.txt", "text/javascript"); |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 329 registerURL("orange_background.png", "image.png", "image/png"); | 346 registerURL("orange_background.png", "image.png", "image/png"); |
| 330 registerURL("yellow_background.png", "image.png", "image/png"); | 347 registerURL("yellow_background.png", "image.png", "image/png"); |
| 331 registerURL("green_background.png", "image.png", "image/png"); | 348 registerURL("green_background.png", "image.png", "image/png"); |
| 332 registerURL("blue_background.png", "image.png", "image/png"); | 349 registerURL("blue_background.png", "image.png", "image/png"); |
| 333 registerURL("purple_background.png", "image.png", "image/png"); | 350 registerURL("purple_background.png", "image.png", "image/png"); |
| 334 registerURL("pink_background.png", "image.png", "image/png"); | 351 registerURL("pink_background.png", "image.png", "image/png"); |
| 335 registerURL("brown_background.png", "image.png", "image/png"); | 352 registerURL("brown_background.png", "image.png", "image/png"); |
| 336 registerURL("ul-dot.png", "image.png", "image/png"); | 353 registerURL("ul-dot.png", "image.png", "image/png"); |
| 337 registerURL("ol-dot.png", "image.png", "image/png"); | 354 registerURL("ol-dot.png", "image.png", "image/png"); |
| 338 | 355 |
| 356 const KURL imageUrlFromDataUrl(toKURL("http://www.dataurl.com"), |
| 357 "fuchsia_background.png"); |
| 358 registerURL(imageUrlFromDataUrl, "image.png", "image/png"); |
| 359 |
| 360 registerURL("included_in_another_frame.css", "text/css"); |
| 361 registerSkipURL("included_in_another_frame.css"); |
| 362 |
| 339 serialize("css_test_page.html"); | 363 serialize("css_test_page.html"); |
| 340 | 364 |
| 341 EXPECT_EQ(15U, getResources().size()); | 365 EXPECT_EQ(16U, getResources().size()); |
| 342 | 366 |
| 343 EXPECT_FALSE(isSerialized("do_not_serialize.png", "image/png")); | 367 EXPECT_FALSE(isSerialized("do_not_serialize.png", "image/png")); |
| 368 EXPECT_FALSE(isSerialized("included_in_another_frame.css", "text/css")); |
| 344 | 369 |
| 345 EXPECT_TRUE(isSerialized("css_test_page.html", "text/html")); | 370 EXPECT_TRUE(isSerialized("css_test_page.html", "text/html")); |
| 346 EXPECT_TRUE(isSerialized("link_styles.css", "text/css")); | 371 EXPECT_TRUE(isSerialized("link_styles.css", "text/css")); |
| 347 EXPECT_TRUE(isSerialized("encoding.css", "text/css")); | 372 EXPECT_TRUE(isSerialized("encoding.css", "text/css")); |
| 348 EXPECT_TRUE(isSerialized("import_styles.css", "text/css")); | 373 EXPECT_TRUE(isSerialized("import_styles.css", "text/css")); |
| 349 EXPECT_TRUE(isSerialized("import_style_from_link.css", "text/css")); | 374 EXPECT_TRUE(isSerialized("import_style_from_link.css", "text/css")); |
| 350 EXPECT_TRUE(isSerialized("red_background.png", "image/png")); | 375 EXPECT_TRUE(isSerialized("red_background.png", "image/png")); |
| 351 EXPECT_TRUE(isSerialized("orange_background.png", "image/png")); | 376 EXPECT_TRUE(isSerialized("orange_background.png", "image/png")); |
| 352 EXPECT_TRUE(isSerialized("yellow_background.png", "image/png")); | 377 EXPECT_TRUE(isSerialized("yellow_background.png", "image/png")); |
| 353 EXPECT_TRUE(isSerialized("green_background.png", "image/png")); | 378 EXPECT_TRUE(isSerialized("green_background.png", "image/png")); |
| 354 EXPECT_TRUE(isSerialized("blue_background.png", "image/png")); | 379 EXPECT_TRUE(isSerialized("blue_background.png", "image/png")); |
| 355 EXPECT_TRUE(isSerialized("purple_background.png", "image/png")); | 380 EXPECT_TRUE(isSerialized("purple_background.png", "image/png")); |
| 356 EXPECT_TRUE(isSerialized("pink_background.png", "image/png")); | 381 EXPECT_TRUE(isSerialized("pink_background.png", "image/png")); |
| 357 EXPECT_TRUE(isSerialized("brown_background.png", "image/png")); | 382 EXPECT_TRUE(isSerialized("brown_background.png", "image/png")); |
| 358 EXPECT_TRUE(isSerialized("ul-dot.png", "image/png")); | 383 EXPECT_TRUE(isSerialized("ul-dot.png", "image/png")); |
| 359 EXPECT_TRUE(isSerialized("ol-dot.png", "image/png")); | 384 EXPECT_TRUE(isSerialized("ol-dot.png", "image/png")); |
| 360 | 385 |
| 386 EXPECT_TRUE(getResource(imageUrlFromDataUrl, "image/png")); |
| 387 |
| 361 // Ensure encodings are specified. | 388 // Ensure encodings are specified. |
| 362 EXPECT_TRUE( | 389 EXPECT_TRUE( |
| 363 getSerializedData("link_styles.css", "text/css").startsWith("@charset")); | 390 getSerializedData("link_styles.css", "text/css").startsWith("@charset")); |
| 364 EXPECT_TRUE(getSerializedData("import_styles.css", "text/css") | 391 EXPECT_TRUE(getSerializedData("import_styles.css", "text/css") |
| 365 .startsWith("@charset")); | 392 .startsWith("@charset")); |
| 366 EXPECT_TRUE(getSerializedData("import_style_from_link.css", "text/css") | 393 EXPECT_TRUE(getSerializedData("import_style_from_link.css", "text/css") |
| 367 .startsWith("@charset")); | 394 .startsWith("@charset")); |
| 368 EXPECT_TRUE(getSerializedData("encoding.css", "text/css") | 395 EXPECT_TRUE(getSerializedData("encoding.css", "text/css") |
| 369 .startsWith("@charset \"euc-kr\";")); | 396 .startsWith("@charset \"euc-kr\";")); |
| 370 | 397 |
| (...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 526 KURL(ParsedURLString, "http://foo.com?--"))); | 553 KURL(ParsedURLString, "http://foo.com?--"))); |
| 527 EXPECT_EQ("saved from url=(0020)http://foo.com/#-%2D", | 554 EXPECT_EQ("saved from url=(0020)http://foo.com/#-%2D", |
| 528 FrameSerializer::markOfTheWebDeclaration( | 555 FrameSerializer::markOfTheWebDeclaration( |
| 529 KURL(ParsedURLString, "http://foo.com#--"))); | 556 KURL(ParsedURLString, "http://foo.com#--"))); |
| 530 EXPECT_EQ("saved from url=(0026)http://foo.com/#bar-%2Dbaz", | 557 EXPECT_EQ("saved from url=(0026)http://foo.com/#bar-%2Dbaz", |
| 531 FrameSerializer::markOfTheWebDeclaration( | 558 FrameSerializer::markOfTheWebDeclaration( |
| 532 KURL(ParsedURLString, "http://foo.com#bar--baz"))); | 559 KURL(ParsedURLString, "http://foo.com#bar--baz"))); |
| 533 } | 560 } |
| 534 | 561 |
| 535 } // namespace blink | 562 } // namespace blink |
| OLD | NEW |