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

Side by Side Diff: content/browser/frame_host/render_frame_host_manager.cc

Issue 2753093002: Ensure that with PlzNavigate, reloads after process crash display the RenderView. (Closed)
Patch Set: nit Created 3 years, 9 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 unified diff | Download patch
« no previous file with comments | « content/browser/frame_host/render_frame_host_manager.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/frame_host/render_frame_host_manager.h" 5 #include "content/browser/frame_host/render_frame_host_manager.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <string> 10 #include <string>
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after
238 GetNavigatingWebUI()->RenderFrameCreated(dest_render_frame_host); 238 GetNavigatingWebUI()->RenderFrameCreated(dest_render_frame_host);
239 } 239 }
240 240
241 // Now that we've created a new renderer, be sure to hide it if it isn't 241 // Now that we've created a new renderer, be sure to hide it if it isn't
242 // our primary one. Otherwise, we might crash if we try to call Show() 242 // our primary one. Otherwise, we might crash if we try to call Show()
243 // on it later. 243 // on it later.
244 if (dest_render_frame_host != render_frame_host_.get()) { 244 if (dest_render_frame_host != render_frame_host_.get()) {
245 if (dest_render_frame_host->GetView()) 245 if (dest_render_frame_host->GetView())
246 dest_render_frame_host->GetView()->Hide(); 246 dest_render_frame_host->GetView()->Hide();
247 } else { 247 } else {
248 // After a renderer crash we'd have marked the host as invisible, so we 248 EnsureRenderFrameHostVisibilityConsistent();
249 // need to set the visibility of the new View to the correct value here
250 // after reload.
251 if (dest_render_frame_host->GetView() &&
252 dest_render_frame_host->render_view_host()
253 ->GetWidget()
254 ->is_hidden() != delegate_->IsHidden()) {
255 if (delegate_->IsHidden()) {
256 dest_render_frame_host->GetView()->Hide();
257 } else {
258 dest_render_frame_host->GetView()->Show();
259 }
260 }
261 249
262 // TODO(nasko): This is a very ugly hack. The Chrome extensions process 250 // TODO(nasko): This is a very ugly hack. The Chrome extensions process
263 // manager still uses NotificationService and expects to see a 251 // manager still uses NotificationService and expects to see a
264 // RenderViewHost changed notification after WebContents and 252 // RenderViewHost changed notification after WebContents and
265 // RenderFrameHostManager are completely initialized. This should be 253 // RenderFrameHostManager are completely initialized. This should be
266 // removed once the process manager moves away from NotificationService. 254 // removed once the process manager moves away from NotificationService.
267 // See https://crbug.com/462682. 255 // See https://crbug.com/462682.
268 delegate_->NotifyMainFrameSwappedFromRenderManager( 256 delegate_->NotifyMainFrameSwappedFromRenderManager(
269 nullptr, render_frame_host_->render_view_host()); 257 nullptr, render_frame_host_->render_view_host());
270 } 258 }
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
454 442
455 void RenderFrameHostManager::CommitPendingIfNecessary( 443 void RenderFrameHostManager::CommitPendingIfNecessary(
456 RenderFrameHostImpl* render_frame_host, 444 RenderFrameHostImpl* render_frame_host,
457 bool was_caused_by_user_gesture) { 445 bool was_caused_by_user_gesture) {
458 if (!pending_render_frame_host_ && !speculative_render_frame_host_) { 446 if (!pending_render_frame_host_ && !speculative_render_frame_host_) {
459 // There's no pending/speculative RenderFrameHost so it must be that the 447 // There's no pending/speculative RenderFrameHost so it must be that the
460 // current renderer process completed a navigation. 448 // current renderer process completed a navigation.
461 449
462 // We should only hear this from our current renderer. 450 // We should only hear this from our current renderer.
463 DCHECK_EQ(render_frame_host_.get(), render_frame_host); 451 DCHECK_EQ(render_frame_host_.get(), render_frame_host);
452 EnsureRenderFrameHostVisibilityConsistent();
464 453
465 // If the current RenderFrameHost has a pending WebUI it must be committed. 454 // If the current RenderFrameHost has a pending WebUI it must be committed.
466 // Note: When one tries to move same-site commit logic into RenderFrameHost 455 // Note: When one tries to move same-site commit logic into RenderFrameHost
467 // itself, mind that the focus setting logic inside CommitPending also needs 456 // itself, mind that the focus setting logic inside CommitPending also needs
468 // to be moved there. 457 // to be moved there.
469 if (render_frame_host_->pending_web_ui()) 458 if (render_frame_host_->pending_web_ui())
470 CommitPendingWebUI(); 459 CommitPendingWebUI();
471 return; 460 return;
472 } 461 }
473 462
(...skipping 2326 matching lines...) Expand 10 before | Expand all | Expand 10 after
2800 if (!IsRendererTransferNeededForNavigation(render_frame_host_.get(), 2789 if (!IsRendererTransferNeededForNavigation(render_frame_host_.get(),
2801 resolved_url)) { 2790 resolved_url)) {
2802 DCHECK(!dest_instance || 2791 DCHECK(!dest_instance ||
2803 dest_instance == render_frame_host_->GetSiteInstance()); 2792 dest_instance == render_frame_host_->GetSiteInstance());
2804 return false; 2793 return false;
2805 } 2794 }
2806 2795
2807 return true; 2796 return true;
2808 } 2797 }
2809 2798
2799 void RenderFrameHostManager::EnsureRenderFrameHostVisibilityConsistent() {
2800 if (render_frame_host_->GetView() &&
2801 render_frame_host_->render_view_host()->GetWidget()->is_hidden() !=
2802 delegate_->IsHidden()) {
2803 if (delegate_->IsHidden()) {
2804 render_frame_host_->GetView()->Hide();
2805 } else {
2806 render_frame_host_->GetView()->Show();
2807 }
2808 }
2809 }
2810
2810 } // namespace content 2811 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/frame_host/render_frame_host_manager.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698