- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / webui / quota_internals / quota_internals_proxy.h
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 "webkit/browser/quota/quota_manager.h"
18 #include "webkit/common/quota/quota_types.h"
19
20 namespace quota_internals {
21
22 class QuotaInternalsHandler;
23 class GlobalStorageInfo;
24 class PerHostStorageInfo;
25 class PerOriginStorageInfo;
26 typedef 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.
31 class QuotaInternalsProxy
32     : public base::RefCountedThreadSafe<
33           QuotaInternalsProxy,
34           content::BrowserThread::DeleteOnIOThread> {
35  public:
36   explicit QuotaInternalsProxy(QuotaInternalsHandler* handler);
37
38   void RequestInfo(scoped_refptr<quota::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 quota::QuotaManager::QuotaTableEntries QuotaTableEntries;
47   typedef quota::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(quota::QuotaStatusCode status, int64 space);
59   void DidGetGlobalQuota(quota::StorageType type,
60                          quota::QuotaStatusCode status,
61                          int64 quota);
62   void DidGetGlobalUsage(quota::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                        quota::StorageType type,
69                        int64 usage);
70
71   // Helper. Called on IO Thread.
72   void RequestPerOriginInfo(quota::StorageType type);
73   void VisitHost(const std::string& host, quota::StorageType type);
74   void GetHostUsage(const std::string& host, quota::StorageType type);
75
76   // Used on UI Thread.
77   QuotaInternalsHandler* handler_;
78
79   // Used on IO Thread.
80   scoped_refptr<quota::QuotaManager> quota_manager_;
81   std::set<std::pair<std::string, quota::StorageType> >
82       hosts_visited_, hosts_pending_;
83   std::vector<PerHostStorageInfo> report_pending_;
84   base::WeakPtrFactory<QuotaInternalsProxy> weak_factory_;
85
86   DISALLOW_COPY_AND_ASSIGN(QuotaInternalsProxy);
87 };
88 }  // quota_internals
89
90 #endif  // CHROME_BROWSER_UI_WEBUI_QUOTA_INTERNALS_QUOTA_INTERNALS_PROXY_H_