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_UI_WEBUI_QUOTA_INTERNALS_QUOTA_INTERNALS_PROXY_H_ 6#define CHROME_BROWSER_UI_WEBUI_QUOTA_INTERNALS_QUOTA_INTERNALS_PROXY_H_ 7 8#include <map> 9#include <set> 10#include <string> 11#include <vector> 12 13#include "base/memory/ref_counted.h" 14#include "base/memory/weak_ptr.h" 15#include "base/sequenced_task_runner_helpers.h" 16#include "content/public/browser/browser_thread.h" 17#include "storage/browser/quota/quota_manager.h" 18#include "storage/common/quota/quota_types.h" 19 20namespace quota_internals { 21 22class QuotaInternalsHandler; 23class GlobalStorageInfo; 24class PerHostStorageInfo; 25class PerOriginStorageInfo; 26typedef std::map<std::string, std::string> Statistics; 27 28// This class is the bridge between QuotaInternalsHandler and QuotaManager. 29// Each QuotaInternalsHandler instances creates and owns a instance of this 30// class. 31class QuotaInternalsProxy 32 : public base::RefCountedThreadSafe< 33 QuotaInternalsProxy, 34 content::BrowserThread::DeleteOnIOThread> { 35 public: 36 explicit QuotaInternalsProxy(QuotaInternalsHandler* handler); 37 38 void RequestInfo(scoped_refptr<storage::QuotaManager> quota_manager); 39 40 private: 41 friend class base::DeleteHelper<QuotaInternalsProxy>; 42 friend struct content::BrowserThread::DeleteOnThread< 43 content::BrowserThread::IO>; 44 friend class QuotaInternalsHandler; 45 46 typedef storage::QuotaManager::QuotaTableEntries QuotaTableEntries; 47 typedef storage::QuotaManager::OriginInfoTableEntries OriginInfoTableEntries; 48 49 virtual ~QuotaInternalsProxy(); 50 51 void ReportAvailableSpace(int64 available_space); 52 void ReportGlobalInfo(const GlobalStorageInfo& data); 53 void ReportPerHostInfo(const std::vector<PerHostStorageInfo>& hosts); 54 void ReportPerOriginInfo(const std::vector<PerOriginStorageInfo>& origins); 55 void ReportStatistics(const Statistics& stats); 56 57 // Called on IO Thread by QuotaManager as callback. 58 void DidGetAvailableSpace(storage::QuotaStatusCode status, int64 space); 59 void DidGetGlobalQuota(storage::StorageType type, 60 storage::QuotaStatusCode status, 61 int64 quota); 62 void DidGetGlobalUsage(storage::StorageType type, 63 int64 usage, 64 int64 unlimited_usage); 65 void DidDumpQuotaTable(const QuotaTableEntries& entries); 66 void DidDumpOriginInfoTable(const OriginInfoTableEntries& entries); 67 void DidGetHostUsage(const std::string& host, 68 storage::StorageType type, 69 int64 usage); 70 71 // Helper. Called on IO Thread. 72 void RequestPerOriginInfo(storage::StorageType type); 73 void VisitHost(const std::string& host, storage::StorageType type); 74 void GetHostUsage(const std::string& host, storage::StorageType type); 75 76 // Used on UI Thread. 77 QuotaInternalsHandler* handler_; 78 79 // Used on IO Thread. 80 scoped_refptr<storage::QuotaManager> quota_manager_; 81 std::set<std::pair<std::string, storage::StorageType> > hosts_visited_, 82 hosts_pending_; 83 std::vector<PerHostStorageInfo> report_pending_; 84 base::WeakPtrFactory<QuotaInternalsProxy> weak_factory_; 85 86 DISALLOW_COPY_AND_ASSIGN(QuotaInternalsProxy); 87}; 88} // namespace quota_internals 89 90#endif // CHROME_BROWSER_UI_WEBUI_QUOTA_INTERNALS_QUOTA_INTERNALS_PROXY_H_ 91