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

Unified Diff: android_webview/native/aw_message_port_service_impl.cc

Issue 869133005: Post a Message from Java to JS (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: address mnaganov comments Created 5 years, 11 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 side-by-side diff with in-line comments
Download patch
Index: android_webview/native/aw_message_port_service_impl.cc
diff --git a/android_webview/native/aw_message_port_service_impl.cc b/android_webview/native/aw_message_port_service_impl.cc
index 5fa4e1b4bf09799cc9c1b49966a280b8b10f66b0..b3d1fc979ceb2221b6361dd1f1fba3d5510554a2 100644
--- a/android_webview/native/aw_message_port_service_impl.cc
+++ b/android_webview/native/aw_message_port_service_impl.cc
@@ -17,6 +17,7 @@
namespace android_webview {
using base::android::AttachCurrentThread;
+using base::android::ConvertJavaStringToUTF16;
using base::android::ConvertUTF16ToJavaString;
using base::android::ScopedJavaGlobalRef;
using base::android::ScopedJavaLocalRef;
@@ -72,7 +73,7 @@ void AwMessagePortServiceImpl::CreateMessageChannel(
base::Owned(portId2)));
}
-void AwMessagePortServiceImpl::OnConvertedMessage(
+void AwMessagePortServiceImpl::OnConvertedWebToAppMessage(
int message_port_id,
const base::ListValue& message,
const std::vector<int>& sent_message_port_ids) {
@@ -114,12 +115,48 @@ void AwMessagePortServiceImpl::OnMessagePortMessageFilterClosing(
}
}
+void AwMessagePortServiceImpl::PostAppToWebMessage(JNIEnv* env, jobject obj,
+ int sender_id, jstring message, jintArray sent_ports) {
+ DCHECK_CURRENTLY_ON(BrowserThread::UI);
+ base::string16* j_message = new base::string16;
+ ConvertJavaStringToUTF16(env, message, j_message);
+ std::vector<int>* j_sent_ports = new std::vector<int>;
+ if (sent_ports != nullptr)
+ base::android::JavaIntArrayToIntVector(env, sent_ports, j_sent_ports);
+
+ BrowserThread::PostTask(
+ BrowserThread::IO,
+ FROM_HERE,
+ base::Bind(&AwMessagePortServiceImpl::PostAppToWebMessageOnIOThread,
+ base::Unretained(this),
+ sender_id,
+ base::Owned(j_message),
+ base::Owned(j_sent_ports)));
+}
+
+void AwMessagePortServiceImpl::RemoveSentPorts(
+ const std::vector<int>& sent_ports) {
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+ // Remove the filters that are associated with the transferred ports
+ for (std::vector<int>::const_iterator iter = sent_ports.begin();
mnaganov (inactive) 2015/01/29 16:56:20 nit: These days you can write it simpler: for (c
sgurun-gerrit only 2015/01/29 19:15:40 ^ no deref? loved it.
+ iter != sent_ports.end(); iter++)
+ ports_.erase(*iter);
+}
+
+void AwMessagePortServiceImpl::PostAppToWebMessageOnIOThread(
+ int sender_id,
+ base::string16* message,
+ std::vector<int>* sent_ports) {
+ RemoveSentPorts(*sent_ports);
+ ports_[sender_id]->SendAppToWebMessage(sender_id, *message, *sent_ports);
+}
+
+
void AwMessagePortServiceImpl::CreateMessageChannelOnIOThread(
scoped_refptr<AwMessagePortMessageFilter> filter,
int* portId1,
int* portId2) {
- content::MessagePortProvider::CreateMessageChannel(filter.get(), portId1,
- portId2);
+ MessagePortProvider::CreateMessageChannel(filter.get(), portId1, portId2);
AddPort(*portId1, filter.get());
AddPort(*portId2, filter.get());
}

Powered by Google App Engine
This is Rietveld 408576698