diff options
author | mek <mek@chromium.org> | 2015-02-27 18:38:06 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-02-28 02:38:58 +0000 |
commit | 5b679c9db20587c78e9bf7c076edd7584413cc3b (patch) | |
tree | 1d8a97fe714ab4ea33f8dd0644574495676d2778 /android_webview | |
parent | baef455a5396790ec8e34fa66c96c42f22f831be (diff) | |
download | chromium_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.cc | 14 | ||||
-rw-r--r-- | android_webview/browser/aw_message_port_message_filter.h | 8 | ||||
-rw-r--r-- | android_webview/native/aw_contents.cc | 6 |
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> |