Chromium Code Reviews| 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 84565a2f99f77119f61048fdf2fa74dd51a129b7..94fd4b63e979f1ab1b5ebd24a3dac7bfdc8e077d 100644 |
| --- a/content/browser/web_contents/web_contents_impl.cc |
| +++ b/content/browser/web_contents/web_contents_impl.cc |
| @@ -408,14 +408,10 @@ WebContentsImpl::~WebContentsImpl() { |
| // Manually call the observer methods for the root frame tree node. |
| RenderFrameHostManager* root = GetRenderManager(); |
| - if (root->pending_frame_host()) { |
| - FOR_EACH_OBSERVER(WebContentsObserver, |
| - observers_, |
| - RenderFrameDeleted(root->pending_frame_host())); |
| - } |
| - FOR_EACH_OBSERVER(WebContentsObserver, |
| - observers_, |
| - RenderFrameDeleted(root->current_frame_host())); |
| + |
| + if (root->pending_frame_host()) |
| + root->pending_frame_host()->SetRenderFrameCreated(false); |
| + root->current_frame_host()->SetRenderFrameCreated(false); |
| if (root->pending_render_view_host()) { |
| FOR_EACH_OBSERVER(WebContentsObserver, |
| @@ -505,9 +501,12 @@ bool WebContentsImpl::OnMessageReceived(RenderViewHost* render_view_host, |
| ObserverListBase<WebContentsObserver>::Iterator it(observers_); |
| WebContentsObserver* observer; |
| if (render_frame_host) { |
| - while ((observer = it.GetNext()) != NULL) |
| - if (observer->OnMessageReceived(message, render_frame_host)) |
| - return true; |
| + if (!static_cast<RenderFrameHostImpl*>(render_frame_host) |
| + ->is_swapped_out()) { |
|
Charlie Reis
2015/02/12 00:29:31
I'm worried about regressions from this change. T
nasko
2015/02/12 17:52:26
Hmm, don't quite recall, but after all the followu
|
| + while ((observer = it.GetNext()) != NULL) |
| + if (observer->OnMessageReceived(message, render_frame_host)) |
| + return true; |
| + } |
| } else { |
| while ((observer = it.GetNext()) != NULL) |
| if (observer->OnMessageReceived(message)) |
| @@ -1266,6 +1265,14 @@ void WebContentsImpl::Init(const WebContents::CreateParams& params) { |
| for (size_t i = 0; i < g_created_callbacks.Get().size(); i++) |
| g_created_callbacks.Get().at(i).Run(this); |
| + |
| + // If the WebContents creation was renderer-initiated, it means that the |
| + // corresponding RenderView and main RenderFrame have already been created. |
|
Charlie Reis
2015/02/12 00:29:31
Wow. There are so many ways to create RenderFrame
nasko
2015/02/12 17:52:26
Acknowledged.
|
| + // Ensure observers are notified about this. |
| + if (params.renderer_created) { |
|
Charlie Reis
2015/02/12 00:29:31
Maybe params.renderer_initiated_creation?
nasko
2015/02/12 17:52:26
Done.
|
| + RenderViewCreated(GetRenderViewHost()); |
| + GetRenderManager()->current_frame_host()->SetRenderFrameCreated(true); |
| + } |
| } |
| void WebContentsImpl::OnWebContentsDestroyed(WebContentsImpl* web_contents) { |
| @@ -1584,6 +1591,7 @@ void WebContentsImpl::CreateNewWindow( |
| create_params.opener_suppressed = params.opener_suppressed; |
| if (params.disposition == NEW_BACKGROUND_TAB) |
| create_params.initially_hidden = true; |
| + create_params.renderer_created = true; |
| WebContentsImpl* new_contents = NULL; |
| if (!is_guest) { |
| @@ -1597,7 +1605,6 @@ void WebContentsImpl::CreateNewWindow( |
| new_contents->GetController().SetSessionStorageNamespace( |
| partition_id, |
| session_storage_namespace); |
| - new_contents->RenderViewCreated(new_contents->GetRenderViewHost()); |
| // Save the window for later if we're not suppressing the opener (since it |
| // will be shown immediately). |
| @@ -3649,14 +3656,6 @@ void WebContentsImpl::RenderViewCreated(RenderViewHost* render_view_host) { |
| FOR_EACH_OBSERVER( |
| WebContentsObserver, observers_, RenderViewCreated(render_view_host)); |
| - // We tell the observers now instead of when the main RenderFrameHostImpl is |
| - // constructed because otherwise it would be too early (i.e. IPCs sent to the |
| - // frame would be dropped because it's not created yet). |
| - RenderFrameHost* main_frame = render_view_host->GetMainFrame(); |
| - FOR_EACH_OBSERVER( |
| - WebContentsObserver, observers_, RenderFrameCreated(main_frame)); |
| - SetAccessibilityModeOnFrame(accessibility_mode_, main_frame); |
|
Charlie Reis
2015/02/12 00:29:31
Where does SetAccessibilityModeOnFrame get called
nasko
2015/02/12 17:52:26
WebContentsImpl::RenderFrameCreated has pretty muc
|
| - |
| DevToolsManager::GetInstance()->RenderViewCreated(this, render_view_host); |
| } |
| @@ -3690,10 +3689,6 @@ void WebContentsImpl::RenderViewReady(RenderViewHost* rvh) { |
| void WebContentsImpl::RenderViewTerminated(RenderViewHost* rvh, |
| base::TerminationStatus status, |
| int error_code) { |
| - // TODO(nasko): This isn't ideal; the termination process should be handled by |
| - // RenderFrameDeleted(). See http://crbug.com/455943. |
| - ClearPowerSaveBlockers(rvh->GetMainFrame()); |
|
Charlie Reis
2015/02/12 00:29:31
Just to confirm, we now get RenderFrameDeleted in
nasko
2015/02/12 17:52:26
Correct.
|
| - |
| if (rvh != GetRenderViewHost()) { |
| // The pending page's RenderViewHost is gone. |
| return; |