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/loader/LinkLoader.h" | 5 #include "core/loader/LinkLoader.h" |
6 | 6 |
7 #include "core/fetch/ResourceFetcher.h" | 7 #include "core/fetch/ResourceFetcher.h" |
8 #include "core/frame/Settings.h" | 8 #include "core/frame/Settings.h" |
9 #include "core/html/LinkRelAttribute.h" | 9 #include "core/html/LinkRelAttribute.h" |
10 #include "core/loader/DocumentLoader.h" | 10 #include "core/loader/DocumentLoader.h" |
11 #include "core/loader/LinkLoaderClient.h" | 11 #include "core/loader/LinkLoaderClient.h" |
12 #include "core/loader/NetworkHintsInterface.h" | 12 #include "core/loader/NetworkHintsInterface.h" |
13 #include "core/testing/DummyPageHolder.h" | 13 #include "core/testing/DummyPageHolder.h" |
14 #include "platform/network/ResourceLoadPriority.h" | 14 #include "platform/network/ResourceLoadPriority.h" |
15 #include "testing/gtest/include/gtest/gtest.h" | 15 #include "testing/gtest/include/gtest/gtest.h" |
16 #include <base/macros.h> | 16 #include <base/macros.h> |
17 | 17 |
18 namespace blink { | 18 namespace blink { |
19 | 19 |
20 class MockLinkLoaderClient : public LinkLoaderClient { | 20 class MockLinkLoaderClient final : public NoBaseWillBeGarbageCollectedFinalized<
MockLinkLoaderClient>, public LinkLoaderClient { |
| 21 WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(MockLinkLoaderClient); |
21 public: | 22 public: |
22 MockLinkLoaderClient(bool shouldLoad) | 23 static PassOwnPtrWillBeRawPtr<MockLinkLoaderClient> create(bool shouldLoad) |
23 : m_shouldLoad(shouldLoad) | |
24 { | 24 { |
| 25 return adoptPtrWillBeNoop(new MockLinkLoaderClient(shouldLoad)); |
25 } | 26 } |
26 | 27 |
| 28 DEFINE_INLINE_VIRTUAL_TRACE() { LinkLoaderClient::trace(visitor); } |
| 29 |
27 bool shouldLoadLink() override | 30 bool shouldLoadLink() override |
28 { | 31 { |
29 return m_shouldLoad; | 32 return m_shouldLoad; |
30 } | 33 } |
31 | 34 |
32 void linkLoaded() override {} | 35 void linkLoaded() override {} |
33 void linkLoadingErrored() override {} | 36 void linkLoadingErrored() override {} |
34 void didStartLinkPrerender() override {} | 37 void didStartLinkPrerender() override {} |
35 void didStopLinkPrerender() override {} | 38 void didStopLinkPrerender() override {} |
36 void didSendLoadForLinkPrerender() override {} | 39 void didSendLoadForLinkPrerender() override {} |
37 void didSendDOMContentLoadedForLinkPrerender() override {} | 40 void didSendDOMContentLoadedForLinkPrerender() override {} |
38 | 41 |
39 private: | 42 private: |
| 43 explicit MockLinkLoaderClient(bool shouldLoad) |
| 44 : m_shouldLoad(shouldLoad) |
| 45 { |
| 46 } |
| 47 |
40 bool m_shouldLoad; | 48 bool m_shouldLoad; |
41 }; | 49 }; |
42 | 50 |
43 class NetworkHintsMock : public NetworkHintsInterface { | 51 class NetworkHintsMock : public NetworkHintsInterface { |
44 public: | 52 public: |
45 NetworkHintsMock() | 53 NetworkHintsMock() |
46 : m_didDnsPrefetch(false) | 54 : m_didDnsPrefetch(false) |
47 , m_didPreconnect(false) | 55 , m_didPreconnect(false) |
48 { | 56 { |
49 } | 57 } |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
94 // TODO(yoav): subresource should be *very* low priority (rather than lo
w). | 102 // TODO(yoav): subresource should be *very* low priority (rather than lo
w). |
95 {"data://example.test/cat.empty", "", ResourceLoadPriorityLow, WebURLReq
uest::RequestContextSubresource, true, ""}, | 103 {"data://example.test/cat.empty", "", ResourceLoadPriorityLow, WebURLReq
uest::RequestContextSubresource, true, ""}, |
96 {"data://example.test/cat.blob", "blabla", ResourceLoadPriorityLow, WebU
RLRequest::RequestContextSubresource, true, ""}, | 104 {"data://example.test/cat.blob", "blabla", ResourceLoadPriorityLow, WebU
RLRequest::RequestContextSubresource, true, ""}, |
97 {"bla://example.test/cat.gif", "image", ResourceLoadPriorityUnresolved,
WebURLRequest::RequestContextImage, false, ""}, | 105 {"bla://example.test/cat.gif", "image", ResourceLoadPriorityUnresolved,
WebURLRequest::RequestContextImage, false, ""}, |
98 }; | 106 }; |
99 | 107 |
100 // Test the cases with a single header | 108 // Test the cases with a single header |
101 for (const auto& testCase : cases) { | 109 for (const auto& testCase : cases) { |
102 OwnPtr<DummyPageHolder> dummyPageHolder = DummyPageHolder::create(IntSiz
e(500, 500)); | 110 OwnPtr<DummyPageHolder> dummyPageHolder = DummyPageHolder::create(IntSiz
e(500, 500)); |
103 dummyPageHolder->frame().settings()->setScriptEnabled(true); | 111 dummyPageHolder->frame().settings()->setScriptEnabled(true); |
104 MockLinkLoaderClient loaderClient(testCase.shouldLoad); | 112 OwnPtrWillBePersistent<MockLinkLoaderClient> loaderClient = MockLinkLoad
erClient::create(testCase.shouldLoad); |
105 OwnPtrWillBeRawPtr<LinkLoader> loader = LinkLoader::create(&loaderClient
); | 113 OwnPtrWillBeRawPtr<LinkLoader> loader = LinkLoader::create(loaderClient.
get()); |
106 KURL hrefURL = KURL(KURL(), testCase.href); | 114 KURL hrefURL = KURL(KURL(), testCase.href); |
107 loader->loadLink(LinkRelAttribute("preload"), | 115 loader->loadLink(LinkRelAttribute("preload"), |
108 CrossOriginAttributeNotSet, | 116 CrossOriginAttributeNotSet, |
109 String(), | 117 String(), |
110 testCase.as, | 118 testCase.as, |
111 hrefURL, | 119 hrefURL, |
112 dummyPageHolder->document(), | 120 dummyPageHolder->document(), |
113 NetworkHintsMock()); | 121 NetworkHintsMock()); |
114 ASSERT(dummyPageHolder->document().fetcher()); | 122 ASSERT(dummyPageHolder->document().fetcher()); |
115 WillBeHeapListHashSet<RawPtrWillBeMember<Resource>>* preloads = dummyPag
eHolder->document().fetcher()->preloads(); | 123 WillBeHeapListHashSet<RawPtrWillBeMember<Resource>>* preloads = dummyPag
eHolder->document().fetcher()->preloads(); |
(...skipping 25 matching lines...) Expand all Loading... |
141 {"https://example.com/", true}, | 149 {"https://example.com/", true}, |
142 {"//example.com/", true}, | 150 {"//example.com/", true}, |
143 }; | 151 }; |
144 | 152 |
145 // TODO(yoav): Test (and fix) shouldLoad = false | 153 // TODO(yoav): Test (and fix) shouldLoad = false |
146 | 154 |
147 // Test the cases with a single header | 155 // Test the cases with a single header |
148 for (const auto& testCase : cases) { | 156 for (const auto& testCase : cases) { |
149 OwnPtr<DummyPageHolder> dummyPageHolder = DummyPageHolder::create(IntSiz
e(500, 500)); | 157 OwnPtr<DummyPageHolder> dummyPageHolder = DummyPageHolder::create(IntSiz
e(500, 500)); |
150 dummyPageHolder->document().settings()->setDNSPrefetchingEnabled(true); | 158 dummyPageHolder->document().settings()->setDNSPrefetchingEnabled(true); |
151 MockLinkLoaderClient loaderClient(testCase.shouldLoad); | 159 OwnPtrWillBePersistent<MockLinkLoaderClient> loaderClient = MockLinkLoad
erClient::create(testCase.shouldLoad); |
152 OwnPtrWillBeRawPtr<LinkLoader> loader = LinkLoader::create(&loaderClient
); | 160 OwnPtrWillBeRawPtr<LinkLoader> loader = LinkLoader::create(loaderClient.
get()); |
153 KURL hrefURL = KURL(KURL(ParsedURLStringTag(), String("http://example.co
m")), testCase.href); | 161 KURL hrefURL = KURL(KURL(ParsedURLStringTag(), String("http://example.co
m")), testCase.href); |
154 NetworkHintsMock networkHints; | 162 NetworkHintsMock networkHints; |
155 loader->loadLink(LinkRelAttribute("dns-prefetch"), | 163 loader->loadLink(LinkRelAttribute("dns-prefetch"), |
156 CrossOriginAttributeNotSet, | 164 CrossOriginAttributeNotSet, |
157 String(), | 165 String(), |
158 String(), | 166 String(), |
159 hrefURL, | 167 hrefURL, |
160 dummyPageHolder->document(), | 168 dummyPageHolder->document(), |
161 networkHints); | 169 networkHints); |
162 ASSERT_FALSE(networkHints.didPreconnect()); | 170 ASSERT_FALSE(networkHints.didPreconnect()); |
(...skipping 12 matching lines...) Expand all Loading... |
175 } cases[] = { | 183 } cases[] = { |
176 {"http://example.com/", CrossOriginAttributeNotSet, true, false, false}, | 184 {"http://example.com/", CrossOriginAttributeNotSet, true, false, false}, |
177 {"https://example.com/", CrossOriginAttributeNotSet, true, true, false}, | 185 {"https://example.com/", CrossOriginAttributeNotSet, true, true, false}, |
178 {"http://example.com/", CrossOriginAttributeAnonymous, true, false, true
}, | 186 {"http://example.com/", CrossOriginAttributeAnonymous, true, false, true
}, |
179 {"//example.com/", CrossOriginAttributeNotSet, true, false, false}, | 187 {"//example.com/", CrossOriginAttributeNotSet, true, false, false}, |
180 }; | 188 }; |
181 | 189 |
182 // Test the cases with a single header | 190 // Test the cases with a single header |
183 for (const auto& testCase : cases) { | 191 for (const auto& testCase : cases) { |
184 OwnPtr<DummyPageHolder> dummyPageHolder = DummyPageHolder::create(IntSiz
e(500, 500)); | 192 OwnPtr<DummyPageHolder> dummyPageHolder = DummyPageHolder::create(IntSiz
e(500, 500)); |
185 MockLinkLoaderClient loaderClient(testCase.shouldLoad); | 193 OwnPtrWillBePersistent<MockLinkLoaderClient> loaderClient = MockLinkLoad
erClient::create(testCase.shouldLoad); |
186 OwnPtrWillBeRawPtr<LinkLoader> loader = LinkLoader::create(&loaderClient
); | 194 OwnPtrWillBeRawPtr<LinkLoader> loader = LinkLoader::create(loaderClient.
get()); |
187 KURL hrefURL = KURL(KURL(ParsedURLStringTag(), String("http://example.co
m")), testCase.href); | 195 KURL hrefURL = KURL(KURL(ParsedURLStringTag(), String("http://example.co
m")), testCase.href); |
188 NetworkHintsMock networkHints; | 196 NetworkHintsMock networkHints; |
189 loader->loadLink(LinkRelAttribute("preconnect"), | 197 loader->loadLink(LinkRelAttribute("preconnect"), |
190 testCase.crossOrigin, | 198 testCase.crossOrigin, |
191 String(), | 199 String(), |
192 String(), | 200 String(), |
193 hrefURL, | 201 hrefURL, |
194 dummyPageHolder->document(), | 202 dummyPageHolder->document(), |
195 networkHints); | 203 networkHints); |
196 ASSERT_EQ(testCase.shouldLoad, networkHints.didPreconnect()); | 204 ASSERT_EQ(testCase.shouldLoad, networkHints.didPreconnect()); |
197 ASSERT_EQ(testCase.isHTTPS, networkHints.isHTTPS()); | 205 ASSERT_EQ(testCase.isHTTPS, networkHints.isHTTPS()); |
198 ASSERT_EQ(testCase.isCrossOrigin, networkHints.isCrossOrigin()); | 206 ASSERT_EQ(testCase.isCrossOrigin, networkHints.isCrossOrigin()); |
199 } | 207 } |
200 } | 208 } |
201 | 209 |
202 } // namespace blink | 210 } // namespace blink |
OLD | NEW |