Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/browsing_data_remover.h" | 5 #include "chrome/browser/browsing_data_remover.h" |
| 6 | 6 |
| 7 #include <map> | 7 #include <map> |
| 8 #include <set> | 8 #include <set> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 27 matching lines...) Expand all Loading... | |
| 38 #include "chrome/browser/sessions/tab_restore_service.h" | 38 #include "chrome/browser/sessions/tab_restore_service.h" |
| 39 #include "chrome/browser/sessions/tab_restore_service_factory.h" | 39 #include "chrome/browser/sessions/tab_restore_service_factory.h" |
| 40 #include "chrome/browser/webdata/web_data_service.h" | 40 #include "chrome/browser/webdata/web_data_service.h" |
| 41 #include "chrome/common/chrome_notification_types.h" | 41 #include "chrome/common/chrome_notification_types.h" |
| 42 #include "chrome/common/pref_names.h" | 42 #include "chrome/common/pref_names.h" |
| 43 #include "chrome/common/url_constants.h" | 43 #include "chrome/common/url_constants.h" |
| 44 #include "content/browser/download/download_manager.h" | 44 #include "content/browser/download/download_manager.h" |
| 45 #include "content/browser/in_process_webkit/webkit_context.h" | 45 #include "content/browser/in_process_webkit/webkit_context.h" |
| 46 #include "content/browser/user_metrics.h" | 46 #include "content/browser/user_metrics.h" |
| 47 #include "content/public/browser/browser_thread.h" | 47 #include "content/public/browser/browser_thread.h" |
| 48 #include "content/public/browser/notification_source.h" | 48 #include "content/public/browser/notification_service.h" |
| 49 #include "content/public/browser/plugin_data_remover.h" | 49 #include "content/public/browser/plugin_data_remover.h" |
| 50 #include "net/base/cookie_monster.h" | 50 #include "net/base/cookie_monster.h" |
| 51 #include "net/base/net_errors.h" | 51 #include "net/base/net_errors.h" |
| 52 #include "net/base/transport_security_state.h" | 52 #include "net/base/transport_security_state.h" |
| 53 #include "net/disk_cache/disk_cache.h" | 53 #include "net/disk_cache/disk_cache.h" |
| 54 #include "net/http/http_cache.h" | 54 #include "net/http/http_cache.h" |
| 55 #include "net/url_request/url_request_context.h" | 55 #include "net/url_request/url_request_context.h" |
| 56 #include "net/url_request/url_request_context_getter.h" | 56 #include "net/url_request/url_request_context_getter.h" |
| 57 #include "webkit/quota/quota_manager.h" | 57 #include "webkit/quota/quota_manager.h" |
| 58 #include "webkit/quota/quota_types.h" | 58 #include "webkit/quota/quota_types.h" |
| 59 | 59 |
| 60 using content::BrowserThread; | 60 using content::BrowserThread; |
| 61 | 61 |
| 62 // Done so that we can use PostTask on BrowsingDataRemovers and not have | 62 // Done so that we can use PostTask on BrowsingDataRemovers and not have |
| 63 // BrowsingDataRemover implement RefCounted. | 63 // BrowsingDataRemover implement RefCounted. |
| 64 DISABLE_RUNNABLE_METHOD_REFCOUNT(BrowsingDataRemover); | 64 DISABLE_RUNNABLE_METHOD_REFCOUNT(BrowsingDataRemover); |
| 65 | 65 |
| 66 bool BrowsingDataRemover::removing_ = false; | 66 bool BrowsingDataRemover::removing_ = false; |
| 67 | 67 |
| 68 BrowsingDataRemover::NotificationDetail::NotificationDetail( | |
| 69 base::Time removal_begin, | |
| 70 int removal_mask) | |
| 71 : removal_begin(removal_begin), | |
| 72 removal_mask(removal_mask) { | |
| 73 } | |
| 74 | |
| 75 BrowsingDataRemover::NotificationDetail::~NotificationDetail() {} | |
| 76 | |
| 68 BrowsingDataRemover::BrowsingDataRemover(Profile* profile, | 77 BrowsingDataRemover::BrowsingDataRemover(Profile* profile, |
| 69 base::Time delete_begin, | 78 base::Time delete_begin, |
| 70 base::Time delete_end) | 79 base::Time delete_end) |
| 71 : profile_(profile), | 80 : profile_(profile), |
| 72 quota_manager_(NULL), | 81 quota_manager_(NULL), |
| 73 special_storage_policy_(profile->GetExtensionSpecialStoragePolicy()), | 82 special_storage_policy_(profile->GetExtensionSpecialStoragePolicy()), |
| 74 delete_begin_(delete_begin), | 83 delete_begin_(delete_begin), |
| 75 delete_end_(delete_end), | 84 delete_end_(delete_end), |
| 76 ALLOW_THIS_IN_INITIALIZER_LIST(cache_callback_( | 85 ALLOW_THIS_IN_INITIALIZER_LIST(cache_callback_( |
| 77 this, &BrowsingDataRemover::DoClearCache)), | 86 this, &BrowsingDataRemover::DoClearCache)), |
| 78 next_cache_state_(STATE_NONE), | 87 next_cache_state_(STATE_NONE), |
| 79 cache_(NULL), | 88 cache_(NULL), |
| 80 main_context_getter_(profile->GetRequestContext()), | 89 main_context_getter_(profile->GetRequestContext()), |
| 81 media_context_getter_(profile->GetRequestContextForMedia()), | 90 media_context_getter_(profile->GetRequestContextForMedia()), |
| 82 waiting_for_clear_history_(false), | 91 waiting_for_clear_history_(false), |
| 83 waiting_for_clear_quota_managed_data_(false), | 92 waiting_for_clear_quota_managed_data_(false), |
| 84 waiting_for_clear_networking_history_(false), | 93 waiting_for_clear_networking_history_(false), |
| 85 waiting_for_clear_cookies_(false), | 94 waiting_for_clear_cookies_(false), |
| 86 waiting_for_clear_cache_(false), | 95 waiting_for_clear_cache_(false), |
| 87 waiting_for_clear_lso_data_(false) { | 96 waiting_for_clear_lso_data_(false), |
| 97 remove_mask_(0) { | |
| 88 DCHECK(profile); | 98 DCHECK(profile); |
| 89 } | 99 } |
| 90 | 100 |
| 91 BrowsingDataRemover::BrowsingDataRemover(Profile* profile, | 101 BrowsingDataRemover::BrowsingDataRemover(Profile* profile, |
| 92 TimePeriod time_period, | 102 TimePeriod time_period, |
| 93 base::Time delete_end) | 103 base::Time delete_end) |
| 94 : profile_(profile), | 104 : profile_(profile), |
| 95 quota_manager_(NULL), | 105 quota_manager_(NULL), |
| 96 special_storage_policy_(profile->GetExtensionSpecialStoragePolicy()), | 106 special_storage_policy_(profile->GetExtensionSpecialStoragePolicy()), |
| 97 delete_begin_(CalculateBeginDeleteTime(time_period)), | 107 delete_begin_(CalculateBeginDeleteTime(time_period)), |
| 98 delete_end_(delete_end), | 108 delete_end_(delete_end), |
| 99 ALLOW_THIS_IN_INITIALIZER_LIST(cache_callback_( | 109 ALLOW_THIS_IN_INITIALIZER_LIST(cache_callback_( |
| 100 this, &BrowsingDataRemover::DoClearCache)), | 110 this, &BrowsingDataRemover::DoClearCache)), |
| 101 next_cache_state_(STATE_NONE), | 111 next_cache_state_(STATE_NONE), |
| 102 cache_(NULL), | 112 cache_(NULL), |
| 103 main_context_getter_(profile->GetRequestContext()), | 113 main_context_getter_(profile->GetRequestContext()), |
| 104 media_context_getter_(profile->GetRequestContextForMedia()), | 114 media_context_getter_(profile->GetRequestContextForMedia()), |
| 105 waiting_for_clear_history_(false), | 115 waiting_for_clear_history_(false), |
| 106 waiting_for_clear_quota_managed_data_(false), | 116 waiting_for_clear_quota_managed_data_(false), |
| 107 waiting_for_clear_networking_history_(false), | 117 waiting_for_clear_networking_history_(false), |
| 108 waiting_for_clear_cookies_(false), | 118 waiting_for_clear_cookies_(false), |
| 109 waiting_for_clear_cache_(false), | 119 waiting_for_clear_cache_(false), |
| 110 waiting_for_clear_lso_data_(false) { | 120 waiting_for_clear_lso_data_(false), |
| 121 remove_mask_(0) { | |
| 111 DCHECK(profile); | 122 DCHECK(profile); |
| 112 } | 123 } |
| 113 | 124 |
| 114 BrowsingDataRemover::~BrowsingDataRemover() { | 125 BrowsingDataRemover::~BrowsingDataRemover() { |
| 115 DCHECK(all_done()); | 126 DCHECK(all_done()); |
| 116 } | 127 } |
| 117 | 128 |
| 118 // Static. | 129 // Static. |
| 119 void BrowsingDataRemover::set_removing(bool removing) { | 130 void BrowsingDataRemover::set_removing(bool removing) { |
| 120 DCHECK(removing_ != removing); | 131 DCHECK(removing_ != removing); |
| 121 removing_ = removing; | 132 removing_ = removing; |
| 122 } | 133 } |
| 123 | 134 |
| 124 void BrowsingDataRemover::Remove(int remove_mask) { | 135 void BrowsingDataRemover::Remove(int remove_mask) { |
| 125 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 136 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 126 set_removing(true); | 137 set_removing(true); |
| 138 remove_mask_ = remove_mask; | |
| 127 | 139 |
| 128 if (remove_mask & REMOVE_HISTORY) { | 140 if (remove_mask & REMOVE_HISTORY) { |
| 129 HistoryService* history_service = | 141 HistoryService* history_service = |
| 130 profile_->GetHistoryService(Profile::EXPLICIT_ACCESS); | 142 profile_->GetHistoryService(Profile::EXPLICIT_ACCESS); |
| 131 if (history_service) { | 143 if (history_service) { |
| 132 std::set<GURL> restrict_urls; | 144 std::set<GURL> restrict_urls; |
| 133 UserMetrics::RecordAction(UserMetricsAction("ClearBrowsingData_History")); | 145 UserMetrics::RecordAction(UserMetricsAction("ClearBrowsingData_History")); |
| 134 waiting_for_clear_history_ = true; | 146 waiting_for_clear_history_ = true; |
| 135 history_service->ExpireHistoryBetween(restrict_urls, | 147 history_service->ExpireHistoryBetween(restrict_urls, |
| 136 delete_begin_, delete_end_, | 148 delete_begin_, delete_end_, |
| (...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 363 return; | 375 return; |
| 364 | 376 |
| 365 // The NetLog contains download history, but may also contain form data, | 377 // The NetLog contains download history, but may also contain form data, |
| 366 // cookies and passwords. Simplest just to always clear it. Must be cleared | 378 // cookies and passwords. Simplest just to always clear it. Must be cleared |
| 367 // after the cache, as cleaning up the disk cache exposes some of the history | 379 // after the cache, as cleaning up the disk cache exposes some of the history |
| 368 // in the NetLog. | 380 // in the NetLog. |
| 369 if (g_browser_process->net_log()) | 381 if (g_browser_process->net_log()) |
| 370 g_browser_process->net_log()->ClearAllPassivelyCapturedEvents(); | 382 g_browser_process->net_log()->ClearAllPassivelyCapturedEvents(); |
| 371 | 383 |
| 372 set_removing(false); | 384 set_removing(false); |
| 385 | |
| 386 // Send global notification, then notify any explicit observers. | |
| 387 BrowsingDataRemover::NotificationDetail details(delete_begin_, remove_mask_); | |
| 388 content::NotificationService::current()->Notify( | |
| 389 chrome::NOTIFICATION_BROWSING_DATA_REMOVED, | |
| 390 content::Source<Profile>(profile_->GetOriginalProfile()), | |
|
jochen (gone - plz use gerrit)
2011/12/13 13:18:48
can you invoke the browsing data deleter on the in
Mike West
2011/12/13 14:23:26
Yup. I should just use the profile here, not the o
| |
| 391 content::Details<BrowsingDataRemover::NotificationDetail>(&details)); | |
| 392 | |
| 373 FOR_EACH_OBSERVER(Observer, observer_list_, OnBrowsingDataRemoverDone()); | 393 FOR_EACH_OBSERVER(Observer, observer_list_, OnBrowsingDataRemoverDone()); |
| 374 | 394 |
| 375 // History requests aren't happy if you delete yourself from the callback. | 395 // History requests aren't happy if you delete yourself from the callback. |
| 376 // As such, we do a delete later. | 396 // As such, we do a delete later. |
| 377 MessageLoop::current()->DeleteSoon(FROM_HERE, this); | 397 MessageLoop::current()->DeleteSoon(FROM_HERE, this); |
| 378 } | 398 } |
| 379 | 399 |
| 380 void BrowsingDataRemover::ClearedNetworkHistory() { | 400 void BrowsingDataRemover::ClearedNetworkHistory() { |
| 381 waiting_for_clear_networking_history_ = false; | 401 waiting_for_clear_networking_history_ = false; |
| 382 | 402 |
| (...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 586 GetURLRequestContext()->cookie_store()->GetCookieMonster(); | 606 GetURLRequestContext()->cookie_store()->GetCookieMonster(); |
| 587 if (cookie_monster) { | 607 if (cookie_monster) { |
| 588 cookie_monster->DeleteAllCreatedBetweenAsync( | 608 cookie_monster->DeleteAllCreatedBetweenAsync( |
| 589 delete_begin_, delete_end_, | 609 delete_begin_, delete_end_, |
| 590 base::Bind(&BrowsingDataRemover::OnClearedCookies, | 610 base::Bind(&BrowsingDataRemover::OnClearedCookies, |
| 591 base::Unretained(this))); | 611 base::Unretained(this))); |
| 592 } else { | 612 } else { |
| 593 OnClearedCookies(0); | 613 OnClearedCookies(0); |
| 594 } | 614 } |
| 595 } | 615 } |
| OLD | NEW |