Index: content/renderer/render_view_impl.h |
diff --git a/content/renderer/render_view_impl.h b/content/renderer/render_view_impl.h |
index fd2083259b4b961c433c486cafbeec2ebcfa5883..5921735d9f7675c99d58853dbcaf0c2c003784d6 100644 |
--- a/content/renderer/render_view_impl.h |
+++ b/content/renderer/render_view_impl.h |
@@ -18,6 +18,7 @@ |
#include "base/memory/weak_ptr.h" |
#include "base/observer_list.h" |
#include "base/timer.h" |
+#include "base/values.h" |
#include "build/build_config.h" |
#include "content/common/content_export.h" |
#include "content/common/edit_command.h" |
@@ -542,6 +543,8 @@ class RenderViewImpl : public RenderWidget, |
WebKit::WebFrame* frame, |
WebKit::WebApplicationCacheHostClient* client); |
virtual WebKit::WebCookieJar* cookieJar(WebKit::WebFrame* frame); |
+ virtual void didCreateFrame(WebKit::WebFrame* parent, |
+ WebKit::WebFrame* child); |
virtual void frameDetached(WebKit::WebFrame* frame); |
virtual void willClose(WebKit::WebFrame* frame); |
virtual void loadURLExternally(WebKit::WebFrame* frame, |
@@ -680,7 +683,8 @@ class RenderViewImpl : public RenderWidget, |
virtual void willOpenSocketStream( |
WebKit::WebSocketStreamHandle* handle); |
virtual bool willCheckAndDispatchMessageEvent( |
- WebKit::WebFrame* source, |
+ WebKit::WebFrame* sourceFrame, |
+ WebKit::WebFrame* targetFrame, |
WebKit::WebSecurityOrigin targetOrigin, |
WebKit::WebDOMMessageEvent event) OVERRIDE; |
virtual WebKit::WebString userAgentOverride( |
@@ -1043,6 +1047,10 @@ class RenderViewImpl : public RenderWidget, |
void OnJavaBridgeInit(); |
+ void OnUpdatedFrameTree(int process_id, |
+ int route_id, |
+ const std::string& frame_tree); |
+ |
// Adding a new message handler? Please add it in alphabetical order above |
// and put it in the same position in the .cc file. |
@@ -1060,6 +1068,27 @@ class RenderViewImpl : public RenderWidget, |
WebKit::WebGraphicsContext3D* CreateGraphicsContext3D( |
const WebKit::WebGraphicsContext3D::Attributes& attributes); |
+ // This method walks the entire frame tree for this RenderView and sends an |
+ // update to the browser process as described in the |
+ // ViewHostMsg_FrameTreeUpdated comments. If |exclude_frame_subtree| |
+ // frame is non-NULL, the subtree starting at that frame not included in the |
+ // serialized form. |
+ // This is used when a frame is going to be removed from the tree. |
+ void SendUpdatedFrameTree(WebKit::WebFrame* exclude_frame_subtree); |
+ |
+ // Recursively creates a DOM frame tree starting with |frame|, based on |
+ // |frame_tree|. For each node, the frame is navigated to the swapped out URL, |
+ // the name (if present) is set on it, and all the subframes are created |
+ // and added to the DOM. |
+ void CreateFrameTree(WebKit::WebFrame* frame, DictionaryValue* frame_tree); |
+ |
+ // If this is a swapped out RenderView, which maintains a copy of the frame |
+ // tree of an active RenderView, we keep a map from frame ids in this view to |
+ // the frame ids of the active view for each corresponding frame. |
+ // This method uses the map to find the frame in this RenderView that |
+ // corresponds to the frame in the active RenderView specified by |frame_id|. |
+ WebKit::WebFrame* GetFrameByMappedID(int frame_id); |
+ |
void EnsureMediaStreamImpl(); |
// This callback is triggered when DownloadFavicon completes, either |
@@ -1108,7 +1137,7 @@ class RenderViewImpl : public RenderWidget, |
bool replace); |
// Make this RenderView show an empty, unscriptable page. |
- void NavigateToSwappedOutURL(); |
+ void NavigateToSwappedOutURL(WebKit::WebFrame* frame); |
// If we initiated a navigation, this function will populate |document_state| |
// with the navigation information saved in OnNavigate(). |
@@ -1472,6 +1501,34 @@ class RenderViewImpl : public RenderWidget, |
// before the guest_to_embedder_channel was ready. |
WebKit::WebGraphicsContext3D::Attributes guest_attributes_; |
+ // Boolean indicating whether we are in the process of creating the frame |
+ // tree for this renderer in response to ViewMsg_UpdateFrameTree. If true, |
+ // we won't be sending ViewHostMsg_FrameTreeUpdated messages back to the |
+ // browser, as those will be redundant. |
+ bool updating_frame_tree_; |
+ |
+ // Boolean indicating that the frame tree has changed, but a message has not |
+ // been sent to the browser because a page has been loading. This helps |
+ // avoid extra messages being sent to the browser when navigating away from a |
+ // page with subframes, which will be destroyed. Instead, a single message |
+ // is sent when the load is stopped with the final state of the frame tree. |
+ // |
+ // TODO(nasko): Relying on the is_loading_ means that frame tree updates will |
+ // not be sent until *all* subframes have completed loading. This can cause |
+ // JavaScript calls to fail, if they occur prior to the first update message |
+ // being sent. This will be fixed by bug http://crbug.com/145014. |
+ bool pending_frame_tree_update_; |
+ |
+ // If this render view is a swapped out "mirror" of an active render view in a |
+ // different process, we record the process id and route id for the active RV. |
+ // For further details, see the comments on ViewHostMsg_FrameTreeUpdated. |
+ int target_process_id_; |
+ int target_routing_id_; |
+ |
+ // A map of the current process's frame ids to ids in the remote active render |
+ // view, if this is a swapped out render view. |
+ std::map<int, int> active_frame_id_map_; |
+ |
// NOTE: pepper_delegate_ should be last member because its constructor calls |
// AddObservers method of RenderViewImpl from c-tor. |
content::PepperPluginDelegateImpl pepper_delegate_; |