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

Unified Diff: content/browser/web_contents/web_contents_impl.cc

Issue 292363003: Always call WCO::RenderFrameCreated and WCO::RenderFrameDeleted (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Formatting fix Created 6 years, 7 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
« no previous file with comments | « content/browser/frame_host/render_frame_host_manager_unittest.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/web_contents/web_contents_impl.cc
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
index 595bdc10043e58d74b1db9de274e590c2316490e..d71f684961f4111dfd98e78e4c2d18a9122df7e7 100644
--- a/content/browser/web_contents/web_contents_impl.cc
+++ b/content/browser/web_contents/web_contents_impl.cc
@@ -211,30 +211,12 @@ bool ForEachFrameInternal(
return true;
}
-bool ForEachPendingFrameInternal(
- const base::Callback<void(RenderFrameHost*)>& on_frame,
- FrameTreeNode* node) {
- RenderFrameHost* pending_frame_host =
- node->render_manager()->pending_frame_host();
- if (pending_frame_host)
- on_frame.Run(pending_frame_host);
- return true;
-}
-
void SendToAllFramesInternal(IPC::Message* message, RenderFrameHost* rfh) {
IPC::Message* message_copy = new IPC::Message(*message);
message_copy->set_routing_id(rfh->GetRoutingID());
rfh->Send(message_copy);
}
-void RunRenderFrameDeleted(
- ObserverList<WebContentsObserver>* observer_list,
- RenderFrameHost* render_frame_host) {
- FOR_EACH_OBSERVER(WebContentsObserver,
- *observer_list,
- RenderFrameDeleted(render_frame_host));
-}
-
} // namespace
WebContents* WebContents::Create(const WebContents::CreateParams& params) {
@@ -400,23 +382,30 @@ WebContentsImpl::~WebContentsImpl() {
Source<WebContents>(this),
NotificationService::NoDetails());
- base::Callback<void(RenderFrameHost*)> run_render_frame_deleted_callback =
- base::Bind(&RunRenderFrameDeleted, base::Unretained(&observers_));
- frame_tree_.ForEach(base::Bind(&ForEachPendingFrameInternal,
- run_render_frame_deleted_callback));
+ // Destroy all frame tree nodes except for the root; this notifies observers.
+ frame_tree_.ResetForMainFrameSwap();
+ GetRenderManager()->ResetProxyHosts();
- RenderViewHost* pending_rvh = GetRenderManager()->pending_render_view_host();
- if (pending_rvh) {
+ // Manually call the observer methods for the root frame tree node.
+ RenderFrameHostManager* root = GetRenderManager();
+ if (root->pending_frame_host()) {
FOR_EACH_OBSERVER(WebContentsObserver,
observers_,
- RenderViewDeleted(pending_rvh));
+ RenderFrameDeleted(root->pending_frame_host()));
}
+ FOR_EACH_OBSERVER(WebContentsObserver,
+ observers_,
+ RenderFrameDeleted(root->current_frame_host()));
- ForEachFrame(run_render_frame_deleted_callback);
+ if (root->pending_render_view_host()) {
+ FOR_EACH_OBSERVER(WebContentsObserver,
+ observers_,
+ RenderViewDeleted(root->pending_render_view_host()));
+ }
FOR_EACH_OBSERVER(WebContentsObserver,
observers_,
- RenderViewDeleted(GetRenderManager()->current_host()));
+ RenderViewDeleted(root->current_host()));
FOR_EACH_OBSERVER(WebContentsObserver,
observers_,
« no previous file with comments | « content/browser/frame_host/render_frame_host_manager_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698