| Index: chrome/browser/browsing_data/browsing_data_remover.cc
|
| diff --git a/chrome/browser/browsing_data/browsing_data_remover.cc b/chrome/browser/browsing_data/browsing_data_remover.cc
|
| index f723a3f0176f5f7727077d8e6ce0bfced886e8ef..e669d572e861b7517aa7e1ef9fe6c84664e130fd 100644
|
| --- a/chrome/browser/browsing_data/browsing_data_remover.cc
|
| +++ b/chrome/browser/browsing_data/browsing_data_remover.cc
|
| @@ -136,17 +136,19 @@ BrowsingDataRemover::BrowsingDataRemover(Profile* profile,
|
| media_context_getter_(profile->GetMediaRequestContext()),
|
| deauthorize_content_licenses_request_id_(0),
|
| waiting_for_clear_cache_(false),
|
| - waiting_for_clear_nacl_cache_(false),
|
| + waiting_for_clear_content_licenses_(false),
|
| waiting_for_clear_cookies_count_(0),
|
| + waiting_for_clear_form_(false),
|
| waiting_for_clear_history_(false),
|
| + waiting_for_clear_hostname_resolution_cache_(false),
|
| waiting_for_clear_local_storage_(false),
|
| - waiting_for_clear_session_storage_(false),
|
| + waiting_for_clear_nacl_cache_(false),
|
| + waiting_for_clear_network_predictor_(false),
|
| waiting_for_clear_networking_history_(false),
|
| - waiting_for_clear_server_bound_certs_(false),
|
| waiting_for_clear_plugin_data_(false),
|
| waiting_for_clear_quota_managed_data_(false),
|
| - waiting_for_clear_content_licenses_(false),
|
| - waiting_for_clear_form_(false),
|
| + waiting_for_clear_server_bound_certs_(false),
|
| + waiting_for_clear_session_storage_(false),
|
| remove_mask_(0),
|
| remove_origin_(GURL()),
|
| origin_set_mask_(0) {
|
| @@ -248,11 +250,20 @@ void BrowsingDataRemover::RemoveImpl(int remove_mask,
|
| // reveals some history: we have no mechanism to track when these items were
|
| // created, so we'll clear them all. Better safe than sorry.
|
| if (g_browser_process->io_thread()) {
|
| - waiting_for_clear_networking_history_ = true;
|
| + waiting_for_clear_hostname_resolution_cache_ = true;
|
| BrowserThread::PostTask(
|
| BrowserThread::IO, FROM_HERE,
|
| - base::Bind(&BrowsingDataRemover::ClearNetworkingHistory,
|
| - base::Unretained(this), g_browser_process->io_thread()));
|
| + base::Bind(
|
| + &BrowsingDataRemover::ClearHostnameResolutionCacheOnIOThread,
|
| + base::Unretained(this),
|
| + g_browser_process->io_thread()));
|
| + }
|
| + if (profile_->GetNetworkPredictor()) {
|
| + waiting_for_clear_network_predictor_ = true;
|
| + BrowserThread::PostTask(
|
| + BrowserThread::IO, FROM_HERE,
|
| + base::Bind(&BrowsingDataRemover::ClearNetworkPredictorOnIOThread,
|
| + base::Unretained(this)));
|
| }
|
|
|
| // As part of history deletion we also delete the auto-generated keywords.
|
| @@ -490,11 +501,13 @@ void BrowsingDataRemover::RemoveImpl(int remove_mask,
|
| pepper_flash_settings_manager_->DeauthorizeContentLicenses();
|
| }
|
|
|
| - // Also delete cached network related data (like TransportSecurityState,
|
| - // HttpServerProperties data).
|
| - profile_->ClearNetworkingHistorySince(delete_begin_);
|
| -
|
| - NotifyAndDeleteIfDone();
|
| + // Always wipe accumulated network related data (TransportSecurityState and
|
| + // HttpServerPropertiesManager data).
|
| + waiting_for_clear_networking_history_ = true;
|
| + profile_->ClearNetworkingHistorySince(
|
| + delete_begin_,
|
| + base::Bind(&BrowsingDataRemover::OnClearedNetworkingHistory,
|
| + base::Unretained(this)));
|
| }
|
|
|
| void BrowsingDataRemover::AddObserver(Observer* observer) {
|
| @@ -555,7 +568,9 @@ bool BrowsingDataRemover::AllDone() {
|
| !waiting_for_clear_plugin_data_ &&
|
| !waiting_for_clear_quota_managed_data_ &&
|
| !waiting_for_clear_content_licenses_ &&
|
| - !waiting_for_clear_form_;
|
| + !waiting_for_clear_form_ &&
|
| + !waiting_for_clear_hostname_resolution_cache_ &&
|
| + !waiting_for_clear_network_predictor_;
|
| }
|
|
|
| void BrowsingDataRemover::Observe(int type,
|
| @@ -595,18 +610,35 @@ void BrowsingDataRemover::NotifyAndDeleteIfDone() {
|
| MessageLoop::current()->DeleteSoon(FROM_HERE, this);
|
| }
|
|
|
| -void BrowsingDataRemover::ClearedNetworkHistory() {
|
| - waiting_for_clear_networking_history_ = false;
|
| -
|
| +void BrowsingDataRemover::OnClearedHostnameResolutionCache() {
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| + waiting_for_clear_hostname_resolution_cache_ = false;
|
| NotifyAndDeleteIfDone();
|
| }
|
|
|
| -void BrowsingDataRemover::ClearNetworkingHistory(IOThread* io_thread) {
|
| - // This function should be called on the IO thread.
|
| +void BrowsingDataRemover::ClearHostnameResolutionCacheOnIOThread(
|
| + IOThread* io_thread) {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
|
|
|
| io_thread->ClearHostCache();
|
|
|
| + // Notify the UI thread that we are done.
|
| + BrowserThread::PostTask(
|
| + BrowserThread::UI,
|
| + FROM_HERE,
|
| + base::Bind(&BrowsingDataRemover::OnClearedHostnameResolutionCache,
|
| + base::Unretained(this)));
|
| +}
|
| +
|
| +void BrowsingDataRemover::OnClearedNetworkPredictor() {
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| + waiting_for_clear_network_predictor_ = false;
|
| + NotifyAndDeleteIfDone();
|
| +}
|
| +
|
| +void BrowsingDataRemover::ClearNetworkPredictorOnIOThread() {
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
|
| +
|
| chrome_browser_net::Predictor* predictor = profile_->GetNetworkPredictor();
|
| if (predictor) {
|
| predictor->DiscardInitialNavigationHistory();
|
| @@ -615,11 +647,18 @@ void BrowsingDataRemover::ClearNetworkingHistory(IOThread* io_thread) {
|
|
|
| // Notify the UI thread that we are done.
|
| BrowserThread::PostTask(
|
| - BrowserThread::UI, FROM_HERE,
|
| - base::Bind(&BrowsingDataRemover::ClearedNetworkHistory,
|
| + BrowserThread::UI,
|
| + FROM_HERE,
|
| + base::Bind(&BrowsingDataRemover::OnClearedNetworkPredictor,
|
| base::Unretained(this)));
|
| }
|
|
|
| +void BrowsingDataRemover::OnClearedNetworkingHistory() {
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| + waiting_for_clear_networking_history_ = false;
|
| + NotifyAndDeleteIfDone();
|
| +}
|
| +
|
| void BrowsingDataRemover::ClearedCache() {
|
| waiting_for_clear_cache_ = false;
|
|
|
|
|