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_local_storage_helper.h" | 5 #include "chrome/browser/browsing_data_local_storage_helper.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/file_util.h" | 8 #include "base/file_util.h" |
9 #include "base/message_loop.h" | 9 #include "base/message_loop.h" |
10 #include "base/string_util.h" | 10 #include "base/string_util.h" |
11 #include "base/utf_string_conversions.h" | 11 #include "base/utf_string_conversions.h" |
12 #include "chrome/browser/browsing_data_helper.h" | 12 #include "chrome/browser/browsing_data_helper.h" |
13 #include "chrome/browser/profiles/profile.h" | 13 #include "chrome/browser/profiles/profile.h" |
14 #include "content/public/browser/browser_thread.h" | 14 #include "content/public/browser/browser_thread.h" |
15 #include "content/public/browser/dom_storage_context.h" | 15 #include "content/public/browser/dom_storage_context.h" |
16 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebCString.h
" | 16 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebCString.h
" |
17 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebString.h" | 17 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebString.h" |
18 #include "third_party/WebKit/Source/WebKit/chromium/public/WebSecurityOrigin.h" | 18 #include "third_party/WebKit/Source/WebKit/chromium/public/WebSecurityOrigin.h" |
19 #include "webkit/glue/webkit_glue.h" | 19 #include "webkit/glue/webkit_glue.h" |
20 | 20 |
21 using content::BrowserContext; | 21 using content::BrowserContext; |
22 using content::BrowserThread; | 22 using content::BrowserThread; |
23 using content::DOMStorageContext; | 23 using content::DOMStorageContext; |
24 using WebKit::WebSecurityOrigin; | 24 using WebKit::WebSecurityOrigin; |
25 | 25 |
26 BrowsingDataLocalStorageHelper::LocalStorageInfo::LocalStorageInfo() | |
27 : port(0), | |
28 size(0) { | |
29 } | |
30 | |
31 BrowsingDataLocalStorageHelper::LocalStorageInfo::LocalStorageInfo( | 26 BrowsingDataLocalStorageHelper::LocalStorageInfo::LocalStorageInfo( |
32 const std::string& protocol, | 27 const std::string& protocol, |
33 const std::string& host, | 28 const std::string& host, |
34 unsigned short port, | 29 unsigned short port, |
35 const std::string& database_identifier, | 30 const std::string& database_identifier, |
36 const std::string& origin, | 31 const std::string& origin, |
37 const FilePath& file_path, | 32 const FilePath& file_path, |
38 int64 size, | 33 int64 size, |
39 base::Time last_modified) | 34 base::Time last_modified) |
40 : protocol(protocol), | 35 : protocol(protocol), |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
138 profile_(profile) { | 133 profile_(profile) { |
139 } | 134 } |
140 | 135 |
141 CannedBrowsingDataLocalStorageHelper* | 136 CannedBrowsingDataLocalStorageHelper* |
142 CannedBrowsingDataLocalStorageHelper::Clone() { | 137 CannedBrowsingDataLocalStorageHelper::Clone() { |
143 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 138 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
144 CannedBrowsingDataLocalStorageHelper* clone = | 139 CannedBrowsingDataLocalStorageHelper* clone = |
145 new CannedBrowsingDataLocalStorageHelper(profile_); | 140 new CannedBrowsingDataLocalStorageHelper(profile_); |
146 | 141 |
147 clone->pending_local_storage_info_ = pending_local_storage_info_; | 142 clone->pending_local_storage_info_ = pending_local_storage_info_; |
148 clone->local_storage_info_ = local_storage_info_; | |
149 return clone; | 143 return clone; |
150 } | 144 } |
151 | 145 |
152 void CannedBrowsingDataLocalStorageHelper::AddLocalStorage( | 146 void CannedBrowsingDataLocalStorageHelper::AddLocalStorage( |
153 const GURL& origin) { | 147 const GURL& origin) { |
154 if (BrowsingDataHelper::HasValidScheme(origin)) | 148 if (BrowsingDataHelper::HasValidScheme(origin)) |
155 pending_local_storage_info_.insert(origin); | 149 pending_local_storage_info_.insert(origin); |
156 } | 150 } |
157 | 151 |
158 void CannedBrowsingDataLocalStorageHelper::Reset() { | 152 void CannedBrowsingDataLocalStorageHelper::Reset() { |
159 local_storage_info_.clear(); | |
160 pending_local_storage_info_.clear(); | 153 pending_local_storage_info_.clear(); |
161 } | 154 } |
162 | 155 |
163 bool CannedBrowsingDataLocalStorageHelper::empty() const { | 156 bool CannedBrowsingDataLocalStorageHelper::empty() const { |
164 return local_storage_info_.empty() && pending_local_storage_info_.empty(); | 157 return pending_local_storage_info_.empty(); |
165 } | 158 } |
166 | 159 |
167 size_t CannedBrowsingDataLocalStorageHelper::GetLocalStorageCount() const { | 160 size_t CannedBrowsingDataLocalStorageHelper::GetLocalStorageCount() const { |
168 return pending_local_storage_info_.size(); | 161 return pending_local_storage_info_.size(); |
169 } | 162 } |
170 | 163 |
| 164 const std::set<GURL>& |
| 165 CannedBrowsingDataLocalStorageHelper::GetLocalStorageInfo() const { |
| 166 return pending_local_storage_info_; |
| 167 } |
| 168 |
171 void CannedBrowsingDataLocalStorageHelper::StartFetching( | 169 void CannedBrowsingDataLocalStorageHelper::StartFetching( |
172 const base::Callback<void(const std::list<LocalStorageInfo>&)>& callback) { | 170 const base::Callback<void(const std::list<LocalStorageInfo>&)>& callback) { |
173 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 171 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
174 DCHECK(!is_fetching_); | 172 DCHECK(!is_fetching_); |
175 DCHECK_EQ(false, callback.is_null()); | 173 DCHECK_EQ(false, callback.is_null()); |
176 | 174 |
177 is_fetching_ = true; | 175 is_fetching_ = true; |
178 completion_callback_ = callback; | 176 completion_callback_ = callback; |
179 | 177 |
180 // We post a task to emulate async fetching behavior. | 178 // We post a task to emulate async fetching behavior. |
181 MessageLoop::current()->PostTask( | 179 MessageLoop::current()->PostTask( |
182 FROM_HERE, | 180 FROM_HERE, |
183 base::Bind(&CannedBrowsingDataLocalStorageHelper:: | 181 base::Bind(&CannedBrowsingDataLocalStorageHelper:: |
184 ConvertPendingInfo, this)); | 182 ConvertPendingInfo, this)); |
185 } | 183 } |
186 | 184 |
187 CannedBrowsingDataLocalStorageHelper::~CannedBrowsingDataLocalStorageHelper() {} | 185 CannedBrowsingDataLocalStorageHelper::~CannedBrowsingDataLocalStorageHelper() {} |
188 | 186 |
189 void CannedBrowsingDataLocalStorageHelper::ConvertPendingInfo() { | 187 void CannedBrowsingDataLocalStorageHelper::ConvertPendingInfo() { |
| 188 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 189 local_storage_info_.clear(); |
190 for (std::set<GURL>::iterator info = pending_local_storage_info_.begin(); | 190 for (std::set<GURL>::iterator info = pending_local_storage_info_.begin(); |
191 info != pending_local_storage_info_.end(); ++info) { | 191 info != pending_local_storage_info_.end(); ++info) { |
192 WebSecurityOrigin web_security_origin = | 192 WebSecurityOrigin web_security_origin = |
193 WebSecurityOrigin::createFromString( | 193 WebSecurityOrigin::createFromString( |
194 UTF8ToUTF16(info->spec())); | 194 UTF8ToUTF16(info->spec())); |
195 std::string security_origin(web_security_origin.toString().utf8()); | 195 std::string security_origin(web_security_origin.toString().utf8()); |
196 | 196 |
197 bool duplicate = false; | |
198 for (std::list<LocalStorageInfo>::iterator | |
199 local_storage = local_storage_info_.begin(); | |
200 local_storage != local_storage_info_.end(); ++local_storage) { | |
201 if (local_storage->origin == security_origin) { | |
202 duplicate = true; | |
203 break; | |
204 } | |
205 } | |
206 if (duplicate) | |
207 continue; | |
208 | |
209 local_storage_info_.push_back(LocalStorageInfo( | 197 local_storage_info_.push_back(LocalStorageInfo( |
210 web_security_origin.protocol().utf8(), | 198 web_security_origin.protocol().utf8(), |
211 web_security_origin.host().utf8(), | 199 web_security_origin.host().utf8(), |
212 web_security_origin.port(), | 200 web_security_origin.port(), |
213 web_security_origin.databaseIdentifier().utf8(), | 201 web_security_origin.databaseIdentifier().utf8(), |
214 security_origin, | 202 security_origin, |
215 dom_storage_context_-> | 203 dom_storage_context_-> |
216 GetFilePath(web_security_origin.databaseIdentifier()), | 204 GetFilePath(web_security_origin.databaseIdentifier()), |
217 0, | 205 0, |
218 base::Time())); | 206 base::Time())); |
219 } | 207 } |
220 pending_local_storage_info_.clear(); | |
221 | 208 |
222 BrowserThread::PostTask( | 209 BrowserThread::PostTask( |
223 BrowserThread::UI, FROM_HERE, | 210 BrowserThread::UI, FROM_HERE, |
224 base::Bind(&CannedBrowsingDataLocalStorageHelper::NotifyInUIThread, | 211 base::Bind(&CannedBrowsingDataLocalStorageHelper::NotifyInUIThread, |
225 this)); | 212 this)); |
226 } | 213 } |
OLD | NEW |