Chromium Code Reviews| Index: content/browser/storage_partition_impl.cc |
| diff --git a/content/browser/storage_partition_impl.cc b/content/browser/storage_partition_impl.cc |
| index d4ab7735ca4441ea5b1bb4af2b660da4ad3428d1..fbee33d70bea79670fb3dcafe08856453e5cdea8 100644 |
| --- a/content/browser/storage_partition_impl.cc |
| +++ b/content/browser/storage_partition_impl.cc |
| @@ -30,7 +30,7 @@ void DoNothingStatusCallback(quota::QuotaStatusCode status) { |
| void ClearQuotaManagedOriginsOnIOThread( |
| const scoped_refptr<quota::QuotaManager>& quota_manager, |
| const std::set<GURL>& origins, |
| - quota::StorageType type) { |
| + quota::StorageType quota_storage_type) { |
| // The QuotaManager manages all storage other than cookies, LocalStorage, |
| // and SessionStorage. This loop wipes out most HTML5 storage for the given |
| // origins. |
| @@ -38,54 +38,70 @@ void ClearQuotaManagedOriginsOnIOThread( |
| std::set<GURL>::const_iterator origin; |
| for (std::set<GURL>::const_iterator origin = origins.begin(); |
| origin != origins.end(); ++origin) { |
| - quota_manager->DeleteOriginData(*origin, type, |
| + quota_manager->DeleteOriginData(*origin, quota_storage_type, |
| quota::QuotaClient::kAllClientsMask, |
| base::Bind(&DoNothingStatusCallback)); |
| } |
| } |
| void ClearOriginOnIOThread( |
| + uint32 storage_mask, |
| const GURL& storage_origin, |
| const scoped_refptr<net::URLRequestContextGetter>& request_context, |
| const scoped_refptr<quota::QuotaManager>& quota_manager) { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| - // Handle the cookies. |
| - net::CookieMonster* cookie_monster = |
| - request_context->GetURLRequestContext()->cookie_store()-> |
| - GetCookieMonster(); |
| - if (cookie_monster) |
| - cookie_monster->DeleteAllForHostAsync( |
| - storage_origin, net::CookieMonster::DeleteCallback()); |
| + if (storage_mask & StoragePartition::kCookies) { |
| + // Handle the cookies. |
| + net::CookieMonster* cookie_monster = |
| + request_context->GetURLRequestContext()->cookie_store()-> |
| + GetCookieMonster(); |
| + if (cookie_monster) |
| + cookie_monster->DeleteAllForHostAsync( |
| + storage_origin, net::CookieMonster::DeleteCallback()); |
| + } |
| // Handle all HTML5 storage other than DOMStorageContext. |
| std::set<GURL> origins; |
| origins.insert(storage_origin); |
| - ClearQuotaManagedOriginsOnIOThread(quota_manager, origins, |
| - quota::kStorageTypePersistent); |
| - ClearQuotaManagedOriginsOnIOThread(quota_manager, origins, |
| - quota::kStorageTypeTemporary); |
| + if (storage_mask & StoragePartition::kQuotaManagedTemporaryStorage) { |
| + ClearQuotaManagedOriginsOnIOThread(quota_manager, |
| + origins, |
| + quota::kStorageTypeTemporary); |
| + } |
| + if (storage_mask & StoragePartition::kQuotaManagedPersistentStorage) { |
| + ClearQuotaManagedOriginsOnIOThread(quota_manager, |
| + origins, |
| + quota::kStorageTypePersistent); |
| + } |
| } |
| void ClearAllDataOnIOThread( |
| + uint32 storage_mask, |
| const scoped_refptr<net::URLRequestContextGetter>& request_context, |
| const scoped_refptr<quota::QuotaManager>& quota_manager) { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| - // Handle the cookies. |
| - net::CookieMonster* cookie_monster = |
| - request_context->GetURLRequestContext()->cookie_store()-> |
| - GetCookieMonster(); |
| - if (cookie_monster) |
| - cookie_monster->DeleteAllAsync(net::CookieMonster::DeleteCallback()); |
| + if (storage_mask & StoragePartition::kCookies) { |
| + // Handle the cookies. |
| + net::CookieMonster* cookie_monster = |
| + request_context->GetURLRequestContext()->cookie_store()-> |
| + GetCookieMonster(); |
| + if (cookie_monster) |
| + cookie_monster->DeleteAllAsync(net::CookieMonster::DeleteCallback()); |
| + } |
| // Handle all HTML5 storage other than DOMStorageContext. |
| - quota_manager->GetOriginsModifiedSince( |
| - quota::kStorageTypePersistent, base::Time(), |
| - base::Bind(&ClearQuotaManagedOriginsOnIOThread, quota_manager)); |
| - quota_manager->GetOriginsModifiedSince( |
| - quota::kStorageTypeTemporary, base::Time(), |
| - base::Bind(&ClearQuotaManagedOriginsOnIOThread, quota_manager)); |
| + if (storage_mask & StoragePartition::kQuotaManagedTemporaryStorage) { |
| + quota_manager->GetOriginsModifiedSince( |
| + quota::kStorageTypeTemporary, base::Time(), |
| + base::Bind(&ClearQuotaManagedOriginsOnIOThread, quota_manager)); |
| + } |
| + if (storage_mask & StoragePartition::kQuotaManagedPersistentStorage) { |
| + quota_manager->GetOriginsModifiedSince( |
| + quota::kStorageTypePersistent, base::Time(), |
| + base::Bind(&ClearQuotaManagedOriginsOnIOThread, quota_manager)); |
| + } |
| } |
| void OnLocalStorageUsageInfo( |
| @@ -237,6 +253,7 @@ IndexedDBContextImpl* StoragePartitionImpl::GetIndexedDBContext() { |
| } |
| void StoragePartitionImpl::AsyncClearDataForOrigin( |
| + uint32 storage_mask, |
| const GURL& storage_origin, |
| net::URLRequestContextGetter* request_context_getter) { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| @@ -244,27 +261,36 @@ void StoragePartitionImpl::AsyncClearDataForOrigin( |
| BrowserThread::PostTask( |
| BrowserThread::IO, FROM_HERE, |
| base::Bind(&ClearOriginOnIOThread, |
| + storage_mask, |
| storage_origin, |
| make_scoped_refptr(request_context_getter), |
| quota_manager_)); |
| - GetDOMStorageContext()->DeleteLocalStorage(storage_origin); |
| + if (storage_mask & kLocalDomStorage) |
| + GetDOMStorageContext()->DeleteLocalStorage(storage_origin); |
|
boliu
2013/03/04 23:39:27
Dom session storage is not explicitly cleared here
awong
2013/03/04 23:44:28
Good catch. That is indeed a mistake.
boliu
2013/03/05 00:00:00
And I promise to send a follow up patch...
|
| } |
| -void StoragePartitionImpl::AsyncClearAllData() { |
| +void StoragePartitionImpl::AsyncClearData(uint32 storage_mask) { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| // We ignore the media request context because it shares the same cookie store |
| // as the main request context. |
| BrowserThread::PostTask( |
| BrowserThread::IO, FROM_HERE, |
| - base::Bind(&ClearAllDataOnIOThread, url_request_context_, |
| + base::Bind(&ClearAllDataOnIOThread, |
| + storage_mask, |
| + url_request_context_, |
| quota_manager_)); |
| - dom_storage_context_->GetLocalStorageUsage( |
| - base::Bind(&OnLocalStorageUsageInfo, dom_storage_context_)); |
| - dom_storage_context_->GetSessionStorageUsage( |
| - base::Bind(&OnSessionStorageUsageInfo, dom_storage_context_)); |
| + if (storage_mask & kLocalDomStorage) { |
| + dom_storage_context_->GetLocalStorageUsage( |
| + base::Bind(&OnLocalStorageUsageInfo, dom_storage_context_)); |
| + } |
| + |
| + if (storage_mask & kSessionDomStorage) { |
| + dom_storage_context_->GetSessionStorageUsage( |
| + base::Bind(&OnSessionStorageUsageInfo, dom_storage_context_)); |
| + } |
| } |
| void StoragePartitionImpl::SetURLRequestContext( |