15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#ifndef STORAGE_BROWSER_FILEAPI_FILE_SYSTEM_QUOTA_UTIL_H_
61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define STORAGE_BROWSER_FILEAPI_FILE_SYSTEM_QUOTA_UTIL_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <set>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/files/file.h"
131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "storage/browser/storage_browser_export.h"
141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "storage/common/fileapi/file_system_types.h"
15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "url/gurl.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SequencedTaskRunner;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)namespace storage {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class QuotaManagerProxy;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)namespace storage {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class FileSystemContext;
28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class QuotaReservation;
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// An abstract interface that provides common quota-related utility functions
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// for file_system_quota_client.
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// All the methods of this class are synchronous and need to be called on
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the thread that the method name implies.
341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass STORAGE_EXPORT FileSystemQuotaUtil {
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~FileSystemQuotaUtil() {}
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Deletes the data on the origin and reports the amount of deleted data
397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // to the quota manager via |proxy|.
405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual base::File::Error DeleteOriginDataOnFileTaskRunner(
417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      FileSystemContext* context,
4203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      storage::QuotaManagerProxy* proxy,
437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      const GURL& origin_url,
447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      FileSystemType type) = 0;
457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
4603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  virtual void GetOriginsForTypeOnFileTaskRunner(storage::FileSystemType type,
4703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                                                 std::set<GURL>* origins) = 0;
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  virtual void GetOriginsForHostOnFileTaskRunner(storage::FileSystemType type,
5003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                                                 const std::string& host,
5103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                                                 std::set<GURL>* origins) = 0;
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the amount of data used for the origin for usage tracking.
545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual int64 GetOriginUsageOnFileTaskRunner(
5503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      storage::FileSystemContext* file_system_context,
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const GURL& origin_url,
5703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      storage::FileSystemType type) = 0;
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Creates new reservation object for the origin and the type.
60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual scoped_refptr<QuotaReservation>
61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      CreateQuotaReservationOnFileTaskRunner(
62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)          const GURL& origin_url,
63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)          FileSystemType type) = 0;
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}  // namespace storage
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif  // STORAGE_BROWSER_FILEAPI_FILE_SYSTEM_QUOTA_UTIL_H_
69