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

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 bool m_storeReferrer;
estark 2017/03/28 18:17:21 unused
jochen (gone - plz use gerrit) 2017/03/29 08:13:11 deleted
47 const char* m_expectedReferrer;
33 }; 48 };
34 49
35 class PreloadRecordingCSSPreloaderResourceClient final 50 class PreloadRecordingCSSPreloaderResourceClient final
36 : public CSSPreloaderResourceClient { 51 : public CSSPreloaderResourceClient {
37 public: 52 public:
38 PreloadRecordingCSSPreloaderResourceClient(Resource* resource, 53 PreloadRecordingCSSPreloaderResourceClient(Resource* resource,
39 HTMLResourcePreloader* preloader) 54 HTMLResourcePreloader* preloader)
40 : CSSPreloaderResourceClient(resource, preloader) {} 55 : CSSPreloaderResourceClient(resource, preloader) {}
41 56
42 void fetchPreloads(PreloadRequestStream& preloads) override { 57 void fetchPreloads(PreloadRequestStream& preloads) override {
43 for (const auto& it : preloads) 58 for (const auto& it : preloads) {
44 m_preloadUrls.push_back(it->resourceURL()); 59 m_preloadUrls.push_back(it->resourceURL());
60 m_preloadReferrerPolicies.push_back(it->getReferrerPolicy());
61 }
45 CSSPreloaderResourceClient::fetchPreloads(preloads); 62 CSSPreloaderResourceClient::fetchPreloads(preloads);
46 } 63 }
47 64
48 Vector<String> m_preloadUrls; 65 Vector<String> m_preloadUrls;
66 Vector<ReferrerPolicy> m_preloadReferrerPolicies;
49 }; 67 };
50 68
51 class CSSPreloadScannerTest : public ::testing::Test {}; 69 class CSSPreloadScannerTest : public ::testing::Test {};
52 70
53 } // namespace 71 } // namespace
54 72
55 TEST_F(CSSPreloadScannerTest, ScanFromResourceClient) { 73 TEST_F(CSSPreloadScannerTest, ScanFromResourceClient) {
56 std::unique_ptr<DummyPageHolder> dummyPageHolder = 74 std::unique_ptr<DummyPageHolder> dummyPageHolder =
57 DummyPageHolder::create(IntSize(500, 500)); 75 DummyPageHolder::create(IntSize(500, 500));
58 dummyPageHolder->document().settings()->setCSSExternalScannerNoPreload(true); 76 dummyPageHolder->document().settings()->setCSSExternalScannerNoPreload(true);
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
149 dummyPageHolder->document().shutdown(); 167 dummyPageHolder->document().shutdown();
150 168
151 const char* data = "@import url('http://127.0.0.1/preload.css');"; 169 const char* data = "@import url('http://127.0.0.1/preload.css');";
152 resource->appendData(data, strlen(data)); 170 resource->appendData(data, strlen(data));
153 171
154 // Do not expect to gather any preloads, as the document loader is invalid, 172 // Do not expect to gather any preloads, as the document loader is invalid,
155 // which means we can't notify WebLoadingBehaviorData of the preloads. 173 // which means we can't notify WebLoadingBehaviorData of the preloads.
156 EXPECT_EQ(0u, resourceClient->m_preloadUrls.size()); 174 EXPECT_EQ(0u, resourceClient->m_preloadUrls.size());
157 } 175 }
158 176
177 TEST_F(CSSPreloadScannerTest, ReferrerPolicyHeader) {
178 std::unique_ptr<DummyPageHolder> dummyPageHolder =
179 DummyPageHolder::create(IntSize(500, 500));
180 dummyPageHolder->document().settings()->setCSSExternalScannerPreload(true);
181
182 MockHTMLResourcePreloader* preloader = new MockHTMLResourcePreloader(
183 dummyPageHolder->document(), "http://127.0.0.1/foo.css");
184
185 KURL url(ParsedURLString, "http://127.0.0.1/foo.css");
186 ResourceResponse response;
187 response.setURL(url);
188 response.setHTTPStatusCode(200);
189 response.setHTTPHeaderField("referrer-policy", "unsafe-url");
190 CSSStyleSheetResource* resource =
191 CSSStyleSheetResource::createForTest(ResourceRequest(url), "utf-8");
192 resource->setStatus(ResourceStatus::Pending);
193 resource->setResponse(response);
194
195 PreloadRecordingCSSPreloaderResourceClient* resourceClient =
196 new PreloadRecordingCSSPreloaderResourceClient(resource, preloader);
197
198 KURL preloadURL(ParsedURLString, "http://127.0.0.1/preload.css");
199 Platform::current()->getURLLoaderMockFactory()->registerURL(
200 preloadURL, WrappedResourceResponse(ResourceResponse()), "");
201
202 const char* data = "@import url('http://127.0.0.1/preload.css');";
203 resource->appendData(data, strlen(data));
204
205 EXPECT_EQ(Resource::PreloadNotReferenced, resource->getPreloadResult());
206 EXPECT_EQ(1u, resourceClient->m_preloadUrls.size());
207 EXPECT_EQ("http://127.0.0.1/preload.css",
208 resourceClient->m_preloadUrls.front());
209 EXPECT_EQ(ReferrerPolicyAlways,
210 resourceClient->m_preloadReferrerPolicies.front());
211 }
212
159 } // namespace blink 213 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698