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

Side by Side Diff: content/browser/renderer_host/render_view_host_impl.cc

Issue 464593003: Don't swap out the old RenderFrameHost until the new one commits. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Major rebase Created 6 years, 4 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/renderer_host/render_view_host_impl.h" 5 #include "content/browser/renderer_host/render_view_host_impl.h"
6 6
7 #include <set> 7 #include <set>
8 #include <string> 8 #include <string>
9 #include <utility> 9 #include <utility>
10 #include <vector> 10 #include <vector>
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 132
133 // static 133 // static
134 const int RenderViewHostImpl::kUnloadTimeoutMS = 1000; 134 const int RenderViewHostImpl::kUnloadTimeoutMS = 1000;
135 135
136 /////////////////////////////////////////////////////////////////////////////// 136 ///////////////////////////////////////////////////////////////////////////////
137 // RenderViewHost, public: 137 // RenderViewHost, public:
138 138
139 // static 139 // static
140 bool RenderViewHostImpl::IsRVHStateActive(RenderViewHostImplState rvh_state) { 140 bool RenderViewHostImpl::IsRVHStateActive(RenderViewHostImplState rvh_state) {
141 if (rvh_state == STATE_DEFAULT || 141 if (rvh_state == STATE_DEFAULT ||
142 rvh_state == STATE_WAITING_FOR_UNLOAD_ACK ||
143 rvh_state == STATE_WAITING_FOR_COMMIT ||
144 rvh_state == STATE_WAITING_FOR_CLOSE) 142 rvh_state == STATE_WAITING_FOR_CLOSE)
145 return true; 143 return true;
146 return false; 144 return false;
147 } 145 }
148 146
149 // static 147 // static
150 RenderViewHost* RenderViewHost::FromID(int render_process_id, 148 RenderViewHost* RenderViewHost::FromID(int render_process_id,
151 int render_view_id) { 149 int render_view_id) {
152 return RenderViewHostImpl::FromID(render_process_id, render_view_id); 150 return RenderViewHostImpl::FromID(render_process_id, render_view_id);
153 } 151 }
(...skipping 379 matching lines...) Expand 10 before | Expand all | Expand 10 after
533 // Log a histogram point to help us diagnose how many of those kills 531 // Log a histogram point to help us diagnose how many of those kills
534 // we have performed. 1 is the enum value for RendererType Normal for 532 // we have performed. 1 is the enum value for RendererType Normal for
535 // the histogram. 533 // the histogram.
536 UMA_HISTOGRAM_PERCENTAGE( 534 UMA_HISTOGRAM_PERCENTAGE(
537 "BrowserRenderProcessHost.ChildKillsUnresponsive", 1); 535 "BrowserRenderProcessHost.ChildKillsUnresponsive", 1);
538 } 536 }
539 } 537 }
540 } 538 }
541 539
542 switch (rvh_state_) { 540 switch (rvh_state_) {
543 case STATE_WAITING_FOR_UNLOAD_ACK:
544 SetState(STATE_WAITING_FOR_COMMIT);
545 break;
546 case STATE_PENDING_SWAP_OUT: 541 case STATE_PENDING_SWAP_OUT:
547 SetState(STATE_SWAPPED_OUT); 542 SetState(STATE_SWAPPED_OUT);
548 break; 543 break;
549 case STATE_PENDING_SHUTDOWN: 544 case STATE_PENDING_SHUTDOWN:
550 DCHECK(!pending_shutdown_on_swap_out_.is_null()); 545 DCHECK(!pending_shutdown_on_swap_out_.is_null());
551 pending_shutdown_on_swap_out_.Run(); 546 pending_shutdown_on_swap_out_.Run();
552 break; 547 break;
553 default: 548 default:
554 NOTREACHED(); 549 NOTREACHED();
555 } 550 }
556 } 551 }
557 552
558 void RenderViewHostImpl::WasSwappedOut(
559 const base::Closure& pending_delete_on_swap_out) {
560 Send(new ViewMsg_WasSwappedOut(GetRoutingID()));
561 if (rvh_state_ == STATE_WAITING_FOR_UNLOAD_ACK) {
562 SetState(STATE_PENDING_SWAP_OUT);
563 if (!instance_->active_view_count())
564 SetPendingShutdown(pending_delete_on_swap_out);
565 } else if (rvh_state_ == STATE_WAITING_FOR_COMMIT) {
566 SetState(STATE_SWAPPED_OUT);
567 } else if (rvh_state_ == STATE_DEFAULT) {
568 // When the RenderView is not live, the RenderFrameHostManager will call
569 // CommitPending directly, without calling SwapOut on the old RVH. This will
570 // cause WasSwappedOut to be called directly on the live old RVH.
571 DCHECK(!IsRenderViewLive());
572 SetState(STATE_SWAPPED_OUT);
573 } else {
574 NOTREACHED();
575 }
576 }
577
578 void RenderViewHostImpl::SetPendingShutdown(const base::Closure& on_swap_out) { 553 void RenderViewHostImpl::SetPendingShutdown(const base::Closure& on_swap_out) {
579 pending_shutdown_on_swap_out_ = on_swap_out; 554 pending_shutdown_on_swap_out_ = on_swap_out;
580 SetState(STATE_PENDING_SHUTDOWN); 555 SetState(STATE_PENDING_SHUTDOWN);
581 } 556 }
582 557
583 void RenderViewHostImpl::ClosePage() { 558 void RenderViewHostImpl::ClosePage() {
584 SetState(STATE_WAITING_FOR_CLOSE); 559 SetState(STATE_WAITING_FOR_CLOSE);
585 StartHangMonitorTimeout(TimeDelta::FromMilliseconds(kUnloadTimeoutMS)); 560 StartHangMonitorTimeout(TimeDelta::FromMilliseconds(kUnloadTimeoutMS));
586 561
587 if (IsRenderViewLive()) { 562 if (IsRenderViewLive()) {
(...skipping 772 matching lines...) Expand 10 before | Expand all | Expand 10 after
1360 void RenderViewHostImpl::DidSelectPopupMenuItem(int selected_index) { 1335 void RenderViewHostImpl::DidSelectPopupMenuItem(int selected_index) {
1361 Send(new ViewMsg_SelectPopupMenuItem(GetRoutingID(), selected_index)); 1336 Send(new ViewMsg_SelectPopupMenuItem(GetRoutingID(), selected_index));
1362 } 1337 }
1363 1338
1364 void RenderViewHostImpl::DidCancelPopupMenu() { 1339 void RenderViewHostImpl::DidCancelPopupMenu() {
1365 Send(new ViewMsg_SelectPopupMenuItem(GetRoutingID(), -1)); 1340 Send(new ViewMsg_SelectPopupMenuItem(GetRoutingID(), -1));
1366 } 1341 }
1367 #endif 1342 #endif
1368 1343
1369 bool RenderViewHostImpl::IsWaitingForUnloadACK() const { 1344 bool RenderViewHostImpl::IsWaitingForUnloadACK() const {
1370 return rvh_state_ == STATE_WAITING_FOR_UNLOAD_ACK || 1345 return rvh_state_ == STATE_WAITING_FOR_CLOSE ||
1371 rvh_state_ == STATE_WAITING_FOR_CLOSE ||
1372 rvh_state_ == STATE_PENDING_SHUTDOWN || 1346 rvh_state_ == STATE_PENDING_SHUTDOWN ||
1373 rvh_state_ == STATE_PENDING_SWAP_OUT; 1347 rvh_state_ == STATE_PENDING_SWAP_OUT;
1374 } 1348 }
1375 1349
1376 void RenderViewHostImpl::OnTextSurroundingSelectionResponse( 1350 void RenderViewHostImpl::OnTextSurroundingSelectionResponse(
1377 const base::string16& content, 1351 const base::string16& content,
1378 size_t start_offset, 1352 size_t start_offset,
1379 size_t end_offset) { 1353 size_t end_offset) {
1380 if (!view_) 1354 if (!view_)
1381 return; 1355 return;
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after
1568 FrameTree* frame_tree = delegate_->GetFrameTree(); 1542 FrameTree* frame_tree = delegate_->GetFrameTree();
1569 1543
1570 frame_tree->ResetForMainFrameSwap(); 1544 frame_tree->ResetForMainFrameSwap();
1571 } 1545 }
1572 1546
1573 void RenderViewHostImpl::SelectWordAroundCaret() { 1547 void RenderViewHostImpl::SelectWordAroundCaret() {
1574 Send(new ViewMsg_SelectWordAroundCaret(GetRoutingID())); 1548 Send(new ViewMsg_SelectWordAroundCaret(GetRoutingID()));
1575 } 1549 }
1576 1550
1577 } // namespace content 1551 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698