OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "storage/browser/quota/storage_monitor.h" | 5 #include "storage/browser/quota/storage_monitor.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 | 10 |
11 #include "base/stl_util.h" | 11 #include "base/memory/ptr_util.h" |
12 #include "base/trace_event/trace_event.h" | 12 #include "base/trace_event/trace_event.h" |
13 #include "net/base/url_util.h" | 13 #include "net/base/url_util.h" |
14 #include "storage/browser/quota/quota_manager.h" | 14 #include "storage/browser/quota/quota_manager.h" |
15 #include "storage/common/quota/quota_status_code.h" | 15 #include "storage/common/quota/quota_status_code.h" |
16 | 16 |
17 namespace storage { | 17 namespace storage { |
18 | 18 |
19 // StorageObserverList: | 19 // StorageObserverList: |
20 | 20 |
21 StorageObserverList::ObserverState::ObserverState() | 21 StorageObserverList::ObserverState::ObserverState() |
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
240 } | 240 } |
241 | 241 |
242 | 242 |
243 // StorageTypeObservers: | 243 // StorageTypeObservers: |
244 | 244 |
245 StorageTypeObservers::StorageTypeObservers(QuotaManager* quota_manager) | 245 StorageTypeObservers::StorageTypeObservers(QuotaManager* quota_manager) |
246 : quota_manager_(quota_manager) { | 246 : quota_manager_(quota_manager) { |
247 } | 247 } |
248 | 248 |
249 StorageTypeObservers::~StorageTypeObservers() { | 249 StorageTypeObservers::~StorageTypeObservers() { |
250 base::STLDeleteValues(&host_observers_map_); | |
251 } | 250 } |
252 | 251 |
253 void StorageTypeObservers::AddObserver( | 252 void StorageTypeObservers::AddObserver( |
254 StorageObserver* observer, const StorageObserver::MonitorParams& params) { | 253 StorageObserver* observer, const StorageObserver::MonitorParams& params) { |
255 std::string host = net::GetHostOrSpecFromURL(params.filter.origin); | 254 std::string host = net::GetHostOrSpecFromURL(params.filter.origin); |
256 if (host.empty()) | 255 if (host.empty()) |
257 return; | 256 return; |
258 | 257 |
259 HostStorageObservers* host_observers = NULL; | 258 auto& host_observers = host_observers_map_[host]; |
260 HostObserversMap::iterator it = host_observers_map_.find(host); | 259 if (!host_observers) |
danakj
2016/10/03 22:51:49
Ditto can you comment that there's never a null va
Avi (use Gerrit)
2016/10/04 15:56:22
Again, I don't get it. When we have a key->value m
| |
261 if (it == host_observers_map_.end()) { | 260 host_observers = base::MakeUnique<HostStorageObservers>(quota_manager_); |
262 host_observers = new HostStorageObservers(quota_manager_); | |
263 host_observers_map_[host] = host_observers; | |
264 } else { | |
265 host_observers = it->second; | |
266 } | |
267 | 261 |
268 host_observers->AddObserver(observer, params); | 262 host_observers->AddObserver(observer, params); |
269 } | 263 } |
270 | 264 |
271 void StorageTypeObservers::RemoveObserver(StorageObserver* observer) { | 265 void StorageTypeObservers::RemoveObserver(StorageObserver* observer) { |
272 for (HostObserversMap::iterator it = host_observers_map_.begin(); | 266 for (auto it = host_observers_map_.begin(); |
273 it != host_observers_map_.end(); ) { | 267 it != host_observers_map_.end();) { |
274 it->second->RemoveObserver(observer); | 268 it->second->RemoveObserver(observer); |
275 if (!it->second->ContainsObservers()) { | 269 if (!it->second->ContainsObservers()) { |
276 delete it->second; | 270 it = host_observers_map_.erase(it); |
277 host_observers_map_.erase(it++); | |
278 } else { | 271 } else { |
279 ++it; | 272 ++it; |
280 } | 273 } |
281 } | 274 } |
282 } | 275 } |
283 | 276 |
284 void StorageTypeObservers::RemoveObserverForFilter( | 277 void StorageTypeObservers::RemoveObserverForFilter( |
285 StorageObserver* observer, const StorageObserver::Filter& filter) { | 278 StorageObserver* observer, const StorageObserver::Filter& filter) { |
286 std::string host = net::GetHostOrSpecFromURL(filter.origin); | 279 std::string host = net::GetHostOrSpecFromURL(filter.origin); |
287 HostObserversMap::iterator it = host_observers_map_.find(host); | 280 auto it = host_observers_map_.find(host); |
288 if (it == host_observers_map_.end()) | 281 if (it == host_observers_map_.end()) |
289 return; | 282 return; |
290 | 283 |
291 it->second->RemoveObserver(observer); | 284 it->second->RemoveObserver(observer); |
292 if (!it->second->ContainsObservers()) { | 285 if (!it->second->ContainsObservers()) |
293 delete it->second; | |
294 host_observers_map_.erase(it); | 286 host_observers_map_.erase(it); |
295 } | |
296 } | 287 } |
297 | 288 |
298 const HostStorageObservers* StorageTypeObservers::GetHostObservers( | 289 const HostStorageObservers* StorageTypeObservers::GetHostObservers( |
299 const std::string& host) const { | 290 const std::string& host) const { |
300 HostObserversMap::const_iterator it = host_observers_map_.find(host); | 291 auto it = host_observers_map_.find(host); |
301 if (it != host_observers_map_.end()) | 292 if (it != host_observers_map_.end()) |
302 return it->second; | 293 return it->second.get(); |
303 | 294 |
304 return NULL; | 295 return NULL; |
305 } | 296 } |
306 | 297 |
307 void StorageTypeObservers::NotifyUsageChange( | 298 void StorageTypeObservers::NotifyUsageChange( |
308 const StorageObserver::Filter& filter, | 299 const StorageObserver::Filter& filter, |
309 int64_t delta) { | 300 int64_t delta) { |
310 std::string host = net::GetHostOrSpecFromURL(filter.origin); | 301 std::string host = net::GetHostOrSpecFromURL(filter.origin); |
311 HostObserversMap::iterator it = host_observers_map_.find(host); | 302 auto it = host_observers_map_.find(host); |
312 if (it == host_observers_map_.end()) | 303 if (it == host_observers_map_.end()) |
313 return; | 304 return; |
314 | 305 |
315 it->second->NotifyUsageChange(filter, delta); | 306 it->second->NotifyUsageChange(filter, delta); |
316 } | 307 } |
317 | 308 |
318 | 309 |
319 // StorageMonitor: | 310 // StorageMonitor: |
320 | 311 |
321 StorageMonitor::StorageMonitor(QuotaManager* quota_manager) | 312 StorageMonitor::StorageMonitor(QuotaManager* quota_manager) |
322 : quota_manager_(quota_manager) { | 313 : quota_manager_(quota_manager) { |
323 } | 314 } |
324 | 315 |
325 StorageMonitor::~StorageMonitor() { | 316 StorageMonitor::~StorageMonitor() { |
326 base::STLDeleteValues(&storage_type_observers_map_); | |
327 } | 317 } |
328 | 318 |
329 void StorageMonitor::AddObserver( | 319 void StorageMonitor::AddObserver( |
330 StorageObserver* observer, const StorageObserver::MonitorParams& params) { | 320 StorageObserver* observer, const StorageObserver::MonitorParams& params) { |
331 DCHECK(observer); | 321 DCHECK(observer); |
332 | 322 |
333 // Check preconditions. | 323 // Check preconditions. |
334 if (params.filter.storage_type == kStorageTypeUnknown || | 324 if (params.filter.storage_type == kStorageTypeUnknown || |
335 params.filter.storage_type == kStorageTypeQuotaNotManaged || | 325 params.filter.storage_type == kStorageTypeQuotaNotManaged || |
336 params.filter.origin.is_empty()) { | 326 params.filter.origin.is_empty()) { |
337 NOTREACHED(); | 327 NOTREACHED(); |
338 return; | 328 return; |
339 } | 329 } |
340 | 330 |
341 StorageTypeObservers* type_observers = NULL; | 331 auto& type_observers = |
342 StorageTypeObserversMap::iterator it = | 332 storage_type_observers_map_[params.filter.storage_type]; |
343 storage_type_observers_map_.find(params.filter.storage_type); | 333 if (!type_observers) |
danakj
2016/10/03 22:51:49
dittos
Avi (use Gerrit)
2016/10/04 15:56:22
dittos
| |
344 if (it == storage_type_observers_map_.end()) { | 334 type_observers = base::MakeUnique<StorageTypeObservers>(quota_manager_); |
345 type_observers = new StorageTypeObservers(quota_manager_); | |
346 storage_type_observers_map_[params.filter.storage_type] = type_observers; | |
347 } else { | |
348 type_observers = it->second; | |
349 } | |
350 | 335 |
351 type_observers->AddObserver(observer, params); | 336 type_observers->AddObserver(observer, params); |
352 } | 337 } |
353 | 338 |
354 void StorageMonitor::RemoveObserver(StorageObserver* observer) { | 339 void StorageMonitor::RemoveObserver(StorageObserver* observer) { |
355 for (StorageTypeObserversMap::iterator it = | 340 for (auto it = storage_type_observers_map_.begin(); |
356 storage_type_observers_map_.begin(); | |
357 it != storage_type_observers_map_.end(); ++it) { | 341 it != storage_type_observers_map_.end(); ++it) { |
358 it->second->RemoveObserver(observer); | 342 it->second->RemoveObserver(observer); |
359 } | 343 } |
360 } | 344 } |
361 | 345 |
362 void StorageMonitor::RemoveObserverForFilter( | 346 void StorageMonitor::RemoveObserverForFilter( |
363 StorageObserver* observer, const StorageObserver::Filter& filter) { | 347 StorageObserver* observer, const StorageObserver::Filter& filter) { |
364 StorageTypeObserversMap::iterator it = | 348 auto it = storage_type_observers_map_.find(filter.storage_type); |
365 storage_type_observers_map_.find(filter.storage_type); | |
366 if (it == storage_type_observers_map_.end()) | 349 if (it == storage_type_observers_map_.end()) |
367 return; | 350 return; |
368 | 351 |
369 it->second->RemoveObserverForFilter(observer, filter); | 352 it->second->RemoveObserverForFilter(observer, filter); |
370 } | 353 } |
371 | 354 |
372 const StorageTypeObservers* StorageMonitor::GetStorageTypeObservers( | 355 const StorageTypeObservers* StorageMonitor::GetStorageTypeObservers( |
373 StorageType storage_type) const { | 356 StorageType storage_type) const { |
374 StorageTypeObserversMap::const_iterator it = | 357 auto it = storage_type_observers_map_.find(storage_type); |
375 storage_type_observers_map_.find(storage_type); | |
376 if (it != storage_type_observers_map_.end()) | 358 if (it != storage_type_observers_map_.end()) |
377 return it->second; | 359 return it->second.get(); |
378 | 360 |
379 return NULL; | 361 return NULL; |
danakj
2016/10/03 22:51:49
nullptr while you're here?
Avi (use Gerrit)
2016/10/04 15:56:22
Done.
| |
380 } | 362 } |
381 | 363 |
382 void StorageMonitor::NotifyUsageChange(const StorageObserver::Filter& filter, | 364 void StorageMonitor::NotifyUsageChange(const StorageObserver::Filter& filter, |
383 int64_t delta) { | 365 int64_t delta) { |
384 // Check preconditions. | 366 // Check preconditions. |
385 if (filter.storage_type == kStorageTypeUnknown || | 367 if (filter.storage_type == kStorageTypeUnknown || |
386 filter.storage_type == kStorageTypeQuotaNotManaged || | 368 filter.storage_type == kStorageTypeQuotaNotManaged || |
387 filter.origin.is_empty()) { | 369 filter.origin.is_empty()) { |
388 NOTREACHED(); | 370 NOTREACHED(); |
389 return; | 371 return; |
390 } | 372 } |
391 | 373 |
392 StorageTypeObserversMap::iterator it = | 374 auto it = storage_type_observers_map_.find(filter.storage_type); |
393 storage_type_observers_map_.find(filter.storage_type); | |
394 if (it == storage_type_observers_map_.end()) | 375 if (it == storage_type_observers_map_.end()) |
395 return; | 376 return; |
396 | 377 |
397 it->second->NotifyUsageChange(filter, delta); | 378 it->second->NotifyUsageChange(filter, delta); |
398 } | 379 } |
399 | 380 |
400 } // namespace storage | 381 } // namespace storage |
OLD | NEW |