| Index: webkit/browser/quota/storage_monitor.h
|
| diff --git a/webkit/browser/quota/storage_monitor.h b/webkit/browser/quota/storage_monitor.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..0503a667811acb7f019489b8fd161d6d15b0d338
|
| --- /dev/null
|
| +++ b/webkit/browser/quota/storage_monitor.h
|
| @@ -0,0 +1,175 @@
|
| +// 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.
|
| +
|
| +#ifndef WEBKIT_BROWSER_QUOTA_STORAGE_MONITOR_H_
|
| +#define WEBKIT_BROWSER_QUOTA_STORAGE_MONITOR_H_
|
| +
|
| +#include <map>
|
| +
|
| +#include "base/memory/weak_ptr.h"
|
| +#include "base/time/time.h"
|
| +#include "base/timer/timer.h"
|
| +#include "webkit/browser/quota/storage_observer.h"
|
| +
|
| +namespace quota {
|
| +
|
| +class QuotaManager;
|
| +
|
| +// This class dispatches storage events to observers of a common
|
| +// StorageObserver::Filter.
|
| +class WEBKIT_STORAGE_BROWSER_EXPORT_PRIVATE StorageObserverList {
|
| + public:
|
| + StorageObserverList();
|
| + virtual ~StorageObserverList();
|
| +
|
| + // Adds/removes an observer.
|
| + void AddObserver(StorageObserver* observer,
|
| + const StorageObserver::MonitorParams& params);
|
| + void RemoveObserver(StorageObserver* observer);
|
| +
|
| + // Returns the number of observers.
|
| + int ObserverCount() const;
|
| +
|
| + // Forwards a storage change to observers. The event may be dispatched
|
| + // immediately to an observer or after a delay, depending on the desired event
|
| + // rate of the observer.
|
| + void OnStorageChange(const StorageObserver::Event& event);
|
| +
|
| + // Dispatch an event to observers that require it.
|
| + void MaybeDispatchEvent(const StorageObserver::Event& event);
|
| +
|
| + // Ensure the specified observer receives the next dispatched event.
|
| + void ScheduleUpdateForObserver(StorageObserver* observer);
|
| +
|
| + private:
|
| + struct WEBKIT_STORAGE_BROWSER_EXPORT_PRIVATE ObserverState {
|
| + GURL origin;
|
| + base::TimeTicks last_notification_time;
|
| + base::TimeDelta rate;
|
| + bool requires_update;
|
| +
|
| + ObserverState();
|
| + };
|
| + typedef std::map<StorageObserver*, ObserverState> StorageObserverStateMap;
|
| +
|
| + void DispatchPendingEvent();
|
| +
|
| + StorageObserverStateMap observers_;
|
| + base::OneShotTimer<StorageObserverList> notification_timer_;
|
| + StorageObserver::Event pending_event_;
|
| +
|
| + friend class StorageMonitorTestBase;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(StorageObserverList);
|
| +};
|
| +
|
| +
|
| +// Manages the storage observers of a common host. Caches the usage and quota of
|
| +// the host to avoid accumulating for every change.
|
| +class WEBKIT_STORAGE_BROWSER_EXPORT_PRIVATE HostStorageObservers {
|
| + public:
|
| + explicit HostStorageObservers(QuotaManager* quota_manager);
|
| + virtual ~HostStorageObservers();
|
| +
|
| + bool is_initialized() const { return initialized_; }
|
| +
|
| + // Adds/removes an observer.
|
| + void AddObserver(
|
| + StorageObserver* observer,
|
| + const StorageObserver::MonitorParams& params);
|
| + void RemoveObserver(StorageObserver* observer);
|
| + bool ContainsObservers() const;
|
| +
|
| + // Handles a usage change.
|
| + void NotifyUsageChange(const StorageObserver::Filter& filter, int64 delta);
|
| +
|
| + private:
|
| + void StartInitialization(const StorageObserver::Filter& filter);
|
| + void GotHostUsageAndQuota(const StorageObserver::Filter& filter,
|
| + QuotaStatusCode status,
|
| + int64 usage,
|
| + int64 quota);
|
| + void DispatchEvent(const StorageObserver::Filter& filter, bool is_update);
|
| +
|
| + QuotaManager* quota_manager_;
|
| + StorageObserverList observers_;
|
| +
|
| + // Flags used during initialization of the cached properties.
|
| + bool initialized_;
|
| + bool initializing_;
|
| + bool event_occurred_before_init_;
|
| +
|
| + // Cached accumulated usage and quota for the host.
|
| + int64 cached_usage_;
|
| + int64 cached_quota_;
|
| +
|
| + base::WeakPtrFactory<HostStorageObservers> weak_factory_;
|
| +
|
| + friend class StorageMonitorTestBase;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(HostStorageObservers);
|
| +};
|
| +
|
| +
|
| +// Manages the observers of a common storage type.
|
| +class WEBKIT_STORAGE_BROWSER_EXPORT_PRIVATE StorageTypeObservers {
|
| + public:
|
| + explicit StorageTypeObservers(QuotaManager* quota_manager);
|
| + virtual ~StorageTypeObservers();
|
| +
|
| + // Adds and removes an observer.
|
| + void AddObserver(StorageObserver* observer,
|
| + const StorageObserver::MonitorParams& params);
|
| + void RemoveObserver(StorageObserver* observer);
|
| + void RemoveObserverForFilter(StorageObserver* observer,
|
| + const StorageObserver::Filter& filter);
|
| +
|
| + // Returns the observers of a specific host.
|
| + const HostStorageObservers* GetHostObservers(const std::string& host) const;
|
| +
|
| + // Handles a usage change.
|
| + void NotifyUsageChange(const StorageObserver::Filter& filter, int64 delta);
|
| +
|
| + private:
|
| + typedef std::map<std::string, HostStorageObservers*> HostObserversMap;
|
| +
|
| + QuotaManager* quota_manager_;
|
| + HostObserversMap host_observers_map_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(StorageTypeObservers);
|
| +};
|
| +
|
| +
|
| +// Storage monitor manages observers and dispatches storage events to them.
|
| +class WEBKIT_STORAGE_BROWSER_EXPORT_PRIVATE StorageMonitor {
|
| + public:
|
| + explicit StorageMonitor(QuotaManager* quota_manager);
|
| + virtual ~StorageMonitor();
|
| +
|
| + // Adds and removes an observer.
|
| + void AddObserver(StorageObserver* observer,
|
| + const StorageObserver::MonitorParams& params);
|
| + void RemoveObserver(StorageObserver* observer);
|
| + void RemoveObserverForFilter(StorageObserver* observer,
|
| + const StorageObserver::Filter& filter);
|
| +
|
| + // Returns the observers of a specific storage type.
|
| + const StorageTypeObservers* GetStorageTypeObservers(
|
| + StorageType storage_type) const;
|
| +
|
| + // Handles a usage change.
|
| + void NotifyUsageChange(const StorageObserver::Filter& filter, int64 delta);
|
| +
|
| + private:
|
| + typedef std::map<StorageType, StorageTypeObservers*> StorageTypeObserversMap;
|
| +
|
| + QuotaManager* quota_manager_;
|
| + StorageTypeObserversMap storage_type_observers_map_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(StorageMonitor);
|
| +};
|
| +
|
| +} // namespace quota
|
| +
|
| +#endif // WEBKIT_BROWSER_QUOTA_STORAGE_MONITOR_H_
|
|
|