Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: cherry-pick 1a8af2da50e4 from chromium #31902

Merged
merged 3 commits into from Nov 22, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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