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_->DeleteLocalStorage(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(GURL(origin.SerializePhysicalOrigin()), 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); |
michaeln
2016/10/19 21:11:39
not directly related to your cl, but maybe you kno
jww
2016/10/19 22:11:23
I'm not sure, but I *think* what's going on is tha
| |
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.SerializePhysicalOrigin()); | |
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 |