| 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 485c02170811614575315bdd046054db829d3a93..24c8b1582aaff6acc720839dced9ce3ee35ee1c4 100644
|
| --- a/content/browser/frame_host/render_frame_host_impl.cc
|
| +++ b/content/browser/frame_host/render_frame_host_impl.cc
|
| @@ -105,6 +105,7 @@
|
| #include "media/media_features.h"
|
| #include "media/mojo/interfaces/media_service.mojom.h"
|
| #include "media/mojo/interfaces/remoting.mojom.h"
|
| +#include "media/mojo/services/media_interface_provider.h"
|
| #include "mojo/public/cpp/bindings/associated_interface_ptr.h"
|
| #include "mojo/public/cpp/bindings/strong_binding.h"
|
| #include "mojo/public/cpp/system/data_pipe.h"
|
| @@ -3828,23 +3829,40 @@ void RenderFrameHostImpl::BeforeUnloadTimeout() {
|
| }
|
|
|
| #if defined(OS_ANDROID)
|
| +
|
| +class RenderFrameHostImpl::JavaInterfaceProvider
|
| + : public service_manager::mojom::InterfaceProvider {
|
| + public:
|
| + JavaInterfaceProvider(
|
| + const service_manager::BinderRegistry::Binder& bind_callback,
|
| + service_manager::mojom::InterfaceProviderRequest request)
|
| + : bind_callback_(bind_callback), binding_(this, std::move(request)) {}
|
| + ~JavaInterfaceProvider() override = default;
|
| +
|
| + private:
|
| + // service_manager::mojom::INterfaceProvider:
|
| + void GetInterface(const std::string& interface_name,
|
| + mojo::ScopedMessagePipeHandle handle) override {
|
| + bind_callback_.Run(interface_name, std::move(handle));
|
| + }
|
| +
|
| + service_manager::BinderRegistry::Binder bind_callback_;
|
| + mojo::Binding<service_manager::mojom::InterfaceProvider> binding_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(JavaInterfaceProvider);
|
| +};
|
| +
|
| base::android::ScopedJavaLocalRef<jobject>
|
| RenderFrameHostImpl::GetJavaRenderFrameHost() {
|
| RenderFrameHostAndroid* render_frame_host_android =
|
| static_cast<RenderFrameHostAndroid*>(
|
| GetUserData(kRenderFrameHostAndroidKey));
|
| if (!render_frame_host_android) {
|
| - java_interface_registry_ =
|
| - base::MakeUnique<service_manager::InterfaceRegistry>(
|
| - "RenderFrameHost Java");
|
| service_manager::mojom::InterfaceProviderPtr interface_provider_ptr;
|
| - java_interface_registry_->set_default_binder(
|
| + java_interface_registry_ = base::MakeUnique<JavaInterfaceProvider>(
|
| base::Bind(&RenderFrameHostImpl::ForwardGetInterfaceToRenderFrame,
|
| - weak_ptr_factory_.GetWeakPtr()));
|
| - java_interface_registry_->Bind(
|
| - mojo::MakeRequest(&interface_provider_ptr), service_manager::Identity(),
|
| - service_manager::InterfaceProviderSpec(), service_manager::Identity(),
|
| - service_manager::InterfaceProviderSpec());
|
| + weak_ptr_factory_.GetWeakPtr()),
|
| + mojo::MakeRequest(&interface_provider_ptr));
|
| render_frame_host_android =
|
| new RenderFrameHostAndroid(this, std::move(interface_provider_ptr));
|
| SetUserData(kRenderFrameHostAndroidKey, render_frame_host_android);
|
|
|