Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1328)

Unified Diff: webkit/browser/quota/storage_monitor.cc

Issue 539143002: Migrate webkit/browser/ to storage/browser/ (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix android build Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webkit/browser/quota/storage_monitor.h ('k') | webkit/browser/quota/storage_observer.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webkit/browser/quota/storage_monitor.cc
diff --git a/webkit/browser/quota/storage_monitor.cc b/webkit/browser/quota/storage_monitor.cc
deleted file mode 100644
index 366d4d7b399bac9039fc35d833d80d13114b4332..0000000000000000000000000000000000000000
--- a/webkit/browser/quota/storage_monitor.cc
+++ /dev/null
@@ -1,379 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "webkit/browser/quota/storage_monitor.h"
-
-#include <algorithm>
-
-#include "base/stl_util.h"
-#include "net/base/net_util.h"
-#include "webkit/browser/quota/quota_manager.h"
-#include "webkit/common/quota/quota_status_code.h"
-
-namespace storage {
-
-// StorageObserverList:
-
-StorageObserverList::ObserverState::ObserverState()
- : requires_update(false) {
-}
-
-StorageObserverList::StorageObserverList() {}
-
-StorageObserverList::~StorageObserverList() {}
-
-void StorageObserverList::AddObserver(
- StorageObserver* observer, const StorageObserver::MonitorParams& params) {
- ObserverState& observer_state = observers_[observer];
- observer_state.origin = params.filter.origin;
- observer_state.rate = params.rate;
-}
-
-void StorageObserverList::RemoveObserver(StorageObserver* observer) {
- observers_.erase(observer);
-}
-
-int StorageObserverList::ObserverCount() const {
- return observers_.size();
-}
-
-void StorageObserverList::OnStorageChange(const StorageObserver::Event& event) {
- for (StorageObserverStateMap::iterator it = observers_.begin();
- it != observers_.end(); ++it) {
- it->second.requires_update = true;
- }
-
- MaybeDispatchEvent(event);
-}
-
-void StorageObserverList::MaybeDispatchEvent(
- const StorageObserver::Event& event) {
- notification_timer_.Stop();
- base::TimeDelta min_delay = base::TimeDelta::Max();
- bool all_observers_notified = true;
-
- for (StorageObserverStateMap::iterator it = observers_.begin();
- it != observers_.end(); ++it) {
- if (!it->second.requires_update)
- continue;
-
- base::TimeTicks current_time = base::TimeTicks::Now();
- base::TimeDelta delta = current_time - it->second.last_notification_time;
- if (it->second.last_notification_time.is_null() ||
- delta >= it->second.rate) {
- it->second.requires_update = false;
- it->second.last_notification_time = current_time;
-
- if (it->second.origin == event.filter.origin) {
- it->first->OnStorageEvent(event);
- } else {
- // When the quota and usage of an origin is requested, QuotaManager
- // returns the quota and usage of the host. Multiple origins can map to
- // to the same host, so ensure the |origin| field in the dispatched
- // event matches the |origin| specified by the observer when it was
- // registered.
- StorageObserver::Event dispatch_event(event);
- dispatch_event.filter.origin = it->second.origin;
- it->first->OnStorageEvent(dispatch_event);
- }
- } else {
- all_observers_notified = false;
- base::TimeDelta delay = it->second.rate - delta;
- if (delay < min_delay)
- min_delay = delay;
- }
- }
-
- // We need to respect the notification rate specified by observers. So if it
- // is too soon to dispatch an event to an observer, save the event and
- // dispatch it after a delay. If we simply drop the event, another one may
- // not arrive anytime soon and the observer will miss the most recent event.
- if (!all_observers_notified) {
- pending_event_ = event;
- notification_timer_.Start(
- FROM_HERE,
- min_delay,
- this,
- &StorageObserverList::DispatchPendingEvent);
- }
-}
-
-void StorageObserverList::ScheduleUpdateForObserver(StorageObserver* observer) {
- DCHECK(ContainsKey(observers_, observer));
- observers_[observer].requires_update = true;
-}
-
-void StorageObserverList::DispatchPendingEvent() {
- MaybeDispatchEvent(pending_event_);
-}
-
-
-// HostStorageObservers:
-
-HostStorageObservers::HostStorageObservers(QuotaManager* quota_manager)
- : quota_manager_(quota_manager),
- initialized_(false),
- initializing_(false),
- event_occurred_before_init_(false),
- usage_deltas_during_init_(0),
- cached_usage_(0),
- cached_quota_(0),
- weak_factory_(this) {
-}
-
-HostStorageObservers::~HostStorageObservers() {}
-
-void HostStorageObservers::AddObserver(
- StorageObserver* observer,
- const StorageObserver::MonitorParams& params) {
- observers_.AddObserver(observer, params);
-
- if (!params.dispatch_initial_state)
- return;
-
- if (initialized_) {
- StorageObserver::Event event(params.filter,
- std::max<int64>(cached_usage_, 0),
- std::max<int64>(cached_quota_, 0));
- observer->OnStorageEvent(event);
- return;
- }
-
- // Ensure the observer receives the initial storage state once initialization
- // is complete.
- observers_.ScheduleUpdateForObserver(observer);
- StartInitialization(params.filter);
-}
-
-void HostStorageObservers::RemoveObserver(StorageObserver* observer) {
- observers_.RemoveObserver(observer);
-}
-
-bool HostStorageObservers::ContainsObservers() const {
- return observers_.ObserverCount() > 0;
-}
-
-void HostStorageObservers::NotifyUsageChange(
- const StorageObserver::Filter& filter, int64 delta) {
- if (initialized_) {
- cached_usage_ += delta;
- DispatchEvent(filter, true);
- return;
- }
-
- // If a storage change occurs before initialization, ensure all observers will
- // receive an event once initialization is complete.
- event_occurred_before_init_ = true;
-
- // During QuotaManager::GetUsageAndQuotaForWebApps(), cached data is read
- // synchronously, but other data may be retrieved asynchronously. A usage
- // change may occur between the function call and callback. These deltas need
- // to be added to the usage received by GotHostUsageAndQuota() to ensure
- // |cached_usage_| is correctly initialized.
- if (initializing_) {
- usage_deltas_during_init_ += delta;
- return;
- }
-
- StartInitialization(filter);
-}
-
-void HostStorageObservers::StartInitialization(
- const StorageObserver::Filter& filter) {
- if (initialized_ || initializing_)
- return;
-
- initializing_ = true;
- quota_manager_->GetUsageAndQuotaForWebApps(
- filter.origin,
- filter.storage_type,
- base::Bind(&HostStorageObservers::GotHostUsageAndQuota,
- weak_factory_.GetWeakPtr(),
- filter));
-}
-
-void HostStorageObservers::GotHostUsageAndQuota(
- const StorageObserver::Filter& filter,
- QuotaStatusCode status,
- int64 usage,
- int64 quota) {
- initializing_ = false;
- if (status != kQuotaStatusOk)
- return;
-
- initialized_ = true;
- cached_quota_ = quota;
- cached_usage_ = usage + usage_deltas_during_init_;
- DispatchEvent(filter, event_occurred_before_init_);
-}
-
-void HostStorageObservers::DispatchEvent(
- const StorageObserver::Filter& filter, bool is_update) {
- StorageObserver::Event event(filter,
- std::max<int64>(cached_usage_, 0),
- std::max<int64>(cached_quota_, 0));
- if (is_update)
- observers_.OnStorageChange(event);
- else
- observers_.MaybeDispatchEvent(event);
-}
-
-
-// StorageTypeObservers:
-
-StorageTypeObservers::StorageTypeObservers(QuotaManager* quota_manager)
- : quota_manager_(quota_manager) {
-}
-
-StorageTypeObservers::~StorageTypeObservers() {
- STLDeleteValues(&host_observers_map_);
-}
-
-void StorageTypeObservers::AddObserver(
- StorageObserver* observer, const StorageObserver::MonitorParams& params) {
- std::string host = net::GetHostOrSpecFromURL(params.filter.origin);
- if (host.empty())
- return;
-
- HostStorageObservers* host_observers = NULL;
- HostObserversMap::iterator it = host_observers_map_.find(host);
- if (it == host_observers_map_.end()) {
- host_observers = new HostStorageObservers(quota_manager_);
- host_observers_map_[host] = host_observers;
- } else {
- host_observers = it->second;
- }
-
- host_observers->AddObserver(observer, params);
-}
-
-void StorageTypeObservers::RemoveObserver(StorageObserver* observer) {
- for (HostObserversMap::iterator it = host_observers_map_.begin();
- it != host_observers_map_.end(); ) {
- it->second->RemoveObserver(observer);
- if (!it->second->ContainsObservers()) {
- delete it->second;
- host_observers_map_.erase(it++);
- } else {
- ++it;
- }
- }
-}
-
-void StorageTypeObservers::RemoveObserverForFilter(
- StorageObserver* observer, const StorageObserver::Filter& filter) {
- std::string host = net::GetHostOrSpecFromURL(filter.origin);
- HostObserversMap::iterator it = host_observers_map_.find(host);
- if (it == host_observers_map_.end())
- return;
-
- it->second->RemoveObserver(observer);
- if (!it->second->ContainsObservers()) {
- delete it->second;
- host_observers_map_.erase(it);
- }
-}
-
-const HostStorageObservers* StorageTypeObservers::GetHostObservers(
- const std::string& host) const {
- HostObserversMap::const_iterator it = host_observers_map_.find(host);
- if (it != host_observers_map_.end())
- return it->second;
-
- return NULL;
-}
-
-void StorageTypeObservers::NotifyUsageChange(
- const StorageObserver::Filter& filter, int64 delta) {
- std::string host = net::GetHostOrSpecFromURL(filter.origin);
- HostObserversMap::iterator it = host_observers_map_.find(host);
- if (it == host_observers_map_.end())
- return;
-
- it->second->NotifyUsageChange(filter, delta);
-}
-
-
-// StorageMonitor:
-
-StorageMonitor::StorageMonitor(QuotaManager* quota_manager)
- : quota_manager_(quota_manager) {
-}
-
-StorageMonitor::~StorageMonitor() {
- STLDeleteValues(&storage_type_observers_map_);
-}
-
-void StorageMonitor::AddObserver(
- StorageObserver* observer, const StorageObserver::MonitorParams& params) {
- DCHECK(observer);
-
- // Check preconditions.
- if (params.filter.storage_type == kStorageTypeUnknown ||
- params.filter.storage_type == kStorageTypeQuotaNotManaged ||
- params.filter.origin.is_empty()) {
- NOTREACHED();
- return;
- }
-
- StorageTypeObservers* type_observers = NULL;
- StorageTypeObserversMap::iterator it =
- storage_type_observers_map_.find(params.filter.storage_type);
- if (it == storage_type_observers_map_.end()) {
- type_observers = new StorageTypeObservers(quota_manager_);
- storage_type_observers_map_[params.filter.storage_type] = type_observers;
- } else {
- type_observers = it->second;
- }
-
- type_observers->AddObserver(observer, params);
-}
-
-void StorageMonitor::RemoveObserver(StorageObserver* observer) {
- for (StorageTypeObserversMap::iterator it =
- storage_type_observers_map_.begin();
- it != storage_type_observers_map_.end(); ++it) {
- it->second->RemoveObserver(observer);
- }
-}
-
-void StorageMonitor::RemoveObserverForFilter(
- StorageObserver* observer, const StorageObserver::Filter& filter) {
- StorageTypeObserversMap::iterator it =
- storage_type_observers_map_.find(filter.storage_type);
- if (it == storage_type_observers_map_.end())
- return;
-
- it->second->RemoveObserverForFilter(observer, filter);
-}
-
-const StorageTypeObservers* StorageMonitor::GetStorageTypeObservers(
- StorageType storage_type) const {
- StorageTypeObserversMap::const_iterator it =
- storage_type_observers_map_.find(storage_type);
- if (it != storage_type_observers_map_.end())
- return it->second;
-
- return NULL;
-}
-
-void StorageMonitor::NotifyUsageChange(
- const StorageObserver::Filter& filter, int64 delta) {
- // Check preconditions.
- if (filter.storage_type == kStorageTypeUnknown ||
- filter.storage_type == kStorageTypeQuotaNotManaged ||
- filter.origin.is_empty()) {
- NOTREACHED();
- return;
- }
-
- StorageTypeObserversMap::iterator it =
- storage_type_observers_map_.find(filter.storage_type);
- if (it == storage_type_observers_map_.end())
- return;
-
- it->second->NotifyUsageChange(filter, delta);
-}
-
-} // namespace storage
« no previous file with comments | « webkit/browser/quota/storage_monitor.h ('k') | webkit/browser/quota/storage_observer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698