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 url::Origin origin(origin_url); |
80 dom_storage_context_->DeleteLocalStorageForPhysicalOrigin( | |
81 origin.GetPhysicalOrigin().GetURL()); | |
michaeln
2016/10/24 21:10:03
no need to call GetPhysOrigin anymore
jww
2016/10/24 21:22:54
Done.
| |
80 } | 82 } |
81 | 83 |
82 //--------------------------------------------------------- | 84 //--------------------------------------------------------- |
83 | 85 |
84 CannedBrowsingDataLocalStorageHelper::CannedBrowsingDataLocalStorageHelper( | 86 CannedBrowsingDataLocalStorageHelper::CannedBrowsingDataLocalStorageHelper( |
85 Profile* profile) | 87 Profile* profile) |
86 : BrowsingDataLocalStorageHelper(profile) { | 88 : BrowsingDataLocalStorageHelper(profile) { |
87 } | 89 } |
88 | 90 |
89 void CannedBrowsingDataLocalStorageHelper::AddLocalStorage( | 91 void CannedBrowsingDataLocalStorageHelper::AddLocalStorage( |
90 const GURL& origin) { | 92 const GURL& origin_url) { |
91 if (!HasStorageScheme(origin)) | 93 if (!HasStorageScheme(origin_url)) |
92 return; | 94 return; |
93 pending_local_storage_info_.insert(origin); | 95 pending_local_storage_info_.insert(origin_url); |
94 if (content::HasSuborigin(origin)) { | 96 url::Origin origin(origin_url); |
97 if (!origin.suborigin().empty()) { | |
95 pending_origins_to_pending_suborigins_.insert( | 98 pending_origins_to_pending_suborigins_.insert( |
96 std::make_pair(content::StripSuboriginFromUrl(origin), origin)); | 99 std::make_pair(origin.GetPhysicalOrigin().GetURL(), origin_url)); |
97 } | 100 } |
98 } | 101 } |
99 | 102 |
100 void CannedBrowsingDataLocalStorageHelper::Reset() { | 103 void CannedBrowsingDataLocalStorageHelper::Reset() { |
101 pending_local_storage_info_.clear(); | 104 pending_local_storage_info_.clear(); |
102 pending_origins_to_pending_suborigins_.clear(); | 105 pending_origins_to_pending_suborigins_.clear(); |
103 } | 106 } |
104 | 107 |
105 bool CannedBrowsingDataLocalStorageHelper::empty() const { | 108 bool CannedBrowsingDataLocalStorageHelper::empty() const { |
106 return pending_local_storage_info_.empty(); | 109 return pending_local_storage_info_.empty(); |
(...skipping 14 matching lines...) Expand all Loading... | |
121 DCHECK(!callback.is_null()); | 124 DCHECK(!callback.is_null()); |
122 | 125 |
123 std::list<LocalStorageInfo> result; | 126 std::list<LocalStorageInfo> result; |
124 for (const GURL& url : pending_local_storage_info_) | 127 for (const GURL& url : pending_local_storage_info_) |
125 result.push_back(LocalStorageInfo(url, 0, base::Time())); | 128 result.push_back(LocalStorageInfo(url, 0, base::Time())); |
126 | 129 |
127 BrowserThread::PostTask( | 130 BrowserThread::PostTask( |
128 BrowserThread::UI, FROM_HERE, base::Bind(callback, result)); | 131 BrowserThread::UI, FROM_HERE, base::Bind(callback, result)); |
129 } | 132 } |
130 | 133 |
131 void CannedBrowsingDataLocalStorageHelper::DeleteOrigin(const GURL& origin) { | 134 void CannedBrowsingDataLocalStorageHelper::DeleteOrigin( |
132 pending_local_storage_info_.erase(origin); | 135 const GURL& origin_url) { |
133 // All suborigins associated with |origin| must be removed. | 136 pending_local_storage_info_.erase(origin_url); |
137 // All suborigins associated with |origin_url| must be removed. | |
134 // BrowsingDataLocalStorageHelper::DeleteOrigin takes care of doing that on | 138 // 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 | 139 // 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. | 140 // necessary to clear up the pending storage here. |
137 BrowsingDataLocalStorageHelper::DeleteOrigin(origin); | 141 BrowsingDataLocalStorageHelper::DeleteOrigin(origin_url); |
138 if (pending_origins_to_pending_suborigins_.count(origin) > 0) { | 142 if (pending_origins_to_pending_suborigins_.count(origin_url) > 0) { |
139 auto it = pending_origins_to_pending_suborigins_.find(origin); | 143 auto it = pending_origins_to_pending_suborigins_.find(origin_url); |
140 while (it != pending_origins_to_pending_suborigins_.end()) { | 144 while (it != pending_origins_to_pending_suborigins_.end()) { |
141 pending_local_storage_info_.erase(it->second); | 145 pending_local_storage_info_.erase(it->second); |
142 pending_origins_to_pending_suborigins_.erase(it); | 146 pending_origins_to_pending_suborigins_.erase(it); |
143 it = pending_origins_to_pending_suborigins_.find(origin); | 147 it = pending_origins_to_pending_suborigins_.find(origin_url); |
144 } | 148 } |
145 } | 149 } |
146 pending_origins_to_pending_suborigins_.erase(origin); | 150 |
151 // Similarly, if |origin_url| has a suborigin, the physical origin associated | |
152 // with that suborigin must also be deleted. This is also taken care of on the | |
153 // backend, so it's only necessary to clean up the pending storage. | |
154 url::Origin origin(origin_url); | |
155 if (!origin.suborigin().empty()) { | |
156 GURL physical_origin(origin.GetPhysicalOrigin().GetURL()); | |
157 pending_local_storage_info_.erase(physical_origin); | |
158 pending_origins_to_pending_suborigins_.erase(physical_origin); | |
159 } | |
160 | |
161 pending_origins_to_pending_suborigins_.erase(origin_url); | |
147 } | 162 } |
148 | 163 |
149 CannedBrowsingDataLocalStorageHelper::~CannedBrowsingDataLocalStorageHelper() {} | 164 CannedBrowsingDataLocalStorageHelper::~CannedBrowsingDataLocalStorageHelper() {} |
OLD | NEW |