mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-06-05 21:39:12 +02:00
Move message routing from CefBrowser to CefFrame (see issue #2498).
This change moves the SendProcessMessage method from CefBrowser to CefFrame and adds CefBrowser parameters to OnProcessMessageReceived and OnDraggableRegionsChanged. The internal implementation has changed as follows: - Frame IDs are now a 64-bit combination of the 32-bit render_process_id and render_routing_id values that uniquely identify a RenderFrameHost (RFH). - CefFrameHostImpl objects are now managed by CefBrowserInfo with life span tied to RFH expectations. Specifically, a CefFrameHostImpl object representing a sub-frame will be created when a RenderFrame is created in the renderer process and detached when the associated RenderFrame is deleted or the renderer process in which it runs has died. - The CefFrameHostImpl object representing the main frame will always be valid but the underlying RFH (and associated frame ID) may change over time as a result of cross-origin navigations. Despite these changes calling LoadURL on the main frame object in the browser process will always navigate as expected. - Speculative RFHs, which may be created as a result of a cross-origin navigation and discarded if that navigation is not committed, are now handled correctly (e.g. ignored in most cases until they're committed). - It is less likely, but still possible, to receive a CefFrame object with an invalid frame ID (ID < 0). This can happen in cases where a RFH has not yet been created for a sub-frame. For example, when OnBeforeBrowse is called before initiating navigation in a previously nonexisting sub-frame. To test: All tests pass with NetworkService enabled and disabled.
This commit is contained in:
@@ -51,9 +51,6 @@ IPC_STRUCT_BEGIN(Cef_Request_Params)
|
||||
// Unique request id to match requests and responses.
|
||||
IPC_STRUCT_MEMBER(int, request_id)
|
||||
|
||||
// Unique id of the target frame. -1 if unknown / invalid.
|
||||
IPC_STRUCT_MEMBER(int64_t, frame_id)
|
||||
|
||||
// True if the request is user-initiated instead of internal.
|
||||
IPC_STRUCT_MEMBER(bool, user_initiated)
|
||||
|
||||
@@ -112,10 +109,6 @@ IPC_STRUCT_BEGIN(CefMsg_LoadRequest_Params)
|
||||
// One of the cef_referrer_policy_t values.
|
||||
IPC_STRUCT_MEMBER(int, referrer_policy)
|
||||
|
||||
// Identifies the frame within the RenderView that sent the request.
|
||||
// -1 if unknown / invalid.
|
||||
IPC_STRUCT_MEMBER(int64_t, frame_id)
|
||||
|
||||
// Usually the URL of the document in the top-level window, which may be
|
||||
// checked by the third-party cookie blocking policy. Leaving it empty may
|
||||
// lead to undesired cookie blocking. Third-party cookie blocking can be
|
||||
@@ -197,20 +190,15 @@ IPC_SYNC_MESSAGE_CONTROL1_1(
|
||||
int /* render_frame_routing_id */,
|
||||
CefProcessHostMsg_GetNewBrowserInfo_Params /* params*/)
|
||||
|
||||
// Sent when a frame is identified for the first time.
|
||||
IPC_MESSAGE_ROUTED3(CefHostMsg_FrameIdentified,
|
||||
int64_t /* frame_id */,
|
||||
int64_t /* parent_frame_id */,
|
||||
base::string16 /* frame_name */)
|
||||
// Sent by the renderer when the frame can begin receiving messages.
|
||||
IPC_MESSAGE_ROUTED0(CefHostMsg_FrameAttached)
|
||||
|
||||
// Sent by the renderer when the frame becomes focused.
|
||||
IPC_MESSAGE_ROUTED0(CefHostMsg_FrameFocused)
|
||||
|
||||
// Sent when a frame has finished loading. Based on ViewHostMsg_DidFinishLoad.
|
||||
IPC_MESSAGE_ROUTED4(CefHostMsg_DidFinishLoad,
|
||||
int64_t /* frame_id */,
|
||||
IPC_MESSAGE_ROUTED2(CefHostMsg_DidFinishLoad,
|
||||
GURL /* validated_url */,
|
||||
bool /* is_main_frame */,
|
||||
int /* http_status_code */)
|
||||
|
||||
// Sent when the renderer has a request for the browser. The browser may respond
|
||||
|
Reference in New Issue
Block a user