OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |