| 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 <base/macros.h> | 7 #include <base/macros.h> |
| 8 #include <memory> | 8 #include <memory> |
| 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/loader/fetch/MemoryCache.h" | 15 #include "platform/loader/fetch/MemoryCache.h" |
| 16 #include "platform/loader/fetch/ResourceFetcher.h" | 16 #include "platform/loader/fetch/ResourceFetcher.h" |
| 17 #include "platform/loader/fetch/ResourceLoadPriority.h" | 17 #include "platform/loader/fetch/ResourceLoadPriority.h" |
| 18 #include "platform/testing/URLTestHelpers.h" | 18 #include "platform/testing/URLTestHelpers.h" |
| 19 #include "public/platform/Platform.h" | 19 #include "public/platform/Platform.h" |
| 20 #include "public/platform/WebURLLoaderMockFactory.h" | 20 #include "public/platform/WebURLLoaderMockFactory.h" |
| 21 #include "testing/gtest/include/gtest/gtest.h" | 21 #include "testing/gtest/include/gtest/gtest.h" |
| 22 | 22 |
| 23 namespace blink { | 23 namespace blink { |
| 24 | 24 |
| 25 namespace { |
| 26 |
| 25 class MockLinkLoaderClient final | 27 class MockLinkLoaderClient final |
| 26 : public GarbageCollectedFinalized<MockLinkLoaderClient>, | 28 : public GarbageCollectedFinalized<MockLinkLoaderClient>, |
| 27 public LinkLoaderClient { | 29 public LinkLoaderClient { |
| 28 USING_GARBAGE_COLLECTED_MIXIN(MockLinkLoaderClient); | 30 USING_GARBAGE_COLLECTED_MIXIN(MockLinkLoaderClient); |
| 29 | 31 |
| 30 public: | 32 public: |
| 31 static MockLinkLoaderClient* create(bool shouldLoad) { | 33 static MockLinkLoaderClient* create(bool shouldLoad) { |
| 32 return new MockLinkLoaderClient(shouldLoad); | 34 return new MockLinkLoaderClient(shouldLoad); |
| 33 } | 35 } |
| 34 | 36 |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 74 bool isHTTPS() { return m_isHTTPS; } | 76 bool isHTTPS() { return m_isHTTPS; } |
| 75 bool isCrossOrigin() { return m_isCrossOrigin; } | 77 bool isCrossOrigin() { return m_isCrossOrigin; } |
| 76 | 78 |
| 77 private: | 79 private: |
| 78 mutable bool m_didDnsPrefetch = false; | 80 mutable bool m_didDnsPrefetch = false; |
| 79 mutable bool m_didPreconnect = false; | 81 mutable bool m_didPreconnect = false; |
| 80 mutable bool m_isHTTPS = false; | 82 mutable bool m_isHTTPS = false; |
| 81 mutable bool m_isCrossOrigin = false; | 83 mutable bool m_isCrossOrigin = false; |
| 82 }; | 84 }; |
| 83 | 85 |
| 84 TEST(LinkLoaderTest, Preload) { | 86 struct PreloadTestParams { |
| 85 struct TestCase { | 87 const char* href; |
| 86 const char* href; | 88 const char* as; |
| 87 const char* as; | 89 const char* type; |
| 88 const char* type; | 90 const char* media; |
| 89 const char* media; | 91 const ReferrerPolicy referrerPolicy; |
| 90 const ReferrerPolicy referrerPolicy; | 92 const ResourceLoadPriority priority; |
| 91 const ResourceLoadPriority priority; | 93 const WebURLRequest::RequestContext context; |
| 92 const WebURLRequest::RequestContext context; | 94 const bool linkLoaderShouldLoadValue; |
| 93 const bool linkLoaderShouldLoadValue; | 95 const bool expectingLoad; |
| 94 const bool expectingLoad; | 96 const ReferrerPolicy expectedReferrerPolicy; |
| 95 const ReferrerPolicy expectedReferrerPolicy; | 97 }; |
| 96 } cases[] = { | |
| 97 {"http://example.test/cat.jpg", "image", "", "", ReferrerPolicyDefault, | |
| 98 ResourceLoadPriorityLow, WebURLRequest::RequestContextImage, true, true, | |
| 99 ReferrerPolicyDefault}, | |
| 100 {"http://example.test/cat.js", "script", "", "", ReferrerPolicyDefault, | |
| 101 ResourceLoadPriorityHigh, WebURLRequest::RequestContextScript, true, | |
| 102 true, ReferrerPolicyDefault}, | |
| 103 {"http://example.test/cat.css", "style", "", "", ReferrerPolicyDefault, | |
| 104 ResourceLoadPriorityVeryHigh, WebURLRequest::RequestContextStyle, true, | |
| 105 true, ReferrerPolicyDefault}, | |
| 106 // TODO(yoav): It doesn't seem like the audio context is ever used. That | |
| 107 // should probably be fixed (or we can consolidate audio and video). | |
| 108 {"http://example.test/cat.wav", "audio", "", "", ReferrerPolicyDefault, | |
| 109 ResourceLoadPriorityLow, WebURLRequest::RequestContextVideo, true, true, | |
| 110 ReferrerPolicyDefault}, | |
| 111 {"http://example.test/cat.mp4", "video", "", "", ReferrerPolicyDefault, | |
| 112 ResourceLoadPriorityLow, WebURLRequest::RequestContextVideo, true, true, | |
| 113 ReferrerPolicyDefault}, | |
| 114 {"http://example.test/cat.vtt", "track", "", "", ReferrerPolicyDefault, | |
| 115 ResourceLoadPriorityLow, WebURLRequest::RequestContextTrack, true, true, | |
| 116 ReferrerPolicyDefault}, | |
| 117 {"http://example.test/cat.woff", "font", "", "", ReferrerPolicyDefault, | |
| 118 ResourceLoadPriorityHigh, WebURLRequest::RequestContextFont, true, true, | |
| 119 ReferrerPolicyDefault}, | |
| 120 // TODO(yoav): subresource should be *very* low priority (rather than | |
| 121 // low). | |
| 122 {"http://example.test/cat.empty", "", "", "", ReferrerPolicyDefault, | |
| 123 ResourceLoadPriorityHigh, WebURLRequest::RequestContextSubresource, true, | |
| 124 true, ReferrerPolicyDefault}, | |
| 125 {"http://example.test/cat.blob", "blabla", "", "", ReferrerPolicyDefault, | |
| 126 ResourceLoadPriorityLow, WebURLRequest::RequestContextSubresource, false, | |
| 127 false, ReferrerPolicyDefault}, | |
| 128 {"bla://example.test/cat.gif", "image", "", "", ReferrerPolicyDefault, | |
| 129 ResourceLoadPriorityUnresolved, WebURLRequest::RequestContextImage, | |
| 130 false, false, ReferrerPolicyDefault}, | |
| 131 // MIME type tests | |
| 132 {"http://example.test/cat.webp", "image", "image/webp", "", | |
| 133 ReferrerPolicyDefault, ResourceLoadPriorityLow, | |
| 134 WebURLRequest::RequestContextImage, true, true, ReferrerPolicyDefault}, | |
| 135 {"http://example.test/cat.svg", "image", "image/svg+xml", "", | |
| 136 ReferrerPolicyDefault, ResourceLoadPriorityLow, | |
| 137 WebURLRequest::RequestContextImage, true, true, ReferrerPolicyDefault}, | |
| 138 {"http://example.test/cat.jxr", "image", "image/jxr", "", | |
| 139 ReferrerPolicyDefault, ResourceLoadPriorityUnresolved, | |
| 140 WebURLRequest::RequestContextImage, false, false, ReferrerPolicyDefault}, | |
| 141 {"http://example.test/cat.js", "script", "text/javascript", "", | |
| 142 ReferrerPolicyDefault, ResourceLoadPriorityHigh, | |
| 143 WebURLRequest::RequestContextScript, true, true, ReferrerPolicyDefault}, | |
| 144 {"http://example.test/cat.js", "script", "text/coffeescript", "", | |
| 145 ReferrerPolicyDefault, ResourceLoadPriorityUnresolved, | |
| 146 WebURLRequest::RequestContextScript, false, false, | |
| 147 ReferrerPolicyDefault}, | |
| 148 {"http://example.test/cat.css", "style", "text/css", "", | |
| 149 ReferrerPolicyDefault, ResourceLoadPriorityVeryHigh, | |
| 150 WebURLRequest::RequestContextStyle, true, true, ReferrerPolicyDefault}, | |
| 151 {"http://example.test/cat.css", "style", "text/sass", "", | |
| 152 ReferrerPolicyDefault, ResourceLoadPriorityUnresolved, | |
| 153 WebURLRequest::RequestContextStyle, false, false, ReferrerPolicyDefault}, | |
| 154 {"http://example.test/cat.wav", "audio", "audio/wav", "", | |
| 155 ReferrerPolicyDefault, ResourceLoadPriorityLow, | |
| 156 WebURLRequest::RequestContextVideo, true, true, ReferrerPolicyDefault}, | |
| 157 {"http://example.test/cat.wav", "audio", "audio/mp57", "", | |
| 158 ReferrerPolicyDefault, ResourceLoadPriorityUnresolved, | |
| 159 WebURLRequest::RequestContextVideo, false, false, ReferrerPolicyDefault}, | |
| 160 {"http://example.test/cat.webm", "video", "video/webm", "", | |
| 161 ReferrerPolicyDefault, ResourceLoadPriorityLow, | |
| 162 WebURLRequest::RequestContextVideo, true, true, ReferrerPolicyDefault}, | |
| 163 {"http://example.test/cat.mp199", "video", "video/mp199", "", | |
| 164 ReferrerPolicyDefault, ResourceLoadPriorityUnresolved, | |
| 165 WebURLRequest::RequestContextVideo, false, false, ReferrerPolicyDefault}, | |
| 166 {"http://example.test/cat.vtt", "track", "text/vtt", "", | |
| 167 ReferrerPolicyDefault, ResourceLoadPriorityLow, | |
| 168 WebURLRequest::RequestContextTrack, true, true, ReferrerPolicyDefault}, | |
| 169 {"http://example.test/cat.vtt", "track", "text/subtitlething", "", | |
| 170 ReferrerPolicyDefault, ResourceLoadPriorityUnresolved, | |
| 171 WebURLRequest::RequestContextTrack, false, false, ReferrerPolicyDefault}, | |
| 172 {"http://example.test/cat.woff", "font", "font/woff2", "", | |
| 173 ReferrerPolicyDefault, ResourceLoadPriorityHigh, | |
| 174 WebURLRequest::RequestContextFont, true, true, ReferrerPolicyDefault}, | |
| 175 {"http://example.test/cat.woff", "font", "font/woff84", "", | |
| 176 ReferrerPolicyDefault, ResourceLoadPriorityUnresolved, | |
| 177 WebURLRequest::RequestContextFont, false, false, ReferrerPolicyDefault}, | |
| 178 {"http://example.test/cat.empty", "", "foo/bar", "", | |
| 179 ReferrerPolicyDefault, ResourceLoadPriorityHigh, | |
| 180 WebURLRequest::RequestContextSubresource, true, true, | |
| 181 ReferrerPolicyDefault}, | |
| 182 {"http://example.test/cat.blob", "blabla", "foo/bar", "", | |
| 183 ReferrerPolicyDefault, ResourceLoadPriorityLow, | |
| 184 WebURLRequest::RequestContextSubresource, false, false, | |
| 185 ReferrerPolicyDefault}, | |
| 186 // Media tests | |
| 187 {"http://example.test/cat.gif", "image", "image/gif", | |
| 188 "(max-width: 600px)", ReferrerPolicyDefault, ResourceLoadPriorityLow, | |
| 189 WebURLRequest::RequestContextImage, true, true, ReferrerPolicyDefault}, | |
| 190 {"http://example.test/cat.gif", "image", "image/gif", | |
| 191 "(max-width: 400px)", ReferrerPolicyDefault, | |
| 192 ResourceLoadPriorityUnresolved, WebURLRequest::RequestContextImage, true, | |
| 193 false, ReferrerPolicyDefault}, | |
| 194 {"http://example.test/cat.gif", "image", "image/gif", | |
| 195 "(max-width: 600px)", ReferrerPolicyDefault, ResourceLoadPriorityLow, | |
| 196 WebURLRequest::RequestContextImage, false, false, ReferrerPolicyDefault}, | |
| 197 // Referrer Policy | |
| 198 {"http://example.test/cat.gif", "image", "image/gif", "", | |
| 199 ReferrerPolicyOrigin, ResourceLoadPriorityLow, | |
| 200 WebURLRequest::RequestContextImage, true, true, ReferrerPolicyOrigin}, | |
| 201 {"http://example.test/cat.gif", "image", "image/gif", "", | |
| 202 ReferrerPolicyOriginWhenCrossOrigin, ResourceLoadPriorityLow, | |
| 203 WebURLRequest::RequestContextImage, true, true, | |
| 204 ReferrerPolicyOriginWhenCrossOrigin}, | |
| 205 {"http://example.test/cat.gif", "image", "image/gif", "", | |
| 206 ReferrerPolicyNever, ResourceLoadPriorityLow, | |
| 207 WebURLRequest::RequestContextImage, true, true, ReferrerPolicyNever}, | |
| 208 }; | |
| 209 | 98 |
| 210 // Test the cases with a single header | 99 class LinkLoaderPreloadTest |
| 211 for (const auto& testCase : cases) { | 100 : public ::testing::TestWithParam<PreloadTestParams> { |
| 212 std::unique_ptr<DummyPageHolder> dummyPageHolder = | 101 public: |
| 213 DummyPageHolder::create(IntSize(500, 500)); | 102 ~LinkLoaderPreloadTest() { |
| 214 dummyPageHolder->frame().settings()->setScriptEnabled(true); | |
| 215 Persistent<MockLinkLoaderClient> loaderClient = | |
| 216 MockLinkLoaderClient::create(testCase.linkLoaderShouldLoadValue); | |
| 217 LinkLoader* loader = LinkLoader::create(loaderClient.get()); | |
| 218 KURL hrefURL = KURL(KURL(), testCase.href); | |
| 219 URLTestHelpers::registerMockedErrorURLLoad(hrefURL); | |
| 220 loader->loadLink(LinkRelAttribute("preload"), CrossOriginAttributeNotSet, | |
| 221 testCase.type, testCase.as, testCase.media, | |
| 222 testCase.referrerPolicy, hrefURL, | |
| 223 dummyPageHolder->document(), NetworkHintsMock()); | |
| 224 ASSERT_TRUE(dummyPageHolder->document().fetcher()); | |
| 225 HeapListHashSet<Member<Resource>>* preloads = | |
| 226 dummyPageHolder->document().fetcher()->preloads(); | |
| 227 if (testCase.expectingLoad) { | |
| 228 if (!preloads) { | |
| 229 fprintf(stderr, "Unexpected result %s %s %s\n", testCase.href, | |
| 230 testCase.as, testCase.type); | |
| 231 } | |
| 232 EXPECT_TRUE(preloads); | |
| 233 } else { | |
| 234 EXPECT_FALSE(preloads); | |
| 235 } | |
| 236 if (preloads) { | |
| 237 if (testCase.priority == ResourceLoadPriorityUnresolved) { | |
| 238 EXPECT_EQ(0u, preloads->size()); | |
| 239 } else { | |
| 240 EXPECT_EQ(1u, preloads->size()); | |
| 241 if (preloads->size() > 0) { | |
| 242 Resource* resource = preloads->begin().get()->get(); | |
| 243 EXPECT_EQ(testCase.priority, resource->resourceRequest().priority()); | |
| 244 EXPECT_EQ(testCase.context, | |
| 245 resource->resourceRequest().requestContext()); | |
| 246 if (testCase.expectedReferrerPolicy != ReferrerPolicyDefault) { | |
| 247 EXPECT_EQ(testCase.expectedReferrerPolicy, | |
| 248 resource->resourceRequest().getReferrerPolicy()); | |
| 249 } | |
| 250 } | |
| 251 } | |
| 252 dummyPageHolder->document().fetcher()->clearPreloads(); | |
| 253 } | |
| 254 Platform::current() | 103 Platform::current() |
| 255 ->getURLLoaderMockFactory() | 104 ->getURLLoaderMockFactory() |
| 256 ->unregisterAllURLsAndClearMemoryCache(); | 105 ->unregisterAllURLsAndClearMemoryCache(); |
| 257 } | 106 } |
| 107 }; |
| 108 |
| 109 TEST_P(LinkLoaderPreloadTest, Preload) { |
| 110 const auto& testCase = GetParam(); |
| 111 std::unique_ptr<DummyPageHolder> dummyPageHolder = |
| 112 DummyPageHolder::create(IntSize(500, 500)); |
| 113 ResourceFetcher* fetcher = dummyPageHolder->document().fetcher(); |
| 114 ASSERT_TRUE(fetcher); |
| 115 dummyPageHolder->frame().settings()->setScriptEnabled(true); |
| 116 Persistent<MockLinkLoaderClient> loaderClient = |
| 117 MockLinkLoaderClient::create(testCase.linkLoaderShouldLoadValue); |
| 118 LinkLoader* loader = LinkLoader::create(loaderClient.get()); |
| 119 KURL hrefURL = KURL(KURL(), testCase.href); |
| 120 URLTestHelpers::registerMockedErrorURLLoad(hrefURL); |
| 121 loader->loadLink(LinkRelAttribute("preload"), CrossOriginAttributeNotSet, |
| 122 testCase.type, testCase.as, testCase.media, |
| 123 testCase.referrerPolicy, hrefURL, |
| 124 dummyPageHolder->document(), NetworkHintsMock()); |
| 125 if (testCase.expectingLoad && |
| 126 testCase.priority != ResourceLoadPriorityUnresolved) { |
| 127 ASSERT_EQ(1, fetcher->countPreloads()); |
| 128 Resource* resource = loader->linkPreloadedResourceForTesting(); |
| 129 ASSERT_NE(resource, nullptr); |
| 130 EXPECT_TRUE(fetcher->containsAsPreloadForTesting(resource)); |
| 131 EXPECT_EQ(testCase.priority, resource->resourceRequest().priority()); |
| 132 EXPECT_EQ(testCase.context, resource->resourceRequest().requestContext()); |
| 133 if (testCase.expectedReferrerPolicy != ReferrerPolicyDefault) { |
| 134 EXPECT_EQ(testCase.expectedReferrerPolicy, |
| 135 resource->resourceRequest().getReferrerPolicy()); |
| 136 } |
| 137 } else { |
| 138 ASSERT_EQ(0, fetcher->countPreloads()); |
| 139 } |
| 258 } | 140 } |
| 259 | 141 |
| 142 constexpr PreloadTestParams kPreloadTestParams[] = { |
| 143 {"http://example.test/cat.jpg", "image", "", "", ReferrerPolicyDefault, |
| 144 ResourceLoadPriorityLow, WebURLRequest::RequestContextImage, true, true, |
| 145 ReferrerPolicyDefault}, |
| 146 {"http://example.test/cat.js", "script", "", "", ReferrerPolicyDefault, |
| 147 ResourceLoadPriorityHigh, WebURLRequest::RequestContextScript, true, true, |
| 148 ReferrerPolicyDefault}, |
| 149 {"http://example.test/cat.css", "style", "", "", ReferrerPolicyDefault, |
| 150 ResourceLoadPriorityVeryHigh, WebURLRequest::RequestContextStyle, true, |
| 151 true, ReferrerPolicyDefault}, |
| 152 // TODO(yoav): It doesn't seem like the audio context is ever used. That |
| 153 // should probably be fixed (or we can consolidate audio and video). |
| 154 {"http://example.test/cat.wav", "audio", "", "", ReferrerPolicyDefault, |
| 155 ResourceLoadPriorityLow, WebURLRequest::RequestContextVideo, true, true, |
| 156 ReferrerPolicyDefault}, |
| 157 {"http://example.test/cat.mp4", "video", "", "", ReferrerPolicyDefault, |
| 158 ResourceLoadPriorityLow, WebURLRequest::RequestContextVideo, true, true, |
| 159 ReferrerPolicyDefault}, |
| 160 {"http://example.test/cat.vtt", "track", "", "", ReferrerPolicyDefault, |
| 161 ResourceLoadPriorityLow, WebURLRequest::RequestContextTrack, true, true, |
| 162 ReferrerPolicyDefault}, |
| 163 {"http://example.test/cat.woff", "font", "", "", ReferrerPolicyDefault, |
| 164 ResourceLoadPriorityHigh, WebURLRequest::RequestContextFont, true, true, |
| 165 ReferrerPolicyDefault}, |
| 166 // TODO(yoav): subresource should be *very* low priority (rather than |
| 167 // low). |
| 168 {"http://example.test/cat.empty", "", "", "", ReferrerPolicyDefault, |
| 169 ResourceLoadPriorityHigh, WebURLRequest::RequestContextSubresource, true, |
| 170 true, ReferrerPolicyDefault}, |
| 171 {"http://example.test/cat.blob", "blabla", "", "", ReferrerPolicyDefault, |
| 172 ResourceLoadPriorityLow, WebURLRequest::RequestContextSubresource, false, |
| 173 false, ReferrerPolicyDefault}, |
| 174 {"bla://example.test/cat.gif", "image", "", "", ReferrerPolicyDefault, |
| 175 ResourceLoadPriorityUnresolved, WebURLRequest::RequestContextImage, false, |
| 176 false, ReferrerPolicyDefault}, |
| 177 // MIME type tests |
| 178 {"http://example.test/cat.webp", "image", "image/webp", "", |
| 179 ReferrerPolicyDefault, ResourceLoadPriorityLow, |
| 180 WebURLRequest::RequestContextImage, true, true, ReferrerPolicyDefault}, |
| 181 {"http://example.test/cat.svg", "image", "image/svg+xml", "", |
| 182 ReferrerPolicyDefault, ResourceLoadPriorityLow, |
| 183 WebURLRequest::RequestContextImage, true, true, ReferrerPolicyDefault}, |
| 184 {"http://example.test/cat.jxr", "image", "image/jxr", "", |
| 185 ReferrerPolicyDefault, ResourceLoadPriorityUnresolved, |
| 186 WebURLRequest::RequestContextImage, false, false, ReferrerPolicyDefault}, |
| 187 {"http://example.test/cat.js", "script", "text/javascript", "", |
| 188 ReferrerPolicyDefault, ResourceLoadPriorityHigh, |
| 189 WebURLRequest::RequestContextScript, true, true, ReferrerPolicyDefault}, |
| 190 {"http://example.test/cat.js", "script", "text/coffeescript", "", |
| 191 ReferrerPolicyDefault, ResourceLoadPriorityUnresolved, |
| 192 WebURLRequest::RequestContextScript, false, false, ReferrerPolicyDefault}, |
| 193 {"http://example.test/cat.css", "style", "text/css", "", |
| 194 ReferrerPolicyDefault, ResourceLoadPriorityVeryHigh, |
| 195 WebURLRequest::RequestContextStyle, true, true, ReferrerPolicyDefault}, |
| 196 {"http://example.test/cat.css", "style", "text/sass", "", |
| 197 ReferrerPolicyDefault, ResourceLoadPriorityUnresolved, |
| 198 WebURLRequest::RequestContextStyle, false, false, ReferrerPolicyDefault}, |
| 199 {"http://example.test/cat.wav", "audio", "audio/wav", "", |
| 200 ReferrerPolicyDefault, ResourceLoadPriorityLow, |
| 201 WebURLRequest::RequestContextVideo, true, true, ReferrerPolicyDefault}, |
| 202 {"http://example.test/cat.wav", "audio", "audio/mp57", "", |
| 203 ReferrerPolicyDefault, ResourceLoadPriorityUnresolved, |
| 204 WebURLRequest::RequestContextVideo, false, false, ReferrerPolicyDefault}, |
| 205 {"http://example.test/cat.webm", "video", "video/webm", "", |
| 206 ReferrerPolicyDefault, ResourceLoadPriorityLow, |
| 207 WebURLRequest::RequestContextVideo, true, true, ReferrerPolicyDefault}, |
| 208 {"http://example.test/cat.mp199", "video", "video/mp199", "", |
| 209 ReferrerPolicyDefault, ResourceLoadPriorityUnresolved, |
| 210 WebURLRequest::RequestContextVideo, false, false, ReferrerPolicyDefault}, |
| 211 {"http://example.test/cat.vtt", "track", "text/vtt", "", |
| 212 ReferrerPolicyDefault, ResourceLoadPriorityLow, |
| 213 WebURLRequest::RequestContextTrack, true, true, ReferrerPolicyDefault}, |
| 214 {"http://example.test/cat.vtt", "track", "text/subtitlething", "", |
| 215 ReferrerPolicyDefault, ResourceLoadPriorityUnresolved, |
| 216 WebURLRequest::RequestContextTrack, false, false, ReferrerPolicyDefault}, |
| 217 {"http://example.test/cat.woff", "font", "font/woff2", "", |
| 218 ReferrerPolicyDefault, ResourceLoadPriorityHigh, |
| 219 WebURLRequest::RequestContextFont, true, true, ReferrerPolicyDefault}, |
| 220 {"http://example.test/cat.woff", "font", "font/woff84", "", |
| 221 ReferrerPolicyDefault, ResourceLoadPriorityUnresolved, |
| 222 WebURLRequest::RequestContextFont, false, false, ReferrerPolicyDefault}, |
| 223 {"http://example.test/cat.empty", "", "foo/bar", "", ReferrerPolicyDefault, |
| 224 ResourceLoadPriorityHigh, WebURLRequest::RequestContextSubresource, true, |
| 225 true, ReferrerPolicyDefault}, |
| 226 {"http://example.test/cat.blob", "blabla", "foo/bar", "", |
| 227 ReferrerPolicyDefault, ResourceLoadPriorityLow, |
| 228 WebURLRequest::RequestContextSubresource, false, false, |
| 229 ReferrerPolicyDefault}, |
| 230 // Media tests |
| 231 {"http://example.test/cat.gif", "image", "image/gif", "(max-width: 600px)", |
| 232 ReferrerPolicyDefault, ResourceLoadPriorityLow, |
| 233 WebURLRequest::RequestContextImage, true, true, ReferrerPolicyDefault}, |
| 234 {"http://example.test/cat.gif", "image", "image/gif", "(max-width: 400px)", |
| 235 ReferrerPolicyDefault, ResourceLoadPriorityUnresolved, |
| 236 WebURLRequest::RequestContextImage, true, false, ReferrerPolicyDefault}, |
| 237 {"http://example.test/cat.gif", "image", "image/gif", "(max-width: 600px)", |
| 238 ReferrerPolicyDefault, ResourceLoadPriorityLow, |
| 239 WebURLRequest::RequestContextImage, false, false, ReferrerPolicyDefault}, |
| 240 // Referrer Policy |
| 241 {"http://example.test/cat.gif", "image", "image/gif", "", |
| 242 ReferrerPolicyOrigin, ResourceLoadPriorityLow, |
| 243 WebURLRequest::RequestContextImage, true, true, ReferrerPolicyOrigin}, |
| 244 {"http://example.test/cat.gif", "image", "image/gif", "", |
| 245 ReferrerPolicyOriginWhenCrossOrigin, ResourceLoadPriorityLow, |
| 246 WebURLRequest::RequestContextImage, true, true, |
| 247 ReferrerPolicyOriginWhenCrossOrigin}, |
| 248 {"http://example.test/cat.gif", "image", "image/gif", "", |
| 249 ReferrerPolicyNever, ResourceLoadPriorityLow, |
| 250 WebURLRequest::RequestContextImage, true, true, ReferrerPolicyNever}}; |
| 251 |
| 252 INSTANTIATE_TEST_CASE_P(LinkLoaderPreloadTest, |
| 253 LinkLoaderPreloadTest, |
| 254 ::testing::ValuesIn(kPreloadTestParams)); |
| 255 |
| 260 TEST(LinkLoaderTest, Prefetch) { | 256 TEST(LinkLoaderTest, Prefetch) { |
| 261 struct TestCase { | 257 struct TestCase { |
| 262 const char* href; | 258 const char* href; |
| 263 // TODO(yoav): Add support for type and media crbug.com/662687 | 259 // TODO(yoav): Add support for type and media crbug.com/662687 |
| 264 const char* type; | 260 const char* type; |
| 265 const char* media; | 261 const char* media; |
| 266 const ReferrerPolicy referrerPolicy; | 262 const ReferrerPolicy referrerPolicy; |
| 267 const bool linkLoaderShouldLoadValue; | 263 const bool linkLoaderShouldLoadValue; |
| 268 const bool expectingLoad; | 264 const bool expectingLoad; |
| 269 const ReferrerPolicy expectedReferrerPolicy; | 265 const ReferrerPolicy expectedReferrerPolicy; |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 370 NetworkHintsMock networkHints; | 366 NetworkHintsMock networkHints; |
| 371 loader->loadLink(LinkRelAttribute("preconnect"), testCase.crossOrigin, | 367 loader->loadLink(LinkRelAttribute("preconnect"), testCase.crossOrigin, |
| 372 String(), String(), String(), ReferrerPolicyDefault, | 368 String(), String(), String(), ReferrerPolicyDefault, |
| 373 hrefURL, dummyPageHolder->document(), networkHints); | 369 hrefURL, dummyPageHolder->document(), networkHints); |
| 374 EXPECT_EQ(testCase.shouldLoad, networkHints.didPreconnect()); | 370 EXPECT_EQ(testCase.shouldLoad, networkHints.didPreconnect()); |
| 375 EXPECT_EQ(testCase.isHTTPS, networkHints.isHTTPS()); | 371 EXPECT_EQ(testCase.isHTTPS, networkHints.isHTTPS()); |
| 376 EXPECT_EQ(testCase.isCrossOrigin, networkHints.isCrossOrigin()); | 372 EXPECT_EQ(testCase.isCrossOrigin, networkHints.isCrossOrigin()); |
| 377 } | 373 } |
| 378 } | 374 } |
| 379 | 375 |
| 376 } // namespace |
| 377 |
| 380 } // namespace blink | 378 } // namespace blink |
| OLD | NEW |