1c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
2c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// found in the LICENSE file.
4c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#ifndef STORAGE_BROWSER_QUOTA_STORAGE_OBSERVER_H_
61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define STORAGE_BROWSER_QUOTA_STORAGE_OBSERVER_H_
7c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
8c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "base/basictypes.h"
9c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "base/time/time.h"
101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "storage/browser/quota/quota_client.h"
111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "storage/common/quota/quota_types.h"
12c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "url/gurl.h"
13c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
1403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)namespace storage {
15c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
16c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// This interface is implemented by observers that wish to monitor storage
17c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// events, such as changes in quota or usage.
181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass STORAGE_EXPORT StorageObserver {
19c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public:
201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  struct STORAGE_EXPORT Filter {
21c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    // The storage type to monitor. This must not be kStorageTypeUnknown or
22c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    // kStorageTypeQuotaNotManaged.
23c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    StorageType storage_type;
24c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
25c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    // The origin to monitor usage for. Must be specified.
26c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    GURL origin;
27c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
28c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    Filter();
29c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    Filter(StorageType storage_type, const GURL& origin);
30c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    bool operator==(const Filter& other) const;
31c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  };
32c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  struct STORAGE_EXPORT MonitorParams {
34c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    // Storage type and origin to monitor.
35c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    Filter filter;
36c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
37c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    // The rate at which storage events will be fired. Events will be fired at
38c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    // approximately this rate, or when a storage status change has been
39c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    // detected, whichever is the least frequent.
40c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    base::TimeDelta rate;
41c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
42c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    // If set to true, the observer will be dispatched an event when added.
43c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    bool dispatch_initial_state;
44c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
45c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    MonitorParams();
46c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    MonitorParams(StorageType storage_type,
47c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                  const GURL& origin,
48c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                  const base::TimeDelta& rate,
49c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                  bool get_initial_state);
50c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    MonitorParams(const Filter& filter,
51c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                  const base::TimeDelta& rate,
52c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                  bool get_initial_state);
53c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  };
54c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  struct STORAGE_EXPORT Event {
56c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    // The storage type and origin monitored.
57c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    Filter filter;
58c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
59c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    // The current usage corresponding to the filter.
60c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    int64 usage;
61c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
62c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    // The quota corresponding to the filter.
63c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    int64 quota;
64c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
65c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    Event();
66c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    Event(const Filter& filter, int64 usage, int64 quota);
67c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    bool operator==(const Event& other) const;
68c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  };
69c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
70c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // Will be called on the IO thread when a storage event occurs.
71c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual void OnStorageEvent(const Event& event) = 0;
72c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
73c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch protected:
74c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual ~StorageObserver() {}
75c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch};
76c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
7703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}  // namespace storage
78c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif  // STORAGE_BROWSER_QUOTA_STORAGE_OBSERVER_H_
80