diff options
-rwxr-xr-x | chrome/chrome.gyp | 2 | ||||
-rw-r--r-- | chrome/renderer/renderer_webkitclient_impl.cc | 13 | ||||
-rw-r--r-- | chrome/renderer/renderer_webkitclient_impl.h | 8 |
3 files changed, 23 insertions, 0 deletions
diff --git a/chrome/chrome.gyp b/chrome/chrome.gyp index cae4673..4d8879d 100755 --- a/chrome/chrome.gyp +++ b/chrome/chrome.gyp @@ -4025,6 +4025,7 @@ 'test/reliability/page_load_test.cc', 'test/reliability/page_load_test.h', 'test/ui/dom_checker_uitest.cc', + 'test/ui/fast_shutdown_uitest.cc', 'test/ui/history_uitest.cc', 'test/ui/layout_plugin_uitest.cc', 'test/ui/npapi_uitest.cc', @@ -4072,6 +4073,7 @@ # puts up modal dialogs. 'browser/unload_uitest.cc', 'test/reliability/page_load_test.cc', + 'test/ui/fast_shutdown_uitest.cc', 'test/ui/layout_plugin_uitest.cc', 'test/ui/omnibox_uitest.cc', ], diff --git a/chrome/renderer/renderer_webkitclient_impl.cc b/chrome/renderer/renderer_webkitclient_impl.cc index 3907b53..2a2ae60 100644 --- a/chrome/renderer/renderer_webkitclient_impl.cc +++ b/chrome/renderer/renderer_webkitclient_impl.cc @@ -132,6 +132,19 @@ WebString RendererWebKitClientImpl::defaultLocale() { } void RendererWebKitClientImpl::suddenTerminationChanged(bool enabled) { + if (enabled) { + // We should not get more enables than disables, but we want it to be a + // non-fatal error if it does happen. + DCHECK_GT(sudden_termination_disables_, 0); + sudden_termination_disables_ = std::max(--sudden_termination_disables_, 0); + if (sudden_termination_disables_ != 0) + return; + } else { + sudden_termination_disables_++; + if (sudden_termination_disables_ != 1) + return; + } + RenderThread* thread = RenderThread::current(); if (thread) // NULL in unittests. thread->Send(new ViewHostMsg_SuddenTerminationChanged(enabled)); diff --git a/chrome/renderer/renderer_webkitclient_impl.h b/chrome/renderer/renderer_webkitclient_impl.h index d610458..f85ba2f 100644 --- a/chrome/renderer/renderer_webkitclient_impl.h +++ b/chrome/renderer/renderer_webkitclient_impl.h @@ -21,6 +21,8 @@ class RendererWebKitClientImpl : public webkit_glue::WebKitClientImpl { public: + RendererWebKitClientImpl() : sudden_termination_disables_(0) {} + // WebKitClient methods: virtual WebKit::WebClipboard* clipboard(); virtual WebKit::WebMimeRegistry* mimeRegistry(); @@ -89,6 +91,12 @@ class RendererWebKitClientImpl : public webkit_glue::WebKitClientImpl { #if defined(OS_WIN) || defined(OS_LINUX) SandboxSupport sandbox_support_; #endif + + // This counter keeps track of the number of times sudden termination is + // enabled or disabled. It starts at 0 (enabled) and for every disable + // increments by 1, for every enable decrements by 1. When it reaches 0, + // we tell the browser to enable fast termination. + int sudden_termination_disables_; }; #endif // CHROME_RENDERER_WEBKIT_CLIENT_IMPL_H_ |