| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "android_webview/native/aw_message_port_service_impl.h" | 5 #include "android_webview/native/aw_message_port_service_impl.h" |
| 6 | 6 |
| 7 #include "android_webview/browser/aw_browser_context.h" | 7 #include "android_webview/browser/aw_browser_context.h" |
| 8 #include "android_webview/browser/aw_message_port_message_filter.h" | 8 #include "android_webview/browser/aw_message_port_message_filter.h" |
| 9 #include "android_webview/native/aw_contents.h" | 9 #include "android_webview/native/aw_contents.h" |
| 10 #include "base/android/jni_array.h" | 10 #include "base/android/jni_array.h" |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 42 Java_AwMessagePortService_unregisterNativeAwMessagePortService(env, | 42 Java_AwMessagePortService_unregisterNativeAwMessagePortService(env, |
| 43 obj.obj()); | 43 obj.obj()); |
| 44 } | 44 } |
| 45 | 45 |
| 46 void AwMessagePortServiceImpl::Init(JNIEnv* env, jobject obj) { | 46 void AwMessagePortServiceImpl::Init(JNIEnv* env, jobject obj) { |
| 47 java_ref_ = JavaObjectWeakGlobalRef(env, obj); | 47 java_ref_ = JavaObjectWeakGlobalRef(env, obj); |
| 48 } | 48 } |
| 49 | 49 |
| 50 void AwMessagePortServiceImpl::CreateMessageChannel( | 50 void AwMessagePortServiceImpl::CreateMessageChannel( |
| 51 JNIEnv* env, | 51 JNIEnv* env, |
| 52 jobject callback, | 52 jobjectArray ports, |
| 53 scoped_refptr<AwMessagePortMessageFilter> filter) { | 53 scoped_refptr<AwMessagePortMessageFilter> filter) { |
| 54 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 54 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 55 | 55 |
| 56 ScopedJavaGlobalRef<jobject>* j_callback = new ScopedJavaGlobalRef<jobject>(); | 56 ScopedJavaGlobalRef<jobjectArray>* j_ports = |
| 57 j_callback->Reset(env, callback); | 57 new ScopedJavaGlobalRef<jobjectArray>(); |
| 58 j_ports->Reset(env, ports); |
| 58 | 59 |
| 59 int* portId1 = new int; | 60 int* portId1 = new int; |
| 60 int* portId2 = new int; | 61 int* portId2 = new int; |
| 61 BrowserThread::PostTaskAndReply( | 62 BrowserThread::PostTaskAndReply( |
| 62 BrowserThread::IO, | 63 BrowserThread::IO, |
| 63 FROM_HERE, | 64 FROM_HERE, |
| 64 base::Bind(&AwMessagePortServiceImpl::CreateMessageChannelOnIOThread, | 65 base::Bind(&AwMessagePortServiceImpl::CreateMessageChannelOnIOThread, |
| 65 base::Unretained(this), | 66 base::Unretained(this), |
| 66 filter, | 67 filter, |
| 67 portId1, | 68 portId1, |
| 68 portId2), | 69 portId2), |
| 69 base::Bind(&AwMessagePortServiceImpl::OnMessageChannelCreated, | 70 base::Bind(&AwMessagePortServiceImpl::OnMessageChannelCreated, |
| 70 base::Unretained(this), | 71 base::Unretained(this), |
| 71 base::Owned(j_callback), | 72 base::Owned(j_ports), |
| 72 base::Owned(portId1), | 73 base::Owned(portId1), |
| 73 base::Owned(portId2))); | 74 base::Owned(portId2))); |
| 74 } | 75 } |
| 75 | 76 |
| 76 void AwMessagePortServiceImpl::OnConvertedWebToAppMessage( | 77 void AwMessagePortServiceImpl::OnConvertedWebToAppMessage( |
| 77 int message_port_id, | 78 int message_port_id, |
| 78 const base::ListValue& message, | 79 const base::ListValue& message, |
| 79 const std::vector<int>& sent_message_port_ids) { | 80 const std::vector<int>& sent_message_port_ids) { |
| 80 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 81 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 81 JNIEnv* env = AttachCurrentThread(); | 82 JNIEnv* env = AttachCurrentThread(); |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 154 void AwMessagePortServiceImpl::CreateMessageChannelOnIOThread( | 155 void AwMessagePortServiceImpl::CreateMessageChannelOnIOThread( |
| 155 scoped_refptr<AwMessagePortMessageFilter> filter, | 156 scoped_refptr<AwMessagePortMessageFilter> filter, |
| 156 int* portId1, | 157 int* portId1, |
| 157 int* portId2) { | 158 int* portId2) { |
| 158 MessagePortProvider::CreateMessageChannel(filter.get(), portId1, portId2); | 159 MessagePortProvider::CreateMessageChannel(filter.get(), portId1, portId2); |
| 159 AddPort(*portId1, filter.get()); | 160 AddPort(*portId1, filter.get()); |
| 160 AddPort(*portId2, filter.get()); | 161 AddPort(*portId2, filter.get()); |
| 161 } | 162 } |
| 162 | 163 |
| 163 void AwMessagePortServiceImpl::OnMessageChannelCreated( | 164 void AwMessagePortServiceImpl::OnMessageChannelCreated( |
| 164 ScopedJavaGlobalRef<jobject>* callback, | 165 ScopedJavaGlobalRef<jobjectArray>* ports, |
| 165 int* port1, | 166 int* port1, |
| 166 int* port2) { | 167 int* port2) { |
| 167 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 168 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 168 JNIEnv* env = AttachCurrentThread(); | 169 JNIEnv* env = AttachCurrentThread(); |
| 169 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); | 170 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); |
| 170 if (obj.is_null()) | 171 if (obj.is_null()) |
| 171 return; | 172 return; |
| 172 Java_AwMessagePortService_onMessageChannelCreated(env, obj.obj(), *port1, | 173 Java_AwMessagePortService_onMessageChannelCreated(env, obj.obj(), *port1, |
| 173 *port2, callback->obj()); | 174 *port2, ports->obj()); |
| 174 } | 175 } |
| 175 | 176 |
| 176 void AwMessagePortServiceImpl::AddPort(int message_port_id, | 177 void AwMessagePortServiceImpl::AddPort(int message_port_id, |
| 177 AwMessagePortMessageFilter* filter) { | 178 AwMessagePortMessageFilter* filter) { |
| 178 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 179 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 179 if (ports_.count(message_port_id)) { | 180 if (ports_.count(message_port_id)) { |
| 180 NOTREACHED(); | 181 NOTREACHED(); |
| 181 return; | 182 return; |
| 182 } | 183 } |
| 183 ports_[message_port_id] = filter; | 184 ports_[message_port_id] = filter; |
| 184 } | 185 } |
| 185 | 186 |
| 186 bool RegisterAwMessagePortService(JNIEnv* env) { | 187 bool RegisterAwMessagePortService(JNIEnv* env) { |
| 187 return RegisterNativesImpl(env); | 188 return RegisterNativesImpl(env); |
| 188 } | 189 } |
| 189 | 190 |
| 190 // static | 191 // static |
| 191 jlong InitAwMessagePortService(JNIEnv* env, jobject obj) { | 192 jlong InitAwMessagePortService(JNIEnv* env, jobject obj) { |
| 192 AwMessagePortServiceImpl* service = AwMessagePortServiceImpl::GetInstance(); | 193 AwMessagePortServiceImpl* service = AwMessagePortServiceImpl::GetInstance(); |
| 193 service->Init(env, obj); | 194 service->Init(env, obj); |
| 194 return reinterpret_cast<intptr_t>(service); | 195 return reinterpret_cast<intptr_t>(service); |
| 195 } | 196 } |
| 196 | 197 |
| 197 } // namespace android_webview | 198 } // namespace android_webview |
| OLD | NEW |