diff options
author | bauerb@chromium.org <bauerb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-12-15 21:18:47 +0000 |
---|---|---|
committer | bauerb@chromium.org <bauerb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-12-15 21:18:47 +0000 |
commit | 6618d1d6b2a04e0782b46253ed2823d1cd404636 (patch) | |
tree | 19ba06fae87672e22ea593d7b106925419026ad4 /chrome/browser/browser_process_impl.cc | |
parent | a405b4c6c34f1ab69f73df8ec7e7b58631a3167d (diff) | |
download | chromium_src-6618d1d6b2a04e0782b46253ed2823d1cd404636.zip chromium_src-6618d1d6b2a04e0782b46253ed2823d1cd404636.tar.gz chromium_src-6618d1d6b2a04e0782b46253ed2823d1cd404636.tar.bz2 |
Add a preference to clear plugin data on browser shutdown.
BUG=58235
TEST=none
Review URL: http://codereview.chromium.org/5579002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@69315 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/browser_process_impl.cc')
-rw-r--r-- | chrome/browser/browser_process_impl.cc | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/chrome/browser/browser_process_impl.cc b/chrome/browser/browser_process_impl.cc index 756aa6c..d60b672 100644 --- a/chrome/browser/browser_process_impl.cc +++ b/chrome/browser/browser_process_impl.cc @@ -37,6 +37,7 @@ #include "chrome/browser/net/predictor_api.h" #include "chrome/browser/net/sdch_dictionary_fetcher.h" #include "chrome/browser/notifications/notification_ui_manager.h" +#include "chrome/browser/plugin_data_remover.h" #include "chrome/browser/plugin_service.h" #include "chrome/browser/plugin_updater.h" #include "chrome/browser/prefs/pref_service.h" @@ -110,6 +111,10 @@ BrowserProcessImpl::BrowserProcessImpl(const CommandLine& command_line) clipboard_.reset(new Clipboard); main_notification_service_.reset(new NotificationService); + notification_registrar_.Add(this, + NotificationType::APP_TERMINATING, + NotificationService::AllSources()); + // Must be created after the NotificationService. print_job_manager_.reset(new printing::PrintJobManager); @@ -175,6 +180,9 @@ BrowserProcessImpl::~BrowserProcessImpl() { background_x11_thread_.reset(); #endif + // Wait for removing plugin data to finish before shutting down the IO thread. + WaitForPluginDataRemoverToFinish(); + // Need to stop io_thread_ before resource_dispatcher_host_, since // io_thread_ may still deref ResourceDispatcherHost and handle resource // request before going away. @@ -507,6 +515,34 @@ void BrowserProcessImpl::CheckForInspectorFiles() { NewRunnableMethod(this, &BrowserProcessImpl::DoInspectorFilesCheck)); } +void BrowserProcessImpl::Observe(NotificationType type, + const NotificationSource& source, + const NotificationDetails& details) { + if (type == NotificationType::APP_TERMINATING) { + Profile* profile = ProfileManager::GetDefaultProfile(); + if (profile) { + PrefService* prefs = profile->GetPrefs(); + if (prefs->GetBoolean(prefs::kClearPluginLSODataOnExit) && + local_state()->GetBoolean(prefs::kClearPluginLSODataEnabled)) { + plugin_data_remover_ = new PluginDataRemover(); + plugin_data_remover_->StartRemoving(base::Time(), NULL); + } + } + } else { + NOTREACHED(); + } +} + +void BrowserProcessImpl::WaitForPluginDataRemoverToFinish() { + if (!plugin_data_remover_.get() || !plugin_data_remover_->is_removing()) + return; + plugin_data_remover_->set_done_task(new MessageLoop::QuitTask()); + base::Time start_time(base::Time::Now()); + MessageLoop::current()->Run(); + UMA_HISTOGRAM_TIMES("ClearPluginData.wait_at_shutdown", + base::Time::Now() - start_time); +} + #if (defined(OS_WIN) || defined(OS_LINUX)) && !defined(OS_CHROMEOS) void BrowserProcessImpl::StartAutoupdateTimer() { autoupdate_timer_.Start( |