Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 "core/MediaTypeNames.h" | 8 #include "core/MediaTypeNames.h" |
| 8 #include "core/css/MediaValuesCached.h" | 9 #include "core/css/MediaValuesCached.h" |
| 9 #include "core/frame/Settings.h" | 10 #include "core/frame/Settings.h" |
| 10 #include "core/html/CrossOriginAttribute.h" | 11 #include "core/html/CrossOriginAttribute.h" |
| 11 #include "core/html/parser/HTMLParserOptions.h" | 12 #include "core/html/parser/HTMLParserOptions.h" |
| 12 #include "core/html/parser/HTMLResourcePreloader.h" | 13 #include "core/html/parser/HTMLResourcePreloader.h" |
| 13 #include "core/html/parser/PreloadRequest.h" | 14 #include "core/html/parser/PreloadRequest.h" |
| 14 #include "core/testing/DummyPageHolder.h" | 15 #include "core/testing/DummyPageHolder.h" |
| 16 #include "platform/exported/WrappedResourceResponse.h" | |
| 15 #include "platform/loader/fetch/ClientHintsPreferences.h" | 17 #include "platform/loader/fetch/ClientHintsPreferences.h" |
| 18 #include "platform/weborigin/SecurityOrigin.h" | |
| 19 #include "public/platform/Platform.h" | |
| 20 #include "public/platform/WebURLLoaderMockFactory.h" | |
| 16 #include "testing/gtest/include/gtest/gtest.h" | 21 #include "testing/gtest/include/gtest/gtest.h" |
| 17 #include <memory> | |
| 18 | 22 |
| 19 namespace blink { | 23 namespace blink { |
| 20 | 24 |
| 21 struct TestCase { | 25 struct TestCase { |
| 22 const char* base_url; | 26 const char* base_url; |
| 23 const char* input_html; | 27 const char* input_html; |
| 24 const char* preloaded_url; // Or nullptr if no preload is expected. | 28 const char* preloaded_url; // Or nullptr if no preload is expected. |
| 25 const char* output_base_url; | 29 const char* output_base_url; |
| 26 Resource::Type type; | 30 Resource::Type type; |
| 27 int resource_width; | 31 int resource_width; |
| 28 ClientHintsPreferences preferences; | 32 ClientHintsPreferences preferences; |
| 29 }; | 33 }; |
| 30 | 34 |
| 31 struct PreconnectTestCase { | 35 struct PreconnectTestCase { |
| 32 const char* base_url; | 36 const char* base_url; |
| 33 const char* input_html; | 37 const char* input_html; |
| 34 const char* preconnected_host; | 38 const char* preconnected_host; |
| 35 CrossOriginAttributeValue cross_origin; | 39 CrossOriginAttributeValue cross_origin; |
| 36 }; | 40 }; |
| 37 | 41 |
| 38 struct ReferrerPolicyTestCase { | 42 struct ReferrerPolicyTestCase { |
| 39 const char* base_url; | 43 const char* base_url; |
| 40 const char* input_html; | 44 const char* input_html; |
| 41 const char* preloaded_url; // Or nullptr if no preload is expected. | 45 const char* preloaded_url; // Or nullptr if no preload is expected. |
| 42 const char* output_base_url; | 46 const char* output_base_url; |
| 43 Resource::Type type; | 47 Resource::Type type; |
| 44 int resource_width; | 48 int resource_width; |
| 45 ReferrerPolicy referrer_policy; | 49 ReferrerPolicy referrer_policy; |
| 50 const char* | |
| 51 expected_referrer; // Or nullptr if the header shouldn't be checked. | |
|
Yoav Weiss
2017/04/10 12:38:44
Nit: I'm still getting used to chromium style, so
jochen (gone - plz use gerrit)
2017/04/10 13:06:31
both are fine. I made the comment a bit longer and
| |
| 46 }; | 52 }; |
| 47 | 53 |
| 48 struct NonceTestCase { | 54 struct NonceTestCase { |
| 49 const char* base_url; | 55 const char* base_url; |
| 50 const char* input_html; | 56 const char* input_html; |
| 51 const char* nonce; | 57 const char* nonce; |
| 52 }; | 58 }; |
| 53 | 59 |
| 54 class MockHTMLResourcePreloader : public ResourcePreloader { | 60 class MockHTMLResourcePreloader : public ResourcePreloader { |
| 55 public: | 61 public: |
| (...skipping 26 matching lines...) Expand all Loading... | |
| 82 void PreloadRequestVerification(Resource::Type type, | 88 void PreloadRequestVerification(Resource::Type type, |
| 83 const char* url, | 89 const char* url, |
| 84 const char* base_url, | 90 const char* base_url, |
| 85 int width, | 91 int width, |
| 86 ReferrerPolicy referrer_policy) { | 92 ReferrerPolicy referrer_policy) { |
| 87 PreloadRequestVerification(type, url, base_url, width, | 93 PreloadRequestVerification(type, url, base_url, width, |
| 88 ClientHintsPreferences()); | 94 ClientHintsPreferences()); |
| 89 EXPECT_EQ(referrer_policy, preload_request_->GetReferrerPolicy()); | 95 EXPECT_EQ(referrer_policy, preload_request_->GetReferrerPolicy()); |
| 90 } | 96 } |
| 91 | 97 |
| 98 void PreloadRequestVerification(Resource::Type type, | |
| 99 const char* url, | |
| 100 const char* base_url, | |
| 101 int width, | |
| 102 ReferrerPolicy referrer_policy, | |
| 103 Document* document, | |
| 104 const char* expected_referrer) { | |
| 105 PreloadRequestVerification(type, url, base_url, width, referrer_policy); | |
| 106 Resource* resource = preload_request_->Start(document); | |
| 107 ASSERT_TRUE(resource); | |
| 108 EXPECT_EQ(expected_referrer, resource->GetResourceRequest().HttpReferrer()); | |
| 109 } | |
| 110 | |
| 92 void PreconnectRequestVerification(const String& host, | 111 void PreconnectRequestVerification(const String& host, |
| 93 CrossOriginAttributeValue cross_origin) { | 112 CrossOriginAttributeValue cross_origin) { |
| 94 if (!host.IsNull()) { | 113 if (!host.IsNull()) { |
| 95 EXPECT_TRUE(preload_request_->IsPreconnect()); | 114 EXPECT_TRUE(preload_request_->IsPreconnect()); |
| 96 EXPECT_STREQ(preload_request_->ResourceURL().Ascii().Data(), | 115 EXPECT_STREQ(preload_request_->ResourceURL().Ascii().Data(), |
| 97 host.Ascii().Data()); | 116 host.Ascii().Data()); |
| 98 EXPECT_EQ(preload_request_->CrossOrigin(), cross_origin); | 117 EXPECT_EQ(preload_request_->CrossOrigin(), cross_origin); |
| 99 } | 118 } |
| 100 } | 119 } |
| 101 | 120 |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 148 data.display_mode = kWebDisplayModeBrowser; | 167 data.display_mode = kWebDisplayModeBrowser; |
| 149 return data; | 168 return data; |
| 150 } | 169 } |
| 151 | 170 |
| 152 void RunSetUp( | 171 void RunSetUp( |
| 153 ViewportState viewport_state, | 172 ViewportState viewport_state, |
| 154 PreloadState preload_state = kPreloadEnabled, | 173 PreloadState preload_state = kPreloadEnabled, |
| 155 ReferrerPolicy document_referrer_policy = kReferrerPolicyDefault) { | 174 ReferrerPolicy document_referrer_policy = kReferrerPolicyDefault) { |
| 156 HTMLParserOptions options(&dummy_page_holder_->GetDocument()); | 175 HTMLParserOptions options(&dummy_page_holder_->GetDocument()); |
| 157 KURL document_url(kParsedURLString, "http://whatever.test/"); | 176 KURL document_url(kParsedURLString, "http://whatever.test/"); |
| 177 dummy_page_holder_->GetDocument().SetURL(document_url); | |
| 178 dummy_page_holder_->GetDocument().SetSecurityOrigin( | |
| 179 SecurityOrigin::Create(document_url)); | |
| 158 dummy_page_holder_->GetDocument().GetSettings()->SetViewportEnabled( | 180 dummy_page_holder_->GetDocument().GetSettings()->SetViewportEnabled( |
| 159 viewport_state == kViewportEnabled); | 181 viewport_state == kViewportEnabled); |
| 160 dummy_page_holder_->GetDocument().GetSettings()->SetViewportMetaEnabled( | 182 dummy_page_holder_->GetDocument().GetSettings()->SetViewportMetaEnabled( |
| 161 viewport_state == kViewportEnabled); | 183 viewport_state == kViewportEnabled); |
| 162 dummy_page_holder_->GetDocument().GetSettings()->SetDoHtmlPreloadScanning( | 184 dummy_page_holder_->GetDocument().GetSettings()->SetDoHtmlPreloadScanning( |
| 163 preload_state == kPreloadEnabled); | 185 preload_state == kPreloadEnabled); |
| 164 dummy_page_holder_->GetDocument().SetReferrerPolicy( | 186 dummy_page_holder_->GetDocument().SetReferrerPolicy( |
| 165 document_referrer_policy); | 187 document_referrer_policy); |
| 166 scanner_ = HTMLPreloadScanner::Create( | 188 scanner_ = HTMLPreloadScanner::Create( |
| 167 options, document_url, | 189 options, document_url, |
| (...skipping 25 matching lines...) Expand all Loading... | |
| 193 test_case.cross_origin); | 215 test_case.cross_origin); |
| 194 } | 216 } |
| 195 | 217 |
| 196 void Test(ReferrerPolicyTestCase test_case) { | 218 void Test(ReferrerPolicyTestCase test_case) { |
| 197 MockHTMLResourcePreloader preloader; | 219 MockHTMLResourcePreloader preloader; |
| 198 KURL base_url(kParsedURLString, test_case.base_url); | 220 KURL base_url(kParsedURLString, test_case.base_url); |
| 199 scanner_->AppendToEnd(String(test_case.input_html)); | 221 scanner_->AppendToEnd(String(test_case.input_html)); |
| 200 PreloadRequestStream requests = scanner_->Scan(base_url, nullptr); | 222 PreloadRequestStream requests = scanner_->Scan(base_url, nullptr); |
| 201 preloader.TakeAndPreload(requests); | 223 preloader.TakeAndPreload(requests); |
| 202 | 224 |
| 203 preloader.PreloadRequestVerification( | 225 if (test_case.expected_referrer) { |
| 204 test_case.type, test_case.preloaded_url, test_case.output_base_url, | 226 preloader.PreloadRequestVerification( |
| 205 test_case.resource_width, test_case.referrer_policy); | 227 test_case.type, test_case.preloaded_url, test_case.output_base_url, |
| 228 test_case.resource_width, test_case.referrer_policy, | |
| 229 &dummy_page_holder_->GetDocument(), test_case.expected_referrer); | |
| 230 } else { | |
| 231 preloader.PreloadRequestVerification( | |
| 232 test_case.type, test_case.preloaded_url, test_case.output_base_url, | |
| 233 test_case.resource_width, test_case.referrer_policy); | |
| 234 } | |
| 206 } | 235 } |
| 207 | 236 |
| 208 void Test(NonceTestCase test_case) { | 237 void Test(NonceTestCase test_case) { |
| 209 MockHTMLResourcePreloader preloader; | 238 MockHTMLResourcePreloader preloader; |
| 210 KURL base_url(kParsedURLString, test_case.base_url); | 239 KURL base_url(kParsedURLString, test_case.base_url); |
| 211 scanner_->AppendToEnd(String(test_case.input_html)); | 240 scanner_->AppendToEnd(String(test_case.input_html)); |
| 212 PreloadRequestStream requests = scanner_->Scan(base_url, nullptr); | 241 PreloadRequestStream requests = scanner_->Scan(base_url, nullptr); |
| 213 preloader.TakeAndPreload(requests); | 242 preloader.TakeAndPreload(requests); |
| 214 | 243 |
| 215 preloader.NonceRequestVerification(test_case.nonce); | 244 preloader.NonceRequestVerification(test_case.nonce); |
| (...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 610 for (const auto& test_case : test_cases) | 639 for (const auto& test_case : test_cases) |
| 611 Test(test_case); | 640 Test(test_case); |
| 612 } | 641 } |
| 613 | 642 |
| 614 TEST_F(HTMLPreloadScannerTest, testReferrerPolicy) { | 643 TEST_F(HTMLPreloadScannerTest, testReferrerPolicy) { |
| 615 ReferrerPolicyTestCase test_cases[] = { | 644 ReferrerPolicyTestCase test_cases[] = { |
| 616 {"http://example.test", "<img src='bla.gif'/>", "bla.gif", | 645 {"http://example.test", "<img src='bla.gif'/>", "bla.gif", |
| 617 "http://example.test/", Resource::kImage, 0, kReferrerPolicyDefault}, | 646 "http://example.test/", Resource::kImage, 0, kReferrerPolicyDefault}, |
| 618 {"http://example.test", "<img referrerpolicy='origin' src='bla.gif'/>", | 647 {"http://example.test", "<img referrerpolicy='origin' src='bla.gif'/>", |
| 619 "bla.gif", "http://example.test/", Resource::kImage, 0, | 648 "bla.gif", "http://example.test/", Resource::kImage, 0, |
| 620 kReferrerPolicyOrigin}, | 649 kReferrerPolicyOrigin, nullptr}, |
| 621 {"http://example.test", | 650 {"http://example.test", |
| 622 "<meta name='referrer' content='not-a-valid-policy'><img " | 651 "<meta name='referrer' content='not-a-valid-policy'><img " |
| 623 "src='bla.gif'/>", | 652 "src='bla.gif'/>", |
| 624 "bla.gif", "http://example.test/", Resource::kImage, 0, | 653 "bla.gif", "http://example.test/", Resource::kImage, 0, |
| 625 kReferrerPolicyDefault}, | 654 kReferrerPolicyDefault, nullptr}, |
| 626 {"http://example.test", | 655 {"http://example.test", |
| 627 "<img referrerpolicy='origin' referrerpolicy='origin-when-cross-origin' " | 656 "<img referrerpolicy='origin' referrerpolicy='origin-when-cross-origin' " |
| 628 "src='bla.gif'/>", | 657 "src='bla.gif'/>", |
| 629 "bla.gif", "http://example.test/", Resource::kImage, 0, | 658 "bla.gif", "http://example.test/", Resource::kImage, 0, |
| 630 kReferrerPolicyOrigin}, | 659 kReferrerPolicyOrigin, nullptr}, |
| 631 {"http://example.test", | 660 {"http://example.test", |
| 632 "<img referrerpolicy='not-a-valid-policy' src='bla.gif'/>", "bla.gif", | 661 "<img referrerpolicy='not-a-valid-policy' src='bla.gif'/>", "bla.gif", |
| 633 "http://example.test/", Resource::kImage, 0, kReferrerPolicyDefault}, | 662 "http://example.test/", Resource::kImage, 0, kReferrerPolicyDefault, |
| 663 nullptr}, | |
| 664 {"http://example.test", | |
| 665 "<link rel=preload as=image referrerpolicy='origin-when-cross-origin' " | |
| 666 "href='bla.gif'/>", | |
| 667 "bla.gif", "http://example.test/", Resource::kImage, 0, | |
| 668 kReferrerPolicyOriginWhenCrossOrigin, nullptr}, | |
| 669 {"http://example.test", | |
| 670 "<link rel='stylesheet' href='sheet.css' type='text/css'>", "sheet.css", | |
| 671 "http://example.test/", Resource::kCSSStyleSheet, 0, | |
| 672 kReferrerPolicyDefault, nullptr}, | |
| 673 {"http://example.test", | |
| 674 "<link rel=preload as=image referrerpolicy='origin' " | |
| 675 "referrerpolicy='origin-when-cross-origin' href='bla.gif'/>", | |
| 676 "bla.gif", "http://example.test/", Resource::kImage, 0, | |
| 677 kReferrerPolicyOrigin, nullptr}, | |
| 634 {"http://example.test", | 678 {"http://example.test", |
| 635 "<meta name='referrer' content='no-referrer'><img " | 679 "<meta name='referrer' content='no-referrer'><img " |
| 636 "referrerpolicy='origin' src='bla.gif'/>", | 680 "referrerpolicy='origin' src='bla.gif'/>", |
| 637 "bla.gif", "http://example.test/", Resource::kImage, 0, | 681 "bla.gif", "http://example.test/", Resource::kImage, 0, |
| 638 kReferrerPolicyOrigin}, | 682 kReferrerPolicyOrigin, nullptr}, |
| 639 {"http://example.test", | |
| 640 "<link rel=preload as=image referrerpolicy='origin-when-cross-origin' " | |
| 641 "href='bla.gif'/>", | |
| 642 "bla.gif", "http://example.test/", Resource::kImage, 0, | |
| 643 kReferrerPolicyOriginWhenCrossOrigin}, | |
| 644 {"http://example.test", | |
| 645 "<link rel=preload as=image referrerpolicy='origin' " | |
| 646 "referrerpolicy='origin-when-cross-origin' href='bla.gif'/>", | |
| 647 "bla.gif", "http://example.test/", Resource::kImage, 0, | |
| 648 kReferrerPolicyOrigin}, | |
| 649 // The scanner's state is not reset between test cases, so all subsequent | 683 // The scanner's state is not reset between test cases, so all subsequent |
| 650 // test cases have a document referrer policy of no-referrer. | 684 // test cases have a document referrer policy of no-referrer. |
| 651 {"http://example.test", | 685 {"http://example.test", |
| 652 "<link rel=preload as=image referrerpolicy='not-a-valid-policy' " | 686 "<link rel=preload as=image referrerpolicy='not-a-valid-policy' " |
| 653 "href='bla.gif'/>", | 687 "href='bla.gif'/>", |
| 654 "bla.gif", "http://example.test/", Resource::kImage, 0, | 688 "bla.gif", "http://example.test/", Resource::kImage, 0, |
| 655 kReferrerPolicyNever}, | 689 kReferrerPolicyNever, nullptr}, |
| 656 {"http://example.test", | 690 {"http://example.test", |
| 657 "<img referrerpolicy='not-a-valid-policy' src='bla.gif'/>", "bla.gif", | 691 "<img referrerpolicy='not-a-valid-policy' src='bla.gif'/>", "bla.gif", |
| 658 "http://example.test/", Resource::kImage, 0, kReferrerPolicyNever}, | 692 "http://example.test/", Resource::kImage, 0, kReferrerPolicyNever, |
| 693 nullptr}, | |
| 659 {"http://example.test", "<img src='bla.gif'/>", "bla.gif", | 694 {"http://example.test", "<img src='bla.gif'/>", "bla.gif", |
| 660 "http://example.test/", Resource::kImage, 0, kReferrerPolicyNever}}; | 695 "http://example.test/", Resource::kImage, 0, kReferrerPolicyNever, |
| 696 nullptr}}; | |
| 661 | 697 |
| 662 for (const auto& test_case : test_cases) | 698 for (const auto& test_case : test_cases) |
| 663 Test(test_case); | 699 Test(test_case); |
| 664 } | 700 } |
| 665 | 701 |
| 666 TEST_F(HTMLPreloadScannerTest, testNonce) { | 702 TEST_F(HTMLPreloadScannerTest, testNonce) { |
| 667 NonceTestCase test_cases[] = { | 703 NonceTestCase test_cases[] = { |
| 668 {"http://example.test", "<script src='/script'></script>", ""}, | 704 {"http://example.test", "<script src='/script'></script>", ""}, |
| 669 {"http://example.test", "<script src='/script' nonce=''></script>", ""}, | 705 {"http://example.test", "<script src='/script' nonce=''></script>", ""}, |
| 670 {"http://example.test", "<script src='/script' nonce='abc'></script>", | 706 {"http://example.test", "<script src='/script' nonce='abc'></script>", |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 691 Test(test_case); | 727 Test(test_case); |
| 692 } | 728 } |
| 693 } | 729 } |
| 694 | 730 |
| 695 // Tests that a document-level referrer policy (e.g. one set by HTTP header) is | 731 // Tests that a document-level referrer policy (e.g. one set by HTTP header) is |
| 696 // applied for preload requests. | 732 // applied for preload requests. |
| 697 TEST_F(HTMLPreloadScannerTest, testReferrerPolicyOnDocument) { | 733 TEST_F(HTMLPreloadScannerTest, testReferrerPolicyOnDocument) { |
| 698 RunSetUp(kViewportEnabled, kPreloadEnabled, kReferrerPolicyOrigin); | 734 RunSetUp(kViewportEnabled, kPreloadEnabled, kReferrerPolicyOrigin); |
| 699 ReferrerPolicyTestCase test_cases[] = { | 735 ReferrerPolicyTestCase test_cases[] = { |
| 700 {"http://example.test", "<img src='blah.gif'/>", "blah.gif", | 736 {"http://example.test", "<img src='blah.gif'/>", "blah.gif", |
| 701 "http://example.test/", Resource::kImage, 0, kReferrerPolicyOrigin}, | 737 "http://example.test/", Resource::kImage, 0, kReferrerPolicyOrigin, |
| 738 nullptr}, | |
| 702 {"http://example.test", "<style>@import url('blah.css');</style>", | 739 {"http://example.test", "<style>@import url('blah.css');</style>", |
| 703 "blah.css", "http://example.test/", Resource::kCSSStyleSheet, 0, | 740 "blah.css", "http://example.test/", Resource::kCSSStyleSheet, 0, |
| 704 kReferrerPolicyOrigin}, | 741 kReferrerPolicyOrigin, nullptr}, |
| 705 // Tests that a meta-delivered referrer policy with an unrecognized policy | 742 // Tests that a meta-delivered referrer policy with an unrecognized policy |
| 706 // value does not override the document's referrer policy. | 743 // value does not override the document's referrer policy. |
| 707 {"http://example.test", | 744 {"http://example.test", |
| 708 "<meta name='referrer' content='not-a-valid-policy'><img " | 745 "<meta name='referrer' content='not-a-valid-policy'><img " |
| 709 "src='bla.gif'/>", | 746 "src='bla.gif'/>", |
| 710 "bla.gif", "http://example.test/", Resource::kImage, 0, | 747 "bla.gif", "http://example.test/", Resource::kImage, 0, |
| 711 kReferrerPolicyOrigin}, | 748 kReferrerPolicyOrigin, nullptr}, |
| 712 // Tests that a meta-delivered referrer policy with a valid policy value | 749 // Tests that a meta-delivered referrer policy with a valid policy value |
| 713 // does override the document's referrer policy. | 750 // does override the document's referrer policy. |
| 714 {"http://example.test", | 751 {"http://example.test", |
| 715 "<meta name='referrer' content='unsafe-url'><img src='bla.gif'/>", | 752 "<meta name='referrer' content='unsafe-url'><img src='bla.gif'/>", |
| 716 "bla.gif", "http://example.test/", Resource::kImage, 0, | 753 "bla.gif", "http://example.test/", Resource::kImage, 0, |
| 717 kReferrerPolicyAlways}, | 754 kReferrerPolicyAlways, nullptr}, |
| 718 }; | 755 }; |
| 719 | 756 |
| 720 for (const auto& test_case : test_cases) | 757 for (const auto& test_case : test_cases) |
| 721 Test(test_case); | 758 Test(test_case); |
| 722 } | 759 } |
| 723 | 760 |
| 724 TEST_F(HTMLPreloadScannerTest, testLinkRelPreload) { | 761 TEST_F(HTMLPreloadScannerTest, testLinkRelPreload) { |
| 725 TestCase test_cases[] = { | 762 TestCase test_cases[] = { |
| 726 {"http://example.test", "<link rel=preload href=bla>", "bla", | 763 {"http://example.test", "<link rel=preload href=bla>", "bla", |
| 727 "http://example.test/", Resource::kRaw, 0}, | 764 "http://example.test/", Resource::kRaw, 0}, |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 839 {"http://example.test", "<link rel=preload href=bla as=SCRIPT>", "bla", | 876 {"http://example.test", "<link rel=preload href=bla as=SCRIPT>", "bla", |
| 840 "http://example.test/", Resource::kScript, 0}, | 877 "http://example.test/", Resource::kScript, 0}, |
| 841 {"http://example.test", "<link rel=preload href=bla as=fOnT>", "bla", | 878 {"http://example.test", "<link rel=preload href=bla as=fOnT>", "bla", |
| 842 "http://example.test/", Resource::kFont, 0}, | 879 "http://example.test/", Resource::kFont, 0}, |
| 843 }; | 880 }; |
| 844 | 881 |
| 845 for (const auto& test_case : test_cases) | 882 for (const auto& test_case : test_cases) |
| 846 Test(test_case); | 883 Test(test_case); |
| 847 } | 884 } |
| 848 | 885 |
| 886 TEST_F(HTMLPreloadScannerTest, ReferrerHeader) { | |
| 887 RunSetUp(kViewportEnabled, kPreloadEnabled, kReferrerPolicyAlways); | |
| 888 | |
| 889 KURL preload_url(kParsedURLString, "http://example.test/sheet.css"); | |
| 890 Platform::Current()->GetURLLoaderMockFactory()->RegisterURL( | |
| 891 preload_url, WrappedResourceResponse(ResourceResponse()), ""); | |
| 892 | |
| 893 ReferrerPolicyTestCase test_case = { | |
| 894 "http://example.test", | |
| 895 "<link rel='stylesheet' href='sheet.css' type='text/css'>", | |
| 896 "sheet.css", | |
| 897 "http://example.test/", | |
| 898 Resource::kCSSStyleSheet, | |
| 899 0, | |
| 900 kReferrerPolicyAlways, | |
| 901 "http://whatever.test/"}; | |
| 902 Test(test_case); | |
| 903 } | |
| 904 | |
| 849 } // namespace blink | 905 } // namespace blink |
| OLD | NEW |