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

Side by Side Diff: chrome/browser/browser_process_impl.cc

Issue 5579002: Add a preference to clear plugin data on browser shutdown. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: mooh Created 10 years 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/browser_process_impl.h" 5 #include "chrome/browser/browser_process_impl.h"
6 6
7 #include <map> 7 #include <map>
8 8
9 #include "app/clipboard/clipboard.h" 9 #include "app/clipboard/clipboard.h"
10 #include "app/l10n_util.h" 10 #include "app/l10n_util.h"
(...skipping 18 matching lines...) Expand all
29 #include "chrome/browser/first_run/first_run.h" 29 #include "chrome/browser/first_run/first_run.h"
30 #include "chrome/browser/google/google_url_tracker.h" 30 #include "chrome/browser/google/google_url_tracker.h"
31 #include "chrome/browser/icon_manager.h" 31 #include "chrome/browser/icon_manager.h"
32 #include "chrome/browser/intranet_redirect_detector.h" 32 #include "chrome/browser/intranet_redirect_detector.h"
33 #include "chrome/browser/io_thread.h" 33 #include "chrome/browser/io_thread.h"
34 #include "chrome/browser/metrics/metrics_service.h" 34 #include "chrome/browser/metrics/metrics_service.h"
35 #include "chrome/browser/net/chrome_net_log.h" 35 #include "chrome/browser/net/chrome_net_log.h"
36 #include "chrome/browser/net/predictor_api.h" 36 #include "chrome/browser/net/predictor_api.h"
37 #include "chrome/browser/net/sdch_dictionary_fetcher.h" 37 #include "chrome/browser/net/sdch_dictionary_fetcher.h"
38 #include "chrome/browser/notifications/notification_ui_manager.h" 38 #include "chrome/browser/notifications/notification_ui_manager.h"
39 #include "chrome/browser/plugin_data_remover.h"
39 #include "chrome/browser/plugin_service.h" 40 #include "chrome/browser/plugin_service.h"
40 #include "chrome/browser/plugin_updater.h" 41 #include "chrome/browser/plugin_updater.h"
41 #include "chrome/browser/prefs/pref_service.h" 42 #include "chrome/browser/prefs/pref_service.h"
42 #include "chrome/browser/printing/print_job_manager.h" 43 #include "chrome/browser/printing/print_job_manager.h"
43 #include "chrome/browser/printing/print_preview_tab_controller.h" 44 #include "chrome/browser/printing/print_preview_tab_controller.h"
44 #include "chrome/browser/profiles/profile_manager.h" 45 #include "chrome/browser/profiles/profile_manager.h"
45 #include "chrome/browser/renderer_host/render_process_host.h" 46 #include "chrome/browser/renderer_host/render_process_host.h"
46 #include "chrome/browser/renderer_host/resource_dispatcher_host.h" 47 #include "chrome/browser/renderer_host/resource_dispatcher_host.h"
47 #include "chrome/browser/safe_browsing/safe_browsing_service.h" 48 #include "chrome/browser/safe_browsing/safe_browsing_service.h"
48 #include "chrome/browser/sidebar/sidebar_manager.h" 49 #include "chrome/browser/sidebar/sidebar_manager.h"
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 created_notification_ui_manager_(false), 101 created_notification_ui_manager_(false),
101 module_ref_count_(0), 102 module_ref_count_(0),
102 did_start_(false), 103 did_start_(false),
103 checked_for_new_frames_(false), 104 checked_for_new_frames_(false),
104 using_new_frames_(false), 105 using_new_frames_(false),
105 have_inspector_files_(true) { 106 have_inspector_files_(true) {
106 g_browser_process = this; 107 g_browser_process = this;
107 clipboard_.reset(new Clipboard); 108 clipboard_.reset(new Clipboard);
108 main_notification_service_.reset(new NotificationService); 109 main_notification_service_.reset(new NotificationService);
109 110
111 notification_registrar_.Add(this,
112 NotificationType::APP_TERMINATING,
113 NotificationService::AllSources());
114
110 // Must be created after the NotificationService. 115 // Must be created after the NotificationService.
111 print_job_manager_.reset(new printing::PrintJobManager); 116 print_job_manager_.reset(new printing::PrintJobManager);
112 117
113 shutdown_event_.reset(new base::WaitableEvent(true, false)); 118 shutdown_event_.reset(new base::WaitableEvent(true, false));
114 119
115 net_log_.reset(new ChromeNetLog); 120 net_log_.reset(new ChromeNetLog);
116 } 121 }
117 122
118 BrowserProcessImpl::~BrowserProcessImpl() { 123 BrowserProcessImpl::~BrowserProcessImpl() {
119 FilePath profile_path; 124 FilePath profile_path;
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
165 170
166 // Cancel pending requests and prevent new requests. 171 // Cancel pending requests and prevent new requests.
167 resource_dispatcher_host()->Shutdown(); 172 resource_dispatcher_host()->Shutdown();
168 } 173 }
169 174
170 #if defined(USE_X11) 175 #if defined(USE_X11)
171 // The IO thread must outlive the BACKGROUND_X11 thread. 176 // The IO thread must outlive the BACKGROUND_X11 thread.
172 background_x11_thread_.reset(); 177 background_x11_thread_.reset();
173 #endif 178 #endif
174 179
180 // Wait for removing plugin data to finish before shutting down the IO thread.
181 WaitForPluginDataRemoverToFinish();
182
175 // Need to stop io_thread_ before resource_dispatcher_host_, since 183 // Need to stop io_thread_ before resource_dispatcher_host_, since
176 // io_thread_ may still deref ResourceDispatcherHost and handle resource 184 // io_thread_ may still deref ResourceDispatcherHost and handle resource
177 // request before going away. 185 // request before going away.
178 io_thread_.reset(); 186 io_thread_.reset();
179 187
180 // The IO thread was the only user of this thread. 188 // The IO thread was the only user of this thread.
181 cache_thread_.reset(); 189 cache_thread_.reset();
182 190
183 // Stop the process launcher thread after the IO thread, in case the IO thread 191 // Stop the process launcher thread after the IO thread, in case the IO thread
184 // posted a task to terminate a process on the process launcher thread. 192 // posted a task to terminate a process on the process launcher thread.
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after
482 CreateTabCloseableStateWatcher(); 490 CreateTabCloseableStateWatcher();
483 return tab_closeable_state_watcher_.get(); 491 return tab_closeable_state_watcher_.get();
484 } 492 }
485 493
486 void BrowserProcessImpl::CheckForInspectorFiles() { 494 void BrowserProcessImpl::CheckForInspectorFiles() {
487 file_thread()->message_loop()->PostTask 495 file_thread()->message_loop()->PostTask
488 (FROM_HERE, 496 (FROM_HERE,
489 NewRunnableMethod(this, &BrowserProcessImpl::DoInspectorFilesCheck)); 497 NewRunnableMethod(this, &BrowserProcessImpl::DoInspectorFilesCheck));
490 } 498 }
491 499
500 void BrowserProcessImpl::Observe(NotificationType type,
501 const NotificationSource& source,
502 const NotificationDetails& details) {
503 if (type == NotificationType::APP_TERMINATING) {
504 Profile* profile = ProfileManager::GetDefaultProfile();
505 if (profile) {
506 PrefService* prefs = profile->GetPrefs();
507 if (prefs->GetBoolean(prefs::kClearPluginLSODataOnExit) &&
508 local_state()->GetBoolean(prefs::kClearPluginLSODataEnabled)) {
509 plugin_data_remover_.reset(new PluginDataRemover());
510 plugin_data_remover_->StartRemoving(base::Time(), NULL);
511 }
512 }
513 } else {
514 NOTREACHED();
515 }
516 }
517
518 void BrowserProcessImpl::WaitForPluginDataRemoverToFinish() {
519 if (!plugin_data_remover_.get() || !plugin_data_remover_->is_removing())
520 return;
521 plugin_data_remover_->set_done_task(new MessageLoop::QuitTask());
522 base::Time start_time(base::Time::Now());
523 MessageLoop::current()->Run();
524 UMA_HISTOGRAM_TIMES("ClearPluginData.wait_at_shutdown",
525 base::Time::Now() - start_time);
526 }
527
492 #if (defined(OS_WIN) || defined(OS_LINUX)) && !defined(OS_CHROMEOS) 528 #if (defined(OS_WIN) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
493 void BrowserProcessImpl::StartAutoupdateTimer() { 529 void BrowserProcessImpl::StartAutoupdateTimer() {
494 autoupdate_timer_.Start( 530 autoupdate_timer_.Start(
495 base::TimeDelta::FromHours(kUpdateCheckIntervalHours), 531 base::TimeDelta::FromHours(kUpdateCheckIntervalHours),
496 this, 532 this,
497 &BrowserProcessImpl::OnAutoupdateTimer); 533 &BrowserProcessImpl::OnAutoupdateTimer);
498 } 534 }
499 #endif 535 #endif
500 536
501 bool BrowserProcessImpl::have_inspector_files() const { 537 bool BrowserProcessImpl::have_inspector_files() const {
(...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after
816 } 852 }
817 853
818 void BrowserProcessImpl::OnAutoupdateTimer() { 854 void BrowserProcessImpl::OnAutoupdateTimer() {
819 if (CanAutorestartForUpdate()) { 855 if (CanAutorestartForUpdate()) {
820 DLOG(WARNING) << "Detected update. Restarting browser."; 856 DLOG(WARNING) << "Detected update. Restarting browser.";
821 RestartPersistentInstance(); 857 RestartPersistentInstance();
822 } 858 }
823 } 859 }
824 860
825 #endif // (defined(OS_WIN) || defined(OS_LINUX)) && !defined(OS_CHROMEOS) 861 #endif // (defined(OS_WIN) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698