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

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"
14 #include "jni/ServiceRegistry_jni.h" 13 #include "jni/ServiceRegistry_jni.h"
15 #include "mojo/public/cpp/system/message_pipe.h" 14 #include "mojo/public/cpp/system/message_pipe.h"
15 #include "services/shell/public/cpp/interface_provider.h"
16 #include "services/shell/public/cpp/interface_registry.h"
16 17
17 using base::android::AttachCurrentThread; 18 using base::android::AttachCurrentThread;
18 using base::android::ConvertJavaStringToUTF8; 19 using base::android::ConvertJavaStringToUTF8;
19 using base::android::ScopedJavaGlobalRef; 20 using base::android::ScopedJavaGlobalRef;
20 21
21 namespace content { 22 namespace content {
22 23
23 namespace { 24 namespace {
24 25
25 // Callback passed to the wrapped ServiceRegistry upon AddService(). The 26 // Callback passed to the wrapped ServiceRegistry upon AddService(). The
26 // ServiceRegistry will call it to create a registered Java service 27 // ServiceRegistry will call it to create a registered Java service
27 void CreateImplAndAttach( 28 void CreateImplAndAttach(
28 const ScopedJavaGlobalRef<jobject>& j_scoped_service_registry, 29 const ScopedJavaGlobalRef<jobject>& j_scoped_service_registry,
29 const ScopedJavaGlobalRef<jobject>& j_scoped_manager, 30 const ScopedJavaGlobalRef<jobject>& j_scoped_manager,
30 const ScopedJavaGlobalRef<jobject>& j_scoped_factory, 31 const ScopedJavaGlobalRef<jobject>& j_scoped_factory,
31 mojo::ScopedMessagePipeHandle handle) { 32 mojo::ScopedMessagePipeHandle handle) {
32 JNIEnv* env = AttachCurrentThread(); 33 JNIEnv* env = AttachCurrentThread();
33 Java_ServiceRegistry_createImplAndAttach( 34 Java_ServiceRegistry_createImplAndAttach(
34 env, j_scoped_service_registry.obj(), handle.release().value(), 35 env, j_scoped_service_registry.obj(), handle.release().value(),
35 j_scoped_manager.obj(), j_scoped_factory.obj()); 36 j_scoped_manager.obj(), j_scoped_factory.obj());
36 } 37 }
37 38
38 } // namespace 39 } // namespace
39 40
40 // static 41 // static
41 std::unique_ptr<ServiceRegistryAndroid> ServiceRegistryAndroid::Create( 42 std::unique_ptr<ServiceRegistryAndroid> ServiceRegistryAndroid::Create(
42 ServiceRegistry* registry) { 43 shell::InterfaceRegistry* interface_registry,
43 return base::WrapUnique(new ServiceRegistryAndroidImpl(registry)); 44 shell::InterfaceProvider* remote_interfaces) {
45 return base::WrapUnique(new ServiceRegistryAndroidImpl(
46 interface_registry, remote_interfaces));
44 } 47 }
45 48
46 // static 49 // static
47 bool ServiceRegistryAndroidImpl::Register(JNIEnv* env) { 50 bool ServiceRegistryAndroidImpl::Register(JNIEnv* env) {
48 return RegisterNativesImpl(env); 51 return RegisterNativesImpl(env);
49 } 52 }
50 53
51 ServiceRegistryAndroidImpl::~ServiceRegistryAndroidImpl() { 54 ServiceRegistryAndroidImpl::~ServiceRegistryAndroidImpl() {
52 Java_ServiceRegistry_destroy(AttachCurrentThread(), obj_.obj()); 55 Java_ServiceRegistry_destroy(AttachCurrentThread(), obj_.obj());
53 } 56 }
54 57
55 // Constructor and destructor call into Java. 58 // Constructor and destructor call into Java.
56 ServiceRegistryAndroidImpl::ServiceRegistryAndroidImpl( 59 ServiceRegistryAndroidImpl::ServiceRegistryAndroidImpl(
57 ServiceRegistry* service_registry) 60 shell::InterfaceRegistry* interface_registry,
58 : service_registry_(service_registry) { 61 shell::InterfaceProvider* remote_interfaces)
62 : interface_registry_(interface_registry),
63 remote_interfaces_(remote_interfaces) {
59 JNIEnv* env = AttachCurrentThread(); 64 JNIEnv* env = AttachCurrentThread();
60 obj_.Reset( 65 obj_.Reset(
61 env, 66 env,
62 Java_ServiceRegistry_create(env, reinterpret_cast<intptr_t>(this)).obj()); 67 Java_ServiceRegistry_create(env, reinterpret_cast<intptr_t>(this)).obj());
63 } 68 }
64 69
65 const base::android::ScopedJavaGlobalRef<jobject>& 70 const base::android::ScopedJavaGlobalRef<jobject>&
66 ServiceRegistryAndroidImpl::GetObj() { 71 ServiceRegistryAndroidImpl::GetObj() {
67 return obj_; 72 return obj_;
68 } 73 }
69 74
70 // Methods called from Java. 75 // Methods called from Java.
71 void ServiceRegistryAndroidImpl::AddService( 76 void ServiceRegistryAndroidImpl::AddService(
72 JNIEnv* env, 77 JNIEnv* env,
73 const JavaParamRef<jobject>& j_service_registry, 78 const JavaParamRef<jobject>& j_service_registry,
74 const JavaParamRef<jobject>& j_manager, 79 const JavaParamRef<jobject>& j_manager,
75 const JavaParamRef<jobject>& j_factory, 80 const JavaParamRef<jobject>& j_factory,
76 const JavaParamRef<jstring>& j_name) { 81 const JavaParamRef<jstring>& j_name) {
77 std::string name(ConvertJavaStringToUTF8(env, j_name)); 82 std::string name(ConvertJavaStringToUTF8(env, j_name));
78 83
79 ScopedJavaGlobalRef<jobject> j_scoped_service_registry; 84 ScopedJavaGlobalRef<jobject> j_scoped_service_registry;
80 j_scoped_service_registry.Reset(env, j_service_registry); 85 j_scoped_service_registry.Reset(env, j_service_registry);
81 86
82 ScopedJavaGlobalRef<jobject> j_scoped_manager; 87 ScopedJavaGlobalRef<jobject> j_scoped_manager;
83 j_scoped_manager.Reset(env, j_manager); 88 j_scoped_manager.Reset(env, j_manager);
84 89
85 ScopedJavaGlobalRef<jobject> j_scoped_factory; 90 ScopedJavaGlobalRef<jobject> j_scoped_factory;
86 j_scoped_factory.Reset(env, j_factory); 91 j_scoped_factory.Reset(env, j_factory);
87 92
88 service_registry_->AddService( 93 interface_registry_->AddInterfaceByName(
89 name, base::Bind(&CreateImplAndAttach, j_scoped_service_registry, 94 name, base::Bind(&CreateImplAndAttach, j_scoped_service_registry,
90 j_scoped_manager, j_scoped_factory), 95 j_scoped_manager, j_scoped_factory),
91 nullptr); 96 nullptr);
92 } 97 }
93 98
94 void ServiceRegistryAndroidImpl::RemoveService( 99 void ServiceRegistryAndroidImpl::RemoveService(
95 JNIEnv* env, 100 JNIEnv* env,
96 const JavaParamRef<jobject>& j_service_registry, 101 const JavaParamRef<jobject>& j_service_registry,
97 const JavaParamRef<jstring>& j_name) { 102 const JavaParamRef<jstring>& j_name) {
98 std::string name(ConvertJavaStringToUTF8(env, j_name)); 103 std::string name(ConvertJavaStringToUTF8(env, j_name));
99 service_registry_->RemoveService(name); 104 interface_registry_->RemoveInterface(name);
100 } 105 }
101 106
102 void ServiceRegistryAndroidImpl::ConnectToRemoteService( 107 void ServiceRegistryAndroidImpl::ConnectToRemoteService(
103 JNIEnv* env, 108 JNIEnv* env,
104 const JavaParamRef<jobject>& j_service_registry, 109 const JavaParamRef<jobject>& j_service_registry,
105 const JavaParamRef<jstring>& j_name, 110 const JavaParamRef<jstring>& j_name,
106 jint j_handle) { 111 jint j_handle) {
107 std::string name(ConvertJavaStringToUTF8(env, j_name)); 112 std::string name(ConvertJavaStringToUTF8(env, j_name));
108 mojo::ScopedMessagePipeHandle handle((mojo::MessagePipeHandle(j_handle))); 113 mojo::ScopedMessagePipeHandle handle((mojo::MessagePipeHandle(j_handle)));
109 service_registry_->ConnectToRemoteService(name, std::move(handle)); 114 remote_interfaces_->GetInterface(name, std::move(handle));
110 } 115 }
111 116
112 } // namespace content 117 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698