Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(298)

Side by Side Diff: content/browser/android/service_registry_android_impl.cc

Issue 2079943002: Change RenderFrame to use InterfaceRegistry et al. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@a2
Patch Set: . Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/android/service_registry_android_impl.h" 5 #include "content/browser/android/service_registry_android_impl.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/android/jni_android.h" 9 #include "base/android/jni_android.h"
10 #include "base/android/jni_string.h" 10 #include "base/android/jni_string.h"
11 #include "base/callback.h" 11 #include "base/callback.h"
12 #include "base/memory/ptr_util.h" 12 #include "base/memory/ptr_util.h"
13 #include "content/public/common/service_registry.h" 13 #include "content/public/common/service_registry.h"
14 #include "jni/ServiceRegistry_jni.h" 14 #include "jni/ServiceRegistry_jni.h"
15 #include "mojo/public/cpp/system/message_pipe.h" 15 #include "mojo/public/cpp/system/message_pipe.h"
16 #include "services/shell/public/cpp/interface_provider.h"
17 #include "services/shell/public/cpp/interface_registry.h"
16 18
17 using base::android::AttachCurrentThread; 19 using base::android::AttachCurrentThread;
18 using base::android::ConvertJavaStringToUTF8; 20 using base::android::ConvertJavaStringToUTF8;
19 using base::android::ScopedJavaGlobalRef; 21 using base::android::ScopedJavaGlobalRef;
20 22
21 namespace content { 23 namespace content {
22 24
23 namespace { 25 namespace {
24 26
25 // Callback passed to the wrapped ServiceRegistry upon AddService(). The 27 // Callback passed to the wrapped ServiceRegistry upon AddService(). The
26 // ServiceRegistry will call it to create a registered Java service 28 // ServiceRegistry will call it to create a registered Java service
27 void CreateImplAndAttach( 29 void CreateImplAndAttach(
28 const ScopedJavaGlobalRef<jobject>& j_scoped_service_registry, 30 const ScopedJavaGlobalRef<jobject>& j_scoped_service_registry,
29 const ScopedJavaGlobalRef<jobject>& j_scoped_manager, 31 const ScopedJavaGlobalRef<jobject>& j_scoped_manager,
30 const ScopedJavaGlobalRef<jobject>& j_scoped_factory, 32 const ScopedJavaGlobalRef<jobject>& j_scoped_factory,
31 mojo::ScopedMessagePipeHandle handle) { 33 mojo::ScopedMessagePipeHandle handle) {
32 JNIEnv* env = AttachCurrentThread(); 34 JNIEnv* env = AttachCurrentThread();
33 Java_ServiceRegistry_createImplAndAttach( 35 Java_ServiceRegistry_createImplAndAttach(
34 env, j_scoped_service_registry.obj(), handle.release().value(), 36 env, j_scoped_service_registry.obj(), handle.release().value(),
35 j_scoped_manager.obj(), j_scoped_factory.obj()); 37 j_scoped_manager.obj(), j_scoped_factory.obj());
36 } 38 }
37 39
38 } // namespace 40 } // namespace
39 41
40 // static 42 // static
41 std::unique_ptr<ServiceRegistryAndroid> ServiceRegistryAndroid::Create( 43 std::unique_ptr<ServiceRegistryAndroid> ServiceRegistryAndroid::Create(
42 ServiceRegistry* registry) { 44 shell::InterfaceRegistry* interface_registry,
43 return base::WrapUnique(new ServiceRegistryAndroidImpl(registry)); 45 shell::InterfaceProvider* remote_interfaces) {
46 return base::WrapUnique(new ServiceRegistryAndroidImpl(
47 interface_registry, remote_interfaces));
44 } 48 }
45 49
46 // static 50 // static
51 std::unique_ptr<ServiceRegistryAndroid> ServiceRegistryAndroid::Create(
52 ServiceRegistry* service_registry) {
53 return base::WrapUnique(new ServiceRegistryAndroidImpl(service_registry));
54 }
55
56 // static
47 bool ServiceRegistryAndroidImpl::Register(JNIEnv* env) { 57 bool ServiceRegistryAndroidImpl::Register(JNIEnv* env) {
48 return RegisterNativesImpl(env); 58 return RegisterNativesImpl(env);
49 } 59 }
50 60
51 ServiceRegistryAndroidImpl::~ServiceRegistryAndroidImpl() { 61 ServiceRegistryAndroidImpl::~ServiceRegistryAndroidImpl() {
52 Java_ServiceRegistry_destroy(AttachCurrentThread(), obj_.obj()); 62 Java_ServiceRegistry_destroy(AttachCurrentThread(), obj_.obj());
53 } 63 }
54 64
55 // Constructor and destructor call into Java. 65 // Constructor and destructor call into Java.
56 ServiceRegistryAndroidImpl::ServiceRegistryAndroidImpl( 66 ServiceRegistryAndroidImpl::ServiceRegistryAndroidImpl(
67 shell::InterfaceRegistry* interface_registry,
68 shell::InterfaceProvider* remote_interfaces)
69 : interface_registry_(interface_registry),
70 remote_interfaces_(remote_interfaces) {
71 JNIEnv* env = AttachCurrentThread();
72 obj_.Reset(
73 env,
74 Java_ServiceRegistry_create(env, reinterpret_cast<intptr_t>(this)).obj());
75 }
76
77 ServiceRegistryAndroidImpl::ServiceRegistryAndroidImpl(
57 ServiceRegistry* service_registry) 78 ServiceRegistry* service_registry)
58 : service_registry_(service_registry) { 79 : service_registry_(service_registry) {
59 JNIEnv* env = AttachCurrentThread(); 80 JNIEnv* env = AttachCurrentThread();
60 obj_.Reset( 81 obj_.Reset(
61 env, 82 env,
62 Java_ServiceRegistry_create(env, reinterpret_cast<intptr_t>(this)).obj()); 83 Java_ServiceRegistry_create(env, reinterpret_cast<intptr_t>(this)).obj());
63 } 84 }
64 85
86
65 const base::android::ScopedJavaGlobalRef<jobject>& 87 const base::android::ScopedJavaGlobalRef<jobject>&
66 ServiceRegistryAndroidImpl::GetObj() { 88 ServiceRegistryAndroidImpl::GetObj() {
67 return obj_; 89 return obj_;
68 } 90 }
69 91
70 // Methods called from Java. 92 // Methods called from Java.
71 void ServiceRegistryAndroidImpl::AddService( 93 void ServiceRegistryAndroidImpl::AddService(
72 JNIEnv* env, 94 JNIEnv* env,
73 const JavaParamRef<jobject>& j_service_registry, 95 const JavaParamRef<jobject>& j_service_registry,
74 const JavaParamRef<jobject>& j_manager, 96 const JavaParamRef<jobject>& j_manager,
75 const JavaParamRef<jobject>& j_factory, 97 const JavaParamRef<jobject>& j_factory,
76 const JavaParamRef<jstring>& j_name) { 98 const JavaParamRef<jstring>& j_name) {
77 std::string name(ConvertJavaStringToUTF8(env, j_name)); 99 std::string name(ConvertJavaStringToUTF8(env, j_name));
78 100
79 ScopedJavaGlobalRef<jobject> j_scoped_service_registry; 101 ScopedJavaGlobalRef<jobject> j_scoped_service_registry;
80 j_scoped_service_registry.Reset(env, j_service_registry); 102 j_scoped_service_registry.Reset(env, j_service_registry);
81 103
82 ScopedJavaGlobalRef<jobject> j_scoped_manager; 104 ScopedJavaGlobalRef<jobject> j_scoped_manager;
83 j_scoped_manager.Reset(env, j_manager); 105 j_scoped_manager.Reset(env, j_manager);
84 106
85 ScopedJavaGlobalRef<jobject> j_scoped_factory; 107 ScopedJavaGlobalRef<jobject> j_scoped_factory;
86 j_scoped_factory.Reset(env, j_factory); 108 j_scoped_factory.Reset(env, j_factory);
87 109
88 service_registry_->AddService( 110 if (interface_registry_) {
89 name, base::Bind(&CreateImplAndAttach, j_scoped_service_registry, 111 interface_registry_->AddInterface(
90 j_scoped_manager, j_scoped_factory), 112 name, base::Bind(&CreateImplAndAttach, j_scoped_service_registry,
91 nullptr); 113 j_scoped_manager, j_scoped_factory),
114 nullptr);
115 } else if (service_registry_) {
116 service_registry_->AddService(
117 name, base::Bind(&CreateImplAndAttach, j_scoped_service_registry,
118 j_scoped_manager, j_scoped_factory),
119 nullptr);
120 } else {
121 NOTREACHED();
122 }
92 } 123 }
93 124
94 void ServiceRegistryAndroidImpl::RemoveService( 125 void ServiceRegistryAndroidImpl::RemoveService(
95 JNIEnv* env, 126 JNIEnv* env,
96 const JavaParamRef<jobject>& j_service_registry, 127 const JavaParamRef<jobject>& j_service_registry,
97 const JavaParamRef<jstring>& j_name) { 128 const JavaParamRef<jstring>& j_name) {
98 std::string name(ConvertJavaStringToUTF8(env, j_name)); 129 std::string name(ConvertJavaStringToUTF8(env, j_name));
99 service_registry_->RemoveService(name); 130 if (interface_registry_)
131 interface_registry_->RemoveInterface(name);
132 else if (service_registry_)
133 service_registry_->RemoveService(name);
134 else
135 NOTREACHED();
100 } 136 }
101 137
102 void ServiceRegistryAndroidImpl::ConnectToRemoteService( 138 void ServiceRegistryAndroidImpl::ConnectToRemoteService(
103 JNIEnv* env, 139 JNIEnv* env,
104 const JavaParamRef<jobject>& j_service_registry, 140 const JavaParamRef<jobject>& j_service_registry,
105 const JavaParamRef<jstring>& j_name, 141 const JavaParamRef<jstring>& j_name,
106 jint j_handle) { 142 jint j_handle) {
107 std::string name(ConvertJavaStringToUTF8(env, j_name)); 143 std::string name(ConvertJavaStringToUTF8(env, j_name));
108 mojo::ScopedMessagePipeHandle handle((mojo::MessagePipeHandle(j_handle))); 144 mojo::ScopedMessagePipeHandle handle((mojo::MessagePipeHandle(j_handle)));
109 service_registry_->ConnectToRemoteService(name, std::move(handle)); 145 if (remote_interfaces_)
146 remote_interfaces_->GetInterface(name, std::move(handle));
147 else if (service_registry_)
148 service_registry_->ConnectToRemoteService(name, std::move(handle));
149 else
150 NOTREACHED();
110 } 151 }
111 152
112 } // namespace content 153 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/android/service_registry_android_impl.h ('k') | content/browser/frame_host/frame_mojo_shell.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698