Chromium Code Reviews| 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(), |