Index: android_webview/common/aw_message_port_messages.h |
diff --git a/android_webview/common/aw_message_port_messages.h b/android_webview/common/aw_message_port_messages.h |
index 866d713d1418feb805202c665bc38d1f86569887..00ec171a7d7f38edb5b7e2c149ee1ed0258f051b 100644 |
--- a/android_webview/common/aw_message_port_messages.h |
+++ b/android_webview/common/aw_message_port_messages.h |
@@ -14,10 +14,46 @@ |
// MessagePort messages |
// These are messages sent from the browser to the renderer process. |
-// Tells the renderer to convert the sent message from a WebSerializeScript |
-// format to a base::ListValue. Due to the complexities of renderer/browser |
-// relation, this can only be done in renderer for now. |
-IPC_MESSAGE_ROUTED3(AwMessagePortMsg_Message, |
+// Normally the postmessages are exchanged between the renderers and the message |
+// itself is opaque to the browser process. The format of the message is a |
+// WebSerializesScriptValue. A WebSerializedScriptValue is a blink structure |
+// and can only be serialized/deserialized in renderer. Further, we could not |
+// have Blink or V8 on the browser side due to their relience on static |
+// variables. |
+// |
+// For posting messages from Java (Webview) to JS, we pass the browser/renderer |
+// boundary an extra time and convert the messages to a type that browser can |
+// use. Since WebView is single-process this is not terribly expensive, but |
+// if we can do the conversion at the browser, then we can drop this code. |
+ |
+// Important Note about multi-process situation: Webview is single process so |
+// such a conversion does not increase the risk due to untrusted renderers. |
+// However, in a multi-process scenario, the renderer that does the conversion |
+// can be different then the renderer that receives the message. There are |
+// 2 possible solutions to deal with this: |
+// 1. Do the conversion at the browser side by writing a new serializer |
+// deserializer for WebSerializedScriptValue |
+// 2. Do the conversion at the content layer, at the renderer at the time of |
+// receiveing the message. This may need adding new flags to indicate that |
+// message needs to be converted. However, this is complicated due to queing |
+// at the browser side and possibility of ports being shipped to a different |
+// renderer or browser delegate. |
+ |
+ |
+// Tells the renderer to convert the message from a WebSerializeScript |
+// format to a base::ListValue. This IPC is used for messages that are |
+// incoming to Android webview from JS. |
+IPC_MESSAGE_ROUTED3(AwMessagePortMsg_WebToAppMessage, |
+ int /* recipient message port id */, |
+ base::string16 /* message */, |
+ std::vector<int> /* sent message port_ids */) |
+ |
+// Tells the renderer to convert the message from a String16 |
+// format to a WebSerializedScriptValue. This IPC is used for messages that |
+// are outgoing from Webview to JS. |
+// TODO(sgurun) when we start supporting other types, use a ListValue instead |
+// of string16 |
+IPC_MESSAGE_ROUTED3(AwMessagePortMsg_AppToWebMessage, |
int /* recipient message port id */, |
base::string16 /* message */, |
std::vector<int> /* sent message port_ids */) |
@@ -25,8 +61,14 @@ IPC_MESSAGE_ROUTED3(AwMessagePortMsg_Message, |
//----------------------------------------------------------------------------- |
// These are messages sent from the renderer to the browser process. |
-// Response to AwMessagePortMessage_ConvertMessage |
-IPC_MESSAGE_ROUTED3(AwMessagePortHostMsg_ConvertedMessage, |
+// Response to AwMessagePortMessage_WebToAppMessage |
+IPC_MESSAGE_ROUTED3(AwMessagePortHostMsg_ConvertedWebToAppMessage, |
int /* recipient message port id */, |
base::ListValue /* converted message */, |
std::vector<int> /* sent message port_ids */) |
+ |
+// Response to AwMessagePortMessage_AppToWebMessage |
+IPC_MESSAGE_ROUTED3(AwMessagePortHostMsg_ConvertedAppToWebMessage, |
+ int /* recipient message port id */, |
+ base::string16 /* converted message */, |
+ std::vector<int> /* sent message port_ids */) |