1// Copyright (c) 2012 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_FILEAPI_FILE_SYSTEM_QUOTA_UTIL_H_
6#define WEBKIT_BROWSER_FILEAPI_FILE_SYSTEM_QUOTA_UTIL_H_
7
8#include <set>
9#include <string>
10
11#include "base/basictypes.h"
12#include "base/files/file.h"
13#include "url/gurl.h"
14#include "webkit/browser/fileapi/task_runner_bound_observer_list.h"
15#include "webkit/browser/webkit_storage_browser_export.h"
16#include "webkit/common/fileapi/file_system_types.h"
17
18namespace base {
19class SequencedTaskRunner;
20}
21
22namespace quota {
23class QuotaManagerProxy;
24}
25
26namespace fileapi {
27
28class FileSystemContext;
29class QuotaReservation;
30
31// An abstract interface that provides common quota-related utility functions
32// for file_system_quota_client.
33// All the methods of this class are synchronous and need to be called on
34// the thread that the method name implies.
35class WEBKIT_STORAGE_BROWSER_EXPORT FileSystemQuotaUtil {
36 public:
37  virtual ~FileSystemQuotaUtil() {}
38
39  // Deletes the data on the origin and reports the amount of deleted data
40  // to the quota manager via |proxy|.
41  virtual base::File::Error DeleteOriginDataOnFileTaskRunner(
42      FileSystemContext* context,
43      quota::QuotaManagerProxy* proxy,
44      const GURL& origin_url,
45      FileSystemType type) = 0;
46
47  virtual void GetOriginsForTypeOnFileTaskRunner(
48      fileapi::FileSystemType type,
49      std::set<GURL>* origins) = 0;
50
51  virtual void GetOriginsForHostOnFileTaskRunner(
52      fileapi::FileSystemType type,
53      const std::string& host,
54      std::set<GURL>* origins) = 0;
55
56  // Returns the amount of data used for the origin for usage tracking.
57  virtual int64 GetOriginUsageOnFileTaskRunner(
58      fileapi::FileSystemContext* file_system_context,
59      const GURL& origin_url,
60      fileapi::FileSystemType type) = 0;
61
62  // Creates new reservation object for the origin and the type.
63  virtual scoped_refptr<QuotaReservation>
64      CreateQuotaReservationOnFileTaskRunner(
65          const GURL& origin_url,
66          FileSystemType type) = 0;
67
68  virtual void AddFileUpdateObserver(
69      FileSystemType type,
70      FileUpdateObserver* observer,
71      base::SequencedTaskRunner* task_runner) = 0;
72  virtual void AddFileChangeObserver(
73      FileSystemType type,
74      FileChangeObserver* observer,
75      base::SequencedTaskRunner* task_runner) = 0;
76  virtual void AddFileAccessObserver(
77      FileSystemType type,
78      FileAccessObserver* observer,
79      base::SequencedTaskRunner* task_runner) = 0;
80
81  // Returns the observer list for |type|, or returns NULL if any observers
82  // have not been registered on |type|.
83  virtual const UpdateObserverList* GetUpdateObservers(
84      FileSystemType type) const = 0;
85  virtual const ChangeObserverList* GetChangeObservers(
86      FileSystemType type) const = 0;
87  virtual const AccessObserverList* GetAccessObservers(
88      FileSystemType type) const = 0;
89};
90
91}  // namespace fileapi
92
93#endif  // WEBKIT_BROWSER_FILEAPI_FILE_SYSTEM_QUOTA_UTIL_H_
94