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

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

Issue 2780533002: Use Referrer-Policy headers for CSS stylesheets (Closed)
Patch Set: updates Created 3 years, 8 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 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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/CSSPreloadScanner.h" 5 #include "core/html/parser/CSSPreloadScanner.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include "core/frame/Settings.h" 8 #include "core/frame/Settings.h"
9 #include "core/html/parser/HTMLResourcePreloader.h" 9 #include "core/html/parser/HTMLResourcePreloader.h"
10 #include "core/testing/DummyPageHolder.h" 10 #include "core/testing/DummyPageHolder.h"
11 #include "platform/exported/WrappedResourceResponse.h"
11 #include "platform/heap/Heap.h" 12 #include "platform/heap/Heap.h"
12 #include "platform/loader/fetch/FetchContext.h" 13 #include "platform/loader/fetch/FetchContext.h"
13 #include "platform/loader/fetch/Resource.h" 14 #include "platform/loader/fetch/Resource.h"
14 #include "platform/loader/fetch/ResourceError.h" 15 #include "platform/loader/fetch/ResourceError.h"
15 #include "platform/loader/fetch/ResourceFetcher.h" 16 #include "platform/loader/fetch/ResourceFetcher.h"
16 #include "platform/loader/fetch/ResourceRequest.h" 17 #include "platform/loader/fetch/ResourceRequest.h"
17 #include "platform/weborigin/KURL.h" 18 #include "platform/weborigin/KURL.h"
19 #include "public/platform/Platform.h"
20 #include "public/platform/WebURLLoaderMockFactory.h"
18 #include "testing/gtest/include/gtest/gtest.h" 21 #include "testing/gtest/include/gtest/gtest.h"
19 22
20 namespace blink { 23 namespace blink {
21 24
22 namespace { 25 namespace {
23 26
24 class MockHTMLResourcePreloader : public HTMLResourcePreloader { 27 class MockHTMLResourcePreloader : public HTMLResourcePreloader {
25 WTF_MAKE_NONCOPYABLE(MockHTMLResourcePreloader); 28 WTF_MAKE_NONCOPYABLE(MockHTMLResourcePreloader);
26 29
27 public: 30 public:
28 MockHTMLResourcePreloader(Document& document) 31 explicit MockHTMLResourcePreloader(Document& document,
29 : HTMLResourcePreloader(document) {} 32 const char* expectedReferrer = nullptr)
33 : HTMLResourcePreloader(document), m_expectedReferrer(expectedReferrer) {}
30 34
31 void preload(std::unique_ptr<PreloadRequest> preloadRequest, 35 void preload(std::unique_ptr<PreloadRequest> preloadRequest,
32 const NetworkHintsInterface&) override {} 36 const NetworkHintsInterface&) override {
37 if (m_expectedReferrer) {
38 Resource* resource = preloadRequest->start(document());
39 if (resource) {
40 EXPECT_EQ(m_expectedReferrer,
41 resource->resourceRequest().httpReferrer());
42 }
43 }
44 }
45
46 const char* m_expectedReferrer;
33 }; 47 };
34 48
35 class PreloadRecordingCSSPreloaderResourceClient final 49 class PreloadRecordingCSSPreloaderResourceClient final
36 : public CSSPreloaderResourceClient { 50 : public CSSPreloaderResourceClient {
37 public: 51 public:
38 PreloadRecordingCSSPreloaderResourceClient(Resource* resource, 52 PreloadRecordingCSSPreloaderResourceClient(Resource* resource,
39 HTMLResourcePreloader* preloader) 53 HTMLResourcePreloader* preloader)
40 : CSSPreloaderResourceClient(resource, preloader) {} 54 : CSSPreloaderResourceClient(resource, preloader) {}
41 55
42 void fetchPreloads(PreloadRequestStream& preloads) override { 56 void fetchPreloads(PreloadRequestStream& preloads) override {
43 for (const auto& it : preloads) 57 for (const auto& it : preloads) {
44 m_preloadUrls.push_back(it->resourceURL()); 58 m_preloadUrls.push_back(it->resourceURL());
59 m_preloadReferrerPolicies.push_back(it->getReferrerPolicy());
60 }
45 CSSPreloaderResourceClient::fetchPreloads(preloads); 61 CSSPreloaderResourceClient::fetchPreloads(preloads);
46 } 62 }
47 63
48 Vector<String> m_preloadUrls; 64 Vector<String> m_preloadUrls;
65 Vector<ReferrerPolicy> m_preloadReferrerPolicies;
49 }; 66 };
50 67
51 class CSSPreloadScannerTest : public ::testing::Test {}; 68 class CSSPreloadScannerTest : public ::testing::Test {};
52 69
53 } // namespace 70 } // namespace
54 71
55 TEST_F(CSSPreloadScannerTest, ScanFromResourceClient) { 72 TEST_F(CSSPreloadScannerTest, ScanFromResourceClient) {
56 std::unique_ptr<DummyPageHolder> dummyPageHolder = 73 std::unique_ptr<DummyPageHolder> dummyPageHolder =
57 DummyPageHolder::create(IntSize(500, 500)); 74 DummyPageHolder::create(IntSize(500, 500));
58 dummyPageHolder->document().settings()->setCSSExternalScannerNoPreload(true); 75 dummyPageHolder->document().settings()->setCSSExternalScannerNoPreload(true);
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
149 dummyPageHolder->document().shutdown(); 166 dummyPageHolder->document().shutdown();
150 167
151 const char* data = "@import url('http://127.0.0.1/preload.css');"; 168 const char* data = "@import url('http://127.0.0.1/preload.css');";
152 resource->appendData(data, strlen(data)); 169 resource->appendData(data, strlen(data));
153 170
154 // Do not expect to gather any preloads, as the document loader is invalid, 171 // Do not expect to gather any preloads, as the document loader is invalid,
155 // which means we can't notify WebLoadingBehaviorData of the preloads. 172 // which means we can't notify WebLoadingBehaviorData of the preloads.
156 EXPECT_EQ(0u, resourceClient->m_preloadUrls.size()); 173 EXPECT_EQ(0u, resourceClient->m_preloadUrls.size());
157 } 174 }
158 175
176 TEST_F(CSSPreloadScannerTest, ReferrerPolicyHeader) {
177 std::unique_ptr<DummyPageHolder> dummyPageHolder =
178 DummyPageHolder::create(IntSize(500, 500));
179 dummyPageHolder->document().settings()->setCSSExternalScannerPreload(true);
180
181 MockHTMLResourcePreloader* preloader = new MockHTMLResourcePreloader(
182 dummyPageHolder->document(), "http://127.0.0.1/foo.css");
183
184 KURL url(ParsedURLString, "http://127.0.0.1/foo.css");
185 ResourceResponse response;
186 response.setURL(url);
187 response.setHTTPStatusCode(200);
188 response.setHTTPHeaderField("referrer-policy", "unsafe-url");
189 CSSStyleSheetResource* resource =
190 CSSStyleSheetResource::createForTest(ResourceRequest(url), "utf-8");
191 resource->setStatus(ResourceStatus::Pending);
192 resource->setResponse(response);
193
194 PreloadRecordingCSSPreloaderResourceClient* resourceClient =
195 new PreloadRecordingCSSPreloaderResourceClient(resource, preloader);
196
197 KURL preloadURL(ParsedURLString, "http://127.0.0.1/preload.css");
198 Platform::current()->getURLLoaderMockFactory()->registerURL(
199 preloadURL, WrappedResourceResponse(ResourceResponse()), "");
200
201 const char* data = "@import url('http://127.0.0.1/preload.css');";
202 resource->appendData(data, strlen(data));
203
204 EXPECT_EQ(Resource::PreloadNotReferenced, resource->getPreloadResult());
205 EXPECT_EQ(1u, resourceClient->m_preloadUrls.size());
206 EXPECT_EQ("http://127.0.0.1/preload.css",
207 resourceClient->m_preloadUrls.front());
208 EXPECT_EQ(ReferrerPolicyAlways,
209 resourceClient->m_preloadReferrerPolicies.front());
210 }
211
159 } // namespace blink 212 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698