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_indexed_db_helper.h" | 5 #include "chrome/browser/browsing_data_indexed_db_helper.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/callback.h" | 8 #include "base/callback.h" |
9 #include "base/compiler_specific.h" | 9 #include "base/compiler_specific.h" |
10 #include "base/file_util.h" | 10 #include "base/file_util.h" |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
144 | 144 |
145 BrowsingDataIndexedDBHelper::IndexedDBInfo::~IndexedDBInfo() {} | 145 BrowsingDataIndexedDBHelper::IndexedDBInfo::~IndexedDBInfo() {} |
146 | 146 |
147 // static | 147 // static |
148 BrowsingDataIndexedDBHelper* BrowsingDataIndexedDBHelper::Create( | 148 BrowsingDataIndexedDBHelper* BrowsingDataIndexedDBHelper::Create( |
149 Profile* profile) { | 149 Profile* profile) { |
150 return new BrowsingDataIndexedDBHelperImpl(profile); | 150 return new BrowsingDataIndexedDBHelperImpl(profile); |
151 } | 151 } |
152 | 152 |
153 CannedBrowsingDataIndexedDBHelper:: | 153 CannedBrowsingDataIndexedDBHelper:: |
154 PendingIndexedDBInfo::PendingIndexedDBInfo() { | |
155 } | |
156 | |
157 CannedBrowsingDataIndexedDBHelper:: | |
158 PendingIndexedDBInfo::PendingIndexedDBInfo(const GURL& origin, | 154 PendingIndexedDBInfo::PendingIndexedDBInfo(const GURL& origin, |
159 const string16& description) | 155 const string16& description) |
160 : origin(origin), | 156 : origin(origin), |
161 description(description) { | 157 description(description) { |
162 } | 158 } |
163 | 159 |
164 CannedBrowsingDataIndexedDBHelper:: | 160 CannedBrowsingDataIndexedDBHelper:: |
165 PendingIndexedDBInfo::~PendingIndexedDBInfo() { | 161 PendingIndexedDBInfo::~PendingIndexedDBInfo() { |
166 } | 162 } |
167 | 163 |
164 bool CannedBrowsingDataIndexedDBHelper::PendingIndexedDBInfo::operator<( | |
165 const PendingIndexedDBInfo& other) const { | |
166 return origin < other.origin; | |
167 } | |
168 | |
168 CannedBrowsingDataIndexedDBHelper::CannedBrowsingDataIndexedDBHelper() | 169 CannedBrowsingDataIndexedDBHelper::CannedBrowsingDataIndexedDBHelper() |
169 : is_fetching_(false) { | 170 : is_fetching_(false) { |
170 } | 171 } |
171 | 172 |
173 CannedBrowsingDataIndexedDBHelper::~CannedBrowsingDataIndexedDBHelper() {} | |
174 | |
172 CannedBrowsingDataIndexedDBHelper* CannedBrowsingDataIndexedDBHelper::Clone() { | 175 CannedBrowsingDataIndexedDBHelper* CannedBrowsingDataIndexedDBHelper::Clone() { |
173 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 176 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
174 CannedBrowsingDataIndexedDBHelper* clone = | 177 CannedBrowsingDataIndexedDBHelper* clone = |
175 new CannedBrowsingDataIndexedDBHelper(); | 178 new CannedBrowsingDataIndexedDBHelper(); |
176 | 179 |
177 base::AutoLock auto_lock(lock_); | 180 base::AutoLock auto_lock(lock_); |
178 clone->pending_indexed_db_info_ = pending_indexed_db_info_; | 181 clone->pending_indexed_db_info_ = pending_indexed_db_info_; |
179 clone->indexed_db_info_ = indexed_db_info_; | 182 clone->indexed_db_info_ = indexed_db_info_; |
180 return clone; | 183 return clone; |
181 } | 184 } |
182 | 185 |
183 void CannedBrowsingDataIndexedDBHelper::AddIndexedDB( | 186 void CannedBrowsingDataIndexedDBHelper::AddIndexedDB( |
184 const GURL& origin, const string16& description) { | 187 const GURL& origin, const string16& description) { |
185 if (!BrowsingDataHelper::HasValidScheme(origin)) | 188 if (!BrowsingDataHelper::HasValidScheme(origin)) |
186 return; // Non-websafe state is not considered browsing data. | 189 return; // Non-websafe state is not considered browsing data. |
187 | 190 |
188 base::AutoLock auto_lock(lock_); | 191 base::AutoLock auto_lock(lock_); |
189 pending_indexed_db_info_.push_back(PendingIndexedDBInfo(origin, description)); | 192 pending_indexed_db_info_.insert(PendingIndexedDBInfo(origin, description)); |
190 } | 193 } |
191 | 194 |
192 void CannedBrowsingDataIndexedDBHelper::Reset() { | 195 void CannedBrowsingDataIndexedDBHelper::Reset() { |
193 base::AutoLock auto_lock(lock_); | 196 base::AutoLock auto_lock(lock_); |
194 indexed_db_info_.clear(); | 197 indexed_db_info_.clear(); |
195 pending_indexed_db_info_.clear(); | 198 pending_indexed_db_info_.clear(); |
196 } | 199 } |
197 | 200 |
198 bool CannedBrowsingDataIndexedDBHelper::empty() const { | 201 bool CannedBrowsingDataIndexedDBHelper::empty() const { |
199 base::AutoLock auto_lock(lock_); | 202 base::AutoLock auto_lock(lock_); |
200 return indexed_db_info_.empty() && pending_indexed_db_info_.empty(); | 203 return indexed_db_info_.empty() && pending_indexed_db_info_.empty(); |
201 } | 204 } |
202 | 205 |
203 size_t CannedBrowsingDataIndexedDBHelper::GetIndexedDBCount() const { | 206 size_t CannedBrowsingDataIndexedDBHelper::GetIndexedDBCount() const { |
207 base::AutoLock auto_lock(lock_); | |
204 return pending_indexed_db_info_.size(); | 208 return pending_indexed_db_info_.size(); |
205 } | 209 } |
206 | 210 |
211 const std::set<CannedBrowsingDataIndexedDBHelper::PendingIndexedDBInfo>& | |
212 CannedBrowsingDataIndexedDBHelper::GetIndexedDBInfo() const { | |
213 base::AutoLock auto_lock(lock_); | |
214 return pending_indexed_db_info_; | |
215 } | |
216 | |
207 void CannedBrowsingDataIndexedDBHelper::StartFetching( | 217 void CannedBrowsingDataIndexedDBHelper::StartFetching( |
208 const base::Callback<void(const std::list<IndexedDBInfo>&)>& callback) { | 218 const base::Callback<void(const std::list<IndexedDBInfo>&)>& callback) { |
209 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 219 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
210 DCHECK(!is_fetching_); | 220 DCHECK(!is_fetching_); |
211 DCHECK_EQ(false, callback.is_null()); | 221 DCHECK_EQ(false, callback.is_null()); |
212 | 222 |
213 is_fetching_ = true; | 223 is_fetching_ = true; |
214 completion_callback_ = callback; | 224 completion_callback_ = callback; |
215 BrowserThread::PostTask( | 225 BrowserThread::PostTask( |
216 BrowserThread::WEBKIT_DEPRECATED, FROM_HERE, | 226 BrowserThread::WEBKIT_DEPRECATED, FROM_HERE, |
217 base::Bind( | 227 base::Bind( |
218 &CannedBrowsingDataIndexedDBHelper::ConvertPendingInfoInWebKitThread, | 228 &CannedBrowsingDataIndexedDBHelper::ConvertPendingInfoInWebKitThread, |
219 this)); | 229 this)); |
220 } | 230 } |
221 | 231 |
222 CannedBrowsingDataIndexedDBHelper::~CannedBrowsingDataIndexedDBHelper() {} | |
223 | |
224 void CannedBrowsingDataIndexedDBHelper::ConvertPendingInfoInWebKitThread() { | 232 void CannedBrowsingDataIndexedDBHelper::ConvertPendingInfoInWebKitThread() { |
225 base::AutoLock auto_lock(lock_); | 233 base::AutoLock auto_lock(lock_); |
226 for (std::list<PendingIndexedDBInfo>::const_iterator | 234 indexed_db_info_.clear(); |
235 for (std::set<PendingIndexedDBInfo>::const_iterator | |
227 info = pending_indexed_db_info_.begin(); | 236 info = pending_indexed_db_info_.begin(); |
228 info != pending_indexed_db_info_.end(); ++info) { | 237 info != pending_indexed_db_info_.end(); ++info) { |
229 bool duplicate = false; | 238 bool duplicate = false; |
Bernhard Bauer
2012/05/10 17:18:59
I think you don't need this anymore if you have a
markusheintz_
2012/05/11 12:18:28
Done.
| |
230 for (std::list<IndexedDBInfo>::iterator | 239 for (std::list<IndexedDBInfo>::iterator |
231 indexed_db = indexed_db_info_.begin(); | 240 indexed_db = indexed_db_info_.begin(); |
232 indexed_db != indexed_db_info_.end(); ++indexed_db) { | 241 indexed_db != indexed_db_info_.end(); ++indexed_db) { |
233 if (indexed_db->origin == info->origin) { | 242 if (indexed_db->origin == info->origin) { |
234 duplicate = true; | 243 duplicate = true; |
235 break; | 244 break; |
236 } | 245 } |
237 } | 246 } |
238 if (duplicate) | 247 if (duplicate) |
239 continue; | 248 continue; |
240 | 249 |
241 indexed_db_info_.push_back(IndexedDBInfo( | 250 indexed_db_info_.push_back(IndexedDBInfo( |
242 info->origin, | 251 info->origin, |
243 0, | 252 0, |
244 base::Time())); | 253 base::Time())); |
245 } | 254 } |
246 pending_indexed_db_info_.clear(); | |
247 | 255 |
248 BrowserThread::PostTask( | 256 BrowserThread::PostTask( |
249 BrowserThread::UI, FROM_HERE, | 257 BrowserThread::UI, FROM_HERE, |
250 base::Bind(&CannedBrowsingDataIndexedDBHelper::NotifyInUIThread, this)); | 258 base::Bind(&CannedBrowsingDataIndexedDBHelper::NotifyInUIThread, this)); |
251 } | 259 } |
252 | 260 |
253 void CannedBrowsingDataIndexedDBHelper::NotifyInUIThread() { | 261 void CannedBrowsingDataIndexedDBHelper::NotifyInUIThread() { |
254 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 262 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
255 DCHECK(is_fetching_); | 263 DCHECK(is_fetching_); |
256 | 264 |
257 completion_callback_.Run(indexed_db_info_); | 265 completion_callback_.Run(indexed_db_info_); |
258 completion_callback_.Reset(); | 266 completion_callback_.Reset(); |
259 is_fetching_ = false; | 267 is_fetching_ = false; |
260 } | 268 } |
OLD | NEW |