Index: chrome/browser/browsing_data_remover.cc |
diff --git a/chrome/browser/browsing_data_remover.cc b/chrome/browser/browsing_data_remover.cc |
index c2bf21172c6e9bfd9a3452e8aa7c9095afed44c1..33fd55f50090b4a571d0fbc28de86e4746682e68 100644 |
--- a/chrome/browser/browsing_data_remover.cc |
+++ b/chrome/browser/browsing_data_remover.cc |
@@ -157,15 +157,22 @@ int BrowsingDataRemover::GenerateQuotaClientMask(int remove_mask) { |
} |
void BrowsingDataRemover::Remove(int remove_mask) { |
+ Remove(remove_mask, GURL()); |
+} |
+ |
+void BrowsingDataRemover::Remove(int remove_mask, const GURL& origin) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
set_removing(true); |
remove_mask_ = remove_mask; |
+ remove_origin_ = origin; |
if (remove_mask & REMOVE_HISTORY) { |
HistoryService* history_service = |
profile_->GetHistoryService(Profile::EXPLICIT_ACCESS); |
if (history_service) { |
std::set<GURL> restrict_urls; |
+ if (!remove_origin_.is_empty()) |
+ restrict_urls.insert(remove_origin_); |
content::RecordAction(UserMetricsAction("ClearBrowsingData_History")); |
waiting_for_clear_history_ = true; |
history_service->ExpireHistoryBetween(restrict_urls, |
@@ -175,51 +182,56 @@ void BrowsingDataRemover::Remove(int remove_mask) { |
base::Unretained(this))); |
} |
- // Need to clear the host cache and accumulated speculative data, as it also |
- // reveals some history. |
- if (g_browser_process->io_thread()) { |
- waiting_for_clear_networking_history_ = true; |
- BrowserThread::PostTask( |
- BrowserThread::IO, FROM_HERE, |
- base::Bind(&BrowsingDataRemover::ClearNetworkingHistory, |
- base::Unretained(this), g_browser_process->io_thread())); |
- } |
- |
- // As part of history deletion we also delete the auto-generated keywords. |
- TemplateURLService* keywords_model = |
- TemplateURLServiceFactory::GetForProfile(profile_); |
- if (keywords_model && !keywords_model->loaded()) { |
- registrar_.Add(this, chrome::NOTIFICATION_TEMPLATE_URL_SERVICE_LOADED, |
- content::Source<TemplateURLService>(keywords_model)); |
- keywords_model->Load(); |
- } else if (keywords_model) { |
- keywords_model->RemoveAutoGeneratedBetween(delete_begin_, delete_end_); |
- } |
+ // If the caller is removing history for all hosts, then clear ancillary |
+ // historical information. |
Bernhard Bauer
2012/02/10 19:50:57
This means of course we have to be careful, as the
|
+ if (!remove_origin_.is_empty()) { |
+ // Need to clear the host cache and accumulated speculative data, as it |
+ // also reveals some history. |
+ if (g_browser_process->io_thread()) { |
+ waiting_for_clear_networking_history_ = true; |
+ BrowserThread::PostTask( |
+ BrowserThread::IO, FROM_HERE, |
+ base::Bind(&BrowsingDataRemover::ClearNetworkingHistory, |
+ base::Unretained(this), g_browser_process->io_thread())); |
+ } |
- // We also delete the list of recently closed tabs. Since these expire, |
- // they can't be more than a day old, so we can simply clear them all. |
- TabRestoreService* tab_service = |
- TabRestoreServiceFactory::GetForProfile(profile_); |
- if (tab_service) { |
- tab_service->ClearEntries(); |
- tab_service->DeleteLastSession(); |
- } |
+ // As part of history deletion we also delete the auto-generated keywords. |
+ TemplateURLService* keywords_model = |
+ TemplateURLServiceFactory::GetForProfile(profile_); |
+ if (keywords_model && !keywords_model->loaded()) { |
+ registrar_.Add(this, chrome::NOTIFICATION_TEMPLATE_URL_SERVICE_LOADED, |
+ content::Source<TemplateURLService>(keywords_model)); |
+ keywords_model->Load(); |
+ } else if (keywords_model) { |
+ keywords_model->RemoveAutoGeneratedBetween(delete_begin_, delete_end_); |
+ } |
- // We also delete the last session when we delete the history. |
- SessionService* session_service = |
- SessionServiceFactory::GetForProfile(profile_); |
- if (session_service) |
- session_service->DeleteLastSession(); |
+ // We also delete the list of recently closed tabs. Since these expire, |
+ // they can't be more than a day old, so we can simply clear them all. |
+ TabRestoreService* tab_service = |
+ TabRestoreServiceFactory::GetForProfile(profile_); |
+ if (tab_service) { |
+ tab_service->ClearEntries(); |
+ tab_service->DeleteLastSession(); |
+ } |
- // The PrerenderManager keeps history of prerendered pages, so clear that. |
- // It also may have a prerendered page. If so, the page could be considered |
- // to have a small amount of historical information, so delete it, too. |
- prerender::PrerenderManager* prerender_manager = |
- prerender::PrerenderManagerFactory::GetForProfile(profile_); |
- if (prerender_manager) { |
- prerender_manager->ClearData( |
- prerender::PrerenderManager::CLEAR_PRERENDER_CONTENTS | |
- prerender::PrerenderManager::CLEAR_PRERENDER_HISTORY); |
+ // We also delete the last session when we delete the history. |
+ SessionService* session_service = |
+ SessionServiceFactory::GetForProfile(profile_); |
+ if (session_service) |
+ session_service->DeleteLastSession(); |
+ |
+ // The PrerenderManager keeps history of prerendered pages, so clear that. |
+ // It also may have a prerendered page. If so, the page could be |
+ // considered to have a small amount of historical information, so delete |
+ // it, too. |
+ prerender::PrerenderManager* prerender_manager = |
+ prerender::PrerenderManagerFactory::GetForProfile(profile_); |
+ if (prerender_manager) { |
+ prerender_manager->ClearData( |
+ prerender::PrerenderManager::CLEAR_PRERENDER_CONTENTS | |
+ prerender::PrerenderManager::CLEAR_PRERENDER_HISTORY); |
+ } |
} |
} |