summaryrefslogtreecommitdiffstats
path: root/android_webview
diff options
context:
space:
mode:
authormek <mek@chromium.org>2015-02-27 18:38:06 -0800
committerCommit bot <commit-bot@chromium.org>2015-02-28 02:38:58 +0000
commit5b679c9db20587c78e9bf7c076edd7584413cc3b (patch)
tree1d8a97fe714ab4ea33f8dd0644574495676d2778 /android_webview
parentbaef455a5396790ec8e34fa66c96c42f22f831be (diff)
downloadchromium_src-5b679c9db20587c78e9bf7c076edd7584413cc3b.zip
chromium_src-5b679c9db20587c78e9bf7c076edd7584413cc3b.tar.gz
chromium_src-5b679c9db20587c78e9bf7c076edd7584413cc3b.tar.bz2
Step two of optionally sending messages to/from message ports as base::Value.
This CL changes every place a MessagePort is transferred between process to properly propagate the send_messages_as_values flag, as well as makes it possible for NavigatorConnectContext to set this flag when setting up a new connection. This is part of a series of changes: [1/5] Blink side changes in https://codereview.chromium.org/924983002/ that expose a needed v8 context [2/5] https://codereview.chromium.org/921013002/ allow MessagePort to send messages as values [3/5] This CL [4/5] https://codereview.chromium.org/938403005/ which uses this for navigator.connect services and adds infrastructure for layout tests [5/5] https://codereview.chromium.org/940423004/ adds layout tests to blink to test these new features BUG=426458 Review URL: https://codereview.chromium.org/944443003 Cr-Commit-Position: refs/heads/master@{#318578}
Diffstat (limited to 'android_webview')
-rw-r--r--android_webview/browser/aw_message_port_message_filter.cc14
-rw-r--r--android_webview/browser/aw_message_port_message_filter.h8
-rw-r--r--android_webview/native/aw_contents.cc6
3 files changed, 21 insertions, 7 deletions
diff --git a/android_webview/browser/aw_message_port_message_filter.cc b/android_webview/browser/aw_message_port_message_filter.cc
index b19b344..8c434b5 100644
--- a/android_webview/browser/aw_message_port_message_filter.cc
+++ b/android_webview/browser/aw_message_port_message_filter.cc
@@ -46,12 +46,15 @@ void AwMessagePortMessageFilter::OnConvertedAppToWebMessage(
int msg_port_id,
const base::string16& message,
const std::vector<int>& sent_message_port_ids) {
-
+ std::vector<content::TransferredMessagePort>
+ sent_ports(sent_message_port_ids.size());
+ for (size_t i = 0; i < sent_message_port_ids.size(); ++i)
+ sent_ports[i].id = sent_message_port_ids[i];
// TODO(mek): Bypass the extra roundtrip and just send the unconverted message
// to the renderer directly.
MessagePortProvider::PostMessageToPort(msg_port_id,
content::MessagePortMessage(message),
- sent_message_port_ids);
+ sent_ports);
}
void AwMessagePortMessageFilter::OnClosePortAck(int message_port_id) {
@@ -81,8 +84,13 @@ void AwMessagePortMessageFilter::SendClosePortMessage(int message_port_id) {
void AwMessagePortMessageFilter::SendMessage(
int msg_port_route_id,
const content::MessagePortMessage& message,
- const std::vector<int>& sent_message_port_ids) {
+ const std::vector<content::TransferredMessagePort>& sent_message_ports) {
DCHECK(message.is_string());
+ std::vector<int> sent_message_port_ids(sent_message_ports.size());
+ for (size_t i = 0; i < sent_message_ports.size(); ++i) {
+ DCHECK(!sent_message_ports[i].send_messages_as_values);
+ sent_message_port_ids[i] = sent_message_ports[i].id;
+ }
Send(new AwMessagePortMsg_WebToAppMessage(
route_id_,
msg_port_route_id, // same as the port id
diff --git a/android_webview/browser/aw_message_port_message_filter.h b/android_webview/browser/aw_message_port_message_filter.h
index 061dabb..4dfeed6 100644
--- a/android_webview/browser/aw_message_port_message_filter.h
+++ b/android_webview/browser/aw_message_port_message_filter.h
@@ -29,9 +29,11 @@ class AwMessagePortMessageFilter : public content::BrowserMessageFilter,
void SendClosePortMessage(int message_port_id);
// MessagePortDelegate implementation.
- void SendMessage(int msg_port_route_id,
- const content::MessagePortMessage& message,
- const std::vector<int>& sent_message_port_ids) override;
+ void SendMessage(
+ int msg_port_route_id,
+ const content::MessagePortMessage& message,
+ const std::vector<content::TransferredMessagePort>& sent_message_ports)
+ override;
void SendMessagesAreQueued(int route_id) override;
private:
friend class content::BrowserThread;
diff --git a/android_webview/native/aw_contents.cc b/android_webview/native/aw_contents.cc
index 8580478..e192656 100644
--- a/android_webview/native/aw_contents.cc
+++ b/android_webview/native/aw_contents.cc
@@ -60,6 +60,7 @@
#include "content/public/browser/render_process_host.h"
#include "content/public/browser/render_view_host.h"
#include "content/public/browser/web_contents.h"
+#include "content/public/common/message_port_types.h"
#include "content/public/common/renderer_preferences.h"
#include "content/public/common/ssl_status.h"
#include "jni/AwContents_jni.h"
@@ -1113,11 +1114,14 @@ void AwContents::PostMessageToFrame(JNIEnv* env, jobject obj,
base::Unretained(AwMessagePortServiceImpl::GetInstance()),
j_ports));
}
+ std::vector<content::TransferredMessagePort> ports(j_ports.size());
+ for (size_t i = 0; i < j_ports.size(); ++i)
+ ports[i].id = j_ports[i];
content::MessagePortProvider::PostMessageToFrame(web_contents_.get(),
source_origin,
j_target_origin,
j_message,
- j_ports);
+ ports);
}
scoped_refptr<AwMessagePortMessageFilter>