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

Side by Side Diff: third_party/WebKit/Source/core/html/parser/HTMLPreloadScannerTest.cpp

Issue 2855163002: Avoid sending mixed-content requests for ImageSet contexts (Closed)
Patch Set: Better check and a test Created 3 years, 7 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 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "core/html/parser/HTMLPreloadScanner.h" 5 #include "core/html/parser/HTMLPreloadScanner.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include "core/MediaTypeNames.h" 8 #include "core/MediaTypeNames.h"
9 #include "core/css/MediaValuesCached.h" 9 #include "core/css/MediaValuesCached.h"
10 #include "core/frame/Settings.h" 10 #include "core/frame/Settings.h"
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
51 // shouldn't be checked (and no network request should be created). 51 // shouldn't be checked (and no network request should be created).
52 const char* expected_referrer; 52 const char* expected_referrer;
53 }; 53 };
54 54
55 struct NonceTestCase { 55 struct NonceTestCase {
56 const char* base_url; 56 const char* base_url;
57 const char* input_html; 57 const char* input_html;
58 const char* nonce; 58 const char* nonce;
59 }; 59 };
60 60
61 struct ContextTestCase {
62 const char* base_url;
63 const char* input_html;
64 const char* preloaded_url; // Or nullptr if no preload is expected.
65 bool is_image_set;
66 };
67
61 class MockHTMLResourcePreloader : public ResourcePreloader { 68 class MockHTMLResourcePreloader : public ResourcePreloader {
62 public: 69 public:
63 void PreloadRequestVerification(Resource::Type type, 70 void PreloadRequestVerification(Resource::Type type,
64 const char* url, 71 const char* url,
65 const char* base_url, 72 const char* base_url,
66 int width, 73 int width,
67 const ClientHintsPreferences& preferences) { 74 const ClientHintsPreferences& preferences) {
68 if (!url) { 75 if (!url) {
69 EXPECT_FALSE(preload_request_); 76 EXPECT_FALSE(preload_request_);
70 return; 77 return;
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
120 } 127 }
121 128
122 void NonceRequestVerification(const char* nonce) { 129 void NonceRequestVerification(const char* nonce) {
123 ASSERT_TRUE(preload_request_.get()); 130 ASSERT_TRUE(preload_request_.get());
124 if (strlen(nonce)) 131 if (strlen(nonce))
125 EXPECT_EQ(nonce, preload_request_->Nonce()); 132 EXPECT_EQ(nonce, preload_request_->Nonce());
126 else 133 else
127 EXPECT_TRUE(preload_request_->Nonce().IsEmpty()); 134 EXPECT_TRUE(preload_request_->Nonce().IsEmpty());
128 } 135 }
129 136
137 void ContextVerification(bool is_image_set) {
138 ASSERT_TRUE(preload_request_.get());
139 EXPECT_EQ(preload_request_->IsImageSetForTestingOnly(), is_image_set);
140 }
141
130 protected: 142 protected:
131 void Preload(std::unique_ptr<PreloadRequest> preload_request, 143 void Preload(std::unique_ptr<PreloadRequest> preload_request,
132 const NetworkHintsInterface&) override { 144 const NetworkHintsInterface&) override {
133 preload_request_ = std::move(preload_request); 145 preload_request_ = std::move(preload_request);
134 } 146 }
135 147
136 private: 148 private:
137 std::unique_ptr<PreloadRequest> preload_request_; 149 std::unique_ptr<PreloadRequest> preload_request_;
138 }; 150 };
139 151
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
239 void Test(NonceTestCase test_case) { 251 void Test(NonceTestCase test_case) {
240 MockHTMLResourcePreloader preloader; 252 MockHTMLResourcePreloader preloader;
241 KURL base_url(kParsedURLString, test_case.base_url); 253 KURL base_url(kParsedURLString, test_case.base_url);
242 scanner_->AppendToEnd(String(test_case.input_html)); 254 scanner_->AppendToEnd(String(test_case.input_html));
243 PreloadRequestStream requests = scanner_->Scan(base_url, nullptr); 255 PreloadRequestStream requests = scanner_->Scan(base_url, nullptr);
244 preloader.TakeAndPreload(requests); 256 preloader.TakeAndPreload(requests);
245 257
246 preloader.NonceRequestVerification(test_case.nonce); 258 preloader.NonceRequestVerification(test_case.nonce);
247 } 259 }
248 260
261 void Test(ContextTestCase test_case) {
262 MockHTMLResourcePreloader preloader;
263 KURL base_url(kParsedURLString, test_case.base_url);
264 scanner_->AppendToEnd(String(test_case.input_html));
265 PreloadRequestStream requests = scanner_->Scan(base_url, nullptr);
266 preloader.TakeAndPreload(requests);
267
268 preloader.ContextVerification(test_case.is_image_set);
269 }
270
249 private: 271 private:
250 std::unique_ptr<DummyPageHolder> dummy_page_holder_; 272 std::unique_ptr<DummyPageHolder> dummy_page_holder_;
251 std::unique_ptr<HTMLPreloadScanner> scanner_; 273 std::unique_ptr<HTMLPreloadScanner> scanner_;
252 }; 274 };
253 275
254 TEST_F(HTMLPreloadScannerTest, testImages) { 276 TEST_F(HTMLPreloadScannerTest, testImages) {
255 TestCase test_cases[] = { 277 TestCase test_cases[] = {
256 {"http://example.test", "<img src='bla.gif'>", "bla.gif", 278 {"http://example.test", "<img src='bla.gif'>", "bla.gif",
257 "http://example.test/", Resource::kImage, 0}, 279 "http://example.test/", Resource::kImage, 0},
258 {"http://example.test", "<img srcset='bla.gif 320w, blabla.gif 640w'>", 280 {"http://example.test", "<img srcset='bla.gif 320w, blabla.gif 640w'>",
(...skipping 376 matching lines...) Expand 10 before | Expand all | Expand 10 after
635 "<picture><source media='(max-width: 400px)' type='image/webp' " 657 "<picture><source media='(max-width: 400px)' type='image/webp' "
636 "srcset='srcset_bla.gif'><img sizes='50vw' srcset='bla.gif " 658 "srcset='srcset_bla.gif'><img sizes='50vw' srcset='bla.gif "
637 "500w'></picture>", 659 "500w'></picture>",
638 "bla.gif", "http://example.test/", Resource::kImage, 250}, 660 "bla.gif", "http://example.test/", Resource::kImage, 250},
639 }; 661 };
640 662
641 for (const auto& test_case : test_cases) 663 for (const auto& test_case : test_cases)
642 Test(test_case); 664 Test(test_case);
643 } 665 }
644 666
667 TEST_F(HTMLPreloadScannerTest, testContext) {
668 ContextTestCase test_cases[] = {
669 {"http://example.test",
670 "<picture><source srcset='srcset_bla.gif'><img src='bla.gif'></picture>",
671 "srcset_bla.gif", true},
672 {"http://example.test", "<img src='bla.gif'>", "bla.gif", false},
673 {"http://example.test", "<img srcset='bla.gif'>", "bla.gif", true},
674 };
675
676 for (const auto& test_case : test_cases)
677 Test(test_case);
678 }
679
645 TEST_F(HTMLPreloadScannerTest, testReferrerPolicy) { 680 TEST_F(HTMLPreloadScannerTest, testReferrerPolicy) {
646 ReferrerPolicyTestCase test_cases[] = { 681 ReferrerPolicyTestCase test_cases[] = {
647 {"http://example.test", "<img src='bla.gif'/>", "bla.gif", 682 {"http://example.test", "<img src='bla.gif'/>", "bla.gif",
648 "http://example.test/", Resource::kImage, 0, kReferrerPolicyDefault}, 683 "http://example.test/", Resource::kImage, 0, kReferrerPolicyDefault},
649 {"http://example.test", "<img referrerpolicy='origin' src='bla.gif'/>", 684 {"http://example.test", "<img referrerpolicy='origin' src='bla.gif'/>",
650 "bla.gif", "http://example.test/", Resource::kImage, 0, 685 "bla.gif", "http://example.test/", Resource::kImage, 0,
651 kReferrerPolicyOrigin, nullptr}, 686 kReferrerPolicyOrigin, nullptr},
652 {"http://example.test", 687 {"http://example.test",
653 "<meta name='referrer' content='not-a-valid-policy'><img " 688 "<meta name='referrer' content='not-a-valid-policy'><img "
654 "src='bla.gif'/>", 689 "src='bla.gif'/>",
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after
898 "sheet.css", 933 "sheet.css",
899 "http://example.test/", 934 "http://example.test/",
900 Resource::kCSSStyleSheet, 935 Resource::kCSSStyleSheet,
901 0, 936 0,
902 kReferrerPolicyAlways, 937 kReferrerPolicyAlways,
903 "http://whatever.test/"}; 938 "http://whatever.test/"};
904 Test(test_case); 939 Test(test_case);
905 } 940 }
906 941
907 } // namespace blink 942 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698