Skip to content

Commit

Permalink
chore: cherry-pick 1a8af2da50e4 from chromium (#31902)
Browse files Browse the repository at this point in the history
* chore: cherry-pick 1a8af2da50e4 from chromium

* chore: update patches

Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
Co-authored-by: Electron Bot <electron@github.com>
  • Loading branch information
3 people committed Nov 22, 2021
1 parent 52e443e commit 1fc7634
Show file tree
Hide file tree
Showing 2 changed files with 355 additions and 0 deletions.
1 change: 1 addition & 0 deletions patches/chromium/.patches
Expand Up @@ -114,4 +114,5 @@ cherry-pick-2e7c9b33453b.patch
move_networkstateobserver_from_document_to_window.patch
cherry-pick-0894af410c4e.patch
cherry-pick-91dd4f79ab5b.patch
cherry-pick-1a8af2da50e4.patch
cherry-pick-a5f54612590d.patch
354 changes: 354 additions & 0 deletions patches/chromium/cherry-pick-1a8af2da50e4.patch
@@ -0,0 +1,354 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Lukasz Anforowicz <lukasza@chromium.org>
Date: Mon, 8 Nov 2021 15:05:30 +0000
Subject: Deleting unused field: `FetchEventPreloadHandle::url_loader`.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

The `FetchEventPreloadHandle::url_loader` field is not really used - it
is only needed to keep the URLLoader alive (and this can be accomplished
in a simpler way, by keeping the mojo::PendingRemote in the Browser
process).

This CL removes the `FetchEventPreloadHandle::url_loader` field and the
FetchEventPreloadHandle and WebFetchEventPreloadHandle types (collapsing
these handle types into their only other remaining field:
mojo::PendingReceiver<network::mojom::URLLoaderClient>).

(cherry picked from commit dbe67ccde52e30acf6a66b1b9cc83768a067fa6a)

Fixed: 1264477
Change-Id: I9c9c54900d79e92ac08eeb43536c938fa84a58f8
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3252914
Reviewed-by: Daniel Cheng <dcheng@chromium.org>
Reviewed-by: Ben Kelly <wanderview@chromium.org>
Reviewed-by: Hiroki Nakagawa <nhiroki@chromium.org>
Commit-Queue: Łukasz Anforowicz <lukasza@chromium.org>
Cr-Original-Commit-Position: refs/heads/main@{#937895}
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3262600
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Commit-Queue: Ben Kelly <wanderview@chromium.org>
Cr-Commit-Position: refs/branch-heads/4664@{#853}
Cr-Branched-From: 24dc4ee75e01a29d390d43c9c264372a169273a7-refs/heads/main@{#929512}

diff --git a/content/browser/service_worker/service_worker_fetch_dispatcher.cc b/content/browser/service_worker/service_worker_fetch_dispatcher.cc
index 0d034293826354f6d1b7910a6604f241ff1c8988..b980c5a0745eaf7a904c1047cbe6c5e86cef0c67 100644
--- a/content/browser/service_worker/service_worker_fetch_dispatcher.cc
+++ b/content/browser/service_worker/service_worker_fetch_dispatcher.cc
@@ -449,8 +449,10 @@ class ServiceWorkerFetchDispatcher::URLLoaderAssets
// NetworkService.
URLLoaderAssets(
scoped_refptr<network::SharedURLLoaderFactory> shared_url_loader_factory,
+ mojo::PendingRemote<network::mojom::URLLoader> url_loader,
std::unique_ptr<DelegatingURLLoaderClient> url_loader_client)
: shared_url_loader_factory_(std::move(shared_url_loader_factory)),
+ url_loader_(std::move(url_loader)),
url_loader_client_(std::move(url_loader_client)) {}

void MaybeReportToDevTools(std::pair<int, int> worker_id,
@@ -467,6 +469,7 @@ class ServiceWorkerFetchDispatcher::URLLoaderAssets

// NetworkService:
scoped_refptr<network::SharedURLLoaderFactory> shared_url_loader_factory_;
+ mojo::PendingRemote<network::mojom::URLLoader> url_loader_;

// Both:
std::unique_ptr<DelegatingURLLoaderClient> url_loader_client_;
@@ -633,7 +636,8 @@ void ServiceWorkerFetchDispatcher::DispatchFetchEvent() {
auto params = blink::mojom::DispatchFetchEventParams::New();
params->request = std::move(request_);
params->client_id = client_id_;
- params->preload_handle = std::move(preload_handle_);
+ params->preload_url_loader_client_receiver =
+ std::move(preload_url_loader_client_receiver_);
params->is_offline_capability_check = is_offline_capability_check_;

// TODO(https://crbug.com/900700): Make the remote connected to a receiver
@@ -721,13 +725,9 @@ bool ServiceWorkerFetchDispatcher::MaybeStartNavigationPreload(
// When the fetch event is for an offline capability check, respond to the
// navigation preload with a network disconnected error, to simulate offline.
if (is_offline_capability_check_) {
- mojo::PendingRemote<network::mojom::URLLoader> url_loader_to_pass;
mojo::Remote<network::mojom::URLLoaderClient> url_loader_client;
- auto dummy_receiver = url_loader_to_pass.InitWithNewPipeAndPassReceiver();

- preload_handle_ = blink::mojom::FetchEventPreloadHandle::New();
- preload_handle_->url_loader = std::move(url_loader_to_pass);
- preload_handle_->url_loader_client_receiver =
+ preload_url_loader_client_receiver_ =
url_loader_client.BindNewPipeAndPassReceiver();

url_loader_client->OnComplete(
@@ -770,12 +770,10 @@ bool ServiceWorkerFetchDispatcher::MaybeStartNavigationPreload(
factory = base::MakeRefCounted<network::WrapperSharedURLLoaderFactory>(
std::move(network_factory));

- preload_handle_ = blink::mojom::FetchEventPreloadHandle::New();
-
// Create the DelegatingURLLoaderClient, which becomes the
// URLLoaderClient for the navigation preload network request.
mojo::PendingRemote<network::mojom::URLLoaderClient> inner_url_loader_client;
- preload_handle_->url_loader_client_receiver =
+ preload_url_loader_client_receiver_ =
inner_url_loader_client.InitWithNewPipeAndPassReceiver();
auto url_loader_client = std::make_unique<DelegatingURLLoaderClient>(
std::move(inner_url_loader_client), resource_request);
@@ -810,11 +808,9 @@ bool ServiceWorkerFetchDispatcher::MaybeStartNavigationPreload(
net::MutableNetworkTrafficAnnotationTag(
kNavigationPreloadTrafficAnnotation));

- preload_handle_->url_loader = std::move(url_loader);
-
DCHECK(!url_loader_assets_);
url_loader_assets_ = base::MakeRefCounted<URLLoaderAssets>(
- std::move(factory), std::move(url_loader_client));
+ std::move(factory), std::move(url_loader), std::move(url_loader_client));
return true;
}

diff --git a/content/browser/service_worker/service_worker_fetch_dispatcher.h b/content/browser/service_worker/service_worker_fetch_dispatcher.h
index 5b2a45bff25b7f2c35e304385f22935c33d60a05..b96b2de068bf9f6a38b4d995cf137ebfd53735ea 100644
--- a/content/browser/service_worker/service_worker_fetch_dispatcher.h
+++ b/content/browser/service_worker/service_worker_fetch_dispatcher.h
@@ -121,10 +121,11 @@ class CONTENT_EXPORT ServiceWorkerFetchDispatcher {

scoped_refptr<URLLoaderAssets> url_loader_assets_;

- // |preload_handle_| holds the URLLoader and URLLoaderClient for the service
- // worker to receive the navigation preload response. It's passed to the
- // service worker along with the fetch event.
- blink::mojom::FetchEventPreloadHandlePtr preload_handle_;
+ // Holds the URLLoaderClient for the service worker to receive the navigation
+ // preload response. It's passed to the service worker along with the fetch
+ // event.
+ mojo::PendingReceiver<network::mojom::URLLoaderClient>
+ preload_url_loader_client_receiver_;

// Whether to dispatch an offline-capability-check fetch event.
const bool is_offline_capability_check_ = false;
diff --git a/content/renderer/service_worker/navigation_preload_request.cc b/content/renderer/service_worker/navigation_preload_request.cc
index c9e9ffd4c68a583569fd5633ca2369e190e2aed7..92f9d4a7de115cac0502aeb9c777605a756b6175 100644
--- a/content/renderer/service_worker/navigation_preload_request.cc
+++ b/content/renderer/service_worker/navigation_preload_request.cc
@@ -19,12 +19,12 @@ NavigationPreloadRequest::NavigationPreloadRequest(
ServiceWorkerContextClient* owner,
int fetch_event_id,
const GURL& url,
- blink::mojom::FetchEventPreloadHandlePtr preload_handle)
+ mojo::PendingReceiver<network::mojom::URLLoaderClient>
+ preload_url_loader_client_receiver)
: owner_(owner),
fetch_event_id_(fetch_event_id),
url_(url),
- url_loader_(std::move(preload_handle->url_loader)),
- receiver_(this, std::move(preload_handle->url_loader_client_receiver)) {}
+ receiver_(this, std::move(preload_url_loader_client_receiver)) {}

NavigationPreloadRequest::~NavigationPreloadRequest() = default;

diff --git a/content/renderer/service_worker/navigation_preload_request.h b/content/renderer/service_worker/navigation_preload_request.h
index 08cfc4a0dad5777b88f2388da5d07c864d9953fd..f6d19a3d1383767e1c450be7ec29a47ff245ff5a 100644
--- a/content/renderer/service_worker/navigation_preload_request.h
+++ b/content/renderer/service_worker/navigation_preload_request.h
@@ -35,7 +35,8 @@ class NavigationPreloadRequest final : public network::mojom::URLLoaderClient {
ServiceWorkerContextClient* owner,
int fetch_event_id,
const GURL& url,
- blink::mojom::FetchEventPreloadHandlePtr preload_handle);
+ mojo::PendingReceiver<network::mojom::URLLoaderClient>
+ preload_url_loader_client_receiver);
~NavigationPreloadRequest() override;

// network::mojom::URLLoaderClient:
@@ -59,11 +60,10 @@ class NavigationPreloadRequest final : public network::mojom::URLLoaderClient {
void ReportErrorToOwner(const std::string& message,
blink::WebServiceWorkerError::Mode error_mode);

- ServiceWorkerContextClient* owner_;
+ ServiceWorkerContextClient* owner_ = nullptr;

- const int fetch_event_id_;
+ const int fetch_event_id_ = -1;
const GURL url_;
- mojo::Remote<network::mojom::URLLoader> url_loader_;
mojo::Receiver<network::mojom::URLLoaderClient> receiver_;

std::unique_ptr<blink::WebURLResponse> response_;
diff --git a/content/renderer/service_worker/service_worker_context_client.cc b/content/renderer/service_worker/service_worker_context_client.cc
index d569c5362c0c3866b333db714d7dd8e7f3344afc..f65f535b5c228ce881a0b0066b67d9847b6168a4 100644
--- a/content/renderer/service_worker/service_worker_context_client.cc
+++ b/content/renderer/service_worker/service_worker_context_client.cc
@@ -476,14 +476,14 @@ void ServiceWorkerContextClient::SendWorkerStarted(
void ServiceWorkerContextClient::SetupNavigationPreload(
int fetch_event_id,
const blink::WebURL& url,
- std::unique_ptr<blink::WebFetchEventPreloadHandle> preload_handle) {
+ blink::CrossVariantMojoReceiver<
+ network::mojom::URLLoaderClientInterfaceBase>
+ preload_url_loader_client_receiver) {
DCHECK(worker_task_runner_->RunsTasksInCurrentSequence());
DCHECK(context_);
auto preload_request = std::make_unique<NavigationPreloadRequest>(
this, fetch_event_id, GURL(url),
- blink::mojom::FetchEventPreloadHandle::New(
- std::move(preload_handle->url_loader),
- std::move(preload_handle->url_loader_client_receiver)));
+ std::move(preload_url_loader_client_receiver));
context_->preload_requests.AddWithID(std::move(preload_request),
fetch_event_id);
}
diff --git a/content/renderer/service_worker/service_worker_context_client.h b/content/renderer/service_worker/service_worker_context_client.h
index 8191aaec6ed37c6a64bcbd9beac720777de3075e..5abd533c6c3b1926efa6b8fc158562468cc96e19 100644
--- a/content/renderer/service_worker/service_worker_context_client.h
+++ b/content/renderer/service_worker/service_worker_context_client.h
@@ -159,8 +159,9 @@ class CONTENT_EXPORT ServiceWorkerContextClient
const blink::WebString& source_url) override;
void SetupNavigationPreload(int fetch_event_id,
const blink::WebURL& url,
- std::unique_ptr<blink::WebFetchEventPreloadHandle>
- preload_handle) override;
+ blink::CrossVariantMojoReceiver<
+ network::mojom::URLLoaderClientInterfaceBase>
+ preload_url_loader_client_receiver) override;
void RequestTermination(RequestTerminationCallback callback) override;
scoped_refptr<blink::WebServiceWorkerFetchContext>
CreateWorkerFetchContextOnInitiatorThread() override;
diff --git a/mojo/public/cpp/bindings/README.md b/mojo/public/cpp/bindings/README.md
index b950df5a7733b26ae3a9dbc1bacc208e584fa9e6..334ba1c8fd92aed36dec6993afe38ca91ffcc49a 100644
--- a/mojo/public/cpp/bindings/README.md
+++ b/mojo/public/cpp/bindings/README.md
@@ -1709,6 +1709,9 @@ C++ sources can depend on shared sources only, by referencing the
`"${target_name}_shared"` target, e.g. `"//foo/mojom:mojom_shared"` in the
example above.

+For converting between Blink and non-Blink variants, please see
+`//third_party/blink/public/platform/cross_variant_mojo_util.h`.
+
## Versioning Considerations

For general documentation of versioning in the Mojom IDL see
diff --git a/third_party/blink/public/mojom/service_worker/dispatch_fetch_event_params.mojom b/third_party/blink/public/mojom/service_worker/dispatch_fetch_event_params.mojom
index 382be0b3dd042ceadb73e4d514f93ac7c8624b43..c95a2e255166871ff45b6a4c3a8b206e1dace776 100644
--- a/third_party/blink/public/mojom/service_worker/dispatch_fetch_event_params.mojom
+++ b/third_party/blink/public/mojom/service_worker/dispatch_fetch_event_params.mojom
@@ -9,13 +9,6 @@ import "third_party/blink/public/mojom/blob/blob.mojom";
import "third_party/blink/public/mojom/fetch/fetch_api_request.mojom";
import "third_party/blink/public/mojom/timing/worker_timing_container.mojom";

-// Used for service worker navigation preload, to create
-// FetchEvent#preloadResponse.
-struct FetchEventPreloadHandle {
- pending_remote<network.mojom.URLLoader> url_loader;
- pending_receiver<network.mojom.URLLoaderClient> url_loader_client_receiver;
-};
-
// Parameters used for dispatching a FetchEvent.
struct DispatchFetchEventParams {
// FetchEvent#request.
@@ -23,8 +16,9 @@ struct DispatchFetchEventParams {

// FetchEvent#clientId.
string client_id;
+
// FetchEvent#preloadResponse.
- FetchEventPreloadHandle? preload_handle;
+ pending_receiver<network.mojom.URLLoaderClient>? preload_url_loader_client_receiver;

// This is currently null for navigation because it's still being implemented.
// TODO(https://crbug.com/900700): Make this non-nullable when implementation
diff --git a/third_party/blink/public/web/modules/service_worker/web_service_worker_context_client.h b/third_party/blink/public/web/modules/service_worker/web_service_worker_context_client.h
index 67c0c9d3cb10478755422b489c97afe8adce1a24..0a8cde9a7f6bab9de2c43f13c1bc0d35375bc2b5 100644
--- a/third_party/blink/public/web/modules/service_worker/web_service_worker_context_client.h
+++ b/third_party/blink/public/web/modules/service_worker/web_service_worker_context_client.h
@@ -31,8 +31,6 @@
#ifndef THIRD_PARTY_BLINK_PUBLIC_WEB_MODULES_SERVICE_WORKER_WEB_SERVICE_WORKER_CONTEXT_CLIENT_H_
#define THIRD_PARTY_BLINK_PUBLIC_WEB_MODULES_SERVICE_WORKER_WEB_SERVICE_WORKER_CONTEXT_CLIENT_H_

-#include <memory>
-
#include "base/memory/scoped_refptr.h"
#include "services/network/public/mojom/url_loader.mojom-shared.h"
#include "third_party/blink/public/mojom/devtools/console_message.mojom-shared.h"
@@ -53,14 +51,6 @@ namespace blink {
class WebServiceWorkerContextProxy;
class WebString;

-// Used to pass the mojom struct blink.mojom.FetchEventPreloadHandle across the
-// boundary between //content and Blink.
-struct WebFetchEventPreloadHandle {
- CrossVariantMojoRemote<network::mojom::URLLoaderInterfaceBase> url_loader;
- CrossVariantMojoReceiver<network::mojom::URLLoaderClientInterfaceBase>
- url_loader_client_receiver;
-};
-
// WebServiceWorkerContextClient is a "client" of a service worker execution
// context. This interface is implemented by the embedder and allows the
// embedder to communicate with the service worker execution context. It is
@@ -166,7 +156,8 @@ class WebServiceWorkerContextClient {
virtual void SetupNavigationPreload(
int fetch_event_id,
const WebURL& url,
- std::unique_ptr<WebFetchEventPreloadHandle> preload_handle) {}
+ CrossVariantMojoReceiver<network::mojom::URLLoaderClientInterfaceBase>
+ preload_url_loader_client_receiver) {}

// Called when we need to request to terminate this worker due to idle
// timeout.
diff --git a/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.cc b/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.cc
index 9c2cff1d0433d55c4b08fd4eef83544bd120425b..3e84a0200950a33c93f6e473a2cace4609389aea 100644
--- a/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.cc
+++ b/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.cc
@@ -1514,11 +1514,12 @@ void ServiceWorkerGlobalScope::StartFetchEvent(
params->request->url.ElidedString().Utf8());

// Set up for navigation preload (FetchEvent#preloadResponse) if needed.
- const bool navigation_preload_sent = !!params->preload_handle;
+ bool navigation_preload_sent = !!params->preload_url_loader_client_receiver;
if (navigation_preload_sent) {
To<ServiceWorkerGlobalScopeProxy>(ReportingProxy())
- .SetupNavigationPreload(event_id, params->request->url,
- std::move(params->preload_handle));
+ .SetupNavigationPreload(
+ event_id, params->request->url,
+ std::move(params->preload_url_loader_client_receiver));
}

ScriptState::Scope scope(ScriptController()->GetScriptState());
diff --git a/third_party/blink/renderer/modules/service_worker/service_worker_global_scope_proxy.cc b/third_party/blink/renderer/modules/service_worker/service_worker_global_scope_proxy.cc
index b2efbea7c370b7f641cad9c5db75f9826ec705ed..33d11a19b350e1dd12c105403ed513e9a62a76ec 100644
--- a/third_party/blink/renderer/modules/service_worker/service_worker_global_scope_proxy.cc
+++ b/third_party/blink/renderer/modules/service_worker/service_worker_global_scope_proxy.cc
@@ -257,14 +257,11 @@ bool ServiceWorkerGlobalScopeProxy::IsServiceWorkerGlobalScopeProxy() const {
void ServiceWorkerGlobalScopeProxy::SetupNavigationPreload(
int fetch_event_id,
const KURL& url,
- mojom::blink::FetchEventPreloadHandlePtr preload_handle) {
+ mojo::PendingReceiver<network::mojom::blink::URLLoaderClient>
+ preload_url_loader_client_receiver) {
DCHECK_CALLED_ON_VALID_THREAD(worker_thread_checker_);
- auto web_preload_handle = std::make_unique<WebFetchEventPreloadHandle>();
- web_preload_handle->url_loader = std::move(preload_handle->url_loader);
- web_preload_handle->url_loader_client_receiver =
- std::move(preload_handle->url_loader_client_receiver);
- Client().SetupNavigationPreload(fetch_event_id, url,
- std::move(web_preload_handle));
+ Client().SetupNavigationPreload(
+ fetch_event_id, url, std::move(preload_url_loader_client_receiver));
}

void ServiceWorkerGlobalScopeProxy::RequestTermination(
diff --git a/third_party/blink/renderer/modules/service_worker/service_worker_global_scope_proxy.h b/third_party/blink/renderer/modules/service_worker/service_worker_global_scope_proxy.h
index 783dbe1919d1282f40117aea22b75a8e54e82d89..d54a2449da63f67930cb3d85cfbb27c35c45a8d3 100644
--- a/third_party/blink/renderer/modules/service_worker/service_worker_global_scope_proxy.h
+++ b/third_party/blink/renderer/modules/service_worker/service_worker_global_scope_proxy.h
@@ -129,7 +129,8 @@ class ServiceWorkerGlobalScopeProxy final : public WebServiceWorkerContextProxy,
void SetupNavigationPreload(
int fetch_event_id,
const KURL& url,
- mojom::blink::FetchEventPreloadHandlePtr preload_handle);
+ mojo::PendingReceiver<network::mojom::blink::URLLoaderClient>
+ preload_url_loader_client_receiver);
void RequestTermination(WTF::CrossThreadOnceFunction<void(bool)> callback);

// Detaches this proxy object entirely from the outside world, clearing out

0 comments on commit 1fc7634

Please sign in to comment.