// Copyright 2015 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // Multiply-included file, no traditional include guard. #include #include "ipc/ipc_message_macros.h" #define IPC_MESSAGE_START AwMessagePortMsgStart //----------------------------------------------------------------------------- // MessagePort messages // These are messages sent from the browser to the renderer process. // 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 /* 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 /* sent message port_ids */) // Used to defer message port closing until after all in-flight messages // are flushed from renderer to browser. Renderer piggy-backs the message // to browser. IPC_MESSAGE_ROUTED1(AwMessagePortMsg_ClosePort, int /* message port id */) //----------------------------------------------------------------------------- // These are messages sent from the renderer to the browser process. // Response to AwMessagePortMessage_WebToAppMessage IPC_MESSAGE_ROUTED3(AwMessagePortHostMsg_ConvertedWebToAppMessage, int /* recipient message port id */, base::ListValue /* converted message */, std::vector /* sent message port_ids */) // Response to AwMessagePortMessage_AppToWebMessage IPC_MESSAGE_ROUTED3(AwMessagePortHostMsg_ConvertedAppToWebMessage, int /* recipient message port id */, base::string16 /* converted message */, std::vector /* sent message port_ids */) // Response to AwMessagePortMsg_ClosePort IPC_MESSAGE_ROUTED1(AwMessagePortHostMsg_ClosePortAck, int /* message port id */)