summaryrefslogtreecommitdiffstats
path: root/android_webview/common/aw_message_port_messages.h
blob: 6b98023a45b0ef43be55c11a0c2471e97d608b07 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
// 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 <vector>

#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<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 */)

// 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<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 */)

// Response to AwMessagePortMsg_ClosePort
IPC_MESSAGE_ROUTED1(AwMessagePortHostMsg_ClosePortAck,
                    int /* message port id */)