Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1193)

Unified Diff: content/common/view_messages.h

Issue 10827078: Support frame tree propagation between renderers in the same browsing instance. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixes based on more comments from Albert. Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/common/view_messages.h
diff --git a/content/common/view_messages.h b/content/common/view_messages.h
index 45b0c4b1cba7dc1ed302de40d064cbcea5abd60c..97e9b39198ca859c84f3921f8a22a38a7daee940 100644
--- a/content/common/view_messages.h
+++ b/content/common/view_messages.h
@@ -572,9 +572,16 @@ IPC_STRUCT_BEGIN(ViewMsg_PostMessage_Params)
// When sent to the browser, this is the routing ID of the source frame in
// the source process. The browser replaces it with the routing ID of the
- // equivalent (swapped out) frame in the destination process. Set to
- // MSG_ROUTING_NONE if the source frame isn't supported (e.g., subframes).
+ // equivalent (swapped out) frame in the destination process.
IPC_STRUCT_MEMBER(int, source_routing_id)
+ // The identifier of the source frame in the source process.
+ IPC_STRUCT_MEMBER(int, source_frame_id)
+
+ // The full set of identifiers to uniquely descirbe the target frame. See
Charlie Reis 2012/08/22 22:08:34 nit: describe
nasko 2012/08/23 21:55:53 Done.
+ // the comment on ViewMsg_FrameTreeUpdated for details.
+ IPC_STRUCT_MEMBER(int, target_process_id)
+ IPC_STRUCT_MEMBER(int, target_routing_id)
+ IPC_STRUCT_MEMBER(int, target_frame_id)
// The origin of the source frame.
IPC_STRUCT_MEMBER(string16, source_origin)
@@ -1038,6 +1045,19 @@ IPC_MESSAGE_ROUTED4(ViewMsg_ScriptEvalRequest,
IPC_MESSAGE_ROUTED1(ViewMsg_PostMessageEvent,
ViewMsg_PostMessage_Params)
+// Sends a JSON serialized frame tree to render processes along with the
+// process id and route id of the source renderer.
+//
+// This message must be send to swapped out renderers every time the browser
Charlie Reis 2012/08/22 22:08:34 nit: send -> sent
nasko 2012/08/23 21:55:53 Done.
+// receives a ViewHostMsg_FrameTreeUpdated message.
+//
+
+
Charlie Reis 2012/08/22 22:08:34 nit: Remove blank lines.
nasko 2012/08/23 21:55:53 Done.
+IPC_MESSAGE_ROUTED3(ViewMsg_UpdateFrameTree,
+ int, /* the child process id of the active renderer */
+ int, /* route_id of the active renderer */
+ std::string /* json encoded frame tree */)
+
// Request for the renderer to evaluate an xpath to a frame and insert css
// into that frame's document. See ViewMsg_ScriptEvalRequest for details on
// allowed xpath expressions.
@@ -2192,3 +2212,33 @@ IPC_MESSAGE_ROUTED3(ViewHostMsg_PepperPluginHung,
// Screen was rotated. Dispatched to the onorientationchange javascript API.
IPC_MESSAGE_ROUTED1(ViewMsg_OrientationChangeEvent,
int /* orientation */)
+
+// Chrome allows JavaScript calls to be routed across process boundaries. To
+// achive this, each active renderer in the source process has a swapped out
Charlie Reis 2012/08/22 22:08:34 nit: achieve nit: renderer -> RenderView (Same bel
nasko 2012/08/23 21:55:53 Done.
+// mirror in the destination process. The active renderer and its mirror need to
Charlie Reis 2012/08/22 22:08:34 Hmm, we haven't been using this "mirror" term befo
nasko 2012/08/23 21:55:53 Done.
+// have identical frame tree structure, so calls originating and targeting
+// subframes can be routed properly. This is achieved by each active renderer
+// sending a ViewHostMsg_FrameTreeUpdated message to the browser, which in turn
+// sends the update to the corresponding mirror renderers through the
+// ViewMsg_UpdateFrameTree.
Charlie Reis 2012/08/22 22:08:34 This is a great explanation. Since we say they "n
nasko 2012/08/23 21:55:53 Done.
+//
+// When routing JavaScript calls across processes, the destination information
+// is kept in the renderer process instead of the browser process. This design
+// was chosen because frame ids are allocated by the renderer process. If the
+// browser was to keep a mapping of the frame ids across processes, it will
Charlie Reis 2012/08/22 22:08:34 nit: will -> would
nasko 2012/08/23 21:55:53 Done.
+// require an extra IPC message with the newly allocated frame ids, as a
+// response to this particular message.
+//
+// The frame tree for a renderer is serialized to JSON, so it can be sent to
+// the browser process. Each node in the tree is a DictionaryValue with three
+// properties:
awong 2012/08/22 22:25:47 Since this is JSON, I'd define this in terms of JS
nasko 2012/08/23 21:55:53 Done.
+// * id - the frame identifier in this renderer
+// * name - the name of the frame, if one has been assigned
+// * subtree - a list of DictionaryValue objects for each frame that is
Charlie Reis 2012/08/22 22:08:34 nit: that is a direct child
nasko 2012/08/23 21:55:53 Done.
+// direct child of the current frame. This property can be omitted if
+// there are no direct child frames, so less data is transferred.
+//
+// This message must be sent on any events that modify the tree structure or
+// the names of any frames.
+IPC_MESSAGE_ROUTED1(ViewHostMsg_FrameTreeUpdated,
+ std::string /* json encoded frame tree */)

Powered by Google App Engine
This is Rietveld 408576698