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