Commit a9f1291a authored by Daniel Cheng's avatar Daniel Cheng Committed by Commit Bot

[blink][mojo] Add ToCrossVariantMojoType helper

This eliminates the need to crack a mojo::Receiver/mojo::Remote into a
message pipe and a handle to convert between Blink and non-Blink
variants. This CL also includes a cleanup pass for the remaining uses of
PassPipe() and PassHandle(), migrating them to either std::move()
directly if possible, or use the new ToCrossVariantMojoType helper if
applicable.

Bug: 1059157
Change-Id: Id389d69ba32c17ce76942f16ca2b5b4fd26aab18
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2556565
Commit-Queue: Daniel Cheng <dcheng@chromium.org>
Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Cr-Commit-Position: refs/heads/master@{#830936}
parent 96bf7ce4
...@@ -3,25 +3,30 @@ ...@@ -3,25 +3,30 @@
// found in the LICENSE file. // found in the LICENSE file.
// //
// This header defines utilities for converting between Mojo interface variant // This header defines utilities for converting between Mojo interface variant
// types. This is useful for maintaining type safety when message pipes need to // types. Any code that needs to convert interface endpoints between
// be passed across the Blink public API boundary. // blink::mojom::MyInterface and blink::mojom::blink::MyInterface (such as the
// Blink public API) should use these helpers to eliminate boilerplate code and
// improve type safety.
//
// Background: Mojo generates two C++ interface classes for a given interface:
// one using STL types and another using Blink's WTF types. The two are not
// related to each other in any way. Converting between them previously meant
// decomposing an interface endpoint into an untyped ScopedMessagePipeHandle,
// with only comments to document the interface type.
// //
// Example conversion from the Blink variant into a cross-variant handle: // Example conversion from the Blink variant into a cross-variant handle:
// //
// namespace blink { // namespace blink {
// //
// void WebLocalFrameImpl::PassGoatTeleporter() { // void WebLocalFrameImpl::PassGoatTeleporter() {
// // The fully-qualified type of the Blink variant is
// // blink::mojom::blink::GoatTeleporter.
// mojo::PendingRemote<mojom::blink::GoatTeleporter> remote = // mojo::PendingRemote<mojom::blink::GoatTeleporter> remote =
// ProcureGoatTeleporter(); // ProcureGoatTeleporter();
// //
// // CrossVariantMojoReceiver and CrossVariantMojoRemote may created from // // `PassGoatTeleporter()`'s argument is a `CrossVariantMojoRemote<>`; see
// // any interface variant. Note the use of the unrelated *InterfaceBase // // below example for the other part of this example.
// // class as the cross-variant handle's template parameter. This is an empty // web_local_frame_client->PassGoatTeleporter(std::move(remote)));
// // helper class defined by the .mojom-shared.h header that is common to all
// // variants of a Mojo interface and is useful for implementing type safety
// // checks such as this one.
// web_local_frame_client->PassGoatTeleporter(
// ToCrossVariantMojoRemote(std::move(cross_variant_remote)));
// } // }
// //
// } // namespace blink // } // namespace blink
...@@ -30,12 +35,17 @@ ...@@ -30,12 +35,17 @@
// //
// namespace content { // namespace content {
// //
// // Note the use of the *InterfaceBase class as the cross-variant handle's
// // template parameter. This is an empty helper class defined by the
// // .mojom-shared.h header that is shared as a nested type alias by all
// // generated C++ interface class variants. The cross-variant types key off
// // this shared type to provide type safety.
// void RenderFrameImpl::PassGoatTeleporter( // void RenderFrameImpl::PassGoatTeleporter(
// blink::CrossVariantMojoRemote<GoatTeleporterInterfaceBase> // blink::CrossVariantMojoRemote<GoatTeleporterInterfaceBase>
// cross_variant_remote) { // cross_variant_remote) {
// mojo::PendingRemote<blink::mojom::GoatTeleporter> remote = // // Non-Blink code uses the regular variant, so the `SetGoatTeleporter`
// cross_variant_remote // // argument has type `blink::mojom::GoatTeleporter`.
// .PassAsPendingRemote<blink::mojom::GoatTeleporter>(); // frame_host_remote_->SetGoatTeleporter(std::move(cross_variant_remote));
// } // }
// //
// } // namespace content // } // namespace content
...@@ -55,7 +65,8 @@ ...@@ -55,7 +65,8 @@
namespace blink { namespace blink {
// Non-associated helpers // Helpers for passing a variant-less non-associated interface across the Blink
// public API.
template <typename Interface> template <typename Interface>
class CrossVariantMojoReceiver { class CrossVariantMojoReceiver {
...@@ -122,7 +133,8 @@ class CrossVariantMojoRemote { ...@@ -122,7 +133,8 @@ class CrossVariantMojoRemote {
mojo::ScopedMessagePipeHandle pipe_; mojo::ScopedMessagePipeHandle pipe_;
}; };
// Associated helpers // Helpers for passing a variant-less associated interface across the Blink
// public API.
template <typename Interface> template <typename Interface>
class CrossVariantMojoAssociatedReceiver { class CrossVariantMojoAssociatedReceiver {
...@@ -197,10 +209,40 @@ class CrossVariantMojoAssociatedRemote { ...@@ -197,10 +209,40 @@ class CrossVariantMojoAssociatedRemote {
mojo::ScopedInterfaceEndpointHandle handle_; mojo::ScopedInterfaceEndpointHandle handle_;
}; };
// The `ToCrossVariantMojoType` helpers are more convenient to use when there
// isn't already an explicit CrossVariant{Associated,}{Receiver,Remote} type,
// e.g. Blink code already has the Blink interface variant but wants to share
// common code that requires the regular interface variant.
template <typename VariantBase>
auto ToCrossVariantMojoType(mojo::PendingReceiver<VariantBase>&& in) {
return blink::CrossVariantMojoReceiver<typename VariantBase::Base_>(
std::move(in));
}
template <typename VariantBase>
auto ToCrossVariantMojoType(mojo::PendingRemote<VariantBase>&& in) {
return blink::CrossVariantMojoRemote<typename VariantBase::Base_>(
std::move(in));
}
template <typename VariantBase>
auto ToCrossVariantMojoType(mojo::PendingAssociatedReceiver<VariantBase>&& in) {
return blink::CrossVariantMojoAssociatedReceiver<typename VariantBase::Base_>(
std::move(in));
}
template <typename VariantBase>
auto ToCrossVariantMojoType(mojo::PendingAssociatedRemote<VariantBase>&& in) {
return blink::CrossVariantMojoAssociatedRemote<typename VariantBase::Base_>(
std::move(in));
}
} // namespace blink } // namespace blink
namespace mojo { namespace mojo {
// Template specializations so //mojo understands how to convert between
// Pending{Associated,}{Receiver,Remote} and the cross-variant types.
template <typename CrossVariantBase> template <typename CrossVariantBase>
struct PendingReceiverConverter< struct PendingReceiverConverter<
blink::CrossVariantMojoReceiver<CrossVariantBase>> { blink::CrossVariantMojoReceiver<CrossVariantBase>> {
......
...@@ -136,11 +136,8 @@ void ApplicationCacheHostForFrame::SetSubresourceFactory( ...@@ -136,11 +136,8 @@ void ApplicationCacheHostForFrame::SetSubresourceFactory(
mojo::PendingRemote<network::mojom::blink::URLLoaderFactory> mojo::PendingRemote<network::mojom::blink::URLLoaderFactory>
url_loader_factory) { url_loader_factory) {
auto pending_factories = std::make_unique<PendingURLLoaderFactoryBundle>(); auto pending_factories = std::make_unique<PendingURLLoaderFactoryBundle>();
// |PassPipe()| invalidates all state, so capture |version()| first.
uint32_t version = url_loader_factory.version();
pending_factories->pending_appcache_factory() = pending_factories->pending_appcache_factory() =
mojo::PendingRemote<network::mojom::URLLoaderFactory>( ToCrossVariantMojoType(std::move(url_loader_factory));
url_loader_factory.PassPipe(), version);
local_frame_->Client()->UpdateSubresourceFactory( local_frame_->Client()->UpdateSubresourceFactory(
std::move(pending_factories)); std::move(pending_factories));
} }
......
...@@ -8,14 +8,14 @@ ...@@ -8,14 +8,14 @@
#include "mojo/public/cpp/base/big_buffer.h" #include "mojo/public/cpp/base/big_buffer.h"
#include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/pending_remote.h"
#include "third_party/blink/public/mojom/blob/blob.mojom-blink.h" #include "third_party/blink/public/mojom/blob/blob.mojom-blink.h"
#include "third_party/blink/public/platform/cross_variant_mojo_util.h"
#include "third_party/blink/public/web/web_dom_message_event.h"
#include "third_party/blink/renderer/core/events/message_event.h" #include "third_party/blink/renderer/core/events/message_event.h"
#include "third_party/blink/renderer/core/frame/user_activation.h" #include "third_party/blink/renderer/core/frame/user_activation.h"
#include "third_party/blink/renderer/core/imagebitmap/image_bitmap.h" #include "third_party/blink/renderer/core/imagebitmap/image_bitmap.h"
#include "third_party/blink/renderer/platform/blob/blob_data.h" #include "third_party/blink/renderer/platform/blob/blob_data.h"
#include "third_party/blink/renderer/platform/graphics/unaccelerated_static_bitmap_image.h" #include "third_party/blink/renderer/platform/graphics/unaccelerated_static_bitmap_image.h"
#include "third_party/blink/public/web/web_dom_message_event.h"
namespace blink { namespace blink {
// static // static
...@@ -51,9 +51,7 @@ BlinkTransferableMessage BlinkTransferableMessage::FromMessageEvent( ...@@ -51,9 +51,7 @@ BlinkTransferableMessage BlinkTransferableMessage::FromMessageEvent(
blob.value->Uuid(), blob.value->Uuid(),
BlobDataHandle::Create(blob.value->Uuid(), blob.value->GetType(), BlobDataHandle::Create(blob.value->Uuid(), blob.value->GetType(),
blob.value->size(), blob.value->size(),
mojo::PendingRemote<mojom::blink::Blob>( blob.value->CloneBlobRemote()));
blob.value->CloneBlobRemote().PassPipe(),
mojom::blink::Blob::Version_)));
} }
// Stream channels. // Stream channels.
...@@ -112,11 +110,7 @@ BlinkTransferableMessage BlinkTransferableMessage::FromMessageEvent( ...@@ -112,11 +110,7 @@ BlinkTransferableMessage BlinkTransferableMessage::FromMessageEvent(
// Native file system transfer tokens. // Native file system transfer tokens.
for (auto& token : serialized_script_value->NativeFileSystemTokens()) { for (auto& token : serialized_script_value->NativeFileSystemTokens()) {
uint32_t token_version = token.version(); result.message->NativeFileSystemTokens().push_back(std::move(token));
mojo::PendingRemote<mojom::blink::NativeFileSystemTransferToken>
converted_token(token.PassPipe(), token_version);
result.message->NativeFileSystemTokens().push_back(
std::move(converted_token));
} }
return result; return result;
...@@ -132,11 +126,9 @@ BlinkTransferableMessage BlinkTransferableMessage::FromTransferableMessage( ...@@ -132,11 +126,9 @@ BlinkTransferableMessage BlinkTransferableMessage::FromTransferableMessage(
for (auto& blob : message.blobs) { for (auto& blob : message.blobs) {
result.message->BlobDataHandles().Set( result.message->BlobDataHandles().Set(
String::FromUTF8(blob->uuid), String::FromUTF8(blob->uuid),
BlobDataHandle::Create( BlobDataHandle::Create(String::FromUTF8(blob->uuid),
String::FromUTF8(blob->uuid), String::FromUTF8(blob->content_type), String::FromUTF8(blob->content_type), blob->size,
blob->size, ToCrossVariantMojoType(std::move(blob->blob))));
mojo::PendingRemote<mojom::blink::Blob>(blob->blob.PassPipe(),
mojom::Blob::Version_)));
} }
if (message.sender_origin) { if (message.sender_origin) {
result.sender_origin = result.sender_origin =
...@@ -199,12 +191,9 @@ BlinkTransferableMessage BlinkTransferableMessage::FromTransferableMessage( ...@@ -199,12 +191,9 @@ BlinkTransferableMessage BlinkTransferableMessage::FromTransferableMessage(
// Convert the PendingRemote<NativeFileSystemTransferToken> from the // Convert the PendingRemote<NativeFileSystemTransferToken> from the
// blink::mojom namespace to the blink::mojom::blink namespace. // blink::mojom namespace to the blink::mojom::blink namespace.
for (auto& native_file_system_token : message.native_file_system_tokens) { for (auto& token : message.native_file_system_tokens) {
uint32_t token_version = native_file_system_token.version();
mojo::PendingRemote<mojom::blink::NativeFileSystemTransferToken>
converted_token(native_file_system_token.PassPipe(), token_version);
result.message->NativeFileSystemTokens().push_back( result.message->NativeFileSystemTokens().push_back(
std::move(converted_token)); ToCrossVariantMojoType(std::move(token)));
} }
return result; return result;
} }
......
...@@ -134,12 +134,9 @@ void SharedWorkerClientHolder::Connect( ...@@ -134,12 +134,9 @@ void SharedWorkerClientHolder::Connect(
connector_->Connect( connector_->Connect(
std::move(info), std::move(client), std::move(info), std::move(client),
worker->GetExecutionContext()->IsSecureContext() worker->GetExecutionContext()->IsSecureContext()
? mojom::SharedWorkerCreationContextType::kSecure ? mojom::blink::SharedWorkerCreationContextType::kSecure
: mojom::SharedWorkerCreationContextType::kNonsecure, : mojom::blink::SharedWorkerCreationContextType::kNonsecure,
port.ReleaseHandle(), port.ReleaseHandle(), std::move(blob_url_token), client_ukm_source_id);
mojo::PendingRemote<mojom::blink::BlobURLToken>(
blob_url_token.PassPipe(), mojom::blink::BlobURLToken::Version_),
client_ukm_source_id);
} }
void SharedWorkerClientHolder::Trace(Visitor* visitor) const { void SharedWorkerClientHolder::Trace(Visitor* visitor) const {
......
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
#include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/pending_remote.h"
#include "services/metrics/public/cpp/mojo_ukm_recorder.h" #include "services/metrics/public/cpp/mojo_ukm_recorder.h"
#include "third_party/blink/public/common/thread_safe_browser_interface_broker_proxy.h" #include "third_party/blink/public/common/thread_safe_browser_interface_broker_proxy.h"
#include "third_party/blink/public/mojom/browser_interface_broker.mojom-blink.h"
#include "third_party/blink/public/mojom/fetch/fetch_api_request.mojom-blink.h" #include "third_party/blink/public/mojom/fetch/fetch_api_request.mojom-blink.h"
#include "third_party/blink/public/platform/platform.h" #include "third_party/blink/public/platform/platform.h"
#include "third_party/blink/public/platform/web_url_request.h" #include "third_party/blink/public/platform/web_url_request.h"
...@@ -563,10 +564,9 @@ WorkerGlobalScope::WorkerGlobalScope( ...@@ -563,10 +564,9 @@ WorkerGlobalScope::WorkerGlobalScope(
// once all worker types provide a valid // once all worker types provide a valid
// |creation_params->browser_interface_broker|. // |creation_params->browser_interface_broker|.
if (creation_params->browser_interface_broker.is_valid()) { if (creation_params->browser_interface_broker.is_valid()) {
auto pipe = creation_params->browser_interface_broker.PassPipe();
browser_interface_broker_proxy_.Bind( browser_interface_broker_proxy_.Bind(
mojo::PendingRemote<blink::mojom::BrowserInterfaceBroker>( ToCrossVariantMojoType(
std::move(pipe), blink::mojom::BrowserInterfaceBroker::Version_), std::move(creation_params->browser_interface_broker)),
GetTaskRunner(TaskType::kInternalDefault)); GetTaskRunner(TaskType::kInternalDefault));
} }
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/pending_remote.h"
#include "services/device/public/cpp/test/fake_sensor_and_provider.h" #include "services/device/public/cpp/test/fake_sensor_and_provider.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
#include "third_party/blink/public/platform/cross_variant_mojo_util.h"
#include "third_party/blink/public/platform/scheduler/test/renderer_scheduler_test_support.h" #include "third_party/blink/public/platform/scheduler/test/renderer_scheduler_test_support.h"
#include "third_party/blink/renderer/core/frame/local_dom_window.h" #include "third_party/blink/renderer/core/frame/local_dom_window.h"
#include "third_party/blink/renderer/core/frame/platform_event_controller.h" #include "third_party/blink/renderer/core/frame/platform_event_controller.h"
...@@ -84,9 +85,7 @@ class DeviceMotionEventPumpTest : public testing::Test { ...@@ -84,9 +85,7 @@ class DeviceMotionEventPumpTest : public testing::Test {
auto* motion_pump = auto* motion_pump =
MakeGarbageCollected<DeviceMotionEventPump>(page_holder_->GetFrame()); MakeGarbageCollected<DeviceMotionEventPump>(page_holder_->GetFrame());
motion_pump->SetSensorProviderForTesting( motion_pump->SetSensorProviderForTesting(
mojo::PendingRemote<device::mojom::blink::SensorProvider>( ToCrossVariantMojoType(std::move(sensor_provider)));
sensor_provider.PassPipe(),
device::mojom::SensorProvider::Version_));
controller_ = MakeGarbageCollected<MockDeviceMotionController>( controller_ = MakeGarbageCollected<MockDeviceMotionController>(
motion_pump, *page_holder_->GetFrame().DomWindow()); motion_pump, *page_holder_->GetFrame().DomWindow());
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/pending_remote.h"
#include "services/device/public/cpp/test/fake_sensor_and_provider.h" #include "services/device/public/cpp/test/fake_sensor_and_provider.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
#include "third_party/blink/public/platform/cross_variant_mojo_util.h"
#include "third_party/blink/public/platform/scheduler/test/renderer_scheduler_test_support.h" #include "third_party/blink/public/platform/scheduler/test/renderer_scheduler_test_support.h"
#include "third_party/blink/renderer/core/frame/local_dom_window.h" #include "third_party/blink/renderer/core/frame/local_dom_window.h"
#include "third_party/blink/renderer/core/frame/platform_event_controller.h" #include "third_party/blink/renderer/core/frame/platform_event_controller.h"
...@@ -90,14 +91,12 @@ class DeviceOrientationEventPumpTest : public testing::Test { ...@@ -90,14 +91,12 @@ class DeviceOrientationEventPumpTest : public testing::Test {
void SetUp() override { void SetUp() override {
page_holder_ = std::make_unique<DummyPageHolder>(); page_holder_ = std::make_unique<DummyPageHolder>();
mojo::PendingRemote<device::mojom::SensorProvider> sensor_provider; mojo::PendingRemote<device::mojom::blink::SensorProvider> sensor_provider;
sensor_provider_.Bind(sensor_provider.InitWithNewPipeAndPassReceiver()); sensor_provider_.Bind(ToCrossVariantMojoType(
sensor_provider.InitWithNewPipeAndPassReceiver()));
auto* orientation_pump = MakeGarbageCollected<DeviceOrientationEventPump>( auto* orientation_pump = MakeGarbageCollected<DeviceOrientationEventPump>(
page_holder_->GetFrame(), false /* absolute */); page_holder_->GetFrame(), false /* absolute */);
orientation_pump->SetSensorProviderForTesting( orientation_pump->SetSensorProviderForTesting(std::move(sensor_provider));
mojo::PendingRemote<device::mojom::blink::SensorProvider>(
sensor_provider.PassPipe(),
device::mojom::SensorProvider::Version_));
controller_ = MakeGarbageCollected<MockDeviceOrientationController>( controller_ = MakeGarbageCollected<MockDeviceOrientationController>(
orientation_pump, *page_holder_->GetFrame().DomWindow()); orientation_pump, *page_holder_->GetFrame().DomWindow());
...@@ -497,15 +496,14 @@ class DeviceAbsoluteOrientationEventPumpTest : public testing::Test { ...@@ -497,15 +496,14 @@ class DeviceAbsoluteOrientationEventPumpTest : public testing::Test {
void SetUp() override { void SetUp() override {
page_holder_ = std::make_unique<DummyPageHolder>(); page_holder_ = std::make_unique<DummyPageHolder>();
mojo::PendingRemote<device::mojom::SensorProvider> sensor_provider; mojo::PendingRemote<device::mojom::blink::SensorProvider> sensor_provider;
sensor_provider_.Bind(sensor_provider.InitWithNewPipeAndPassReceiver()); sensor_provider_.Bind(ToCrossVariantMojoType(
sensor_provider.InitWithNewPipeAndPassReceiver()));
auto* absolute_orientation_pump = auto* absolute_orientation_pump =
MakeGarbageCollected<DeviceOrientationEventPump>( MakeGarbageCollected<DeviceOrientationEventPump>(
page_holder_->GetFrame(), true /* absolute */); page_holder_->GetFrame(), true /* absolute */);
absolute_orientation_pump->SetSensorProviderForTesting( absolute_orientation_pump->SetSensorProviderForTesting(
mojo::PendingRemote<device::mojom::blink::SensorProvider>( std::move(sensor_provider));
sensor_provider.PassPipe(),
device::mojom::SensorProvider::Version_));
controller_ = MakeGarbageCollected<MockDeviceOrientationController>( controller_ = MakeGarbageCollected<MockDeviceOrientationController>(
absolute_orientation_pump, *page_holder_->GetFrame().DomWindow()); absolute_orientation_pump, *page_holder_->GetFrame().DomWindow());
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#include "third_party/blink/renderer/modules/service_worker/cross_origin_resource_policy_checker.h" #include "third_party/blink/renderer/modules/service_worker/cross_origin_resource_policy_checker.h"
#include "services/network/public/cpp/cross_origin_resource_policy.h" #include "services/network/public/cpp/cross_origin_resource_policy.h"
#include "third_party/blink/public/platform/cross_variant_mojo_util.h"
#include "third_party/blink/renderer/core/fetch/response.h" #include "third_party/blink/renderer/core/fetch/response.h"
namespace blink { namespace blink {
...@@ -15,11 +16,7 @@ CrossOriginResourcePolicyChecker::CrossOriginResourcePolicyChecker( ...@@ -15,11 +16,7 @@ CrossOriginResourcePolicyChecker::CrossOriginResourcePolicyChecker(
network::mojom::blink::CrossOriginEmbedderPolicyReporter> reporter) network::mojom::blink::CrossOriginEmbedderPolicyReporter> reporter)
: policy_(std::move(policy)) { : policy_(std::move(policy)) {
if (reporter) { if (reporter) {
mojo::PendingRemote<network::mojom::CrossOriginEmbedderPolicyReporter> reporter_.Bind(ToCrossVariantMojoType(std::move(reporter)));
pending_reporter_non_blink{
reporter.PassPipe(),
network::mojom::CrossOriginEmbedderPolicyReporter::Version_};
reporter_.Bind(std::move(pending_reporter_non_blink));
} }
} }
......
...@@ -58,10 +58,7 @@ StructTraits<blink::mojom::FetchAPIRequestBodyDataView, ...@@ -58,10 +58,7 @@ StructTraits<blink::mojom::FetchAPIRequestBodyDataView,
out->length = element.optional_blob_data_handle_->size(); out->length = element.optional_blob_data_handle_->size();
mojo::Remote<blink::mojom::blink::Blob> blob_remote( mojo::Remote<blink::mojom::blink::Blob> blob_remote(
mojo::PendingRemote<blink::mojom::blink::Blob>( element.optional_blob_data_handle_->CloneBlobRemote());
element.optional_blob_data_handle_->CloneBlobRemote()
.PassPipe(),
blink::mojom::blink::Blob::Version_));
blob_remote->AsDataPipeGetter( blob_remote->AsDataPipeGetter(
out->data_pipe_getter.InitWithNewPipeAndPassReceiver()); out->data_pipe_getter.InitWithNewPipeAndPassReceiver());
break; break;
......
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
#include "third_party/blink/public/mojom/blob/blob.mojom.h" #include "third_party/blink/public/mojom/blob/blob.mojom.h"
#include "third_party/blink/public/mojom/fetch/fetch_api_request.mojom-blink.h" #include "third_party/blink/public/mojom/fetch/fetch_api_request.mojom-blink.h"
#include "third_party/blink/public/mojom/loader/resource_load_info.mojom-shared.h" #include "third_party/blink/public/mojom/loader/resource_load_info.mojom-shared.h"
#include "third_party/blink/public/platform/cross_variant_mojo_util.h"
#include "third_party/blink/public/platform/file_path_conversion.h" #include "third_party/blink/public/platform/file_path_conversion.h"
#include "third_party/blink/public/platform/url_conversion.h" #include "third_party/blink/public/platform/url_conversion.h"
#include "third_party/blink/public/platform/web_string.h" #include "third_party/blink/public/platform/web_string.h"
...@@ -216,26 +217,23 @@ void PopulateResourceRequestBody(const EncodedFormData& src, ...@@ -216,26 +217,23 @@ void PopulateResourceRequestBody(const EncodedFormData& src,
break; break;
case FormDataElement::kEncodedBlob: { case FormDataElement::kEncodedBlob: {
DCHECK(element.optional_blob_data_handle_); DCHECK(element.optional_blob_data_handle_);
mojo::Remote<mojom::Blob> blob_remote(mojo::PendingRemote<mojom::Blob>( mojo::Remote<mojom::blink::Blob> blob_remote(
element.optional_blob_data_handle_->CloneBlobRemote().PassPipe(), element.optional_blob_data_handle_->CloneBlobRemote());
mojom::Blob::Version_)); mojo::PendingRemote<network::mojom::blink::DataPipeGetter>
mojo::PendingRemote<network::mojom::DataPipeGetter>
data_pipe_getter_remote; data_pipe_getter_remote;
blob_remote->AsDataPipeGetter( blob_remote->AsDataPipeGetter(
data_pipe_getter_remote.InitWithNewPipeAndPassReceiver()); data_pipe_getter_remote.InitWithNewPipeAndPassReceiver());
dest->AppendDataPipe(std::move(data_pipe_getter_remote)); dest->AppendDataPipe(
ToCrossVariantMojoType(std::move(data_pipe_getter_remote)));
break; break;
} }
case FormDataElement::kDataPipe: { case FormDataElement::kDataPipe: {
// Convert network::mojom::blink::DataPipeGetter to
// network::mojom::DataPipeGetter through a raw message pipe.
mojo::PendingRemote<network::mojom::blink::DataPipeGetter> mojo::PendingRemote<network::mojom::blink::DataPipeGetter>
pending_data_pipe_getter; pending_data_pipe_getter;
element.data_pipe_getter_->GetDataPipeGetter()->Clone( element.data_pipe_getter_->GetDataPipeGetter()->Clone(
pending_data_pipe_getter.InitWithNewPipeAndPassReceiver()); pending_data_pipe_getter.InitWithNewPipeAndPassReceiver());
dest->AppendDataPipe( dest->AppendDataPipe(
mojo::PendingRemote<network::mojom::DataPipeGetter>( ToCrossVariantMojoType(std::move(pending_data_pipe_getter)));
pending_data_pipe_getter.PassPipe(), 0u));
break; break;
} }
} }
...@@ -363,9 +361,8 @@ void PopulateResourceRequest(const ResourceRequestHead& src, ...@@ -363,9 +361,8 @@ void PopulateResourceRequest(const ResourceRequestHead& src,
mojo::PendingRemote<network::mojom::blink::ChunkedDataPipeGetter> mojo::PendingRemote<network::mojom::blink::ChunkedDataPipeGetter>
stream_body = src_body.TakeStreamBody(); stream_body = src_body.TakeStreamBody();
dest->request_body = base::MakeRefCounted<network::ResourceRequestBody>(); dest->request_body = base::MakeRefCounted<network::ResourceRequestBody>();
mojo::PendingRemote<network::mojom::ChunkedDataPipeGetter> dest->request_body->SetToReadOnceStream(
network_stream_body(stream_body.PassPipe(), 0u); ToCrossVariantMojoType(std::move(stream_body)));
dest->request_body->SetToReadOnceStream(std::move(network_stream_body));
dest->request_body->SetAllowHTTP1ForStreamingUpload( dest->request_body->SetAllowHTTP1ForStreamingUpload(
src.AllowHTTP1ForStreamingUpload()); src.AllowHTTP1ForStreamingUpload());
} }
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
#include "third_party/blink/public/mojom/blob/blob_registry.mojom-blink.h" #include "third_party/blink/public/mojom/blob/blob_registry.mojom-blink.h"
#include "third_party/blink/public/mojom/fetch/fetch_api_request.mojom-blink.h" #include "third_party/blink/public/mojom/fetch/fetch_api_request.mojom-blink.h"
#include "third_party/blink/public/mojom/loader/resource_load_info.mojom-blink.h" #include "third_party/blink/public/mojom/loader/resource_load_info.mojom-blink.h"
#include "third_party/blink/public/platform/cross_variant_mojo_util.h"
#include "third_party/blink/public/platform/file_path_conversion.h" #include "third_party/blink/public/platform/file_path_conversion.h"
#include "third_party/blink/public/platform/platform.h" #include "third_party/blink/public/platform/platform.h"
#include "third_party/blink/public/platform/web_data.h" #include "third_party/blink/public/platform/web_data.h"
...@@ -148,24 +149,19 @@ scoped_refptr<network::ResourceRequestBody> GetRequestBodyForWebHTTPBody( ...@@ -148,24 +149,19 @@ scoped_refptr<network::ResourceRequestBody> GetRequestBodyForWebHTTPBody(
case HTTPBodyElementType::kTypeBlob: { case HTTPBodyElementType::kTypeBlob: {
DCHECK(element.optional_blob); DCHECK(element.optional_blob);
mojo::Remote<mojom::blink::Blob> blob_remote( mojo::Remote<mojom::blink::Blob> blob_remote(
mojo::PendingRemote<mojom::blink::Blob>( std::move(element.optional_blob));
std::move(element.optional_blob)));
mojo::PendingRemote<network::mojom::blink::DataPipeGetter> mojo::PendingRemote<network::mojom::blink::DataPipeGetter>
data_pipe_getter_remote; data_pipe_getter_remote;
blob_remote->AsDataPipeGetter( blob_remote->AsDataPipeGetter(
data_pipe_getter_remote.InitWithNewPipeAndPassReceiver()); data_pipe_getter_remote.InitWithNewPipeAndPassReceiver());
request_body->AppendDataPipe( request_body->AppendDataPipe(
mojo::PendingRemote<network::mojom::DataPipeGetter>( ToCrossVariantMojoType(std::move(data_pipe_getter_remote)));
data_pipe_getter_remote.PassPipe(), 0u));
break; break;
} }
case HTTPBodyElementType::kTypeDataPipe: { case HTTPBodyElementType::kTypeDataPipe: {
// Convert the raw message pipe to
// mojo::Remote<network::mojom::DataPipeGetter> data_pipe_getter.
mojo::Remote<network::mojom::blink::DataPipeGetter> data_pipe_getter( mojo::Remote<network::mojom::blink::DataPipeGetter> data_pipe_getter(
mojo::PendingRemote<network::mojom::blink::DataPipeGetter>( std::move(element.data_pipe_getter));
std::move(element.data_pipe_getter)));
// Set the cloned DataPipeGetter to the output |request_body|, while // Set the cloned DataPipeGetter to the output |request_body|, while
// keeping the original message pipe back in the input |httpBody|. This // keeping the original message pipe back in the input |httpBody|. This
...@@ -175,8 +171,7 @@ scoped_refptr<network::ResourceRequestBody> GetRequestBodyForWebHTTPBody( ...@@ -175,8 +171,7 @@ scoped_refptr<network::ResourceRequestBody> GetRequestBodyForWebHTTPBody(
cloned_getter; cloned_getter;
data_pipe_getter->Clone(cloned_getter.InitWithNewPipeAndPassReceiver()); data_pipe_getter->Clone(cloned_getter.InitWithNewPipeAndPassReceiver());
request_body->AppendDataPipe( request_body->AppendDataPipe(
mojo::PendingRemote<network::mojom::DataPipeGetter>( ToCrossVariantMojoType(std::move(cloned_getter)));
cloned_getter.PassPipe(), 0u));
element.data_pipe_getter = data_pipe_getter.Unbind(); element.data_pipe_getter = data_pipe_getter.Unbind();
break; break;
} }
......
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