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 |