| 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/MemoryCache.h" | 7 #include "core/fetch/MemoryCache.h" |
| 8 #include "core/fetch/ResourceFetcher.h" | 8 #include "core/fetch/ResourceFetcher.h" |
| 9 #include "core/frame/Settings.h" | 9 #include "core/frame/Settings.h" |
| 10 #include "core/html/LinkRelAttribute.h" | 10 #include "core/html/LinkRelAttribute.h" |
| 11 #include "core/loader/DocumentLoader.h" | 11 #include "core/loader/DocumentLoader.h" |
| 12 #include "core/loader/LinkLoaderClient.h" | 12 #include "core/loader/LinkLoaderClient.h" |
| 13 #include "core/loader/NetworkHintsInterface.h" | 13 #include "core/loader/NetworkHintsInterface.h" |
| 14 #include "core/testing/DummyPageHolder.h" | 14 #include "core/testing/DummyPageHolder.h" |
| 15 #include "platform/network/ResourceLoadPriority.h" | 15 #include "platform/network/ResourceLoadPriority.h" |
| 16 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
| 17 #include <base/macros.h> | 17 #include <base/macros.h> |
| 18 | 18 |
| 19 namespace blink { | 19 namespace blink { |
| 20 | 20 |
| 21 class MockLinkLoaderClient final : public NoBaseWillBeGarbageCollectedFinalized<
MockLinkLoaderClient>, public LinkLoaderClient { | 21 class MockLinkLoaderClient final : public GarbageCollectedFinalized<MockLinkLoad
erClient>, public LinkLoaderClient { |
| 22 WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(MockLinkLoaderClient); | 22 USING_GARBAGE_COLLECTED_MIXIN(MockLinkLoaderClient); |
| 23 public: | 23 public: |
| 24 static PassOwnPtrWillBeRawPtr<MockLinkLoaderClient> create(bool shouldLoad) | 24 static RawPtr<MockLinkLoaderClient> create(bool shouldLoad) |
| 25 { | 25 { |
| 26 return adoptPtrWillBeNoop(new MockLinkLoaderClient(shouldLoad)); | 26 return (new MockLinkLoaderClient(shouldLoad)); |
| 27 } | 27 } |
| 28 | 28 |
| 29 DEFINE_INLINE_VIRTUAL_TRACE() { LinkLoaderClient::trace(visitor); } | 29 DEFINE_INLINE_VIRTUAL_TRACE() { LinkLoaderClient::trace(visitor); } |
| 30 | 30 |
| 31 bool shouldLoadLink() override | 31 bool shouldLoadLink() override |
| 32 { | 32 { |
| 33 return m_shouldLoad; | 33 return m_shouldLoad; |
| 34 } | 34 } |
| 35 | 35 |
| 36 void linkLoaded() override {} | 36 void linkLoaded() override {} |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 103 // TODO(yoav): subresource should be *very* low priority (rather than lo
w). | 103 // TODO(yoav): subresource should be *very* low priority (rather than lo
w). |
| 104 {"data://example.test/cat.empty", "", ResourceLoadPriorityLow, WebURLReq
uest::RequestContextSubresource, true, ""}, | 104 {"data://example.test/cat.empty", "", ResourceLoadPriorityLow, WebURLReq
uest::RequestContextSubresource, true, ""}, |
| 105 {"data://example.test/cat.blob", "blabla", ResourceLoadPriorityLow, WebU
RLRequest::RequestContextSubresource, true, ""}, | 105 {"data://example.test/cat.blob", "blabla", ResourceLoadPriorityLow, WebU
RLRequest::RequestContextSubresource, true, ""}, |
| 106 {"bla://example.test/cat.gif", "image", ResourceLoadPriorityUnresolved,
WebURLRequest::RequestContextImage, false, ""}, | 106 {"bla://example.test/cat.gif", "image", ResourceLoadPriorityUnresolved,
WebURLRequest::RequestContextImage, false, ""}, |
| 107 }; | 107 }; |
| 108 | 108 |
| 109 // Test the cases with a single header | 109 // Test the cases with a single header |
| 110 for (const auto& testCase : cases) { | 110 for (const auto& testCase : cases) { |
| 111 OwnPtr<DummyPageHolder> dummyPageHolder = DummyPageHolder::create(IntSiz
e(500, 500)); | 111 OwnPtr<DummyPageHolder> dummyPageHolder = DummyPageHolder::create(IntSiz
e(500, 500)); |
| 112 dummyPageHolder->frame().settings()->setScriptEnabled(true); | 112 dummyPageHolder->frame().settings()->setScriptEnabled(true); |
| 113 OwnPtrWillBePersistent<MockLinkLoaderClient> loaderClient = MockLinkLoad
erClient::create(testCase.shouldLoad); | 113 Persistent<MockLinkLoaderClient> loaderClient = MockLinkLoaderClient::cr
eate(testCase.shouldLoad); |
| 114 OwnPtrWillBeRawPtr<LinkLoader> loader = LinkLoader::create(loaderClient.
get()); | 114 RawPtr<LinkLoader> loader = LinkLoader::create(loaderClient.get()); |
| 115 KURL hrefURL = KURL(KURL(), testCase.href); | 115 KURL hrefURL = KURL(KURL(), testCase.href); |
| 116 loader->loadLink(LinkRelAttribute("preload"), | 116 loader->loadLink(LinkRelAttribute("preload"), |
| 117 CrossOriginAttributeNotSet, | 117 CrossOriginAttributeNotSet, |
| 118 String(), | 118 String(), |
| 119 testCase.as, | 119 testCase.as, |
| 120 hrefURL, | 120 hrefURL, |
| 121 dummyPageHolder->document(), | 121 dummyPageHolder->document(), |
| 122 NetworkHintsMock()); | 122 NetworkHintsMock()); |
| 123 ASSERT(dummyPageHolder->document().fetcher()); | 123 ASSERT(dummyPageHolder->document().fetcher()); |
| 124 WillBeHeapListHashSet<RefPtrWillBeMember<Resource>>* preloads = dummyPag
eHolder->document().fetcher()->preloads(); | 124 HeapListHashSet<Member<Resource>>* preloads = dummyPageHolder->document(
).fetcher()->preloads(); |
| 125 if (testCase.shouldLoad) | 125 if (testCase.shouldLoad) |
| 126 ASSERT_NE(nullptr, preloads); | 126 ASSERT_NE(nullptr, preloads); |
| 127 if (preloads) { | 127 if (preloads) { |
| 128 if (testCase.priority == ResourceLoadPriorityUnresolved) { | 128 if (testCase.priority == ResourceLoadPriorityUnresolved) { |
| 129 ASSERT_EQ((unsigned)0, preloads->size()); | 129 ASSERT_EQ((unsigned)0, preloads->size()); |
| 130 } else { | 130 } else { |
| 131 ASSERT_EQ((unsigned)1, preloads->size()); | 131 ASSERT_EQ((unsigned)1, preloads->size()); |
| 132 if (preloads->size() > 0) { | 132 if (preloads->size() > 0) { |
| 133 Resource* resource = preloads->begin().get()->get(); | 133 Resource* resource = preloads->begin().get()->get(); |
| 134 ASSERT_EQ(testCase.priority, resource->resourceRequest().pri
ority()); | 134 ASSERT_EQ(testCase.priority, resource->resourceRequest().pri
ority()); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 152 {"https://example.com/", true}, | 152 {"https://example.com/", true}, |
| 153 {"//example.com/", true}, | 153 {"//example.com/", true}, |
| 154 }; | 154 }; |
| 155 | 155 |
| 156 // TODO(yoav): Test (and fix) shouldLoad = false | 156 // TODO(yoav): Test (and fix) shouldLoad = false |
| 157 | 157 |
| 158 // Test the cases with a single header | 158 // Test the cases with a single header |
| 159 for (const auto& testCase : cases) { | 159 for (const auto& testCase : cases) { |
| 160 OwnPtr<DummyPageHolder> dummyPageHolder = DummyPageHolder::create(IntSiz
e(500, 500)); | 160 OwnPtr<DummyPageHolder> dummyPageHolder = DummyPageHolder::create(IntSiz
e(500, 500)); |
| 161 dummyPageHolder->document().settings()->setDNSPrefetchingEnabled(true); | 161 dummyPageHolder->document().settings()->setDNSPrefetchingEnabled(true); |
| 162 OwnPtrWillBePersistent<MockLinkLoaderClient> loaderClient = MockLinkLoad
erClient::create(testCase.shouldLoad); | 162 Persistent<MockLinkLoaderClient> loaderClient = MockLinkLoaderClient::cr
eate(testCase.shouldLoad); |
| 163 OwnPtrWillBeRawPtr<LinkLoader> loader = LinkLoader::create(loaderClient.
get()); | 163 RawPtr<LinkLoader> loader = LinkLoader::create(loaderClient.get()); |
| 164 KURL hrefURL = KURL(KURL(ParsedURLStringTag(), String("http://example.co
m")), testCase.href); | 164 KURL hrefURL = KURL(KURL(ParsedURLStringTag(), String("http://example.co
m")), testCase.href); |
| 165 NetworkHintsMock networkHints; | 165 NetworkHintsMock networkHints; |
| 166 loader->loadLink(LinkRelAttribute("dns-prefetch"), | 166 loader->loadLink(LinkRelAttribute("dns-prefetch"), |
| 167 CrossOriginAttributeNotSet, | 167 CrossOriginAttributeNotSet, |
| 168 String(), | 168 String(), |
| 169 String(), | 169 String(), |
| 170 hrefURL, | 170 hrefURL, |
| 171 dummyPageHolder->document(), | 171 dummyPageHolder->document(), |
| 172 networkHints); | 172 networkHints); |
| 173 ASSERT_FALSE(networkHints.didPreconnect()); | 173 ASSERT_FALSE(networkHints.didPreconnect()); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 186 } cases[] = { | 186 } cases[] = { |
| 187 {"http://example.com/", CrossOriginAttributeNotSet, true, false, false}, | 187 {"http://example.com/", CrossOriginAttributeNotSet, true, false, false}, |
| 188 {"https://example.com/", CrossOriginAttributeNotSet, true, true, false}, | 188 {"https://example.com/", CrossOriginAttributeNotSet, true, true, false}, |
| 189 {"http://example.com/", CrossOriginAttributeAnonymous, true, false, true
}, | 189 {"http://example.com/", CrossOriginAttributeAnonymous, true, false, true
}, |
| 190 {"//example.com/", CrossOriginAttributeNotSet, true, false, false}, | 190 {"//example.com/", CrossOriginAttributeNotSet, true, false, false}, |
| 191 }; | 191 }; |
| 192 | 192 |
| 193 // Test the cases with a single header | 193 // Test the cases with a single header |
| 194 for (const auto& testCase : cases) { | 194 for (const auto& testCase : cases) { |
| 195 OwnPtr<DummyPageHolder> dummyPageHolder = DummyPageHolder::create(IntSiz
e(500, 500)); | 195 OwnPtr<DummyPageHolder> dummyPageHolder = DummyPageHolder::create(IntSiz
e(500, 500)); |
| 196 OwnPtrWillBePersistent<MockLinkLoaderClient> loaderClient = MockLinkLoad
erClient::create(testCase.shouldLoad); | 196 Persistent<MockLinkLoaderClient> loaderClient = MockLinkLoaderClient::cr
eate(testCase.shouldLoad); |
| 197 OwnPtrWillBeRawPtr<LinkLoader> loader = LinkLoader::create(loaderClient.
get()); | 197 RawPtr<LinkLoader> loader = LinkLoader::create(loaderClient.get()); |
| 198 KURL hrefURL = KURL(KURL(ParsedURLStringTag(), String("http://example.co
m")), testCase.href); | 198 KURL hrefURL = KURL(KURL(ParsedURLStringTag(), String("http://example.co
m")), testCase.href); |
| 199 NetworkHintsMock networkHints; | 199 NetworkHintsMock networkHints; |
| 200 loader->loadLink(LinkRelAttribute("preconnect"), | 200 loader->loadLink(LinkRelAttribute("preconnect"), |
| 201 testCase.crossOrigin, | 201 testCase.crossOrigin, |
| 202 String(), | 202 String(), |
| 203 String(), | 203 String(), |
| 204 hrefURL, | 204 hrefURL, |
| 205 dummyPageHolder->document(), | 205 dummyPageHolder->document(), |
| 206 networkHints); | 206 networkHints); |
| 207 ASSERT_EQ(testCase.shouldLoad, networkHints.didPreconnect()); | 207 ASSERT_EQ(testCase.shouldLoad, networkHints.didPreconnect()); |
| 208 ASSERT_EQ(testCase.isHTTPS, networkHints.isHTTPS()); | 208 ASSERT_EQ(testCase.isHTTPS, networkHints.isHTTPS()); |
| 209 ASSERT_EQ(testCase.isCrossOrigin, networkHints.isCrossOrigin()); | 209 ASSERT_EQ(testCase.isCrossOrigin, networkHints.isCrossOrigin()); |
| 210 } | 210 } |
| 211 } | 211 } |
| 212 | 212 |
| 213 } // namespace blink | 213 } // namespace blink |
| OLD | NEW |