Commit d816df28 authored by Nate Chapin's avatar Nate Chapin Committed by Commit Bot

CSSPreloadResourceClient should register with Resource via ResourceFetcher

Bug: 793028
Change-Id: Ice4ec0acdd179f2a7e2b17a497ee3bdf6e91fff4
Reviewed-on: https://chromium-review.googlesource.com/822916Reviewed-by: default avatarHiroshige Hayashizaki <hiroshige@chromium.org>
Commit-Queue: Nate Chapin <japhet@chromium.org>
Cr-Commit-Position: refs/heads/master@{#523607}
parent 6deaae48
...@@ -257,16 +257,13 @@ void CSSPreloadScanner::EmitRule(const SegmentedString& source) { ...@@ -257,16 +257,13 @@ void CSSPreloadScanner::EmitRule(const SegmentedString& source) {
} }
CSSPreloaderResourceClient::CSSPreloaderResourceClient( CSSPreloaderResourceClient::CSSPreloaderResourceClient(
Resource* resource,
HTMLResourcePreloader* preloader) HTMLResourcePreloader* preloader)
: policy_(preloader->GetDocument() : policy_(preloader->GetDocument()
->GetSettings() ->GetSettings()
->GetCSSExternalScannerPreload() ->GetCSSExternalScannerPreload()
? kScanAndPreload ? kScanAndPreload
: kScanOnly), : kScanOnly),
preloader_(preloader) { preloader_(preloader) {}
SetResource(resource);
}
CSSPreloaderResourceClient::~CSSPreloaderResourceClient() {} CSSPreloaderResourceClient::~CSSPreloaderResourceClient() {}
......
...@@ -106,7 +106,7 @@ class CORE_EXPORT CSSPreloaderResourceClient ...@@ -106,7 +106,7 @@ class CORE_EXPORT CSSPreloaderResourceClient
USING_GARBAGE_COLLECTED_MIXIN(CSSPreloaderResourceClient); USING_GARBAGE_COLLECTED_MIXIN(CSSPreloaderResourceClient);
public: public:
CSSPreloaderResourceClient(Resource*, HTMLResourcePreloader*); CSSPreloaderResourceClient(HTMLResourcePreloader*);
~CSSPreloaderResourceClient() override; ~CSSPreloaderResourceClient() override;
void NotifyFinished(Resource*) override; void NotifyFinished(Resource*) override;
void DataReceived(Resource*, const char*, size_t) override; void DataReceived(Resource*, const char*, size_t) override;
......
...@@ -39,7 +39,7 @@ class CSSMockHTMLResourcePreloader : public HTMLResourcePreloader { ...@@ -39,7 +39,7 @@ class CSSMockHTMLResourcePreloader : public HTMLResourcePreloader {
void Preload(std::unique_ptr<PreloadRequest> preload_request, void Preload(std::unique_ptr<PreloadRequest> preload_request,
const NetworkHintsInterface&) override { const NetworkHintsInterface&) override {
if (expected_referrer_) { if (expected_referrer_) {
Resource* resource = preload_request->Start(GetDocument()); Resource* resource = preload_request->Start(GetDocument(), nullptr);
if (resource) { if (resource) {
EXPECT_EQ(expected_referrer_, EXPECT_EQ(expected_referrer_,
resource->GetResourceRequest().HttpReferrer()); resource->GetResourceRequest().HttpReferrer());
...@@ -55,9 +55,8 @@ class CSSMockHTMLResourcePreloader : public HTMLResourcePreloader { ...@@ -55,9 +55,8 @@ class CSSMockHTMLResourcePreloader : public HTMLResourcePreloader {
class PreloadRecordingCSSPreloaderResourceClient final class PreloadRecordingCSSPreloaderResourceClient final
: public CSSPreloaderResourceClient { : public CSSPreloaderResourceClient {
public: public:
PreloadRecordingCSSPreloaderResourceClient(Resource* resource, PreloadRecordingCSSPreloaderResourceClient(HTMLResourcePreloader* preloader)
HTMLResourcePreloader* preloader) : CSSPreloaderResourceClient(preloader) {}
: CSSPreloaderResourceClient(resource, preloader) {}
void FetchPreloads(PreloadRequestStream& preloads) override { void FetchPreloads(PreloadRequestStream& preloads) override {
for (const auto& it : preloads) { for (const auto& it : preloads) {
...@@ -86,19 +85,20 @@ TEST_F(CSSPreloadScannerTest, ScanFromResourceClient) { ...@@ -86,19 +85,20 @@ TEST_F(CSSPreloadScannerTest, ScanFromResourceClient) {
new CSSMockHTMLResourcePreloader(dummy_page_holder->GetDocument()); new CSSMockHTMLResourcePreloader(dummy_page_holder->GetDocument());
KURL url("http://127.0.0.1/foo.css"); KURL url("http://127.0.0.1/foo.css");
CSSStyleSheetResource* resource = Platform::Current()->GetURLLoaderMockFactory()->RegisterURL(
CSSStyleSheetResource::CreateForTest(url, UTF8Encoding()); url, WrappedResourceResponse(ResourceResponse()), "");
resource->SetStatus(ResourceStatus::kPending); FetchParameters params{ResourceRequest(url)};
PreloadRecordingCSSPreloaderResourceClient* resource_client = PreloadRecordingCSSPreloaderResourceClient* resource_client =
new PreloadRecordingCSSPreloaderResourceClient(resource, preloader); new PreloadRecordingCSSPreloaderResourceClient(preloader);
Resource* resource = CSSStyleSheetResource::Fetch(
params, dummy_page_holder->GetDocument().Fetcher(), resource_client);
const char* data = "@import url('http://127.0.0.1/preload.css');"; const char* data = "@import url('http://127.0.0.1/preload.css');";
resource->AppendData(data, strlen(data)); resource->AppendData(data, strlen(data));
EXPECT_EQ(1u, resource_client->preload_urls_.size()); EXPECT_EQ(1u, resource_client->preload_urls_.size());
EXPECT_EQ("http://127.0.0.1/preload.css", EXPECT_EQ("http://127.0.0.1/preload.css",
resource_client->preload_urls_.front()); resource_client->preload_urls_.front());
Platform::Current()->GetURLLoaderMockFactory()->UnregisterURL(url);
} }
// Regression test for crbug.com/608310 where the client is destroyed but was // Regression test for crbug.com/608310 where the client is destroyed but was
...@@ -114,11 +114,13 @@ TEST_F(CSSPreloadScannerTest, DestroyClientBeforeDataSent) { ...@@ -114,11 +114,13 @@ TEST_F(CSSPreloadScannerTest, DestroyClientBeforeDataSent) {
new CSSMockHTMLResourcePreloader(dummy_page_holder->GetDocument()); new CSSMockHTMLResourcePreloader(dummy_page_holder->GetDocument());
KURL url("http://127.0.0.1/foo.css"); KURL url("http://127.0.0.1/foo.css");
Persistent<CSSStyleSheetResource> resource = Platform::Current()->GetURLLoaderMockFactory()->RegisterURL(
CSSStyleSheetResource::CreateForTest(url, UTF8Encoding()); url, WrappedResourceResponse(ResourceResponse()), "");
resource->SetStatus(ResourceStatus::kPending); FetchParameters params{ResourceRequest(url)};
PreloadRecordingCSSPreloaderResourceClient* resource_client =
new PreloadRecordingCSSPreloaderResourceClient(resource, preloader); new PreloadRecordingCSSPreloaderResourceClient(preloader);
Resource* resource = CSSStyleSheetResource::Fetch(
params, dummy_page_holder->GetDocument().Fetcher(), resource_client);
// Destroys the resourceClient. // Destroys the resourceClient.
ThreadState::Current()->CollectAllGarbage(); ThreadState::Current()->CollectAllGarbage();
...@@ -126,10 +128,11 @@ TEST_F(CSSPreloadScannerTest, DestroyClientBeforeDataSent) { ...@@ -126,10 +128,11 @@ TEST_F(CSSPreloadScannerTest, DestroyClientBeforeDataSent) {
const char* data = "@import url('http://127.0.0.1/preload.css');"; const char* data = "@import url('http://127.0.0.1/preload.css');";
// Should not crash. // Should not crash.
resource->AppendData(data, strlen(data)); resource->AppendData(data, strlen(data));
Platform::Current()->GetURLLoaderMockFactory()->UnregisterURL(url);
} }
// Regression test for crbug.com/646869 where the client's data is cleared // Regression test for crbug.com/646869 where the client's data is cleared
// before didAppendFirstData is called. // before DataReceived() is called.
TEST_F(CSSPreloadScannerTest, DontReadFromClearedData) { TEST_F(CSSPreloadScannerTest, DontReadFromClearedData) {
std::unique_ptr<DummyPageHolder> dummy_page_holder = std::unique_ptr<DummyPageHolder> dummy_page_holder =
DummyPageHolder::Create(IntSize(500, 500)); DummyPageHolder::Create(IntSize(500, 500));
...@@ -140,21 +143,18 @@ TEST_F(CSSPreloadScannerTest, DontReadFromClearedData) { ...@@ -140,21 +143,18 @@ TEST_F(CSSPreloadScannerTest, DontReadFromClearedData) {
CSSMockHTMLResourcePreloader* preloader = CSSMockHTMLResourcePreloader* preloader =
new CSSMockHTMLResourcePreloader(dummy_page_holder->GetDocument()); new CSSMockHTMLResourcePreloader(dummy_page_holder->GetDocument());
KURL url("http://127.0.0.1/foo.css"); KURL url("data:text/css,@import url('http://127.0.0.1/preload.css');");
CSSStyleSheetResource* resource = FetchParameters params{ResourceRequest(url)};
CSSStyleSheetResource::CreateForTest(url, UTF8Encoding()); Resource* resource = CSSStyleSheetResource::Fetch(
params, dummy_page_holder->GetDocument().Fetcher(), nullptr);
const char* data = "@import url('http://127.0.0.1/preload.css');"; ASSERT_FALSE(resource->ResourceBuffer());
resource->AppendData(data, strlen(data));
ResourceError error = ResourceError::Failure(url);
resource->FinishAsError(error, dummy_page_holder->GetDocument()
.GetTaskRunner(TaskType::kUnspecedLoading)
.get());
// Should not crash. // Should not crash.
PreloadRecordingCSSPreloaderResourceClient* resource_client = PreloadRecordingCSSPreloaderResourceClient* resource_client =
new PreloadRecordingCSSPreloaderResourceClient(resource, preloader); new PreloadRecordingCSSPreloaderResourceClient(preloader);
Resource* resource2 = CSSStyleSheetResource::Fetch(
params, dummy_page_holder->GetDocument().Fetcher(), resource_client);
ASSERT_EQ(resource, resource2);
EXPECT_EQ(0u, resource_client->preload_urls_.size()); EXPECT_EQ(0u, resource_client->preload_urls_.size());
} }
...@@ -171,12 +171,13 @@ TEST_F(CSSPreloadScannerTest, DoNotExpectValidDocument) { ...@@ -171,12 +171,13 @@ TEST_F(CSSPreloadScannerTest, DoNotExpectValidDocument) {
new CSSMockHTMLResourcePreloader(dummy_page_holder->GetDocument()); new CSSMockHTMLResourcePreloader(dummy_page_holder->GetDocument());
KURL url("http://127.0.0.1/foo.css"); KURL url("http://127.0.0.1/foo.css");
CSSStyleSheetResource* resource = Platform::Current()->GetURLLoaderMockFactory()->RegisterURL(
CSSStyleSheetResource::CreateForTest(url, UTF8Encoding()); url, WrappedResourceResponse(ResourceResponse()), "");
resource->SetStatus(ResourceStatus::kPending); FetchParameters params{ResourceRequest(url)};
PreloadRecordingCSSPreloaderResourceClient* resource_client = PreloadRecordingCSSPreloaderResourceClient* resource_client =
new PreloadRecordingCSSPreloaderResourceClient(resource, preloader); new PreloadRecordingCSSPreloaderResourceClient(preloader);
Resource* resource = CSSStyleSheetResource::Fetch(
params, dummy_page_holder->GetDocument().Fetcher(), resource_client);
dummy_page_holder->GetDocument().Shutdown(); dummy_page_holder->GetDocument().Shutdown();
...@@ -186,6 +187,7 @@ TEST_F(CSSPreloadScannerTest, DoNotExpectValidDocument) { ...@@ -186,6 +187,7 @@ TEST_F(CSSPreloadScannerTest, DoNotExpectValidDocument) {
// Do not expect to gather any preloads, as the document loader is invalid, // Do not expect to gather any preloads, as the document loader is invalid,
// which means we can't notify WebLoadingBehaviorData of the preloads. // which means we can't notify WebLoadingBehaviorData of the preloads.
EXPECT_EQ(0u, resource_client->preload_urls_.size()); EXPECT_EQ(0u, resource_client->preload_urls_.size());
Platform::Current()->GetURLLoaderMockFactory()->UnregisterURL(url);
} }
TEST_F(CSSPreloadScannerTest, ReferrerPolicyHeader) { TEST_F(CSSPreloadScannerTest, ReferrerPolicyHeader) {
...@@ -198,17 +200,20 @@ TEST_F(CSSPreloadScannerTest, ReferrerPolicyHeader) { ...@@ -198,17 +200,20 @@ TEST_F(CSSPreloadScannerTest, ReferrerPolicyHeader) {
dummy_page_holder->GetDocument(), "http://127.0.0.1/foo.css"); dummy_page_holder->GetDocument(), "http://127.0.0.1/foo.css");
KURL url("http://127.0.0.1/foo.css"); KURL url("http://127.0.0.1/foo.css");
FetchParameters params{ResourceRequest(url)};
Platform::Current()->GetURLLoaderMockFactory()->RegisterURL(
url, WrappedResourceResponse(ResourceResponse()), "");
ResourceResponse response; ResourceResponse response;
response.SetURL(url); response.SetURL(url);
response.SetHTTPStatusCode(200); response.SetHTTPStatusCode(200);
response.SetHTTPHeaderField("referrer-policy", "unsafe-url"); response.SetHTTPHeaderField("referrer-policy", "unsafe-url");
CSSStyleSheetResource* resource =
CSSStyleSheetResource::CreateForTest(url, UTF8Encoding());
resource->SetStatus(ResourceStatus::kPending);
resource->SetResponse(response);
PreloadRecordingCSSPreloaderResourceClient* resource_client = PreloadRecordingCSSPreloaderResourceClient* resource_client =
new PreloadRecordingCSSPreloaderResourceClient(resource, preloader); new PreloadRecordingCSSPreloaderResourceClient(preloader);
Resource* resource = CSSStyleSheetResource::Fetch(
params, dummy_page_holder->GetDocument().Fetcher(), resource_client);
resource->SetResponse(response);
KURL preload_url("http://127.0.0.1/preload.css"); KURL preload_url("http://127.0.0.1/preload.css");
Platform::Current()->GetURLLoaderMockFactory()->RegisterURL( Platform::Current()->GetURLLoaderMockFactory()->RegisterURL(
...@@ -222,6 +227,8 @@ TEST_F(CSSPreloadScannerTest, ReferrerPolicyHeader) { ...@@ -222,6 +227,8 @@ TEST_F(CSSPreloadScannerTest, ReferrerPolicyHeader) {
resource_client->preload_urls_.front()); resource_client->preload_urls_.front());
EXPECT_EQ(kReferrerPolicyAlways, EXPECT_EQ(kReferrerPolicyAlways,
resource_client->preload_referrer_policies_.front()); resource_client->preload_referrer_policies_.front());
Platform::Current()->GetURLLoaderMockFactory()->UnregisterURL(url);
Platform::Current()->GetURLLoaderMockFactory()->UnregisterURL(preload_url);
} }
} // namespace blink } // namespace blink
...@@ -124,7 +124,7 @@ class HTMLMockHTMLResourcePreloader : public ResourcePreloader { ...@@ -124,7 +124,7 @@ class HTMLMockHTMLResourcePreloader : public ResourcePreloader {
Document* document, Document* document,
const char* expected_referrer) { const char* expected_referrer) {
PreloadRequestVerification(type, url, base_url, width, referrer_policy); PreloadRequestVerification(type, url, base_url, width, referrer_policy);
Resource* resource = preload_request_->Start(document); Resource* resource = preload_request_->Start(document, nullptr);
ASSERT_TRUE(resource); ASSERT_TRUE(resource);
EXPECT_EQ(expected_referrer, resource->GetResourceRequest().HttpReferrer()); EXPECT_EQ(expected_referrer, resource->GetResourceRequest().HttpReferrer());
} }
...@@ -144,7 +144,7 @@ class HTMLMockHTMLResourcePreloader : public ResourcePreloader { ...@@ -144,7 +144,7 @@ class HTMLMockHTMLResourcePreloader : public ResourcePreloader {
network::mojom::FetchRequestMode request_mode, network::mojom::FetchRequestMode request_mode,
network::mojom::FetchCredentialsMode credentials_mode) { network::mojom::FetchCredentialsMode credentials_mode) {
ASSERT_TRUE(preload_request_.get()); ASSERT_TRUE(preload_request_.get());
Resource* resource = preload_request_->Start(document); Resource* resource = preload_request_->Start(document, nullptr);
ASSERT_TRUE(resource); ASSERT_TRUE(resource);
EXPECT_EQ(request_mode, EXPECT_EQ(request_mode,
resource->GetResourceRequest().GetFetchRequestMode()); resource->GetResourceRequest().GetFetchRequestMode());
......
...@@ -76,19 +76,19 @@ void HTMLResourcePreloader::Preload( ...@@ -76,19 +76,19 @@ void HTMLResourcePreloader::Preload(
if (!document_->Loader()) if (!document_->Loader())
return; return;
Resource* resource = preload->Start(document_); CSSPreloaderResourceClient* client = nullptr;
// Don't scan a Resource more than once, to avoid a self-referencing // Don't scan a Resource more than once, to avoid a self-referencing
// stlyesheet causing infinite recursion. // stlyesheet causing infinite recursion.
if (resource && !css_preloaders_.Contains(resource) && if (!css_preloaders_.Contains(preload->ResourceURL()) &&
preload->ResourceType() == Resource::kCSSStyleSheet) { preload->ResourceType() == Resource::kCSSStyleSheet) {
Settings* settings = document_->GetSettings(); Settings* settings = document_->GetSettings();
if (settings && (settings->GetCSSExternalScannerNoPreload() || if (settings && (settings->GetCSSExternalScannerNoPreload() ||
settings->GetCSSExternalScannerPreload())) { settings->GetCSSExternalScannerPreload())) {
css_preloaders_.insert(resource, client = new CSSPreloaderResourceClient(this);
new CSSPreloaderResourceClient(resource, this)); css_preloaders_.insert(preload->ResourceURL(), client);
} }
} }
preload->Start(document_, client);
} }
} // namespace blink } // namespace blink
...@@ -59,8 +59,7 @@ class CORE_EXPORT HTMLResourcePreloader ...@@ -59,8 +59,7 @@ class CORE_EXPORT HTMLResourcePreloader
private: private:
Member<Document> document_; Member<Document> document_;
HeapHashMap<Member<Resource>, Member<CSSPreloaderResourceClient>> HeapHashMap<String, Member<CSSPreloaderResourceClient>> css_preloaders_;
css_preloaders_;
DISALLOW_COPY_AND_ASSIGN(HTMLResourcePreloader); DISALLOW_COPY_AND_ASSIGN(HTMLResourcePreloader);
}; };
......
...@@ -30,7 +30,8 @@ KURL PreloadRequest::CompleteURL(Document* document) { ...@@ -30,7 +30,8 @@ KURL PreloadRequest::CompleteURL(Document* document) {
return document->CompleteURL(resource_url_); return document->CompleteURL(resource_url_);
} }
Resource* PreloadRequest::Start(Document* document) { Resource* PreloadRequest::Start(Document* document,
CSSPreloaderResourceClient* client) {
DCHECK(IsMainThread()); DCHECK(IsMainThread());
FetchInitiatorInfo initiator_info; FetchInitiatorInfo initiator_info;
...@@ -105,7 +106,7 @@ Resource* PreloadRequest::Start(Document* document) { ...@@ -105,7 +106,7 @@ Resource* PreloadRequest::Start(Document* document) {
// the async request to the blocked script here. // the async request to the blocked script here.
} }
return document->Loader()->StartPreload(resource_type_, params); return document->Loader()->StartPreload(resource_type_, params, client);
} }
} // namespace blink } // namespace blink
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
namespace blink { namespace blink {
class CSSPreloaderResourceClient;
class Document; class Document;
class CORE_EXPORT PreloadRequest { class CORE_EXPORT PreloadRequest {
...@@ -67,7 +68,7 @@ class CORE_EXPORT PreloadRequest { ...@@ -67,7 +68,7 @@ class CORE_EXPORT PreloadRequest {
bool IsSafeToSendToAnotherThread() const; bool IsSafeToSendToAnotherThread() const;
Resource* Start(Document*); Resource* Start(Document*, CSSPreloaderResourceClient*);
void SetDefer(FetchParameters::DeferOption defer) { defer_ = defer; } void SetDefer(FetchParameters::DeferOption defer) { defer_ = defer; }
void SetCharset(const String& charset) { charset_ = charset.IsolatedCopy(); } void SetCharset(const String& charset) { charset_ = charset.IsolatedCopy(); }
......
...@@ -43,6 +43,7 @@ ...@@ -43,6 +43,7 @@
#include "core/frame/Settings.h" #include "core/frame/Settings.h"
#include "core/frame/csp/ContentSecurityPolicy.h" #include "core/frame/csp/ContentSecurityPolicy.h"
#include "core/html/HTMLFrameOwnerElement.h" #include "core/html/HTMLFrameOwnerElement.h"
#include "core/html/parser/CSSPreloadScanner.h"
#include "core/html/parser/HTMLParserIdioms.h" #include "core/html/parser/HTMLParserIdioms.h"
#include "core/html/parser/TextResourceDecoder.h" #include "core/html/parser/TextResourceDecoder.h"
#include "core/inspector/ConsoleMessage.h" #include "core/inspector/ConsoleMessage.h"
...@@ -196,8 +197,10 @@ const KURL& DocumentLoader::Url() const { ...@@ -196,8 +197,10 @@ const KURL& DocumentLoader::Url() const {
} }
Resource* DocumentLoader::StartPreload(Resource::Type type, Resource* DocumentLoader::StartPreload(Resource::Type type,
FetchParameters& params) { FetchParameters& params,
CSSPreloaderResourceClient* client) {
Resource* resource = nullptr; Resource* resource = nullptr;
DCHECK(!client || type == Resource::kCSSStyleSheet);
switch (type) { switch (type) {
case Resource::kImage: case Resource::kImage:
if (frame_) if (frame_)
...@@ -208,7 +211,7 @@ Resource* DocumentLoader::StartPreload(Resource::Type type, ...@@ -208,7 +211,7 @@ Resource* DocumentLoader::StartPreload(Resource::Type type,
resource = ScriptResource::Fetch(params, Fetcher(), nullptr); resource = ScriptResource::Fetch(params, Fetcher(), nullptr);
break; break;
case Resource::kCSSStyleSheet: case Resource::kCSSStyleSheet:
resource = CSSStyleSheetResource::Fetch(params, Fetcher(), nullptr); resource = CSSStyleSheetResource::Fetch(params, Fetcher(), client);
break; break;
case Resource::kFont: case Resource::kFont:
resource = FontResource::Fetch(params, Fetcher()); resource = FontResource::Fetch(params, Fetcher());
......
...@@ -60,16 +60,17 @@ ...@@ -60,16 +60,17 @@
namespace blink { namespace blink {
class ApplicationCacheHost; class ApplicationCacheHost;
class SubresourceFilter; class CSSPreloaderResourceClient;
class ResourceFetcher;
class Document; class Document;
class DocumentParser; class DocumentParser;
class FrameLoader;
class HistoryItem; class HistoryItem;
class LocalFrame; class LocalFrame;
class LocalFrameClient; class LocalFrameClient;
class FrameLoader; class ResourceFetcher;
class ResourceTimingInfo; class ResourceTimingInfo;
class SerializedScriptValue; class SerializedScriptValue;
class SubresourceFilter;
class WebServiceWorkerNetworkProvider; class WebServiceWorkerNetworkProvider;
struct ViewportDescriptionWrapper; struct ViewportDescriptionWrapper;
...@@ -202,7 +203,9 @@ class CORE_EXPORT DocumentLoader ...@@ -202,7 +203,9 @@ class CORE_EXPORT DocumentLoader
void DispatchLinkHeaderPreloads(ViewportDescriptionWrapper*, void DispatchLinkHeaderPreloads(ViewportDescriptionWrapper*,
LinkLoader::MediaPreloadPolicy); LinkLoader::MediaPreloadPolicy);
Resource* StartPreload(Resource::Type, FetchParameters&); Resource* StartPreload(Resource::Type,
FetchParameters&,
CSSPreloaderResourceClient*);
void SetServiceWorkerNetworkProvider( void SetServiceWorkerNetworkProvider(
std::unique_ptr<WebServiceWorkerNetworkProvider>); std::unique_ptr<WebServiceWorkerNetworkProvider>);
......
...@@ -392,7 +392,7 @@ static Resource* PreloadIfNeeded(const LinkRelAttribute& rel_attribute, ...@@ -392,7 +392,7 @@ static Resource* PreloadIfNeeded(const LinkRelAttribute& rel_attribute,
} }
link_fetch_params.SetLinkPreload(true); link_fetch_params.SetLinkPreload(true);
return document.Loader()->StartPreload(resource_type.value(), return document.Loader()->StartPreload(resource_type.value(),
link_fetch_params); link_fetch_params, nullptr);
} }
// https://html.spec.whatwg.org/#link-type-modulepreload // https://html.spec.whatwg.org/#link-type-modulepreload
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment