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
3// found in the LICENSE file.
4
5#ifndef STORAGE_BROWSER_QUOTA_STORAGE_OBSERVER_H_
6#define STORAGE_BROWSER_QUOTA_STORAGE_OBSERVER_H_
7
8#include "base/basictypes.h"
9#include "base/time/time.h"
10#include "storage/browser/quota/quota_client.h"
11#include "storage/common/quota/quota_types.h"
12#include "url/gurl.h"
13
14namespace storage {
15
16// This interface is implemented by observers that wish to monitor storage
17// events, such as changes in quota or usage.
18class STORAGE_EXPORT StorageObserver {
19 public:
20  struct STORAGE_EXPORT Filter {
21    // The storage type to monitor. This must not be kStorageTypeUnknown or
22    // kStorageTypeQuotaNotManaged.
23    StorageType storage_type;
24
25    // The origin to monitor usage for. Must be specified.
26    GURL origin;
27
28    Filter();
29    Filter(StorageType storage_type, const GURL& origin);
30    bool operator==(const Filter& other) const;
31  };
32
33  struct STORAGE_EXPORT MonitorParams {
34    // Storage type and origin to monitor.
35    Filter filter;
36
37    // The rate at which storage events will be fired. Events will be fired at
38    // approximately this rate, or when a storage status change has been
39    // detected, whichever is the least frequent.
40    base::TimeDelta rate;
41
42    // If set to true, the observer will be dispatched an event when added.
43    bool dispatch_initial_state;
44
45    MonitorParams();
46    MonitorParams(StorageType storage_type,
47                  const GURL& origin,
48                  const base::TimeDelta& rate,
49                  bool get_initial_state);
50    MonitorParams(const Filter& filter,
51                  const base::TimeDelta& rate,
52                  bool get_initial_state);
53  };
54
55  struct STORAGE_EXPORT Event {
56    // The storage type and origin monitored.
57    Filter filter;
58
59    // The current usage corresponding to the filter.
60    int64 usage;
61
62    // The quota corresponding to the filter.
63    int64 quota;
64
65    Event();
66    Event(const Filter& filter, int64 usage, int64 quota);
67    bool operator==(const Event& other) const;
68  };
69
70  // Will be called on the IO thread when a storage event occurs.
71  virtual void OnStorageEvent(const Event& event) = 0;
72
73 protected:
74  virtual ~StorageObserver() {}
75};
76
77}  // namespace storage
78
79#endif  // STORAGE_BROWSER_QUOTA_STORAGE_OBSERVER_H_
80