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

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

Issue 560024: Reland 37913. Clear local state on exit. (Closed)
Patch Set: Created 10 years, 10 months 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
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 "app/clipboard/clipboard.h" 7 #include "app/clipboard/clipboard.h"
8 #include "app/l10n_util.h" 8 #include "app/l10n_util.h"
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/file_util.h" 10 #include "base/file_util.h"
11 #include "base/path_service.h" 11 #include "base/path_service.h"
12 #include "base/thread.h" 12 #include "base/thread.h"
13 #include "base/waitable_event.h" 13 #include "base/waitable_event.h"
14 #include "chrome/browser/browser_main.h" 14 #include "chrome/browser/browser_main.h"
15 #include "chrome/browser/browser_process_sub_thread.h" 15 #include "chrome/browser/browser_process_sub_thread.h"
16 #include "chrome/browser/browser_trial.h" 16 #include "chrome/browser/browser_trial.h"
17 #include "chrome/browser/chrome_thread.h" 17 #include "chrome/browser/chrome_thread.h"
18 #include "chrome/browser/debugger/debugger_wrapper.h" 18 #include "chrome/browser/debugger/debugger_wrapper.h"
19 #include "chrome/browser/debugger/devtools_manager.h" 19 #include "chrome/browser/debugger/devtools_manager.h"
20 #include "chrome/browser/download/download_file.h" 20 #include "chrome/browser/download/download_file.h"
21 #include "chrome/browser/download/save_file_manager.h" 21 #include "chrome/browser/download/save_file_manager.h"
22 #include "chrome/browser/google_url_tracker.h" 22 #include "chrome/browser/google_url_tracker.h"
23 #include "chrome/browser/icon_manager.h" 23 #include "chrome/browser/icon_manager.h"
24 #include "chrome/browser/in_process_webkit/dom_storage_context.h"
24 #include "chrome/browser/intranet_redirect_detector.h" 25 #include "chrome/browser/intranet_redirect_detector.h"
25 #include "chrome/browser/io_thread.h" 26 #include "chrome/browser/io_thread.h"
26 #include "chrome/browser/metrics/metrics_service.h" 27 #include "chrome/browser/metrics/metrics_service.h"
27 #include "chrome/browser/net/dns_global.h" 28 #include "chrome/browser/net/dns_global.h"
28 #include "chrome/browser/net/sdch_dictionary_fetcher.h" 29 #include "chrome/browser/net/sdch_dictionary_fetcher.h"
30 #include "chrome/browser/net/sqlite_persistent_cookie_store.h"
29 #include "chrome/browser/notifications/notification_ui_manager.h" 31 #include "chrome/browser/notifications/notification_ui_manager.h"
30 #include "chrome/browser/plugin_service.h" 32 #include "chrome/browser/plugin_service.h"
31 #include "chrome/browser/profile_manager.h" 33 #include "chrome/browser/profile_manager.h"
32 #include "chrome/browser/renderer_host/render_process_host.h" 34 #include "chrome/browser/renderer_host/render_process_host.h"
33 #include "chrome/browser/renderer_host/resource_dispatcher_host.h" 35 #include "chrome/browser/renderer_host/resource_dispatcher_host.h"
34 #include "chrome/browser/safe_browsing/safe_browsing_service.h" 36 #include "chrome/browser/safe_browsing/safe_browsing_service.h"
35 #include "chrome/common/child_process_host.h" 37 #include "chrome/common/child_process_host.h"
38 #include "chrome/common/chrome_constants.h"
36 #include "chrome/common/chrome_paths.h" 39 #include "chrome/common/chrome_paths.h"
37 #include "chrome/common/chrome_switches.h" 40 #include "chrome/common/chrome_switches.h"
38 #include "chrome/common/notification_service.h" 41 #include "chrome/common/notification_service.h"
39 #include "chrome/common/pref_names.h" 42 #include "chrome/common/pref_names.h"
40 #include "chrome/common/pref_service.h" 43 #include "chrome/common/pref_service.h"
44 #include "chrome/common/url_constants.h"
41 #include "ipc/ipc_logging.h" 45 #include "ipc/ipc_logging.h"
46 #include "webkit/database/database_tracker.h"
42 47
43 #if defined(OS_WIN) 48 #if defined(OS_WIN)
44 #include "views/focus/view_storage.h" 49 #include "views/focus/view_storage.h"
45 #endif 50 #endif
46 51
47 #if defined(OS_LINUX) 52 #if defined(OS_LINUX)
48 // TODO(port): get rid of this. 53 // TODO(port): get rid of this.
49 #include "chrome/common/temp_scaffolding_stubs.h" 54 #include "chrome/common/temp_scaffolding_stubs.h"
50 #else 55 #else
51 #include "chrome/browser/printing/print_job_manager.h" 56 #include "chrome/browser/printing/print_job_manager.h"
(...skipping 29 matching lines...) Expand all
81 clipboard_.reset(new Clipboard); 86 clipboard_.reset(new Clipboard);
82 main_notification_service_.reset(new NotificationService); 87 main_notification_service_.reset(new NotificationService);
83 88
84 // Must be created after the NotificationService. 89 // Must be created after the NotificationService.
85 print_job_manager_.reset(new printing::PrintJobManager); 90 print_job_manager_.reset(new printing::PrintJobManager);
86 91
87 shutdown_event_.reset(new base::WaitableEvent(true, false)); 92 shutdown_event_.reset(new base::WaitableEvent(true, false));
88 } 93 }
89 94
90 BrowserProcessImpl::~BrowserProcessImpl() { 95 BrowserProcessImpl::~BrowserProcessImpl() {
96 FilePath profile_path;
97 bool clear_local_state_on_exit;
98
99 // Store the profile path for clearing local state data on exit.
100 clear_local_state_on_exit = ShouldClearLocalState(&profile_path);
101
91 // Delete the AutomationProviderList before NotificationService, 102 // Delete the AutomationProviderList before NotificationService,
92 // since it may try to unregister notifications 103 // since it may try to unregister notifications
93 // Both NotificationService and AutomationProvider are singleton instances in 104 // Both NotificationService and AutomationProvider are singleton instances in
94 // the BrowserProcess. Since AutomationProvider may have some active 105 // the BrowserProcess. Since AutomationProvider may have some active
95 // notification observers, it is essential that it gets destroyed before the 106 // notification observers, it is essential that it gets destroyed before the
96 // NotificationService. NotificationService won't be destroyed until after 107 // NotificationService. NotificationService won't be destroyed until after
97 // this destructor is run. 108 // this destructor is run.
98 automation_provider_list_.reset(); 109 automation_provider_list_.reset();
99 110
100 // We need to shutdown the SdchDictionaryFetcher as it regularly holds 111 // We need to shutdown the SdchDictionaryFetcher as it regularly holds
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
146 if (resource_dispatcher_host_.get()) { 157 if (resource_dispatcher_host_.get()) {
147 resource_dispatcher_host()->download_file_manager()->Shutdown(); 158 resource_dispatcher_host()->download_file_manager()->Shutdown();
148 resource_dispatcher_host()->save_file_manager()->Shutdown(); 159 resource_dispatcher_host()->save_file_manager()->Shutdown();
149 } 160 }
150 161
151 // Need to stop the file_thread_ here to force it to process messages in its 162 // Need to stop the file_thread_ here to force it to process messages in its
152 // message loop from the previous call to shutdown the DownloadFileManager, 163 // message loop from the previous call to shutdown the DownloadFileManager,
153 // SaveFileManager and SessionService. 164 // SaveFileManager and SessionService.
154 file_thread_.reset(); 165 file_thread_.reset();
155 166
167 // At this point, no render process exist, so it's safe to access local
168 // state data such as cookies, database, or local storage.
169 if (clear_local_state_on_exit)
170 ClearLocalState(profile_path);
171
156 // With the file_thread_ flushed, we can release any icon resources. 172 // With the file_thread_ flushed, we can release any icon resources.
157 icon_manager_.reset(); 173 icon_manager_.reset();
158 174
159 // Need to destroy ResourceDispatcherHost before PluginService and 175 // Need to destroy ResourceDispatcherHost before PluginService and
160 // SafeBrowsingService, since it caches a pointer to it. 176 // SafeBrowsingService, since it caches a pointer to it.
161 resource_dispatcher_host_.reset(); 177 resource_dispatcher_host_.reset();
162 178
163 // Wait for the pending print jobs to finish. 179 // Wait for the pending print jobs to finish.
164 print_job_manager_->OnQuit(); 180 print_job_manager_->OnQuit();
165 print_job_manager_.reset(); 181 print_job_manager_.reset();
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
225 241
226 printing::PrintJobManager* BrowserProcessImpl::print_job_manager() { 242 printing::PrintJobManager* BrowserProcessImpl::print_job_manager() {
227 // TODO(abarth): DCHECK(CalledOnValidThread()); 243 // TODO(abarth): DCHECK(CalledOnValidThread());
228 // See <http://b/1287209>. 244 // See <http://b/1287209>.
229 // print_job_manager_ is initialized in the constructor and destroyed in the 245 // print_job_manager_ is initialized in the constructor and destroyed in the
230 // destructor, so it should always be valid. 246 // destructor, so it should always be valid.
231 DCHECK(print_job_manager_.get()); 247 DCHECK(print_job_manager_.get());
232 return print_job_manager_.get(); 248 return print_job_manager_.get();
233 } 249 }
234 250
251 void BrowserProcessImpl::ClearLocalState(const FilePath& profile_path) {
252 SQLitePersistentCookieStore::ClearLocalState(profile_path.Append(
253 chrome::kCookieFilename));
254 DOMStorageContext::ClearLocalState(profile_path, chrome::kExtensionScheme);
255 webkit_database::DatabaseTracker::ClearLocalState(profile_path,
256 chrome::kExtensionScheme);
257 // TODO(jochen): clear app cache local state.
258 }
259
260 bool BrowserProcessImpl::ShouldClearLocalState(FilePath* profile_path) {
261 FilePath user_data_dir;
262 Profile* profile;
263
264 PathService::Get(chrome::DIR_USER_DATA, &user_data_dir);
265 profile = profile_manager_->GetDefaultProfile(user_data_dir);
266 *profile_path = profile->GetPath();
267 return profile->GetPrefs()->GetBoolean(prefs::kClearSiteDataOnExit);
268 }
269
235 void BrowserProcessImpl::CreateResourceDispatcherHost() { 270 void BrowserProcessImpl::CreateResourceDispatcherHost() {
236 DCHECK(!created_resource_dispatcher_host_ && 271 DCHECK(!created_resource_dispatcher_host_ &&
237 resource_dispatcher_host_.get() == NULL); 272 resource_dispatcher_host_.get() == NULL);
238 created_resource_dispatcher_host_ = true; 273 created_resource_dispatcher_host_ = true;
239 274
240 resource_dispatcher_host_.reset(new ResourceDispatcherHost()); 275 resource_dispatcher_host_.reset(new ResourceDispatcherHost());
241 resource_dispatcher_host_->Initialize(); 276 resource_dispatcher_host_->Initialize();
242 } 277 }
243 278
244 void BrowserProcessImpl::CreateMetricsService() { 279 void BrowserProcessImpl::CreateMetricsService() {
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
438 DCHECK(file_thread_->message_loop() == MessageLoop::current()); 473 DCHECK(file_thread_->message_loop() == MessageLoop::current());
439 bool result = false; 474 bool result = false;
440 475
441 FilePath inspector_dir; 476 FilePath inspector_dir;
442 if (PathService::Get(chrome::DIR_INSPECTOR, &inspector_dir)) { 477 if (PathService::Get(chrome::DIR_INSPECTOR, &inspector_dir)) {
443 result = file_util::PathExists(inspector_dir); 478 result = file_util::PathExists(inspector_dir);
444 } 479 }
445 480
446 have_inspector_files_ = result; 481 have_inspector_files_ = result;
447 } 482 }
OLDNEW
« no previous file with comments | « chrome/browser/browser_process_impl.h ('k') | chrome/browser/in_process_webkit/dom_storage_context.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698