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

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

Issue 857213003: Refactor sudden termination (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed Charlie's comments Created 5 years, 10 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
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_impl.h" 5 #include "content/browser/frame_host/render_frame_host_impl.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/containers/hash_tables.h" 9 #include "base/containers/hash_tables.h"
10 #include "base/lazy_instance.h" 10 #include "base/lazy_instance.h"
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
127 int flags) 127 int flags)
128 : render_view_host_(render_view_host), 128 : render_view_host_(render_view_host),
129 delegate_(delegate), 129 delegate_(delegate),
130 cross_process_frame_connector_(NULL), 130 cross_process_frame_connector_(NULL),
131 render_frame_proxy_host_(NULL), 131 render_frame_proxy_host_(NULL),
132 frame_tree_(frame_tree), 132 frame_tree_(frame_tree),
133 frame_tree_node_(frame_tree_node), 133 frame_tree_node_(frame_tree_node),
134 routing_id_(routing_id), 134 routing_id_(routing_id),
135 render_frame_created_(false), 135 render_frame_created_(false),
136 navigations_suspended_(false), 136 navigations_suspended_(false),
137 has_beforeunload_handlers_(false),
138 has_unload_handlers_(false),
139 override_sudden_termination_status_(false),
137 is_waiting_for_beforeunload_ack_(false), 140 is_waiting_for_beforeunload_ack_(false),
138 unload_ack_is_for_cross_site_transition_(false), 141 unload_ack_is_for_cross_site_transition_(false),
139 accessibility_reset_token_(0), 142 accessibility_reset_token_(0),
140 accessibility_reset_count_(0), 143 accessibility_reset_count_(0),
141 no_create_browser_accessibility_manager_for_testing_(false), 144 no_create_browser_accessibility_manager_for_testing_(false),
142 weak_ptr_factory_(this) { 145 weak_ptr_factory_(this) {
143 bool is_swapped_out = !!(flags & CREATE_RF_SWAPPED_OUT); 146 bool is_swapped_out = !!(flags & CREATE_RF_SWAPPED_OUT);
144 bool hidden = !!(flags & CREATE_RF_HIDDEN); 147 bool hidden = !!(flags & CREATE_RF_HIDDEN);
145 frame_tree_->RegisterRenderFrameHost(this); 148 frame_tree_->RegisterRenderFrameHost(this);
146 GetProcess()->AddRoute(routing_id_, this); 149 GetProcess()->AddRoute(routing_id_, this);
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
317 OnDidFailProvisionalLoadWithError) 320 OnDidFailProvisionalLoadWithError)
318 IPC_MESSAGE_HANDLER(FrameHostMsg_DidFailLoadWithError, 321 IPC_MESSAGE_HANDLER(FrameHostMsg_DidFailLoadWithError,
319 OnDidFailLoadWithError) 322 OnDidFailLoadWithError)
320 IPC_MESSAGE_HANDLER_GENERIC(FrameHostMsg_DidCommitProvisionalLoad, 323 IPC_MESSAGE_HANDLER_GENERIC(FrameHostMsg_DidCommitProvisionalLoad,
321 OnDidCommitProvisionalLoad(msg)) 324 OnDidCommitProvisionalLoad(msg))
322 IPC_MESSAGE_HANDLER(FrameHostMsg_DidDropNavigation, OnDidDropNavigation) 325 IPC_MESSAGE_HANDLER(FrameHostMsg_DidDropNavigation, OnDidDropNavigation)
323 IPC_MESSAGE_HANDLER(FrameHostMsg_OpenURL, OnOpenURL) 326 IPC_MESSAGE_HANDLER(FrameHostMsg_OpenURL, OnOpenURL)
324 IPC_MESSAGE_HANDLER(FrameHostMsg_DocumentOnLoadCompleted, 327 IPC_MESSAGE_HANDLER(FrameHostMsg_DocumentOnLoadCompleted,
325 OnDocumentOnLoadCompleted) 328 OnDocumentOnLoadCompleted)
326 IPC_MESSAGE_HANDLER(FrameHostMsg_BeforeUnload_ACK, OnBeforeUnloadACK) 329 IPC_MESSAGE_HANDLER(FrameHostMsg_BeforeUnload_ACK, OnBeforeUnloadACK)
330 IPC_MESSAGE_HANDLER(FrameHostMsg_BeforeUnloadHandlersPresent,
331 OnBeforeUnloadHandlersPresent)
332 IPC_MESSAGE_HANDLER(FrameHostMsg_UnloadHandlersPresent,
333 OnUnloadHandlersPresent)
327 IPC_MESSAGE_HANDLER(FrameHostMsg_SwapOut_ACK, OnSwapOutACK) 334 IPC_MESSAGE_HANDLER(FrameHostMsg_SwapOut_ACK, OnSwapOutACK)
328 IPC_MESSAGE_HANDLER(FrameHostMsg_ContextMenu, OnContextMenu) 335 IPC_MESSAGE_HANDLER(FrameHostMsg_ContextMenu, OnContextMenu)
329 IPC_MESSAGE_HANDLER(FrameHostMsg_JavaScriptExecuteResponse, 336 IPC_MESSAGE_HANDLER(FrameHostMsg_JavaScriptExecuteResponse,
330 OnJavaScriptExecuteResponse) 337 OnJavaScriptExecuteResponse)
331 IPC_MESSAGE_HANDLER_DELAY_REPLY(FrameHostMsg_RunJavaScriptMessage, 338 IPC_MESSAGE_HANDLER_DELAY_REPLY(FrameHostMsg_RunJavaScriptMessage,
332 OnRunJavaScriptMessage) 339 OnRunJavaScriptMessage)
333 IPC_MESSAGE_HANDLER_DELAY_REPLY(FrameHostMsg_RunBeforeUnloadConfirm, 340 IPC_MESSAGE_HANDLER_DELAY_REPLY(FrameHostMsg_RunBeforeUnloadConfirm,
334 OnRunBeforeUnloadConfirm) 341 OnRunBeforeUnloadConfirm)
335 IPC_MESSAGE_HANDLER(FrameHostMsg_DidAccessInitialDocument, 342 IPC_MESSAGE_HANDLER(FrameHostMsg_DidAccessInitialDocument,
336 OnDidAccessInitialDocument) 343 OnDidAccessInitialDocument)
(...skipping 630 matching lines...) Expand 10 before | Expand all | Expand 10 after
967 } 974 }
968 return frame_tree_node_->navigator()->IsWaitingForBeforeUnloadACK( 975 return frame_tree_node_->navigator()->IsWaitingForBeforeUnloadACK(
969 frame_tree_node_); 976 frame_tree_node_);
970 } 977 }
971 978
972 bool RenderFrameHostImpl::IsWaitingForUnloadACK() const { 979 bool RenderFrameHostImpl::IsWaitingForUnloadACK() const {
973 return render_view_host_->is_waiting_for_close_ack_ || 980 return render_view_host_->is_waiting_for_close_ack_ ||
974 rfh_state_ == STATE_PENDING_SWAP_OUT; 981 rfh_state_ == STATE_PENDING_SWAP_OUT;
975 } 982 }
976 983
984 bool RenderFrameHostImpl::SuddenTerminationAllowed() const {
985 return override_sudden_termination_status_ ||
986 (!has_beforeunload_handlers_ && !has_unload_handlers_);
987 }
988
977 void RenderFrameHostImpl::OnSwapOutACK() { 989 void RenderFrameHostImpl::OnSwapOutACK() {
978 OnSwappedOut(); 990 OnSwappedOut();
979 } 991 }
980 992
981 void RenderFrameHostImpl::OnSwappedOut() { 993 void RenderFrameHostImpl::OnSwappedOut() {
982 // Ignore spurious swap out ack. 994 // Ignore spurious swap out ack.
983 if (rfh_state_ != STATE_PENDING_SWAP_OUT) 995 if (rfh_state_ != STATE_PENDING_SWAP_OUT)
984 return; 996 return;
985 997
986 TRACE_EVENT_ASYNC_END0("navigation", "RenderFrameHostImpl::SwapOut", this); 998 TRACE_EVENT_ASYNC_END0("navigation", "RenderFrameHostImpl::SwapOut", this);
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after
1231 if (enter_fullscreen) 1243 if (enter_fullscreen)
1232 delegate_->EnterFullscreenMode(GetLastCommittedURL().GetOrigin()); 1244 delegate_->EnterFullscreenMode(GetLastCommittedURL().GetOrigin());
1233 else 1245 else
1234 delegate_->ExitFullscreenMode(); 1246 delegate_->ExitFullscreenMode();
1235 1247
1236 // The previous call might change the fullscreen state. We need to make sure 1248 // The previous call might change the fullscreen state. We need to make sure
1237 // the renderer is aware of that, which is done via the resize message. 1249 // the renderer is aware of that, which is done via the resize message.
1238 render_view_host_->WasResized(); 1250 render_view_host_->WasResized();
1239 } 1251 }
1240 1252
1253 void RenderFrameHostImpl::OnBeforeUnloadHandlersPresent(bool present) {
1254 has_beforeunload_handlers_ = present;
1255 }
1256
1257 void RenderFrameHostImpl::OnUnloadHandlersPresent(bool present) {
1258 has_unload_handlers_ = present;
1259 }
1260
1241 #if defined(OS_MACOSX) || defined(OS_ANDROID) 1261 #if defined(OS_MACOSX) || defined(OS_ANDROID)
1242 void RenderFrameHostImpl::OnShowPopup( 1262 void RenderFrameHostImpl::OnShowPopup(
1243 const FrameHostMsg_ShowPopup_Params& params) { 1263 const FrameHostMsg_ShowPopup_Params& params) {
1244 RenderViewHostDelegateView* view = 1264 RenderViewHostDelegateView* view =
1245 render_view_host_->delegate_->GetDelegateView(); 1265 render_view_host_->delegate_->GetDelegateView();
1246 if (view) { 1266 if (view) {
1247 view->ShowPopupMenu(this, 1267 view->ShowPopupMenu(this,
1248 params.bounds, 1268 params.bounds,
1249 params.item_height, 1269 params.item_height,
1250 params.item_font_size, 1270 params.item_font_size,
(...skipping 477 matching lines...) Expand 10 before | Expand all | Expand 10 after
1728 void RenderFrameHostImpl::DidUseGeolocationPermission() { 1748 void RenderFrameHostImpl::DidUseGeolocationPermission() {
1729 RenderFrameHost* top_frame = frame_tree_node()->frame_tree()->GetMainFrame(); 1749 RenderFrameHost* top_frame = frame_tree_node()->frame_tree()->GetMainFrame();
1730 GetContentClient()->browser()->RegisterPermissionUsage( 1750 GetContentClient()->browser()->RegisterPermissionUsage(
1731 PERMISSION_GEOLOCATION, 1751 PERMISSION_GEOLOCATION,
1732 delegate_->GetAsWebContents(), 1752 delegate_->GetAsWebContents(),
1733 GetLastCommittedURL().GetOrigin(), 1753 GetLastCommittedURL().GetOrigin(),
1734 top_frame->GetLastCommittedURL().GetOrigin()); 1754 top_frame->GetLastCommittedURL().GetOrigin());
1735 } 1755 }
1736 1756
1737 } // namespace content 1757 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698