| 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_local_storage_helper.h" | 5 #include "chrome/browser/browsing_data/browsing_data_local_storage_helper.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/location.h" | 10 #include "base/location.h" |
| 11 #include "chrome/browser/browsing_data/browsing_data_helper.h" | 11 #include "chrome/browser/browsing_data/browsing_data_helper.h" |
| 12 #include "chrome/browser/profiles/profile.h" | 12 #include "chrome/browser/profiles/profile.h" |
| 13 #include "content/public/browser/browser_thread.h" | 13 #include "content/public/browser/browser_thread.h" |
| 14 #include "content/public/browser/local_storage_usage_info.h" | 14 #include "content/public/browser/local_storage_usage_info.h" |
| 15 #include "content/public/browser/storage_partition.h" | 15 #include "content/public/browser/storage_partition.h" |
| 16 #include "content/public/common/origin_util.h" | 16 #include "url/gurl.h" |
| 17 #include "content/public/common/url_constants.h" | 17 #include "url/origin.h" |
| 18 #include "url/url_constants.h" |
| 18 | 19 |
| 19 using content::BrowserContext; | 20 using content::BrowserContext; |
| 20 using content::BrowserThread; | 21 using content::BrowserThread; |
| 21 using content::DOMStorageContext; | 22 using content::DOMStorageContext; |
| 22 | 23 |
| 23 namespace { | 24 namespace { |
| 24 | 25 |
| 25 // Only websafe state and suborigins are considered browsing data. | 26 // Only websafe state and suborigins are considered browsing data. |
| 26 bool HasStorageScheme(const GURL& origin) { | 27 bool HasStorageScheme(const GURL& origin_url) { |
| 27 return BrowsingDataHelper::HasWebScheme(origin) || | 28 return BrowsingDataHelper::HasWebScheme(origin_url) || |
| 28 origin.scheme() == content::kHttpSuboriginScheme || | 29 origin_url.SchemeIsSuborigin(); |
| 29 origin.scheme() == content::kHttpsSuboriginScheme; | |
| 30 } | 30 } |
| 31 | 31 |
| 32 void GetUsageInfoCallback( | 32 void GetUsageInfoCallback( |
| 33 const BrowsingDataLocalStorageHelper::FetchCallback& callback, | 33 const BrowsingDataLocalStorageHelper::FetchCallback& callback, |
| 34 const std::vector<content::LocalStorageUsageInfo>& infos) { | 34 const std::vector<content::LocalStorageUsageInfo>& infos) { |
| 35 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 35 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 36 DCHECK(!callback.is_null()); | 36 DCHECK(!callback.is_null()); |
| 37 | 37 |
| 38 std::list<BrowsingDataLocalStorageHelper::LocalStorageInfo> result; | 38 std::list<BrowsingDataLocalStorageHelper::LocalStorageInfo> result; |
| 39 for (const content::LocalStorageUsageInfo& info : infos) { | 39 for (const content::LocalStorageUsageInfo& info : infos) { |
| (...skipping 27 matching lines...) Expand all Loading... |
| 67 } | 67 } |
| 68 | 68 |
| 69 void BrowsingDataLocalStorageHelper::StartFetching( | 69 void BrowsingDataLocalStorageHelper::StartFetching( |
| 70 const FetchCallback& callback) { | 70 const FetchCallback& callback) { |
| 71 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 71 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 72 DCHECK(!callback.is_null()); | 72 DCHECK(!callback.is_null()); |
| 73 dom_storage_context_->GetLocalStorageUsage( | 73 dom_storage_context_->GetLocalStorageUsage( |
| 74 base::Bind(&GetUsageInfoCallback, callback)); | 74 base::Bind(&GetUsageInfoCallback, callback)); |
| 75 } | 75 } |
| 76 | 76 |
| 77 void BrowsingDataLocalStorageHelper::DeleteOrigin(const GURL& origin) { | 77 void BrowsingDataLocalStorageHelper::DeleteOrigin(const GURL& origin_url) { |
| 78 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 78 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 79 dom_storage_context_->DeleteLocalStorage(origin); | 79 dom_storage_context_->DeleteLocalStorageForPhysicalOrigin(origin_url); |
| 80 } | 80 } |
| 81 | 81 |
| 82 //--------------------------------------------------------- | 82 //--------------------------------------------------------- |
| 83 | 83 |
| 84 CannedBrowsingDataLocalStorageHelper::CannedBrowsingDataLocalStorageHelper( | 84 CannedBrowsingDataLocalStorageHelper::CannedBrowsingDataLocalStorageHelper( |
| 85 Profile* profile) | 85 Profile* profile) |
| 86 : BrowsingDataLocalStorageHelper(profile) { | 86 : BrowsingDataLocalStorageHelper(profile) { |
| 87 } | 87 } |
| 88 | 88 |
| 89 void CannedBrowsingDataLocalStorageHelper::AddLocalStorage( | 89 void CannedBrowsingDataLocalStorageHelper::AddLocalStorage( |
| 90 const GURL& origin) { | 90 const GURL& origin_url) { |
| 91 if (!HasStorageScheme(origin)) | 91 if (!HasStorageScheme(origin_url)) |
| 92 return; | 92 return; |
| 93 pending_local_storage_info_.insert(origin); | 93 pending_local_storage_info_.insert(origin_url); |
| 94 if (content::HasSuborigin(origin)) { | 94 url::Origin origin(origin_url); |
| 95 if (!origin.suborigin().empty()) { |
| 95 pending_origins_to_pending_suborigins_.insert( | 96 pending_origins_to_pending_suborigins_.insert( |
| 96 std::make_pair(content::StripSuboriginFromUrl(origin), origin)); | 97 std::make_pair(origin.GetPhysicalOrigin().GetURL(), origin_url)); |
| 97 } | 98 } |
| 98 } | 99 } |
| 99 | 100 |
| 100 void CannedBrowsingDataLocalStorageHelper::Reset() { | 101 void CannedBrowsingDataLocalStorageHelper::Reset() { |
| 101 pending_local_storage_info_.clear(); | 102 pending_local_storage_info_.clear(); |
| 102 pending_origins_to_pending_suborigins_.clear(); | 103 pending_origins_to_pending_suborigins_.clear(); |
| 103 } | 104 } |
| 104 | 105 |
| 105 bool CannedBrowsingDataLocalStorageHelper::empty() const { | 106 bool CannedBrowsingDataLocalStorageHelper::empty() const { |
| 106 return pending_local_storage_info_.empty(); | 107 return pending_local_storage_info_.empty(); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 121 DCHECK(!callback.is_null()); | 122 DCHECK(!callback.is_null()); |
| 122 | 123 |
| 123 std::list<LocalStorageInfo> result; | 124 std::list<LocalStorageInfo> result; |
| 124 for (const GURL& url : pending_local_storage_info_) | 125 for (const GURL& url : pending_local_storage_info_) |
| 125 result.push_back(LocalStorageInfo(url, 0, base::Time())); | 126 result.push_back(LocalStorageInfo(url, 0, base::Time())); |
| 126 | 127 |
| 127 BrowserThread::PostTask( | 128 BrowserThread::PostTask( |
| 128 BrowserThread::UI, FROM_HERE, base::Bind(callback, result)); | 129 BrowserThread::UI, FROM_HERE, base::Bind(callback, result)); |
| 129 } | 130 } |
| 130 | 131 |
| 131 void CannedBrowsingDataLocalStorageHelper::DeleteOrigin(const GURL& origin) { | 132 void CannedBrowsingDataLocalStorageHelper::DeleteOrigin( |
| 132 pending_local_storage_info_.erase(origin); | 133 const GURL& origin_url) { |
| 133 // All suborigins associated with |origin| must be removed. | 134 pending_local_storage_info_.erase(origin_url); |
| 135 // All suborigins associated with |origin_url| must be removed. |
| 134 // BrowsingDataLocalStorageHelper::DeleteOrigin takes care of doing that on | 136 // BrowsingDataLocalStorageHelper::DeleteOrigin takes care of doing that on |
| 135 // the backend so it's not necessary to call it for each suborigin, but it is | 137 // the backend so it's not necessary to call it for each suborigin, but it is |
| 136 // necessary to clear up the pending storage here. | 138 // necessary to clear up the pending storage here. |
| 137 BrowsingDataLocalStorageHelper::DeleteOrigin(origin); | 139 BrowsingDataLocalStorageHelper::DeleteOrigin(origin_url); |
| 138 if (pending_origins_to_pending_suborigins_.count(origin) > 0) { | 140 if (pending_origins_to_pending_suborigins_.count(origin_url) > 0) { |
| 139 auto it = pending_origins_to_pending_suborigins_.find(origin); | 141 auto it = pending_origins_to_pending_suborigins_.find(origin_url); |
| 140 while (it != pending_origins_to_pending_suborigins_.end()) { | 142 while (it != pending_origins_to_pending_suborigins_.end()) { |
| 141 pending_local_storage_info_.erase(it->second); | 143 pending_local_storage_info_.erase(it->second); |
| 142 pending_origins_to_pending_suborigins_.erase(it); | 144 pending_origins_to_pending_suborigins_.erase(it); |
| 143 it = pending_origins_to_pending_suborigins_.find(origin); | 145 it = pending_origins_to_pending_suborigins_.find(origin_url); |
| 144 } | 146 } |
| 145 } | 147 } |
| 146 pending_origins_to_pending_suborigins_.erase(origin); | 148 |
| 149 // Similarly, if |origin_url| has a suborigin, the physical origin associated |
| 150 // with that suborigin must also be deleted. This is also taken care of on the |
| 151 // backend, so it's only necessary to clean up the pending storage. |
| 152 url::Origin origin(origin_url); |
| 153 if (!origin.suborigin().empty()) { |
| 154 GURL physical_origin(origin.GetPhysicalOrigin().GetURL()); |
| 155 pending_local_storage_info_.erase(physical_origin); |
| 156 pending_origins_to_pending_suborigins_.erase(physical_origin); |
| 157 } |
| 158 |
| 159 pending_origins_to_pending_suborigins_.erase(origin_url); |
| 147 } | 160 } |
| 148 | 161 |
| 149 CannedBrowsingDataLocalStorageHelper::~CannedBrowsingDataLocalStorageHelper() {} | 162 CannedBrowsingDataLocalStorageHelper::~CannedBrowsingDataLocalStorageHelper() {} |
| OLD | NEW |