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

Unified 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: Created 5 years, 11 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/frame_host/render_frame_host_impl.cc
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc
index f284e5765ae46ad8fe3d6ec78e6a8c38ec56c3af..06dadb87b81d61891669e876c0d2da520fefc625 100644
--- a/content/browser/frame_host/render_frame_host_impl.cc
+++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -137,6 +137,9 @@ RenderFrameHostImpl::RenderFrameHostImpl(RenderViewHostImpl* render_view_host,
accessibility_reset_token_(0),
accessibility_reset_count_(0),
no_create_browser_accessibility_manager_for_testing_(false),
+ has_beforeunload_handlers_(false),
+ has_unload_handlers_(false),
+ override_sudden_termination_status_(false),
weak_ptr_factory_(this) {
bool is_swapped_out = !!(flags & CREATE_RF_SWAPPED_OUT);
frame_tree_->RegisterRenderFrameHost(this);
@@ -158,6 +161,8 @@ RenderFrameHostImpl::RenderFrameHostImpl(RenderViewHostImpl* render_view_host,
}
RenderFrameHostImpl::~RenderFrameHostImpl() {
+ if (!SuddenTerminationAllowed())
+ GetProcess()->SuddenTerminationChangedForFrame(true);
Charlie Reis 2015/01/23 06:01:32 I don't think RPH should be tracking this state.
clamy 2015/01/26 16:38:39 Done.
GetProcess()->RemoveRoute(routing_id_);
g_routing_id_frame_map.Get().erase(
RenderFrameHostID(GetProcess()->GetID(), routing_id_));
@@ -336,6 +341,10 @@ bool RenderFrameHostImpl::OnMessageReceived(const IPC::Message &msg) {
IPC_MESSAGE_HANDLER(AccessibilityHostMsg_FindInPageResult,
OnAccessibilityFindInPageResult)
IPC_MESSAGE_HANDLER(FrameHostMsg_ToggleFullscreen, OnToggleFullscreen)
+ IPC_MESSAGE_HANDLER(FrameHostMsg_BeforeUnloadHandlersPresenceChanged,
Charlie Reis 2015/01/23 06:01:32 nit: Put these just before OnBeforeUnloadACK, sinc
clamy 2015/01/26 16:38:39 Done.
+ OnBeforeUnloadHandlersPresenceChanged)
+ IPC_MESSAGE_HANDLER(FrameHostMsg_UnloadHandlersPresenceChanged,
+ OnUnloadHandlersPresenceChanged)
#if defined(OS_MACOSX) || defined(OS_ANDROID)
IPC_MESSAGE_HANDLER(FrameHostMsg_ShowPopup, OnShowPopup)
IPC_MESSAGE_HANDLER(FrameHostMsg_HidePopup, OnHidePopup)
@@ -888,6 +897,11 @@ bool RenderFrameHostImpl::IsWaitingForUnloadACK() const {
rfh_state_ == STATE_PENDING_SWAP_OUT;
}
+bool RenderFrameHostImpl::SuddenTerminationAllowed() const {
+ return override_sudden_termination_status_ ||
+ (!has_beforeunload_handlers_ && !has_unload_handlers_);
+}
+
void RenderFrameHostImpl::OnSwapOutACK() {
OnSwappedOut();
}
@@ -1152,6 +1166,16 @@ void RenderFrameHostImpl::OnToggleFullscreen(bool enter_fullscreen) {
render_view_host_->WasResized();
}
+void RenderFrameHostImpl::OnBeforeUnloadHandlersPresenceChanged(bool present) {
+ HandleSuddenTerminationDisablerPresenceChange(
+ &has_beforeunload_handlers_, present);
+}
+
+void RenderFrameHostImpl::OnUnloadHandlersPresenceChanged(bool present) {
+ HandleSuddenTerminationDisablerPresenceChange(
+ &has_unload_handlers_, present);
+}
+
#if defined(OS_MACOSX) || defined(OS_ANDROID)
void RenderFrameHostImpl::OnShowPopup(
const FrameHostMsg_ShowPopup_Params& params) {
@@ -1648,4 +1672,15 @@ void RenderFrameHostImpl::DidUseGeolocationPermission() {
top_frame->GetLastCommittedURL().GetOrigin());
}
+void RenderFrameHostImpl::HandleSuddenTerminationDisablerPresenceChange(
Charlie Reis 2015/01/23 06:01:32 Hmm, this method seems awkward to me. - The metho
clamy 2015/01/26 16:38:39 Done. If we don't signal the RPHI then only the bo
+ bool* disabler_presence,
+ bool new_value) {
+ bool sudden_termination_before = SuddenTerminationAllowed();
+ *disabler_presence = new_value;
+ if (sudden_termination_before != SuddenTerminationAllowed()) {
+ GetProcess()->SuddenTerminationChangedForFrame(
+ SuddenTerminationAllowed());
+ }
+}
+
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698