| Index: content/browser/android/service_registry_android_impl.cc
|
| diff --git a/content/browser/android/service_registry_android_impl.cc b/content/browser/android/service_registry_android_impl.cc
|
| index fbda8ae3ae74b95da2337770ae61838f0d25f83a..27ae25bdfc99ef7cf85a27e63b11701988491897 100644
|
| --- a/content/browser/android/service_registry_android_impl.cc
|
| +++ b/content/browser/android/service_registry_android_impl.cc
|
| @@ -13,6 +13,8 @@
|
| #include "content/public/common/service_registry.h"
|
| #include "jni/ServiceRegistry_jni.h"
|
| #include "mojo/public/cpp/system/message_pipe.h"
|
| +#include "services/shell/public/cpp/interface_provider.h"
|
| +#include "services/shell/public/cpp/interface_registry.h"
|
|
|
| using base::android::AttachCurrentThread;
|
| using base::android::ConvertJavaStringToUTF8;
|
| @@ -39,8 +41,16 @@ void CreateImplAndAttach(
|
|
|
| // static
|
| std::unique_ptr<ServiceRegistryAndroid> ServiceRegistryAndroid::Create(
|
| - ServiceRegistry* registry) {
|
| - return base::WrapUnique(new ServiceRegistryAndroidImpl(registry));
|
| + shell::InterfaceRegistry* interface_registry,
|
| + shell::InterfaceProvider* remote_interfaces) {
|
| + return base::WrapUnique(new ServiceRegistryAndroidImpl(
|
| + interface_registry, remote_interfaces));
|
| +}
|
| +
|
| +// static
|
| +std::unique_ptr<ServiceRegistryAndroid> ServiceRegistryAndroid::Create(
|
| + ServiceRegistry* service_registry) {
|
| + return base::WrapUnique(new ServiceRegistryAndroidImpl(service_registry));
|
| }
|
|
|
| // static
|
| @@ -54,6 +64,17 @@ ServiceRegistryAndroidImpl::~ServiceRegistryAndroidImpl() {
|
|
|
| // Constructor and destructor call into Java.
|
| ServiceRegistryAndroidImpl::ServiceRegistryAndroidImpl(
|
| + shell::InterfaceRegistry* interface_registry,
|
| + shell::InterfaceProvider* remote_interfaces)
|
| + : interface_registry_(interface_registry),
|
| + remote_interfaces_(remote_interfaces) {
|
| + JNIEnv* env = AttachCurrentThread();
|
| + obj_.Reset(
|
| + env,
|
| + Java_ServiceRegistry_create(env, reinterpret_cast<intptr_t>(this)).obj());
|
| +}
|
| +
|
| +ServiceRegistryAndroidImpl::ServiceRegistryAndroidImpl(
|
| ServiceRegistry* service_registry)
|
| : service_registry_(service_registry) {
|
| JNIEnv* env = AttachCurrentThread();
|
| @@ -62,6 +83,7 @@ ServiceRegistryAndroidImpl::ServiceRegistryAndroidImpl(
|
| Java_ServiceRegistry_create(env, reinterpret_cast<intptr_t>(this)).obj());
|
| }
|
|
|
| +
|
| const base::android::ScopedJavaGlobalRef<jobject>&
|
| ServiceRegistryAndroidImpl::GetObj() {
|
| return obj_;
|
| @@ -85,10 +107,19 @@ void ServiceRegistryAndroidImpl::AddService(
|
| ScopedJavaGlobalRef<jobject> j_scoped_factory;
|
| j_scoped_factory.Reset(env, j_factory);
|
|
|
| - service_registry_->AddService(
|
| - name, base::Bind(&CreateImplAndAttach, j_scoped_service_registry,
|
| - j_scoped_manager, j_scoped_factory),
|
| - nullptr);
|
| + if (interface_registry_) {
|
| + interface_registry_->AddInterface(
|
| + name, base::Bind(&CreateImplAndAttach, j_scoped_service_registry,
|
| + j_scoped_manager, j_scoped_factory),
|
| + nullptr);
|
| + } else if (service_registry_) {
|
| + service_registry_->AddService(
|
| + name, base::Bind(&CreateImplAndAttach, j_scoped_service_registry,
|
| + j_scoped_manager, j_scoped_factory),
|
| + nullptr);
|
| + } else {
|
| + NOTREACHED();
|
| + }
|
| }
|
|
|
| void ServiceRegistryAndroidImpl::RemoveService(
|
| @@ -96,7 +127,12 @@ void ServiceRegistryAndroidImpl::RemoveService(
|
| const JavaParamRef<jobject>& j_service_registry,
|
| const JavaParamRef<jstring>& j_name) {
|
| std::string name(ConvertJavaStringToUTF8(env, j_name));
|
| - service_registry_->RemoveService(name);
|
| + if (interface_registry_)
|
| + interface_registry_->RemoveInterface(name);
|
| + else if (service_registry_)
|
| + service_registry_->RemoveService(name);
|
| + else
|
| + NOTREACHED();
|
| }
|
|
|
| void ServiceRegistryAndroidImpl::ConnectToRemoteService(
|
| @@ -106,7 +142,12 @@ void ServiceRegistryAndroidImpl::ConnectToRemoteService(
|
| jint j_handle) {
|
| std::string name(ConvertJavaStringToUTF8(env, j_name));
|
| mojo::ScopedMessagePipeHandle handle((mojo::MessagePipeHandle(j_handle)));
|
| - service_registry_->ConnectToRemoteService(name, std::move(handle));
|
| + if (remote_interfaces_)
|
| + remote_interfaces_->GetInterface(name, std::move(handle));
|
| + else if (service_registry_)
|
| + service_registry_->ConnectToRemoteService(name, std::move(handle));
|
| + else
|
| + NOTREACHED();
|
| }
|
|
|
| } // namespace content
|
|
|