Index: content/renderer/render_thread_impl.cc |
diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc |
index 605769b9e6bd1c8adde074de5f3644b54ae62b42..71d394774146737523813e75a0e419485c19dbc5 100644 |
--- a/content/renderer/render_thread_impl.cc |
+++ b/content/renderer/render_thread_impl.cc |
@@ -588,7 +588,8 @@ RenderThreadImpl::RenderThreadImpl( |
.ConnectToBrowser(true) |
.Build()), |
renderer_scheduler_(std::move(scheduler)), |
- categorized_worker_pool_(new CategorizedWorkerPool()) { |
+ categorized_worker_pool_(new CategorizedWorkerPool()), |
+ route_provider_binding_(this) { |
Init(resource_task_queue); |
} |
@@ -604,7 +605,8 @@ RenderThreadImpl::RenderThreadImpl( |
.Build()), |
renderer_scheduler_(std::move(scheduler)), |
main_message_loop_(std::move(main_message_loop)), |
- categorized_worker_pool_(new CategorizedWorkerPool()) { |
+ categorized_worker_pool_(new CategorizedWorkerPool()), |
+ route_provider_binding_(this) { |
scoped_refptr<base::SingleThreadTaskRunner> test_task_counter; |
Init(test_task_counter); |
} |
@@ -713,6 +715,9 @@ void RenderThreadImpl::Init( |
} |
#endif |
+ GetChannel()->AddAssociatedInterface(base::Bind( |
+ &RenderThreadImpl::OnRouteProviderRequest, base::Unretained(this))); |
+ |
// Must be called before RenderThreadStarted() below. |
StartMojoShellConnection(); |
@@ -1040,6 +1045,7 @@ void RenderThreadImpl::AddRoute(int32_t routing_id, IPC::Listener* listener) { |
void RenderThreadImpl::RemoveRoute(int32_t routing_id) { |
ChildThreadImpl::GetRouter()->RemoveRoute(routing_id); |
+ routed_interface_providers_.erase(routing_id); |
} |
void RenderThreadImpl::AddEmbeddedWorkerRoute(int32_t routing_id, |
@@ -1081,6 +1087,20 @@ int RenderThreadImpl::GenerateRoutingID() { |
return routing_id; |
} |
+void RenderThreadImpl::AddRoutedInterfaces( |
+ int32_t routing_id, |
+ mojom::RoutedInterfaceProvider* provider) { |
+ auto result = |
+ routed_interface_providers_.insert(std::make_pair(routing_id, provider)); |
+ DCHECK(result.second); |
+} |
+ |
+mojom::RouteProvider* RenderThreadImpl::GetRemoteRouteProvider() { |
+ if (!remote_route_provider_) |
+ channel()->GetRemoteAssociatedInterface(&remote_route_provider_); |
+ return remote_route_provider_.get(); |
+} |
+ |
void RenderThreadImpl::AddFilter(IPC::MessageFilter* filter) { |
channel()->AddFilter(filter); |
} |
@@ -2232,5 +2252,20 @@ void RenderThreadImpl::OnTrimMemoryImmediately() { |
} |
} |
+void RenderThreadImpl::OnRouteProviderRequest( |
+ mojom::RouteProviderAssociatedRequest request) { |
+ DCHECK(!route_provider_binding_.is_bound()); |
+ route_provider_binding_.Bind(std::move(request)); |
+} |
+ |
+void RenderThreadImpl::GetRoutedInterfaces( |
+ int32_t routing_id, |
+ mojom::RoutedInterfaceProviderAssociatedRequest request) { |
+ auto it = routed_interface_providers_.find(routing_id); |
+ if (it == routed_interface_providers_.end()) |
+ return; |
+ routed_interface_provider_bindings_.AddBinding(it->second, |
+ std::move(request)); |
+} |
} // namespace content |