OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/browsing_data_remover.h" | 5 #include "chrome/browser/browsing_data/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 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
60 #include "content/public/browser/plugin_data_remover.h" | 60 #include "content/public/browser/plugin_data_remover.h" |
61 #include "content/public/browser/session_storage_usage_info.h" | 61 #include "content/public/browser/session_storage_usage_info.h" |
62 #include "content/public/browser/storage_partition.h" | 62 #include "content/public/browser/storage_partition.h" |
63 #include "content/public/browser/user_metrics.h" | 63 #include "content/public/browser/user_metrics.h" |
64 #include "net/base/net_errors.h" | 64 #include "net/base/net_errors.h" |
65 #include "net/base/sdch_manager.h" | 65 #include "net/base/sdch_manager.h" |
66 #include "net/cookies/cookie_store.h" | 66 #include "net/cookies/cookie_store.h" |
67 #include "net/disk_cache/disk_cache.h" | 67 #include "net/disk_cache/disk_cache.h" |
68 #include "net/http/http_cache.h" | 68 #include "net/http/http_cache.h" |
69 #include "net/http/transport_security_state.h" | 69 #include "net/http/transport_security_state.h" |
70 #include "net/ssl/server_bound_cert_service.h" | 70 #include "net/ssl/channel_id_service.h" |
71 #include "net/ssl/server_bound_cert_store.h" | 71 #include "net/ssl/channel_id_store.h" |
72 #include "net/url_request/url_request_context.h" | 72 #include "net/url_request/url_request_context.h" |
73 #include "net/url_request/url_request_context_getter.h" | 73 #include "net/url_request/url_request_context_getter.h" |
74 #include "webkit/browser/quota/quota_manager.h" | 74 #include "webkit/browser/quota/quota_manager.h" |
75 #include "webkit/browser/quota/special_storage_policy.h" | 75 #include "webkit/browser/quota/special_storage_policy.h" |
76 #include "webkit/common/quota/quota_types.h" | 76 #include "webkit/common/quota/quota_types.h" |
77 | 77 |
78 #if defined(OS_CHROMEOS) | 78 #if defined(OS_CHROMEOS) |
79 #include "chrome/browser/chromeos/login/users/user_manager.h" | 79 #include "chrome/browser/chromeos/login/users/user_manager.h" |
80 #include "chrome/browser/chromeos/profiles/profile_helper.h" | 80 #include "chrome/browser/chromeos/profiles/profile_helper.h" |
81 #include "chromeos/attestation/attestation_constants.h" | 81 #include "chromeos/attestation/attestation_constants.h" |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
187 special_storage_policy_(profile->GetExtensionSpecialStoragePolicy()), | 187 special_storage_policy_(profile->GetExtensionSpecialStoragePolicy()), |
188 delete_begin_(delete_begin), | 188 delete_begin_(delete_begin), |
189 delete_end_(delete_end), | 189 delete_end_(delete_end), |
190 next_cache_state_(STATE_NONE), | 190 next_cache_state_(STATE_NONE), |
191 cache_(NULL), | 191 cache_(NULL), |
192 main_context_getter_(profile->GetRequestContext()), | 192 main_context_getter_(profile->GetRequestContext()), |
193 media_context_getter_(profile->GetMediaRequestContext()), | 193 media_context_getter_(profile->GetMediaRequestContext()), |
194 deauthorize_content_licenses_request_id_(0), | 194 deauthorize_content_licenses_request_id_(0), |
195 waiting_for_clear_autofill_origin_urls_(false), | 195 waiting_for_clear_autofill_origin_urls_(false), |
196 waiting_for_clear_cache_(false), | 196 waiting_for_clear_cache_(false), |
| 197 waiting_for_clear_channel_ids_(false), |
197 waiting_for_clear_content_licenses_(false), | 198 waiting_for_clear_content_licenses_(false), |
198 waiting_for_clear_cookies_count_(0), | 199 waiting_for_clear_cookies_count_(0), |
199 waiting_for_clear_domain_reliability_monitor_(false), | 200 waiting_for_clear_domain_reliability_monitor_(false), |
200 waiting_for_clear_form_(false), | 201 waiting_for_clear_form_(false), |
201 waiting_for_clear_history_(false), | 202 waiting_for_clear_history_(false), |
202 waiting_for_clear_hostname_resolution_cache_(false), | 203 waiting_for_clear_hostname_resolution_cache_(false), |
203 waiting_for_clear_keyword_data_(false), | 204 waiting_for_clear_keyword_data_(false), |
204 waiting_for_clear_logged_in_predictor_(false), | 205 waiting_for_clear_logged_in_predictor_(false), |
205 waiting_for_clear_nacl_cache_(false), | 206 waiting_for_clear_nacl_cache_(false), |
206 waiting_for_clear_network_predictor_(false), | 207 waiting_for_clear_network_predictor_(false), |
207 waiting_for_clear_networking_history_(false), | 208 waiting_for_clear_networking_history_(false), |
208 waiting_for_clear_platform_keys_(false), | 209 waiting_for_clear_platform_keys_(false), |
209 waiting_for_clear_plugin_data_(false), | 210 waiting_for_clear_plugin_data_(false), |
210 waiting_for_clear_pnacl_cache_(false), | 211 waiting_for_clear_pnacl_cache_(false), |
211 waiting_for_clear_server_bound_certs_(false), | |
212 waiting_for_clear_storage_partition_data_(false), | 212 waiting_for_clear_storage_partition_data_(false), |
213 #if defined(ENABLE_WEBRTC) | 213 #if defined(ENABLE_WEBRTC) |
214 waiting_for_clear_webrtc_logs_(false), | 214 waiting_for_clear_webrtc_logs_(false), |
215 #endif | 215 #endif |
216 remove_mask_(0), | 216 remove_mask_(0), |
217 remove_origin_(GURL()), | 217 remove_origin_(GURL()), |
218 origin_set_mask_(0), | 218 origin_set_mask_(0), |
219 storage_partition_for_testing_(NULL) { | 219 storage_partition_for_testing_(NULL) { |
220 DCHECK(profile); | 220 DCHECK(profile); |
221 // crbug.com/140910: Many places were calling this with base::Time() as | 221 // crbug.com/140910: Many places were calling this with base::Time() as |
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
451 BrowserThread::PostTask( | 451 BrowserThread::PostTask( |
452 BrowserThread::IO, FROM_HERE, | 452 BrowserThread::IO, FROM_HERE, |
453 base::Bind(&BrowsingDataRemover::ClearCookiesOnIOThread, | 453 base::Bind(&BrowsingDataRemover::ClearCookiesOnIOThread, |
454 base::Unretained(this), base::Unretained(sb_context))); | 454 base::Unretained(this), base::Unretained(sb_context))); |
455 } | 455 } |
456 } | 456 } |
457 #endif | 457 #endif |
458 MediaDeviceIDSalt::Reset(profile_->GetPrefs()); | 458 MediaDeviceIDSalt::Reset(profile_->GetPrefs()); |
459 } | 459 } |
460 | 460 |
461 // Server bound certs are not separated for protected and unprotected web | 461 // Channel IDs are not separated for protected and unprotected web |
462 // origins. We check the origin_set_mask_ to prevent unintended deletion. | 462 // origins. We check the origin_set_mask_ to prevent unintended deletion. |
463 if (remove_mask & REMOVE_SERVER_BOUND_CERTS && | 463 if (remove_mask & REMOVE_CHANNEL_IDS && |
464 origin_set_mask_ & BrowsingDataHelper::UNPROTECTED_WEB) { | 464 origin_set_mask_ & BrowsingDataHelper::UNPROTECTED_WEB) { |
465 content::RecordAction( | 465 content::RecordAction( |
466 UserMetricsAction("ClearBrowsingData_ServerBoundCerts")); | 466 UserMetricsAction("ClearBrowsingData_ChannelIDs")); |
467 // Since we are running on the UI thread don't call GetURLRequestContext(). | 467 // Since we are running on the UI thread don't call GetURLRequestContext(). |
468 net::URLRequestContextGetter* rq_context = profile_->GetRequestContext(); | 468 net::URLRequestContextGetter* rq_context = profile_->GetRequestContext(); |
469 if (rq_context) { | 469 if (rq_context) { |
470 waiting_for_clear_server_bound_certs_ = true; | 470 waiting_for_clear_channel_ids_ = true; |
471 BrowserThread::PostTask( | 471 BrowserThread::PostTask( |
472 BrowserThread::IO, FROM_HERE, | 472 BrowserThread::IO, FROM_HERE, |
473 base::Bind(&BrowsingDataRemover::ClearServerBoundCertsOnIOThread, | 473 base::Bind(&BrowsingDataRemover::ClearChannelIDsOnIOThread, |
474 base::Unretained(this), base::Unretained(rq_context))); | 474 base::Unretained(this), base::Unretained(rq_context))); |
475 } | 475 } |
476 } | 476 } |
477 | 477 |
478 if (remove_mask & REMOVE_LOCAL_STORAGE) { | 478 if (remove_mask & REMOVE_LOCAL_STORAGE) { |
479 storage_partition_remove_mask |= | 479 storage_partition_remove_mask |= |
480 content::StoragePartition::REMOVE_DATA_MASK_LOCAL_STORAGE; | 480 content::StoragePartition::REMOVE_DATA_MASK_LOCAL_STORAGE; |
481 } | 481 } |
482 | 482 |
483 if (remove_mask & REMOVE_INDEXEDDB) { | 483 if (remove_mask & REMOVE_INDEXEDDB) { |
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
747 delete_begin_time = base::Time(); | 747 delete_begin_time = base::Time(); |
748 break; | 748 break; |
749 default: | 749 default: |
750 NOTREACHED() << L"Missing item"; | 750 NOTREACHED() << L"Missing item"; |
751 break; | 751 break; |
752 } | 752 } |
753 return delete_begin_time - diff; | 753 return delete_begin_time - diff; |
754 } | 754 } |
755 | 755 |
756 bool BrowsingDataRemover::AllDone() { | 756 bool BrowsingDataRemover::AllDone() { |
757 return !waiting_for_clear_keyword_data_ && | 757 return !waiting_for_clear_autofill_origin_urls_ && |
758 !waiting_for_clear_autofill_origin_urls_ && | 758 !waiting_for_clear_cache_ && |
759 !waiting_for_clear_cache_ && !waiting_for_clear_nacl_cache_ && | 759 !waiting_for_clear_content_licenses_ && |
760 !waiting_for_clear_cookies_count_ && !waiting_for_clear_history_ && | 760 !waiting_for_clear_channel_ids_ && |
| 761 !waiting_for_clear_cookies_count_ && |
761 !waiting_for_clear_domain_reliability_monitor_ && | 762 !waiting_for_clear_domain_reliability_monitor_ && |
| 763 !waiting_for_clear_form_ && |
| 764 !waiting_for_clear_history_ && |
| 765 !waiting_for_clear_hostname_resolution_cache_ && |
| 766 !waiting_for_clear_keyword_data_ && |
762 !waiting_for_clear_logged_in_predictor_ && | 767 !waiting_for_clear_logged_in_predictor_ && |
| 768 !waiting_for_clear_nacl_cache_ && |
| 769 !waiting_for_clear_network_predictor_ && |
763 !waiting_for_clear_networking_history_ && | 770 !waiting_for_clear_networking_history_ && |
764 !waiting_for_clear_server_bound_certs_ && | 771 !waiting_for_clear_platform_keys_ && |
765 !waiting_for_clear_plugin_data_ && | 772 !waiting_for_clear_plugin_data_ && |
766 !waiting_for_clear_pnacl_cache_ && | 773 !waiting_for_clear_pnacl_cache_ && |
767 !waiting_for_clear_content_licenses_ && !waiting_for_clear_form_ && | |
768 !waiting_for_clear_hostname_resolution_cache_ && | |
769 !waiting_for_clear_network_predictor_ && | |
770 !waiting_for_clear_platform_keys_ && | |
771 #if defined(ENABLE_WEBRTC) | 774 #if defined(ENABLE_WEBRTC) |
772 !waiting_for_clear_webrtc_logs_ && | 775 !waiting_for_clear_webrtc_logs_ && |
773 #endif | 776 #endif |
774 !waiting_for_clear_storage_partition_data_; | 777 !waiting_for_clear_storage_partition_data_; |
775 } | 778 } |
776 | 779 |
777 void BrowsingDataRemover::OnKeywordsLoaded() { | 780 void BrowsingDataRemover::OnKeywordsLoaded() { |
778 // Deletes the entries from the model, and if we're not waiting on anything | 781 // Deletes the entries from the model, and if we're not waiting on anything |
779 // else notifies observers and deletes this BrowsingDataRemover. | 782 // else notifies observers and deletes this BrowsingDataRemover. |
780 TemplateURLService* model = | 783 TemplateURLService* model = |
(...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1110 net::URLRequestContextGetter* rq_context) { | 1113 net::URLRequestContextGetter* rq_context) { |
1111 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 1114 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
1112 net::CookieStore* cookie_store = rq_context-> | 1115 net::CookieStore* cookie_store = rq_context-> |
1113 GetURLRequestContext()->cookie_store(); | 1116 GetURLRequestContext()->cookie_store(); |
1114 cookie_store->DeleteAllCreatedBetweenAsync( | 1117 cookie_store->DeleteAllCreatedBetweenAsync( |
1115 delete_begin_, delete_end_, | 1118 delete_begin_, delete_end_, |
1116 base::Bind(&BrowsingDataRemover::OnClearedCookies, | 1119 base::Bind(&BrowsingDataRemover::OnClearedCookies, |
1117 base::Unretained(this))); | 1120 base::Unretained(this))); |
1118 } | 1121 } |
1119 | 1122 |
1120 void BrowsingDataRemover::ClearServerBoundCertsOnIOThread( | 1123 void BrowsingDataRemover::ClearChannelIDsOnIOThread( |
1121 net::URLRequestContextGetter* rq_context) { | 1124 net::URLRequestContextGetter* rq_context) { |
1122 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 1125 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
1123 net::ServerBoundCertService* server_bound_cert_service = | 1126 net::ChannelIDService* channel_id_service = |
1124 rq_context->GetURLRequestContext()->server_bound_cert_service(); | 1127 rq_context->GetURLRequestContext()->channel_id_service(); |
1125 server_bound_cert_service->GetCertStore()->DeleteAllCreatedBetween( | 1128 channel_id_service->GetChannelIDStore()->DeleteAllCreatedBetween( |
1126 delete_begin_, delete_end_, | 1129 delete_begin_, delete_end_, |
1127 base::Bind(&BrowsingDataRemover::OnClearedServerBoundCertsOnIOThread, | 1130 base::Bind(&BrowsingDataRemover::OnClearedChannelIDsOnIOThread, |
1128 base::Unretained(this), base::Unretained(rq_context))); | 1131 base::Unretained(this), base::Unretained(rq_context))); |
1129 } | 1132 } |
1130 | 1133 |
1131 void BrowsingDataRemover::OnClearedServerBoundCertsOnIOThread( | 1134 void BrowsingDataRemover::OnClearedChannelIDsOnIOThread( |
1132 net::URLRequestContextGetter* rq_context) { | 1135 net::URLRequestContextGetter* rq_context) { |
1133 // Need to close open SSL connections which may be using the channel ids we | 1136 // Need to close open SSL connections which may be using the channel ids we |
1134 // are deleting. | 1137 // are deleting. |
1135 // TODO(mattm): http://crbug.com/166069 Make the server bound cert | 1138 // TODO(mattm): http://crbug.com/166069 Make the server bound cert |
1136 // service/store have observers that can notify relevant things directly. | 1139 // service/store have observers that can notify relevant things directly. |
1137 rq_context->GetURLRequestContext()->ssl_config_service()-> | 1140 rq_context->GetURLRequestContext()->ssl_config_service()-> |
1138 NotifySSLConfigChange(); | 1141 NotifySSLConfigChange(); |
1139 BrowserThread::PostTask( | 1142 BrowserThread::PostTask( |
1140 BrowserThread::UI, FROM_HERE, | 1143 BrowserThread::UI, FROM_HERE, |
1141 base::Bind(&BrowsingDataRemover::OnClearedServerBoundCerts, | 1144 base::Bind(&BrowsingDataRemover::OnClearedChannelIDs, |
1142 base::Unretained(this))); | 1145 base::Unretained(this))); |
1143 } | 1146 } |
1144 | 1147 |
1145 void BrowsingDataRemover::OnClearedServerBoundCerts() { | 1148 void BrowsingDataRemover::OnClearedChannelIDs() { |
1146 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 1149 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
1147 waiting_for_clear_server_bound_certs_ = false; | 1150 waiting_for_clear_channel_ids_ = false; |
1148 NotifyAndDeleteIfDone(); | 1151 NotifyAndDeleteIfDone(); |
1149 } | 1152 } |
1150 | 1153 |
1151 void BrowsingDataRemover::OnClearedFormData() { | 1154 void BrowsingDataRemover::OnClearedFormData() { |
1152 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 1155 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
1153 waiting_for_clear_form_ = false; | 1156 waiting_for_clear_form_ = false; |
1154 NotifyAndDeleteIfDone(); | 1157 NotifyAndDeleteIfDone(); |
1155 } | 1158 } |
1156 | 1159 |
1157 void BrowsingDataRemover::OnClearedAutofillOriginURLs() { | 1160 void BrowsingDataRemover::OnClearedAutofillOriginURLs() { |
(...skipping 14 matching lines...) Expand all Loading... |
1172 waiting_for_clear_webrtc_logs_ = false; | 1175 waiting_for_clear_webrtc_logs_ = false; |
1173 NotifyAndDeleteIfDone(); | 1176 NotifyAndDeleteIfDone(); |
1174 } | 1177 } |
1175 #endif | 1178 #endif |
1176 | 1179 |
1177 void BrowsingDataRemover::OnClearedDomainReliabilityMonitor() { | 1180 void BrowsingDataRemover::OnClearedDomainReliabilityMonitor() { |
1178 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 1181 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
1179 waiting_for_clear_domain_reliability_monitor_ = false; | 1182 waiting_for_clear_domain_reliability_monitor_ = false; |
1180 NotifyAndDeleteIfDone(); | 1183 NotifyAndDeleteIfDone(); |
1181 } | 1184 } |
OLD | NEW |