summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xchrome/chrome.gyp2
-rw-r--r--chrome/renderer/renderer_webkitclient_impl.cc13
-rw-r--r--chrome/renderer/renderer_webkitclient_impl.h8
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_