From 84ce4628035f10b5e7e1882a6718a0937070abfd Mon Sep 17 00:00:00 2001 From: Pedro Pontes Date: Mon, 7 Dec 2020 16:58:09 +0100 Subject: [PATCH] chore: cherry-pick eec5025668f8 from chromium (#26859) * chore: cherry-pick eec5025668f8 from chromium * update patches Co-authored-by: Electron Bot --- patches/chromium/.patches | 1 + .../chromium/cherry-pick-eec5025668f8.patch | 77 +++++++++++++++++++ 2 files changed, 78 insertions(+) create mode 100644 patches/chromium/cherry-pick-eec5025668f8.patch diff --git a/patches/chromium/.patches b/patches/chromium/.patches index 08aac0e36eaca..091de83fe4a40 100644 --- a/patches/chromium/.patches +++ b/patches/chromium/.patches @@ -154,3 +154,4 @@ crashpad-initialize-logging.patch make_macos_os_version_numbers_consistent.patch ignore_renderframehostimpl_detach_for_speculative_rfhs.patch ui_check_that_unpremultiply_is_passed_a_32bpp_image.patch +cherry-pick-eec5025668f8.patch diff --git a/patches/chromium/cherry-pick-eec5025668f8.patch b/patches/chromium/cherry-pick-eec5025668f8.patch new file mode 100644 index 0000000000000..4132df8bfa9b7 --- /dev/null +++ b/patches/chromium/cherry-pick-eec5025668f8.patch @@ -0,0 +1,77 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Bill Budge +Date: Fri, 13 Nov 2020 09:02:09 +0000 +Subject: Merged: [wasm][code cache] Match response to cached raw resource + +- Verifies that the retrieved resource has the same response time, and + that the source matches (i.e. both are from service worker, or both + are not). + +Bug: chromium:1146673 + +(cherry picked from commit a8b46244ecaa1647ee2d70304878c0365ee04087) + +Change-Id: I6243ec9017b2405687056aa6ea199c67b1c16063 +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2526802 +Reviewed-by: Yutaka Hirano +Reviewed-by: Andreas Haas +Commit-Queue: Bill Budge +Cr-Original-Commit-Position: refs/heads/master@{#826277} +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2537531 +Commit-Queue: Clemens Backes +Commit-Queue: Andreas Haas +Auto-Submit: Clemens Backes +Cr-Commit-Position: refs/branch-heads/4240@{#1447} +Cr-Branched-From: f297677702651916bbf65e59c0d4bbd4ce57d1ee-refs/heads/master@{#800218} + +diff --git a/third_party/blink/renderer/bindings/core/v8/v8_wasm_response_extensions.cc b/third_party/blink/renderer/bindings/core/v8/v8_wasm_response_extensions.cc +index 6023c25e49ae6459cae350a3aae9b03c43da738a..978fb874469ad6e2a0ce2f70737c4a5c5b16aee3 100644 +--- a/third_party/blink/renderer/bindings/core/v8/v8_wasm_response_extensions.cc ++++ b/third_party/blink/renderer/bindings/core/v8/v8_wasm_response_extensions.cc +@@ -210,7 +210,8 @@ class ExceptionToAbortStreamingScope { + }; + + RawResource* GetRawResource(ScriptState* script_state, +- const String& url_string) { ++ const String& url_string, ++ Response* response) { + ExecutionContext* execution_context = ExecutionContext::From(script_state); + if (!execution_context) + return nullptr; +@@ -224,6 +225,18 @@ RawResource* GetRawResource(ScriptState* script_state, + if (!resource) + return nullptr; + ++ // Make sure the resource matches the |response|. To check that, we make sure ++ // the response times match, and the response sources match. ++ const ResourceResponse& resource_response = resource->GetResponse(); ++ const FetchResponseData* fetch_response_data = ++ response->GetResponse()->InternalResponse(); ++ if (resource_response.ResponseTime() != fetch_response_data->ResponseTime()) ++ return nullptr; ++ bool from_service_worker = fetch_response_data->ResponseSource() == ++ network::mojom::FetchResponseSource::kUnspecified; ++ if (resource_response.WasFetchedViaServiceWorker() != from_service_worker) ++ return nullptr; ++ + // Wasm modules should be fetched as raw resources. + DCHECK_EQ(ResourceType::kRaw, resource->GetType()); + return ToRawResource(resource); +@@ -354,13 +367,12 @@ void StreamFromResponseCallback( + String url = response->url(); + const std::string& url_utf8 = url.Utf8(); + streaming->SetUrl(url_utf8.c_str(), url_utf8.size()); +- RawResource* raw_resource = GetRawResource(script_state, url); +- if (raw_resource) { +- SingleCachedMetadataHandler* cache_handler = +- raw_resource->ScriptCacheHandler(); ++ RawResource* resource = GetRawResource(script_state, url, response); ++ if (resource) { ++ SingleCachedMetadataHandler* cache_handler = resource->ScriptCacheHandler(); + if (cache_handler) { + auto client = std::make_shared( +- url, raw_resource->GetResponse().ResponseTime()); ++ url, resource->GetResponse().ResponseTime()); + streaming->SetClient(client); + scoped_refptr cached_module = + cache_handler->GetCachedMetadata(kWasmModuleTag);