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

Unified Diff: content/renderer/render_frame_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/renderer/render_frame_impl.cc
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index fb5f2b51b94291be69fbca171ff0649e3d82116e..0c304754f04b73eb70ae61ff7d8c7304d84347db 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -477,6 +477,16 @@ CommonNavigationParams MakeCommonNavigationParams(
return params;
}
+// Returns true if the disablers tracked by counter go from being absent to
Charlie Reis 2015/01/23 06:01:32 nit: |counter|
clamy 2015/01/26 16:38:40 Removed this function which was no longer needed.
+// present or vice-versa.
+bool HandleSuddenTerminationDisablerChange(int* counter, int variation) {
+ bool presence_before = *counter;
+ *counter += variation;
+ DCHECK(*counter >= 0);
+ bool presence_after = *counter;
+ return presence_before == presence_after;
+}
+
#if !defined(OS_ANDROID)
media::Context3D GetSharedMainThreadContext3D() {
cc::ContextProvider* provider =
@@ -653,6 +663,8 @@ RenderFrameImpl::RenderFrameImpl(RenderViewImpl* render_view, int routing_id)
manifest_manager_(NULL),
accessibility_mode_(AccessibilityModeOff),
renderer_accessibility_(NULL),
+ beforeunload_handlers_(0),
+ unload_handlers_(0),
weak_factory_(this) {
std::pair<RoutingIDFrameMap::iterator, bool> result =
g_routing_id_frame_map.Get().insert(std::make_pair(routing_id_, this));
@@ -3540,6 +3552,43 @@ bool RenderFrameImpl::exitFullscreen() {
return true;
}
+void RenderFrameImpl::suddenTerminationDisablerChanged(
Charlie Reis 2015/01/23 06:01:32 This seems unnecessarily complex. Why do we need
clamy 2015/01/26 16:38:40 Done.
+ int variation,
+ blink::WebFrameClient::SuddenTerminationDisablerType type) {
+ int* relevant_counter;
+ switch (type) {
+ case blink::WebFrameClient::BeforeUnloadHandler:
+ relevant_counter = &beforeunload_handlers_;
+ break;
+ case blink::WebFrameClient::UnloadHandler:
+ relevant_counter = &unload_handlers_;
+ break;
+ default:
+ NOTREACHED();
+ }
+ DCHECK(relevant_counter);
+
+ bool presence_changed = HandleSuddenTerminationDisablerChange(
+ relevant_counter, variation);
+ if (!presence_changed)
+ return;
+
+ // The presence status of one of the sudden termination disablers changed,
+ // inform the browser.
+ switch (type) {
+ case blink::WebFrameClient::BeforeUnloadHandler:
+ Send(new FrameHostMsg_BeforeUnloadHandlersPresenceChanged(
+ routing_id_, beforeunload_handlers_));
Charlie Reis 2015/01/23 06:01:32 This is a count, not a bool. Prefix with !! to ma
clamy 2015/01/26 16:38:40 Switched to booleans.
+ break;
+ case blink::WebFrameClient::UnloadHandler:
+ Send(new FrameHostMsg_UnloadHandlersPresenceChanged(
+ routing_id_, unload_handlers_));
+ break;
+ default:
+ NOTREACHED();
+ }
+}
+
void RenderFrameImpl::DidPlay(blink::WebMediaPlayer* player) {
Send(new FrameHostMsg_MediaPlayingNotification(
routing_id_, reinterpret_cast<int64>(player), player->hasVideo(),

Powered by Google App Engine
This is Rietveld 408576698