1868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Copyright 2013 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_QUOTA_QUOTA_CLIENT_H_
61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define STORAGE_BROWSER_QUOTA_QUOTA_CLIENT_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <list>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <set>
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/callback.h"
131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "storage/browser/storage_browser_export.h"
141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "storage/common/quota/quota_types.h"
15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "url/gurl.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)namespace storage {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// An abstract interface for quota manager clients.
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Each storage API must provide an implementation of this interface and
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// register it to the quota manager.
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// All the methods are assumed to be called on the IO thread in the browser.
231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass STORAGE_EXPORT QuotaClient {
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
2590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  typedef base::Callback<void(int64 usage)> GetUsageCallback;
2690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  typedef base::Callback<void(const std::set<GURL>& origins)>
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GetOriginsCallback;
2890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  typedef base::Callback<void(QuotaStatusCode status)> DeletionCallback;
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~QuotaClient() {}
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  enum ID {
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    kUnknown = 1 << 0,
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    kFileSystem = 1 << 1,
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    kDatabase = 1 << 2,
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    kAppcache = 1 << 3,
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    kIndexedDatabase = 1 << 4,
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    kAllClientsMask = -1,
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ID id() const = 0;
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called when the quota manager is destroyed.
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnQuotaManagerDestroyed() = 0;
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called by the QuotaManager.
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Gets the amount of data stored in the storage specified by
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |origin_url| and |type|.
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Note it is safe to fire the callback after the QuotaClient is destructed.
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void GetOriginUsage(const GURL& origin_url,
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              StorageType type,
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              const GetUsageCallback& callback) = 0;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called by the QuotaManager.
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns a list of origins that has data in the |type| storage.
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Note it is safe to fire the callback after the QuotaClient is destructed.
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void GetOriginsForType(StorageType type,
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 const GetOriginsCallback& callback) = 0;
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called by the QuotaManager.
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns a list of origins that match the |host|.
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Note it is safe to fire the callback after the QuotaClient is destructed.
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void GetOriginsForHost(StorageType type,
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 const std::string& host,
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 const GetOriginsCallback& callback) = 0;
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called by the QuotaManager.
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Note it is safe to fire the callback after the QuotaClient is destructed.
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DeleteOriginData(const GURL& origin,
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                StorageType type,
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                const DeletionCallback& callback) = 0;
7258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
7358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual bool DoesSupport(StorageType type) const = 0;
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(dmikurube): Replace it to std::vector for efficiency.
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef std::list<QuotaClient*> QuotaClientList;
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}  // namespace storage
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif  // STORAGE_BROWSER_QUOTA_QUOTA_CLIENT_H_
82