| Index: content/browser/service_worker/link_header_support.cc
|
| diff --git a/content/browser/service_worker/link_header_support.cc b/content/browser/service_worker/link_header_support.cc
|
| index 9f1fe47107a138bb8a724b1df0842c6fec8e6b50..dbfa83892917cf24eb01e3a959f5c8a537b21370 100644
|
| --- a/content/browser/service_worker/link_header_support.cc
|
| +++ b/content/browser/service_worker/link_header_support.cc
|
| @@ -34,6 +34,24 @@ void RegisterServiceWorkerFinished(int64_t trace_id, bool result) {
|
| trace_id, "Success", result);
|
| }
|
|
|
| +blink::WebServiceWorkerUpdateViaCache ParseUpdateViaCache(
|
| + const std::unordered_map<std::string, base::Optional<std::string>>&
|
| + params) {
|
| + // https://html.spec.whatwg.org/multipage/semantics.html#attr-link-updateviacache
|
| + auto cache_param = params.find("updateviacache");
|
| + if (cache_param == params.end())
|
| + return blink::WebServiceWorkerUpdateViaCache::kImports;
|
| + const std::string& cache = cache_param->second.value_or("");
|
| + if (base::EqualsCaseInsensitiveASCII(cache, "imports"))
|
| + return blink::WebServiceWorkerUpdateViaCache::kImports;
|
| + if (base::EqualsCaseInsensitiveASCII(cache, "all"))
|
| + return blink::WebServiceWorkerUpdateViaCache::kAll;
|
| + if (base::EqualsCaseInsensitiveASCII(cache, "none"))
|
| + return blink::WebServiceWorkerUpdateViaCache::kNone;
|
| + // Default value
|
| + return blink::WebServiceWorkerUpdateViaCache::kImports;
|
| +}
|
| +
|
| void HandleServiceWorkerLink(
|
| net::URLRequest* request,
|
| const std::string& url,
|
| @@ -97,6 +115,11 @@ void HandleServiceWorkerLink(
|
| GURL scope_url = scope_param == params.end()
|
| ? script_url.Resolve("./")
|
| : context_url.Resolve(scope_param->second.value_or(""));
|
| + blink::WebServiceWorkerUpdateViaCache update_via_cache =
|
| + ParseUpdateViaCache(params);
|
| + if (update_via_cache == blink::WebServiceWorkerUpdateViaCache::kUnknown) {
|
| + return;
|
| + }
|
|
|
| if (!context_url.is_valid() || !script_url.is_valid() ||
|
| !scope_url.is_valid())
|
| @@ -121,7 +144,7 @@ void HandleServiceWorkerLink(
|
| "ServiceWorker", "LinkHeaderResourceThrottle::HandleServiceWorkerLink",
|
| ++trace_id, "Pattern", scope_url.spec(), "Script URL", script_url.spec());
|
| service_worker_context->RegisterServiceWorker(
|
| - scope_url, script_url,
|
| + scope_url, script_url, update_via_cache,
|
| base::Bind(&RegisterServiceWorkerFinished, trace_id));
|
| }
|
|
|
|
|