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

Unified Diff: chrome/browser/browser_process_impl.cc

Issue 560024: Reland 37913. Clear local state on exit. (Closed)
Patch Set: Created 10 years, 11 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 side-by-side diff with in-line comments
Download patch
« 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 »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/browser_process_impl.cc
diff --git a/chrome/browser/browser_process_impl.cc b/chrome/browser/browser_process_impl.cc
index a63f6a4f1004ec93ed30140bf4f2aa3d13f8ce4d..f58357ba38bdaea610d4d13b2e63f342f980e350 100644
--- a/chrome/browser/browser_process_impl.cc
+++ b/chrome/browser/browser_process_impl.cc
@@ -21,11 +21,13 @@
#include "chrome/browser/download/save_file_manager.h"
#include "chrome/browser/google_url_tracker.h"
#include "chrome/browser/icon_manager.h"
+#include "chrome/browser/in_process_webkit/dom_storage_context.h"
#include "chrome/browser/intranet_redirect_detector.h"
#include "chrome/browser/io_thread.h"
#include "chrome/browser/metrics/metrics_service.h"
#include "chrome/browser/net/dns_global.h"
#include "chrome/browser/net/sdch_dictionary_fetcher.h"
+#include "chrome/browser/net/sqlite_persistent_cookie_store.h"
#include "chrome/browser/notifications/notification_ui_manager.h"
#include "chrome/browser/plugin_service.h"
#include "chrome/browser/profile_manager.h"
@@ -33,12 +35,15 @@
#include "chrome/browser/renderer_host/resource_dispatcher_host.h"
#include "chrome/browser/safe_browsing/safe_browsing_service.h"
#include "chrome/common/child_process_host.h"
+#include "chrome/common/chrome_constants.h"
#include "chrome/common/chrome_paths.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/notification_service.h"
#include "chrome/common/pref_names.h"
#include "chrome/common/pref_service.h"
+#include "chrome/common/url_constants.h"
#include "ipc/ipc_logging.h"
+#include "webkit/database/database_tracker.h"
#if defined(OS_WIN)
#include "views/focus/view_storage.h"
@@ -88,6 +93,12 @@ BrowserProcessImpl::BrowserProcessImpl(const CommandLine& command_line)
}
BrowserProcessImpl::~BrowserProcessImpl() {
+ FilePath profile_path;
+ bool clear_local_state_on_exit;
+
+ // Store the profile path for clearing local state data on exit.
+ clear_local_state_on_exit = ShouldClearLocalState(&profile_path);
+
// Delete the AutomationProviderList before NotificationService,
// since it may try to unregister notifications
// Both NotificationService and AutomationProvider are singleton instances in
@@ -153,6 +164,11 @@ BrowserProcessImpl::~BrowserProcessImpl() {
// SaveFileManager and SessionService.
file_thread_.reset();
+ // At this point, no render process exist, so it's safe to access local
+ // state data such as cookies, database, or local storage.
+ if (clear_local_state_on_exit)
+ ClearLocalState(profile_path);
+
// With the file_thread_ flushed, we can release any icon resources.
icon_manager_.reset();
@@ -232,6 +248,25 @@ printing::PrintJobManager* BrowserProcessImpl::print_job_manager() {
return print_job_manager_.get();
}
+void BrowserProcessImpl::ClearLocalState(const FilePath& profile_path) {
+ SQLitePersistentCookieStore::ClearLocalState(profile_path.Append(
+ chrome::kCookieFilename));
+ DOMStorageContext::ClearLocalState(profile_path, chrome::kExtensionScheme);
+ webkit_database::DatabaseTracker::ClearLocalState(profile_path,
+ chrome::kExtensionScheme);
+ // TODO(jochen): clear app cache local state.
+}
+
+bool BrowserProcessImpl::ShouldClearLocalState(FilePath* profile_path) {
+ FilePath user_data_dir;
+ Profile* profile;
+
+ PathService::Get(chrome::DIR_USER_DATA, &user_data_dir);
+ profile = profile_manager_->GetDefaultProfile(user_data_dir);
+ *profile_path = profile->GetPath();
+ return profile->GetPrefs()->GetBoolean(prefs::kClearSiteDataOnExit);
+}
+
void BrowserProcessImpl::CreateResourceDispatcherHost() {
DCHECK(!created_resource_dispatcher_host_ &&
resource_dispatcher_host_.get() == NULL);
« 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