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

Side by Side Diff: content/renderer/render_frame_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: Rebase past PlzNavigate CL 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
« no previous file with comments | « content/content_browser.gypi ('k') | content/renderer/render_view_browsertest.cc » ('j') | 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/renderer/render_frame_impl.h" 5 #include "content/renderer/render_frame_impl.h"
6 6
7 #include <map> 7 #include <map>
8 #include <string> 8 #include <string>
9 9
10 #include "base/auto_reset.h" 10 #include "base/auto_reset.h"
(...skipping 982 matching lines...) Expand 10 before | Expand all | Expand 10 after
993 993
994 void RenderFrameImpl::OnSwapOut(int proxy_routing_id) { 994 void RenderFrameImpl::OnSwapOut(int proxy_routing_id) {
995 RenderFrameProxy* proxy = NULL; 995 RenderFrameProxy* proxy = NULL;
996 bool is_site_per_process = 996 bool is_site_per_process =
997 CommandLine::ForCurrentProcess()->HasSwitch(switches::kSitePerProcess); 997 CommandLine::ForCurrentProcess()->HasSwitch(switches::kSitePerProcess);
998 998
999 // Only run unload if we're not swapped out yet, but send the ack either way. 999 // Only run unload if we're not swapped out yet, but send the ack either way.
1000 if (!is_swapped_out_ || !render_view_->is_swapped_out_) { 1000 if (!is_swapped_out_ || !render_view_->is_swapped_out_) {
1001 // Swap this RenderFrame out so the frame can navigate to a page rendered by 1001 // Swap this RenderFrame out so the frame can navigate to a page rendered by
1002 // a different process. This involves running the unload handler and 1002 // a different process. This involves running the unload handler and
1003 // clearing the page. Once WasSwappedOut is called, we also allow this 1003 // clearing the page. We also allow this process to exit if there are no
1004 // process to exit if there are no other active RenderFrames in it. 1004 // other active RenderFrames in it.
1005 1005
1006 // Send an UpdateState message before we get swapped out. Create the 1006 // Send an UpdateState message before we get swapped out. Create the
1007 // RenderFrameProxy as well so its routing id is registered for receiving 1007 // RenderFrameProxy as well so its routing id is registered for receiving
1008 // IPC messages. 1008 // IPC messages.
1009 render_view_->SyncNavigationState(); 1009 render_view_->SyncNavigationState();
1010 proxy = RenderFrameProxy::CreateProxyToReplaceFrame(this, 1010 proxy = RenderFrameProxy::CreateProxyToReplaceFrame(this,
1011 proxy_routing_id); 1011 proxy_routing_id);
1012 1012
1013 // Synchronously run the unload handler before sending the ACK. 1013 // Synchronously run the unload handler before sending the ACK.
1014 // TODO(creis): Call dispatchUnloadEvent unconditionally here to support 1014 // TODO(creis): Call dispatchUnloadEvent unconditionally here to support
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
1067 if (frame_->parent()) { 1067 if (frame_->parent()) {
1068 frame_->swap(proxy->web_frame()); 1068 frame_->swap(proxy->web_frame());
1069 if (is_site_per_process) { 1069 if (is_site_per_process) {
1070 // TODO(nasko): delete the frame here, since we've replaced it with a 1070 // TODO(nasko): delete the frame here, since we've replaced it with a
1071 // proxy. 1071 // proxy.
1072 } 1072 }
1073 } else { 1073 } else {
1074 set_render_frame_proxy(proxy); 1074 set_render_frame_proxy(proxy);
1075 } 1075 }
1076 } 1076 }
1077
1078 // Safe to exit if no one else is using the process.
1079 if (!frame_->parent())
1080 render_view_->WasSwappedOut();
1077 } 1081 }
1078 1082
1079 void RenderFrameImpl::OnContextMenuClosed( 1083 void RenderFrameImpl::OnContextMenuClosed(
1080 const CustomContextMenuContext& custom_context) { 1084 const CustomContextMenuContext& custom_context) {
1081 if (custom_context.request_id) { 1085 if (custom_context.request_id) {
1082 // External request, should be in our map. 1086 // External request, should be in our map.
1083 ContextMenuClient* client = 1087 ContextMenuClient* client =
1084 pending_context_menus_.Lookup(custom_context.request_id); 1088 pending_context_menus_.Lookup(custom_context.request_id);
1085 if (client) { 1089 if (client) {
1086 client->OnMenuClosed(custom_context.request_id); 1090 client->OnMenuClosed(custom_context.request_id);
(...skipping 2632 matching lines...) Expand 10 before | Expand all | Expand 10 after
3719 3723
3720 #if defined(ENABLE_BROWSER_CDMS) 3724 #if defined(ENABLE_BROWSER_CDMS)
3721 RendererCdmManager* RenderFrameImpl::GetCdmManager() { 3725 RendererCdmManager* RenderFrameImpl::GetCdmManager() {
3722 if (!cdm_manager_) 3726 if (!cdm_manager_)
3723 cdm_manager_ = new RendererCdmManager(this); 3727 cdm_manager_ = new RendererCdmManager(this);
3724 return cdm_manager_; 3728 return cdm_manager_;
3725 } 3729 }
3726 #endif // defined(ENABLE_BROWSER_CDMS) 3730 #endif // defined(ENABLE_BROWSER_CDMS)
3727 3731
3728 } // namespace content 3732 } // namespace content
OLDNEW
« no previous file with comments | « content/content_browser.gypi ('k') | content/renderer/render_view_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698