Home | History | Annotate | Download | only in browsing_data
      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 CHROME_BROWSER_BROWSING_DATA_BROWSING_DATA_QUOTA_HELPER_H_
      6 #define CHROME_BROWSER_BROWSING_DATA_BROWSING_DATA_QUOTA_HELPER_H_
      7 
      8 #include <list>
      9 #include <string>
     10 
     11 #include "base/callback.h"
     12 #include "base/memory/ref_counted.h"
     13 #include "base/message_loop/message_loop_proxy.h"
     14 #include "base/sequenced_task_runner_helpers.h"
     15 #include "webkit/common/quota/quota_types.h"
     16 
     17 class BrowsingDataQuotaHelper;
     18 class Profile;
     19 
     20 struct BrowsingDataQuotaHelperDeleter {
     21   static void Destruct(const BrowsingDataQuotaHelper* helper);
     22 };
     23 
     24 // This class is an interface class to bridge between Cookies Tree and Unified
     25 // Quota System.  This class provides a way to get usage and quota information
     26 // through the instance.
     27 //
     28 // Call Create to create an instance for a profile and call StartFetching with
     29 // a callback to fetch information asynchronously.
     30 //
     31 // Parallel fetching is not allowed, a fetching task should start after end of
     32 // previous task.  All method of this class should called from UI thread.
     33 class BrowsingDataQuotaHelper
     34     : public base::RefCountedThreadSafe<BrowsingDataQuotaHelper,
     35                                         BrowsingDataQuotaHelperDeleter> {
     36  public:
     37   // QuotaInfo contains host-based quota and usage information for persistent
     38   // and temporary storage.
     39   struct QuotaInfo {
     40     QuotaInfo();
     41     explicit QuotaInfo(const std::string& host);
     42     QuotaInfo(const std::string& host,
     43               int64 temporary_usage,
     44               int64 persistent_usage,
     45               int64 syncable_usage);
     46     ~QuotaInfo();
     47 
     48     // Certain versions of MSVC 2008 have bad implementations of ADL for nested
     49     // classes so they require these operators to be declared here instead of in
     50     // the global namespace.
     51     bool operator <(const QuotaInfo& rhs) const;
     52     bool operator ==(const QuotaInfo& rhs) const;
     53 
     54     std::string host;
     55     int64 temporary_usage;
     56     int64 persistent_usage;
     57     int64 syncable_usage;
     58   };
     59 
     60   typedef std::list<QuotaInfo> QuotaInfoArray;
     61   typedef base::Callback<void(const QuotaInfoArray&)> FetchResultCallback;
     62 
     63   static BrowsingDataQuotaHelper* Create(Profile* profile);
     64 
     65   virtual void StartFetching(const FetchResultCallback& callback) = 0;
     66 
     67   virtual void RevokeHostQuota(const std::string& host) = 0;
     68 
     69  protected:
     70   explicit BrowsingDataQuotaHelper(base::MessageLoopProxy* io_thread_);
     71   virtual ~BrowsingDataQuotaHelper();
     72 
     73  private:
     74   friend class base::DeleteHelper<BrowsingDataQuotaHelper>;
     75   friend struct BrowsingDataQuotaHelperDeleter;
     76   scoped_refptr<base::MessageLoopProxy> io_thread_;
     77 
     78   DISALLOW_COPY_AND_ASSIGN(BrowsingDataQuotaHelper);
     79 };
     80 
     81 #endif  // CHROME_BROWSER_BROWSING_DATA_BROWSING_DATA_QUOTA_HELPER_H_
     82