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 WEBKIT_BROWSER_QUOTA_QUOTA_MANAGER_PROXY_H_
6#define WEBKIT_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 "webkit/browser/quota/quota_callbacks.h"
16#include "webkit/browser/quota/quota_client.h"
17#include "webkit/browser/quota/quota_database.h"
18#include "webkit/browser/quota/quota_manager.h"
19#include "webkit/browser/quota/quota_task.h"
20#include "webkit/browser/quota/special_storage_policy.h"
21#include "webkit/browser/webkit_storage_browser_export.h"
22
23namespace base {
24class SequencedTaskRunner;
25class SingleThreadTaskRunner;
26}
27
28namespace quota {
29
30// The proxy may be called and finally released on any thread.
31class WEBKIT_STORAGE_BROWSER_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(QuotaManager* manager,
67                    base::SingleThreadTaskRunner* io_thread);
68  virtual ~QuotaManagerProxy();
69
70  QuotaManager* manager_;  // only accessed on the io thread
71  scoped_refptr<base::SingleThreadTaskRunner> io_thread_;
72
73  DISALLOW_COPY_AND_ASSIGN(QuotaManagerProxy);
74};
75
76}  // namespace quota
77
78#endif  // WEBKIT_BROWSER_QUOTA_QUOTA_MANAGER_PROXY_H_
79