Commit 70abc6e6 authored by Ben Kelly's avatar Ben Kelly Committed by Commit Bot

Use weak pointers for RenderProcessHostImpl UI thread bindings.

Its possible for the RenderProcessHostImpl to be destroyed on the UI
thread before the BinderRegistry is destroyed on the IO thread.

Bug: 1038019
Change-Id: Id6cb87fa0c4ea72c814d6f81ca296ec7be5f6f42
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1986135
Commit-Queue: Ben Kelly <wanderview@chromium.org>
Reviewed-by: default avatarNasko Oskov <nasko@chromium.org>
Cr-Commit-Position: refs/heads/master@{#728526}
parent 83e35a4e
...@@ -203,7 +203,6 @@ ...@@ -203,7 +203,6 @@
#include "mojo/public/cpp/bindings/receiver.h" #include "mojo/public/cpp/bindings/receiver.h"
#include "mojo/public/cpp/system/platform_handle.h" #include "mojo/public/cpp/system/platform_handle.h"
#include "net/url_request/url_request_context_getter.h" #include "net/url_request/url_request_context_getter.h"
#include "ppapi/buildflags/buildflags.h"
#include "services/device/public/mojom/battery_monitor.mojom.h" #include "services/device/public/mojom/battery_monitor.mojom.h"
#include "services/device/public/mojom/power_monitor.mojom.h" #include "services/device/public/mojom/power_monitor.mojom.h"
#include "services/device/public/mojom/screen_orientation.mojom.h" #include "services/device/public/mojom/screen_orientation.mojom.h"
...@@ -2131,39 +2130,35 @@ void RenderProcessHostImpl::RegisterMojoInterfaces() { ...@@ -2131,39 +2130,35 @@ void RenderProcessHostImpl::RegisterMojoInterfaces() {
registry.get(), registry.get(),
base::BindRepeating( base::BindRepeating(
&RenderProcessHostImpl::CreateEmbeddedFrameSinkProvider, &RenderProcessHostImpl::CreateEmbeddedFrameSinkProvider,
base::Unretained(this))); weak_factory_.GetWeakPtr()));
AddUIThreadInterface( AddUIThreadInterface(
registry.get(), registry.get(),
base::BindRepeating(&RenderProcessHostImpl::BindFrameSinkProvider, base::BindRepeating(&RenderProcessHostImpl::BindFrameSinkProvider,
base::Unretained(this))); weak_factory_.GetWeakPtr()));
AddUIThreadInterface( AddUIThreadInterface(
registry.get(), registry.get(),
base::BindRepeating(&RenderProcessHostImpl::BindCompositingModeReporter, base::BindRepeating(&RenderProcessHostImpl::BindCompositingModeReporter,
base::Unretained(this))); weak_factory_.GetWeakPtr()));
AddUIThreadInterface( AddUIThreadInterface(
registry.get(), registry.get(),
base::BindRepeating( base::BindRepeating(&RenderProcessHostImpl::CreateOneShotSyncService,
&BackgroundSyncContextImpl::CreateOneShotSyncService, weak_factory_.GetWeakPtr()));
base::Unretained(
storage_partition_impl_->GetBackgroundSyncContext())));
AddUIThreadInterface( AddUIThreadInterface(
registry.get(), registry.get(),
base::BindRepeating( base::BindRepeating(&RenderProcessHostImpl::CreatePeriodicSyncService,
&BackgroundSyncContextImpl::CreatePeriodicSyncService, weak_factory_.GetWeakPtr()));
base::Unretained(
storage_partition_impl_->GetBackgroundSyncContext())));
AddUIThreadInterface( AddUIThreadInterface(
registry.get(), registry.get(),
base::BindRepeating(&RenderProcessHostImpl::CreateStoragePartitionService, base::BindRepeating(&RenderProcessHostImpl::CreateStoragePartitionService,
base::Unretained(this))); weak_factory_.GetWeakPtr()));
AddUIThreadInterface( AddUIThreadInterface(
registry.get(), registry.get(),
base::BindRepeating( base::BindRepeating(
&RenderProcessHostImpl::CreateBroadcastChannelProvider, &RenderProcessHostImpl::CreateBroadcastChannelProvider,
base::Unretained(this))); weak_factory_.GetWeakPtr()));
AddUIThreadInterface(registry.get(), AddUIThreadInterface(registry.get(),
base::BindRepeating(&ClipboardHostImpl::Create)); base::BindRepeating(&ClipboardHostImpl::Create));
...@@ -2171,15 +2166,17 @@ void RenderProcessHostImpl::RegisterMojoInterfaces() { ...@@ -2171,15 +2166,17 @@ void RenderProcessHostImpl::RegisterMojoInterfaces() {
AddUIThreadInterface( AddUIThreadInterface(
registry.get(), registry.get(),
base::BindRepeating(&RenderProcessHostImpl::BindWebDatabaseHostImpl, base::BindRepeating(&RenderProcessHostImpl::BindWebDatabaseHostImpl,
base::Unretained(this))); weak_factory_.GetWeakPtr()));
AddUIThreadInterface( AddUIThreadInterface(
registry.get(), registry.get(),
base::BindRepeating( base::BindRepeating(
[](RenderProcessHostImpl* host, [](base::WeakPtr<RenderProcessHostImpl> host,
mojo::PendingReceiver< mojo::PendingReceiver<
memory_instrumentation::mojom::CoordinatorConnector> memory_instrumentation::mojom::CoordinatorConnector>
receiver) { receiver) {
if (!host)
return;
host->coordinator_connector_receiver_.reset(); host->coordinator_connector_receiver_.reset();
host->coordinator_connector_receiver_.Bind(std::move(receiver)); host->coordinator_connector_receiver_.Bind(std::move(receiver));
if (!host->GetProcess().IsValid()) { if (!host->GetProcess().IsValid()) {
...@@ -2188,7 +2185,7 @@ void RenderProcessHostImpl::RegisterMojoInterfaces() { ...@@ -2188,7 +2185,7 @@ void RenderProcessHostImpl::RegisterMojoInterfaces() {
host->coordinator_connector_receiver_.Pause(); host->coordinator_connector_receiver_.Pause();
} }
}, },
base::Unretained(this))); weak_factory_.GetWeakPtr()));
registry->AddInterface(base::BindRepeating(&MimeRegistryImpl::Create), registry->AddInterface(base::BindRepeating(&MimeRegistryImpl::Create),
base::CreateSequencedTaskRunner( base::CreateSequencedTaskRunner(
...@@ -2222,8 +2219,8 @@ void RenderProcessHostImpl::RegisterMojoInterfaces() { ...@@ -2222,8 +2219,8 @@ void RenderProcessHostImpl::RegisterMojoInterfaces() {
if (ServiceWorkerContext::IsServiceWorkerOnUIEnabled()) { if (ServiceWorkerContext::IsServiceWorkerOnUIEnabled()) {
AddUIThreadInterface( AddUIThreadInterface(
registry.get(), registry.get(),
base::BindRepeating(&PushMessagingManager::AddPushMessagingReceiver, base::BindRepeating(&RenderProcessHostImpl::BindPushMessagingManager,
base::Unretained(push_messaging_manager_.get()))); weak_factory_.GetWeakPtr()));
} else { } else {
registry->AddInterface( registry->AddInterface(
base::BindRepeating(&PushMessagingManager::AddPushMessagingReceiver, base::BindRepeating(&PushMessagingManager::AddPushMessagingReceiver,
...@@ -2272,7 +2269,7 @@ void RenderProcessHostImpl::RegisterMojoInterfaces() { ...@@ -2272,7 +2269,7 @@ void RenderProcessHostImpl::RegisterMojoInterfaces() {
registry.get(), registry.get(),
base::BindRepeating( base::BindRepeating(
&RenderProcessHostImpl::CreateAgentMetricsCollectorHost, &RenderProcessHostImpl::CreateAgentMetricsCollectorHost,
base::Unretained(this))); weak_factory_.GetWeakPtr()));
registry->AddInterface( registry->AddInterface(
base::BindRepeating(&metrics::CreateSingleSampleMetricsProvider)); base::BindRepeating(&metrics::CreateSingleSampleMetricsProvider));
...@@ -2280,12 +2277,12 @@ void RenderProcessHostImpl::RegisterMojoInterfaces() { ...@@ -2280,12 +2277,12 @@ void RenderProcessHostImpl::RegisterMojoInterfaces() {
AddUIThreadInterface( AddUIThreadInterface(
registry.get(), registry.get(),
base::BindRepeating(&RenderProcessHostImpl::BindPeerConnectionTrackerHost, base::BindRepeating(&RenderProcessHostImpl::BindPeerConnectionTrackerHost,
base::Unretained(this))); weak_factory_.GetWeakPtr()));
AddUIThreadInterface( AddUIThreadInterface(
registry.get(), registry.get(),
base::BindRepeating(&RenderProcessHostImpl::CreateCodeCacheHost, base::BindRepeating(&RenderProcessHostImpl::CreateCodeCacheHost,
base::Unretained(this))); weak_factory_.GetWeakPtr()));
#if BUILDFLAG(ENABLE_REPORTING) #if BUILDFLAG(ENABLE_REPORTING)
AddUIThreadInterface( AddUIThreadInterface(
...@@ -2295,14 +2292,14 @@ void RenderProcessHostImpl::RegisterMojoInterfaces() { ...@@ -2295,14 +2292,14 @@ void RenderProcessHostImpl::RegisterMojoInterfaces() {
AddUIThreadInterface( AddUIThreadInterface(
registry.get(), registry.get(),
base::BindRepeating(&P2PSocketDispatcherHost::BindReceiver, base::BindRepeating(&RenderProcessHostImpl::BindP2PSocketManager,
base::Unretained(p2p_socket_dispatcher_host_.get()))); weak_factory_.GetWeakPtr()));
#if BUILDFLAG(ENABLE_MDNS) #if BUILDFLAG(ENABLE_MDNS)
AddUIThreadInterface( AddUIThreadInterface(
registry.get(), registry.get(),
base::BindRepeating(&RenderProcessHostImpl::CreateMdnsResponder, base::BindRepeating(&RenderProcessHostImpl::CreateMdnsResponder,
base::Unretained(this))); weak_factory_.GetWeakPtr()));
#endif // BUILDFLAG(ENABLE_MDNS) #endif // BUILDFLAG(ENABLE_MDNS)
AddUIThreadInterface(registry.get(), AddUIThreadInterface(registry.get(),
...@@ -2321,7 +2318,7 @@ void RenderProcessHostImpl::RegisterMojoInterfaces() { ...@@ -2321,7 +2318,7 @@ void RenderProcessHostImpl::RegisterMojoInterfaces() {
registry.get(), registry.get(),
base::BindRepeating( base::BindRepeating(
&RenderProcessHostImpl::CreateURLLoaderFactoryForRendererProcess, &RenderProcessHostImpl::CreateURLLoaderFactoryForRendererProcess,
base::Unretained(this))); weak_factory_.GetWeakPtr()));
registry->AddInterface( registry->AddInterface(
base::BindRepeating(&BlobRegistryWrapper::Bind, base::BindRepeating(&BlobRegistryWrapper::Bind,
...@@ -2335,8 +2332,8 @@ void RenderProcessHostImpl::RegisterMojoInterfaces() { ...@@ -2335,8 +2332,8 @@ void RenderProcessHostImpl::RegisterMojoInterfaces() {
} }
AddUIThreadInterface( AddUIThreadInterface(
registry.get(), registry.get(),
base::BindRepeating(&PluginRegistryImpl::Bind, base::BindRepeating(&RenderProcessHostImpl::BindPluginRegistry,
base::Unretained(plugin_registry_.get()))); weak_factory_.GetWeakPtr()));
#endif #endif
#if BUILDFLAG(ENABLE_LIBRARY_CDMS) #if BUILDFLAG(ENABLE_LIBRARY_CDMS)
...@@ -2346,12 +2343,12 @@ void RenderProcessHostImpl::RegisterMojoInterfaces() { ...@@ -2346,12 +2343,12 @@ void RenderProcessHostImpl::RegisterMojoInterfaces() {
AddUIThreadInterface( AddUIThreadInterface(
registry.get(), registry.get(),
base::BindRepeating(&RenderProcessHostImpl::BindVideoDecoderService, base::BindRepeating(&RenderProcessHostImpl::BindVideoDecoderService,
base::Unretained(this))); weak_factory_.GetWeakPtr()));
AddUIThreadInterface( AddUIThreadInterface(
registry.get(), registry.get(),
base::BindRepeating(&AecDumpManagerImpl::AddReceiver, base::BindRepeating(&RenderProcessHostImpl::BindAecDumpManager,
base::Unretained(&aec_dump_manager_))); weak_factory_.GetWeakPtr()));
// ---- Please do not register interfaces below this line ------ // ---- Please do not register interfaces below this line ------
// //
...@@ -2479,6 +2476,41 @@ void RenderProcessHostImpl::BindWebDatabaseHostImpl( ...@@ -2479,6 +2476,41 @@ void RenderProcessHostImpl::BindWebDatabaseHostImpl(
base::BindOnce(&WebDatabaseHostImpl::Create, GetID(), base::BindOnce(&WebDatabaseHostImpl::Create, GetID(),
base::WrapRefCounted(db_tracker), std::move(receiver))); base::WrapRefCounted(db_tracker), std::move(receiver)));
} }
void RenderProcessHostImpl::BindAecDumpManager(
mojo::PendingReceiver<blink::mojom::AecDumpManager> receiver) {
aec_dump_manager_.AddReceiver(std::move(receiver));
}
void RenderProcessHostImpl::CreateOneShotSyncService(
mojo::PendingReceiver<blink::mojom::OneShotBackgroundSyncService>
receiver) {
storage_partition_impl_->GetBackgroundSyncContext()->CreateOneShotSyncService(
std::move(receiver));
}
void RenderProcessHostImpl::CreatePeriodicSyncService(
mojo::PendingReceiver<blink::mojom::PeriodicBackgroundSyncService>
receiver) {
storage_partition_impl_->GetBackgroundSyncContext()
->CreatePeriodicSyncService(std::move(receiver));
}
void RenderProcessHostImpl::BindPushMessagingManager(
mojo::PendingReceiver<blink::mojom::PushMessaging> receiver) {
push_messaging_manager_->AddPushMessagingReceiver(std::move(receiver));
}
void RenderProcessHostImpl::BindP2PSocketManager(
mojo::PendingReceiver<network::mojom::P2PSocketManager> receiver) {
p2p_socket_dispatcher_host_->BindReceiver(std::move(receiver));
}
#if BUILDFLAG(ENABLE_PLUGINS)
void RenderProcessHostImpl::BindPluginRegistry(
mojo::PendingReceiver<blink::mojom::PluginRegistry> receiver) {
plugin_registry_->Bind(std::move(receiver));
}
#endif
void RenderProcessHostImpl::RegisterCoordinatorClient( void RenderProcessHostImpl::RegisterCoordinatorClient(
mojo::PendingReceiver<memory_instrumentation::mojom::Coordinator> receiver, mojo::PendingReceiver<memory_instrumentation::mojom::Coordinator> receiver,
......
...@@ -62,8 +62,10 @@ ...@@ -62,8 +62,10 @@
#include "mojo/public/cpp/bindings/remote.h" #include "mojo/public/cpp/bindings/remote.h"
#include "mojo/public/cpp/system/invitation.h" #include "mojo/public/cpp/system/invitation.h"
#include "net/base/network_isolation_key.h" #include "net/base/network_isolation_key.h"
#include "ppapi/buildflags/buildflags.h"
#include "services/device/public/mojom/battery_monitor.mojom-forward.h" #include "services/device/public/mojom/battery_monitor.mojom-forward.h"
#include "services/network/public/mojom/mdns_responder.mojom.h" #include "services/network/public/mojom/mdns_responder.mojom.h"
#include "services/network/public/mojom/p2p.mojom-forward.h"
#include "services/network/public/mojom/url_loader_factory.mojom.h" #include "services/network/public/mojom/url_loader_factory.mojom.h"
#include "services/resource_coordinator/public/mojom/memory_instrumentation/memory_instrumentation.mojom.h" #include "services/resource_coordinator/public/mojom/memory_instrumentation/memory_instrumentation.mojom.h"
#include "services/service_manager/public/cpp/binder_registry.h" #include "services/service_manager/public/cpp/binder_registry.h"
...@@ -73,6 +75,7 @@ ...@@ -73,6 +75,7 @@
#include "third_party/blink/public/common/associated_interfaces/associated_interface_registry.h" #include "third_party/blink/public/common/associated_interfaces/associated_interface_registry.h"
#include "third_party/blink/public/mojom/agents/agent_metrics.mojom.h" #include "third_party/blink/public/mojom/agents/agent_metrics.mojom.h"
#include "third_party/blink/public/mojom/associated_interfaces/associated_interfaces.mojom.h" #include "third_party/blink/public/mojom/associated_interfaces/associated_interfaces.mojom.h"
#include "third_party/blink/public/mojom/background_sync/background_sync.mojom-forward.h"
#include "third_party/blink/public/mojom/broadcastchannel/broadcast_channel.mojom.h" #include "third_party/blink/public/mojom/broadcastchannel/broadcast_channel.mojom.h"
#include "third_party/blink/public/mojom/dom_storage/storage_partition_service.mojom.h" #include "third_party/blink/public/mojom/dom_storage/storage_partition_service.mojom.h"
#include "third_party/blink/public/mojom/filesystem/file_system.mojom.h" #include "third_party/blink/public/mojom/filesystem/file_system.mojom.h"
...@@ -80,6 +83,8 @@ ...@@ -80,6 +83,8 @@
#include "third_party/blink/public/mojom/loader/code_cache.mojom.h" #include "third_party/blink/public/mojom/loader/code_cache.mojom.h"
#include "third_party/blink/public/mojom/mediastream/media_stream.mojom.h" #include "third_party/blink/public/mojom/mediastream/media_stream.mojom.h"
#include "third_party/blink/public/mojom/peerconnection/peer_connection_tracker.mojom.h" #include "third_party/blink/public/mojom/peerconnection/peer_connection_tracker.mojom.h"
#include "third_party/blink/public/mojom/plugins/plugin_registry.mojom-forward.h"
#include "third_party/blink/public/mojom/push_messaging/push_messaging.mojom-forward.h"
#include "third_party/blink/public/mojom/webdatabase/web_database.mojom.h" #include "third_party/blink/public/mojom/webdatabase/web_database.mojom.h"
#include "ui/gfx/gpu_memory_buffer.h" #include "ui/gfx/gpu_memory_buffer.h"
...@@ -727,6 +732,22 @@ class CONTENT_EXPORT RenderProcessHostImpl ...@@ -727,6 +732,22 @@ class CONTENT_EXPORT RenderProcessHostImpl
mojo::PendingReceiver<media::mojom::InterfaceFactory> receiver); mojo::PendingReceiver<media::mojom::InterfaceFactory> receiver);
void BindWebDatabaseHostImpl( void BindWebDatabaseHostImpl(
mojo::PendingReceiver<blink::mojom::WebDatabaseHost> receiver); mojo::PendingReceiver<blink::mojom::WebDatabaseHost> receiver);
void BindAecDumpManager(
mojo::PendingReceiver<blink::mojom::AecDumpManager> receiver);
void CreateOneShotSyncService(
mojo::PendingReceiver<blink::mojom::OneShotBackgroundSyncService>
receiver);
void CreatePeriodicSyncService(
mojo::PendingReceiver<blink::mojom::PeriodicBackgroundSyncService>
receiver);
void BindPushMessagingManager(
mojo::PendingReceiver<blink::mojom::PushMessaging> receiver);
void BindP2PSocketManager(
mojo::PendingReceiver<network::mojom::P2PSocketManager> receiver);
#if BUILDFLAG(ENABLE_PLUGINS)
void BindPluginRegistry(
mojo::PendingReceiver<blink::mojom::PluginRegistry> receiver);
#endif
// memory_instrumentation::mojom::CoordinatorConnector implementation: // memory_instrumentation::mojom::CoordinatorConnector implementation:
void RegisterCoordinatorClient( void RegisterCoordinatorClient(
......
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