Index: content/browser/frame_host/render_frame_host_impl.cc |
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc |
index c5c6b04749a9de5743278470bc877171e85f9b35..206119339c0383e19fab31001f04790d884c5df3 100644 |
--- a/content/browser/frame_host/render_frame_host_impl.cc |
+++ b/content/browser/frame_host/render_frame_host_impl.cc |
@@ -266,6 +266,14 @@ class RemoterFactoryImpl final : public media::mojom::RemoterFactory { |
}; |
#endif // BUILDFLAG(ENABLE_MEDIA_REMOTING) |
+void CreateResourceCoordinatorFrameInterface( |
+ RenderFrameHostImpl* render_frame_host, |
+ const service_manager::BindSourceInfo& source_info, |
+ resource_coordinator::mojom::CoordinationUnitRequest request) { |
+ render_frame_host->GetFrameResourceCoordinator()->service()->Duplicate( |
+ std::move(request)); |
+} |
+ |
template <typename Interface> |
void IgnoreInterfaceRequest(const service_manager::BindSourceInfo& source_info, |
mojo::InterfaceRequest<Interface> request) { |
@@ -2830,6 +2838,9 @@ void RenderFrameHostImpl::RegisterMojoInterfaces() { |
base::Bind(&IgnoreInterfaceRequest<device::mojom::VRService>)); |
#endif |
+ GetInterfaceRegistry()->AddInterface(base::Bind( |
+ &CreateResourceCoordinatorFrameInterface, base::Unretained(this))); |
+ |
#if BUILDFLAG(ENABLE_WEBRTC) |
// BrowserMainLoop::GetInstance() may be null on unit tests. |
if (BrowserMainLoop::GetInstance()) { |
@@ -3254,6 +3265,7 @@ void RenderFrameHostImpl::InvalidateMojoConnection() { |
// Disconnect with ImageDownloader Mojo service in RenderFrame. |
mojo_image_downloader_.reset(); |
+ frame_resource_coordinator_.reset(); |
} |
bool RenderFrameHostImpl::IsFocused() { |
@@ -3360,6 +3372,18 @@ RenderFrameHostImpl::GetMojoImageDownloader() { |
return mojo_image_downloader_; |
} |
+resource_coordinator::ResourceCoordinatorInterface* |
+RenderFrameHostImpl::GetFrameResourceCoordinator() { |
+ if (!frame_resource_coordinator_) { |
+ frame_resource_coordinator_ = |
+ base::MakeUnique<resource_coordinator::ResourceCoordinatorInterface>( |
+ ServiceManagerConnection::GetForProcess()->GetConnector(), |
+ resource_coordinator::CoordinationUnitType::kFrame); |
+ } |
+ |
+ return frame_resource_coordinator_.get(); |
+} |
+ |
void RenderFrameHostImpl::ResetLoadingState() { |
if (is_loading()) { |
// When pending deletion, just set the loading state to not loading. |