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_QUOTA_MANAGER_PROXY_H_
6#define STORAGE_BROWSER_QUOTA_QUOTA_MANAGER_PROXY_H_
7
8#include "base/basictypes.h"
9#include "base/callback.h"
10#include "base/files/file_path.h"
11#include "base/memory/ref_counted.h"
12#include "base/memory/scoped_ptr.h"
13#include "base/memory/weak_ptr.h"
14#include "base/sequenced_task_runner_helpers.h"
15#include "storage/browser/quota/quota_callbacks.h"
16#include "storage/browser/quota/quota_client.h"
17#include "storage/browser/quota/quota_database.h"
18#include "storage/browser/quota/quota_manager.h"
19#include "storage/browser/quota/quota_task.h"
20#include "storage/browser/quota/special_storage_policy.h"
21#include "storage/browser/storage_browser_export.h"
22
23namespace base {
24class SequencedTaskRunner;
25class SingleThreadTaskRunner;
26}
27
28namespace storage {
29
30// The proxy may be called and finally released on any thread.
31class STORAGE_EXPORT QuotaManagerProxy
32    : public base::RefCountedThreadSafe<QuotaManagerProxy> {
33 public:
34  typedef QuotaManager::GetUsageAndQuotaCallback
35      GetUsageAndQuotaCallback;
36
37  virtual void RegisterClient(QuotaClient* client);
38  virtual void NotifyStorageAccessed(QuotaClient::ID client_id,
39                                     const GURL& origin,
40                                     StorageType type);
41  virtual void NotifyStorageModified(QuotaClient::ID client_id,
42                                     const GURL& origin,
43                                     StorageType type,
44                                     int64 delta);
45  virtual void NotifyOriginInUse(const GURL& origin);
46  virtual void NotifyOriginNoLongerInUse(const GURL& origin);
47
48  virtual void SetUsageCacheEnabled(QuotaClient::ID client_id,
49                                    const GURL& origin,
50                                    StorageType type,
51                                    bool enabled);
52  virtual void GetUsageAndQuota(
53      base::SequencedTaskRunner* original_task_runner,
54      const GURL& origin,
55      StorageType type,
56      const GetUsageAndQuotaCallback& callback);
57
58  // This method may only be called on the IO thread.
59  // It may return NULL if the manager has already been deleted.
60  QuotaManager* quota_manager() const;
61
62 protected:
63  friend class QuotaManager;
64  friend class base::RefCountedThreadSafe<QuotaManagerProxy>;
65
66  QuotaManagerProxy(
67      QuotaManager* manager,
68      const scoped_refptr<base::SingleThreadTaskRunner>& io_thread);
69  virtual ~QuotaManagerProxy();
70
71  QuotaManager* manager_;  // only accessed on the io thread
72  scoped_refptr<base::SingleThreadTaskRunner> io_thread_;
73
74  DISALLOW_COPY_AND_ASSIGN(QuotaManagerProxy);
75};
76
77}  // namespace storage
78
79#endif  // STORAGE_BROWSER_QUOTA_QUOTA_MANAGER_PROXY_H_
80