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

Unified Diff: third_party/WebKit/Source/core/loader/LinkLoaderTest.cpp

Issue 2797423003: Remove ResourceFetcher::preloads (Closed)
Patch Set: fix 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/loader/LinkLoaderTest.cpp
diff --git a/third_party/WebKit/Source/core/loader/LinkLoaderTest.cpp b/third_party/WebKit/Source/core/loader/LinkLoaderTest.cpp
index 24018a15fce89156d35510abe0f1a0e277c2ea6e..2d8f8c5117a33b951f13f52a18cc8d852833525e 100644
--- a/third_party/WebKit/Source/core/loader/LinkLoaderTest.cpp
+++ b/third_party/WebKit/Source/core/loader/LinkLoaderTest.cpp
@@ -22,6 +22,8 @@
namespace blink {
+namespace {
+
class MockLinkLoaderClient final
: public GarbageCollectedFinalized<MockLinkLoaderClient>,
public LinkLoaderClient {
@@ -81,182 +83,176 @@ class NetworkHintsMock : public NetworkHintsInterface {
mutable bool m_isCrossOrigin = false;
};
-TEST(LinkLoaderTest, Preload) {
- struct TestCase {
- const char* href;
- const char* as;
- const char* type;
- const char* media;
- const ReferrerPolicy referrerPolicy;
- const ResourceLoadPriority priority;
- const WebURLRequest::RequestContext context;
- const bool linkLoaderShouldLoadValue;
- const bool expectingLoad;
- const ReferrerPolicy expectedReferrerPolicy;
- } cases[] = {
- {"http://example.test/cat.jpg", "image", "", "", ReferrerPolicyDefault,
- ResourceLoadPriorityLow, WebURLRequest::RequestContextImage, true, true,
- ReferrerPolicyDefault},
- {"http://example.test/cat.js", "script", "", "", ReferrerPolicyDefault,
- ResourceLoadPriorityHigh, WebURLRequest::RequestContextScript, true,
- true, ReferrerPolicyDefault},
- {"http://example.test/cat.css", "style", "", "", ReferrerPolicyDefault,
- ResourceLoadPriorityVeryHigh, WebURLRequest::RequestContextStyle, true,
- true, ReferrerPolicyDefault},
- // TODO(yoav): It doesn't seem like the audio context is ever used. That
- // should probably be fixed (or we can consolidate audio and video).
- {"http://example.test/cat.wav", "audio", "", "", ReferrerPolicyDefault,
- ResourceLoadPriorityLow, WebURLRequest::RequestContextVideo, true, true,
- ReferrerPolicyDefault},
- {"http://example.test/cat.mp4", "video", "", "", ReferrerPolicyDefault,
- ResourceLoadPriorityLow, WebURLRequest::RequestContextVideo, true, true,
- ReferrerPolicyDefault},
- {"http://example.test/cat.vtt", "track", "", "", ReferrerPolicyDefault,
- ResourceLoadPriorityLow, WebURLRequest::RequestContextTrack, true, true,
- ReferrerPolicyDefault},
- {"http://example.test/cat.woff", "font", "", "", ReferrerPolicyDefault,
- ResourceLoadPriorityHigh, WebURLRequest::RequestContextFont, true, true,
- ReferrerPolicyDefault},
- // TODO(yoav): subresource should be *very* low priority (rather than
- // low).
- {"http://example.test/cat.empty", "", "", "", ReferrerPolicyDefault,
- ResourceLoadPriorityHigh, WebURLRequest::RequestContextSubresource, true,
- true, ReferrerPolicyDefault},
- {"http://example.test/cat.blob", "blabla", "", "", ReferrerPolicyDefault,
- ResourceLoadPriorityLow, WebURLRequest::RequestContextSubresource, false,
- false, ReferrerPolicyDefault},
- {"bla://example.test/cat.gif", "image", "", "", ReferrerPolicyDefault,
- ResourceLoadPriorityUnresolved, WebURLRequest::RequestContextImage,
- false, false, ReferrerPolicyDefault},
- // MIME type tests
- {"http://example.test/cat.webp", "image", "image/webp", "",
- ReferrerPolicyDefault, ResourceLoadPriorityLow,
- WebURLRequest::RequestContextImage, true, true, ReferrerPolicyDefault},
- {"http://example.test/cat.svg", "image", "image/svg+xml", "",
- ReferrerPolicyDefault, ResourceLoadPriorityLow,
- WebURLRequest::RequestContextImage, true, true, ReferrerPolicyDefault},
- {"http://example.test/cat.jxr", "image", "image/jxr", "",
- ReferrerPolicyDefault, ResourceLoadPriorityUnresolved,
- WebURLRequest::RequestContextImage, false, false, ReferrerPolicyDefault},
- {"http://example.test/cat.js", "script", "text/javascript", "",
- ReferrerPolicyDefault, ResourceLoadPriorityHigh,
- WebURLRequest::RequestContextScript, true, true, ReferrerPolicyDefault},
- {"http://example.test/cat.js", "script", "text/coffeescript", "",
- ReferrerPolicyDefault, ResourceLoadPriorityUnresolved,
- WebURLRequest::RequestContextScript, false, false,
- ReferrerPolicyDefault},
- {"http://example.test/cat.css", "style", "text/css", "",
- ReferrerPolicyDefault, ResourceLoadPriorityVeryHigh,
- WebURLRequest::RequestContextStyle, true, true, ReferrerPolicyDefault},
- {"http://example.test/cat.css", "style", "text/sass", "",
- ReferrerPolicyDefault, ResourceLoadPriorityUnresolved,
- WebURLRequest::RequestContextStyle, false, false, ReferrerPolicyDefault},
- {"http://example.test/cat.wav", "audio", "audio/wav", "",
- ReferrerPolicyDefault, ResourceLoadPriorityLow,
- WebURLRequest::RequestContextVideo, true, true, ReferrerPolicyDefault},
- {"http://example.test/cat.wav", "audio", "audio/mp57", "",
- ReferrerPolicyDefault, ResourceLoadPriorityUnresolved,
- WebURLRequest::RequestContextVideo, false, false, ReferrerPolicyDefault},
- {"http://example.test/cat.webm", "video", "video/webm", "",
- ReferrerPolicyDefault, ResourceLoadPriorityLow,
- WebURLRequest::RequestContextVideo, true, true, ReferrerPolicyDefault},
- {"http://example.test/cat.mp199", "video", "video/mp199", "",
- ReferrerPolicyDefault, ResourceLoadPriorityUnresolved,
- WebURLRequest::RequestContextVideo, false, false, ReferrerPolicyDefault},
- {"http://example.test/cat.vtt", "track", "text/vtt", "",
- ReferrerPolicyDefault, ResourceLoadPriorityLow,
- WebURLRequest::RequestContextTrack, true, true, ReferrerPolicyDefault},
- {"http://example.test/cat.vtt", "track", "text/subtitlething", "",
- ReferrerPolicyDefault, ResourceLoadPriorityUnresolved,
- WebURLRequest::RequestContextTrack, false, false, ReferrerPolicyDefault},
- {"http://example.test/cat.woff", "font", "font/woff2", "",
- ReferrerPolicyDefault, ResourceLoadPriorityHigh,
- WebURLRequest::RequestContextFont, true, true, ReferrerPolicyDefault},
- {"http://example.test/cat.woff", "font", "font/woff84", "",
- ReferrerPolicyDefault, ResourceLoadPriorityUnresolved,
- WebURLRequest::RequestContextFont, false, false, ReferrerPolicyDefault},
- {"http://example.test/cat.empty", "", "foo/bar", "",
- ReferrerPolicyDefault, ResourceLoadPriorityHigh,
- WebURLRequest::RequestContextSubresource, true, true,
- ReferrerPolicyDefault},
- {"http://example.test/cat.blob", "blabla", "foo/bar", "",
- ReferrerPolicyDefault, ResourceLoadPriorityLow,
- WebURLRequest::RequestContextSubresource, false, false,
- ReferrerPolicyDefault},
- // Media tests
- {"http://example.test/cat.gif", "image", "image/gif",
- "(max-width: 600px)", ReferrerPolicyDefault, ResourceLoadPriorityLow,
- WebURLRequest::RequestContextImage, true, true, ReferrerPolicyDefault},
- {"http://example.test/cat.gif", "image", "image/gif",
- "(max-width: 400px)", ReferrerPolicyDefault,
- ResourceLoadPriorityUnresolved, WebURLRequest::RequestContextImage, true,
- false, ReferrerPolicyDefault},
- {"http://example.test/cat.gif", "image", "image/gif",
- "(max-width: 600px)", ReferrerPolicyDefault, ResourceLoadPriorityLow,
- WebURLRequest::RequestContextImage, false, false, ReferrerPolicyDefault},
- // Referrer Policy
- {"http://example.test/cat.gif", "image", "image/gif", "",
- ReferrerPolicyOrigin, ResourceLoadPriorityLow,
- WebURLRequest::RequestContextImage, true, true, ReferrerPolicyOrigin},
- {"http://example.test/cat.gif", "image", "image/gif", "",
- ReferrerPolicyOriginWhenCrossOrigin, ResourceLoadPriorityLow,
- WebURLRequest::RequestContextImage, true, true,
- ReferrerPolicyOriginWhenCrossOrigin},
- {"http://example.test/cat.gif", "image", "image/gif", "",
- ReferrerPolicyNever, ResourceLoadPriorityLow,
- WebURLRequest::RequestContextImage, true, true, ReferrerPolicyNever},
- };
+struct PreloadTestParams {
+ const char* href;
+ const char* as;
+ const char* type;
+ const char* media;
+ const ReferrerPolicy referrerPolicy;
+ const ResourceLoadPriority priority;
+ const WebURLRequest::RequestContext context;
+ const bool linkLoaderShouldLoadValue;
+ const bool expectingLoad;
+ const ReferrerPolicy expectedReferrerPolicy;
+};
- // Test the cases with a single header
- for (const auto& testCase : cases) {
- std::unique_ptr<DummyPageHolder> dummyPageHolder =
- DummyPageHolder::create(IntSize(500, 500));
- dummyPageHolder->frame().settings()->setScriptEnabled(true);
- Persistent<MockLinkLoaderClient> loaderClient =
- MockLinkLoaderClient::create(testCase.linkLoaderShouldLoadValue);
- LinkLoader* loader = LinkLoader::create(loaderClient.get());
- KURL hrefURL = KURL(KURL(), testCase.href);
- URLTestHelpers::registerMockedErrorURLLoad(hrefURL);
- loader->loadLink(LinkRelAttribute("preload"), CrossOriginAttributeNotSet,
- testCase.type, testCase.as, testCase.media,
- testCase.referrerPolicy, hrefURL,
- dummyPageHolder->document(), NetworkHintsMock());
- ASSERT_TRUE(dummyPageHolder->document().fetcher());
- HeapListHashSet<Member<Resource>>* preloads =
- dummyPageHolder->document().fetcher()->preloads();
- if (testCase.expectingLoad) {
- if (!preloads) {
- fprintf(stderr, "Unexpected result %s %s %s\n", testCase.href,
- testCase.as, testCase.type);
- }
- EXPECT_TRUE(preloads);
- } else {
- EXPECT_FALSE(preloads);
- }
- if (preloads) {
- if (testCase.priority == ResourceLoadPriorityUnresolved) {
- EXPECT_EQ(0u, preloads->size());
- } else {
- EXPECT_EQ(1u, preloads->size());
- if (preloads->size() > 0) {
- Resource* resource = preloads->begin().get()->get();
- EXPECT_EQ(testCase.priority, resource->resourceRequest().priority());
- EXPECT_EQ(testCase.context,
- resource->resourceRequest().requestContext());
- if (testCase.expectedReferrerPolicy != ReferrerPolicyDefault) {
- EXPECT_EQ(testCase.expectedReferrerPolicy,
- resource->resourceRequest().getReferrerPolicy());
- }
- }
- }
- dummyPageHolder->document().fetcher()->clearPreloads();
- }
+class LinkLoaderPreloadTest
+ : public ::testing::TestWithParam<PreloadTestParams> {
+ public:
+ ~LinkLoaderPreloadTest() {
Platform::current()
->getURLLoaderMockFactory()
->unregisterAllURLsAndClearMemoryCache();
}
+};
+
+TEST_P(LinkLoaderPreloadTest, Preload) {
+ const auto& testCase = GetParam();
+ std::unique_ptr<DummyPageHolder> dummyPageHolder =
+ DummyPageHolder::create(IntSize(500, 500));
+ ResourceFetcher* fetcher = dummyPageHolder->document().fetcher();
+ ASSERT_TRUE(fetcher);
+ dummyPageHolder->frame().settings()->setScriptEnabled(true);
+ Persistent<MockLinkLoaderClient> loaderClient =
+ MockLinkLoaderClient::create(testCase.linkLoaderShouldLoadValue);
+ LinkLoader* loader = LinkLoader::create(loaderClient.get());
+ KURL hrefURL = KURL(KURL(), testCase.href);
+ URLTestHelpers::registerMockedErrorURLLoad(hrefURL);
+ loader->loadLink(LinkRelAttribute("preload"), CrossOriginAttributeNotSet,
+ testCase.type, testCase.as, testCase.media,
+ testCase.referrerPolicy, hrefURL,
+ dummyPageHolder->document(), NetworkHintsMock());
+ if (testCase.expectingLoad &&
+ testCase.priority != ResourceLoadPriorityUnresolved) {
+ ASSERT_EQ(1, fetcher->countPreloads());
+ Resource* resource = loader->linkPreloadedResourceForTesting();
+ ASSERT_NE(resource, nullptr);
+ EXPECT_TRUE(fetcher->containsAsPreloadForTesting(resource));
+ EXPECT_EQ(testCase.priority, resource->resourceRequest().priority());
+ EXPECT_EQ(testCase.context, resource->resourceRequest().requestContext());
+ if (testCase.expectedReferrerPolicy != ReferrerPolicyDefault) {
+ EXPECT_EQ(testCase.expectedReferrerPolicy,
+ resource->resourceRequest().getReferrerPolicy());
+ }
+ } else {
+ ASSERT_EQ(0, fetcher->countPreloads());
+ }
}
+constexpr PreloadTestParams kPreloadTestParams[] = {
+ {"http://example.test/cat.jpg", "image", "", "", ReferrerPolicyDefault,
+ ResourceLoadPriorityLow, WebURLRequest::RequestContextImage, true, true,
+ ReferrerPolicyDefault},
+ {"http://example.test/cat.js", "script", "", "", ReferrerPolicyDefault,
+ ResourceLoadPriorityHigh, WebURLRequest::RequestContextScript, true, true,
+ ReferrerPolicyDefault},
+ {"http://example.test/cat.css", "style", "", "", ReferrerPolicyDefault,
+ ResourceLoadPriorityVeryHigh, WebURLRequest::RequestContextStyle, true,
+ true, ReferrerPolicyDefault},
+ // TODO(yoav): It doesn't seem like the audio context is ever used. That
+ // should probably be fixed (or we can consolidate audio and video).
+ {"http://example.test/cat.wav", "audio", "", "", ReferrerPolicyDefault,
+ ResourceLoadPriorityLow, WebURLRequest::RequestContextVideo, true, true,
+ ReferrerPolicyDefault},
+ {"http://example.test/cat.mp4", "video", "", "", ReferrerPolicyDefault,
+ ResourceLoadPriorityLow, WebURLRequest::RequestContextVideo, true, true,
+ ReferrerPolicyDefault},
+ {"http://example.test/cat.vtt", "track", "", "", ReferrerPolicyDefault,
+ ResourceLoadPriorityLow, WebURLRequest::RequestContextTrack, true, true,
+ ReferrerPolicyDefault},
+ {"http://example.test/cat.woff", "font", "", "", ReferrerPolicyDefault,
+ ResourceLoadPriorityHigh, WebURLRequest::RequestContextFont, true, true,
+ ReferrerPolicyDefault},
+ // TODO(yoav): subresource should be *very* low priority (rather than
+ // low).
+ {"http://example.test/cat.empty", "", "", "", ReferrerPolicyDefault,
+ ResourceLoadPriorityHigh, WebURLRequest::RequestContextSubresource, true,
+ true, ReferrerPolicyDefault},
+ {"http://example.test/cat.blob", "blabla", "", "", ReferrerPolicyDefault,
+ ResourceLoadPriorityLow, WebURLRequest::RequestContextSubresource, false,
+ false, ReferrerPolicyDefault},
+ {"bla://example.test/cat.gif", "image", "", "", ReferrerPolicyDefault,
+ ResourceLoadPriorityUnresolved, WebURLRequest::RequestContextImage, false,
+ false, ReferrerPolicyDefault},
+ // MIME type tests
+ {"http://example.test/cat.webp", "image", "image/webp", "",
+ ReferrerPolicyDefault, ResourceLoadPriorityLow,
+ WebURLRequest::RequestContextImage, true, true, ReferrerPolicyDefault},
+ {"http://example.test/cat.svg", "image", "image/svg+xml", "",
+ ReferrerPolicyDefault, ResourceLoadPriorityLow,
+ WebURLRequest::RequestContextImage, true, true, ReferrerPolicyDefault},
+ {"http://example.test/cat.jxr", "image", "image/jxr", "",
+ ReferrerPolicyDefault, ResourceLoadPriorityUnresolved,
+ WebURLRequest::RequestContextImage, false, false, ReferrerPolicyDefault},
+ {"http://example.test/cat.js", "script", "text/javascript", "",
+ ReferrerPolicyDefault, ResourceLoadPriorityHigh,
+ WebURLRequest::RequestContextScript, true, true, ReferrerPolicyDefault},
+ {"http://example.test/cat.js", "script", "text/coffeescript", "",
+ ReferrerPolicyDefault, ResourceLoadPriorityUnresolved,
+ WebURLRequest::RequestContextScript, false, false, ReferrerPolicyDefault},
+ {"http://example.test/cat.css", "style", "text/css", "",
+ ReferrerPolicyDefault, ResourceLoadPriorityVeryHigh,
+ WebURLRequest::RequestContextStyle, true, true, ReferrerPolicyDefault},
+ {"http://example.test/cat.css", "style", "text/sass", "",
+ ReferrerPolicyDefault, ResourceLoadPriorityUnresolved,
+ WebURLRequest::RequestContextStyle, false, false, ReferrerPolicyDefault},
+ {"http://example.test/cat.wav", "audio", "audio/wav", "",
+ ReferrerPolicyDefault, ResourceLoadPriorityLow,
+ WebURLRequest::RequestContextVideo, true, true, ReferrerPolicyDefault},
+ {"http://example.test/cat.wav", "audio", "audio/mp57", "",
+ ReferrerPolicyDefault, ResourceLoadPriorityUnresolved,
+ WebURLRequest::RequestContextVideo, false, false, ReferrerPolicyDefault},
+ {"http://example.test/cat.webm", "video", "video/webm", "",
+ ReferrerPolicyDefault, ResourceLoadPriorityLow,
+ WebURLRequest::RequestContextVideo, true, true, ReferrerPolicyDefault},
+ {"http://example.test/cat.mp199", "video", "video/mp199", "",
+ ReferrerPolicyDefault, ResourceLoadPriorityUnresolved,
+ WebURLRequest::RequestContextVideo, false, false, ReferrerPolicyDefault},
+ {"http://example.test/cat.vtt", "track", "text/vtt", "",
+ ReferrerPolicyDefault, ResourceLoadPriorityLow,
+ WebURLRequest::RequestContextTrack, true, true, ReferrerPolicyDefault},
+ {"http://example.test/cat.vtt", "track", "text/subtitlething", "",
+ ReferrerPolicyDefault, ResourceLoadPriorityUnresolved,
+ WebURLRequest::RequestContextTrack, false, false, ReferrerPolicyDefault},
+ {"http://example.test/cat.woff", "font", "font/woff2", "",
+ ReferrerPolicyDefault, ResourceLoadPriorityHigh,
+ WebURLRequest::RequestContextFont, true, true, ReferrerPolicyDefault},
+ {"http://example.test/cat.woff", "font", "font/woff84", "",
+ ReferrerPolicyDefault, ResourceLoadPriorityUnresolved,
+ WebURLRequest::RequestContextFont, false, false, ReferrerPolicyDefault},
+ {"http://example.test/cat.empty", "", "foo/bar", "", ReferrerPolicyDefault,
+ ResourceLoadPriorityHigh, WebURLRequest::RequestContextSubresource, true,
+ true, ReferrerPolicyDefault},
+ {"http://example.test/cat.blob", "blabla", "foo/bar", "",
+ ReferrerPolicyDefault, ResourceLoadPriorityLow,
+ WebURLRequest::RequestContextSubresource, false, false,
+ ReferrerPolicyDefault},
+ // Media tests
+ {"http://example.test/cat.gif", "image", "image/gif", "(max-width: 600px)",
+ ReferrerPolicyDefault, ResourceLoadPriorityLow,
+ WebURLRequest::RequestContextImage, true, true, ReferrerPolicyDefault},
+ {"http://example.test/cat.gif", "image", "image/gif", "(max-width: 400px)",
+ ReferrerPolicyDefault, ResourceLoadPriorityUnresolved,
+ WebURLRequest::RequestContextImage, true, false, ReferrerPolicyDefault},
+ {"http://example.test/cat.gif", "image", "image/gif", "(max-width: 600px)",
+ ReferrerPolicyDefault, ResourceLoadPriorityLow,
+ WebURLRequest::RequestContextImage, false, false, ReferrerPolicyDefault},
+ // Referrer Policy
+ {"http://example.test/cat.gif", "image", "image/gif", "",
+ ReferrerPolicyOrigin, ResourceLoadPriorityLow,
+ WebURLRequest::RequestContextImage, true, true, ReferrerPolicyOrigin},
+ {"http://example.test/cat.gif", "image", "image/gif", "",
+ ReferrerPolicyOriginWhenCrossOrigin, ResourceLoadPriorityLow,
+ WebURLRequest::RequestContextImage, true, true,
+ ReferrerPolicyOriginWhenCrossOrigin},
+ {"http://example.test/cat.gif", "image", "image/gif", "",
+ ReferrerPolicyNever, ResourceLoadPriorityLow,
+ WebURLRequest::RequestContextImage, true, true, ReferrerPolicyNever}};
+
+INSTANTIATE_TEST_CASE_P(LinkLoaderPreloadTest,
+ LinkLoaderPreloadTest,
+ ::testing::ValuesIn(kPreloadTestParams));
+
TEST(LinkLoaderTest, Prefetch) {
struct TestCase {
const char* href;
@@ -377,4 +373,6 @@ TEST(LinkLoaderTest, Preconnect) {
}
}
+} // namespace
+
} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698