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)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_BROWSING_DATA_BROWSING_DATA_QUOTA_HELPER_IMPL_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_BROWSING_DATA_BROWSING_DATA_QUOTA_HELPER_IMPL_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <map>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <set>
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <utility>
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/weak_ptr.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browsing_data/browsing_data_quota_helper.h"
17868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "webkit/common/quota/quota_types.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class GURL;
2090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace quota {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class QuotaManager;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Implementation of BrowsingDataQuotaHelper.  Since a client of
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// BrowsingDataQuotaHelper should live in UI thread and QuotaManager lives in
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// IO thread, we have to communicate over thread using PostTask.
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BrowsingDataQuotaHelperImpl : public BrowsingDataQuotaHelper {
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void StartFetching(const FetchResultCallback& callback) OVERRIDE;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void RevokeHostQuota(const std::string& host) OVERRIDE;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BrowsingDataQuotaHelperImpl(base::MessageLoopProxy* ui_thread,
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              base::MessageLoopProxy* io_thread,
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              quota::QuotaManager* quota_manager);
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~BrowsingDataQuotaHelperImpl();
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void FetchQuotaInfo();
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Callback function for GetOriginModifiedSince.
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void GotOrigins(const std::set<GURL>& origins, quota::StorageType type);
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ProcessPendingHosts();
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void GetHostUsage(const std::string& host, quota::StorageType type);
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Callback function for GetHostUsage.
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void GotHostUsage(const std::string& host,
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    quota::StorageType type,
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    int64 usage);
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnComplete();
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void DidRevokeHostQuota(quota::QuotaStatusCode status, int64 quota);
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<quota::QuotaManager> quota_manager_;
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FetchResultCallback callback_;
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef std::set<std::pair<std::string, quota::StorageType> > PendingHosts;
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PendingHosts pending_hosts_;
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::map<std::string, QuotaInfo> quota_info_;
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool is_fetching_;
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<base::MessageLoopProxy> ui_thread_;
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<base::MessageLoopProxy> io_thread_;
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::WeakPtrFactory<BrowsingDataQuotaHelperImpl> weak_factory_;
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  friend class BrowsingDataQuotaHelper;
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  friend class BrowsingDataQuotaHelperTest;
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(BrowsingDataQuotaHelperImpl);
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_BROWSING_DATA_BROWSING_DATA_QUOTA_HELPER_IMPL_H_
75