Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(53)

Side by Side Diff: chrome/browser/ui/webui/quota_internals_proxy.cc

Issue 7084024: Add chrome://quota-internals/ (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: '' Created 9 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2011 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 #include "chrome/browser/ui/webui/quota_internals_proxy.h"
6
7 #include <set>
8 #include <string>
9
10 #include "chrome/browser/ui/webui/quota_internals_handler.h"
11 #include "chrome/browser/ui/webui/quota_internals_types.h"
12 #include "net/base/net_util.h"
13
14 namespace quota_internals {
15
16 QuotaInternalsProxy::QuotaInternalsProxy(QuotaInternalsHandler* handler)
17 : handler_(handler),
18 callback_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) {
19 }
20
21 void QuotaInternalsProxy::ReportAvailableSpace(int64 available_space) {
22 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
23 BrowserThread::PostTask(
24 BrowserThread::UI, FROM_HERE,
25 NewRunnableMethod(this, &QuotaInternalsProxy::ReportAvailableSpace,
26 available_space));
27 return;
28 }
29 if (handler_)
30 handler_->ReportAvailableSpace(available_space);
31 }
32
33 void QuotaInternalsProxy::ReportGlobalInfo(const GlobalStorageInfo& info) {
34 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
35 BrowserThread::PostTask(
36 BrowserThread::UI, FROM_HERE,
37 NewRunnableMethod(this, &QuotaInternalsProxy::ReportGlobalInfo,
38 info));
39 return;
40 }
41 if (handler_)
42 handler_->ReportGlobalInfo(info);
43 }
44
45 void QuotaInternalsProxy::ReportPerHostInfo(
46 const std::vector<PerHostStorageInfo>& hosts) {
47 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
48 BrowserThread::PostTask(
49 BrowserThread::UI, FROM_HERE,
50 NewRunnableMethod(this, &QuotaInternalsProxy::ReportPerHostInfo,
51 hosts));
52 return;
53 }
54 if (handler_)
Evan Stade 2011/07/07 20:58:17 seems like you could move this check above the thr
tzik 2011/07/07 23:00:35 Done.
55 handler_->ReportPerHostInfo(hosts);
56 }
57
58 void QuotaInternalsProxy::ReportPerOriginInfo(
59 const std::vector<PerOriginStorageInfo>& origins) {
60 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
61 BrowserThread::PostTask(
62 BrowserThread::UI, FROM_HERE,
63 NewRunnableMethod(this, &QuotaInternalsProxy::ReportPerOriginInfo,
64 origins));
65 return;
66 }
67 if (handler_)
68 handler_->ReportPerOriginInfo(origins);
69 }
70
71 void QuotaInternalsProxy::ReportStatistics(const Statistics& stats) {
Evan Stade 2011/07/07 20:58:17 you use this pattern a lot, it seems ripe for a ma
tzik 2011/07/07 23:00:35 Done.
72 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
73 BrowserThread::PostTask(
74 BrowserThread::UI, FROM_HERE,
75 NewRunnableMethod(this, &QuotaInternalsProxy::ReportStatistics,
76 stats));
77 return;
78 }
79 if (handler_)
80 handler_->ReportStatistics(stats);
81 }
82
83 void QuotaInternalsProxy::RequestInfo(
84 scoped_refptr<quota::QuotaManager> quota_manager) {
85 DCHECK(quota_manager);
86 if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) {
87 BrowserThread::PostTask(
88 BrowserThread::IO, FROM_HERE,
89 NewRunnableMethod(this, &QuotaInternalsProxy::RequestInfo,
90 quota_manager));
91 return;
92 }
93
94 quota_manager_ = quota_manager;
95 quota_manager_->GetAvailableSpace(
96 callback_factory_.NewCallback(
97 &QuotaInternalsProxy::DidGetAvailableSpace));
98
99 quota_manager_->GetTemporaryGlobalQuota(
100 callback_factory_.NewCallback(
101 &QuotaInternalsProxy::DidGetGlobalQuota));
102
103 quota_manager_->GetGlobalUsage(
104 quota::kStorageTypeTemporary,
105 callback_factory_.NewCallback(
106 &QuotaInternalsProxy::DidGetGlobalUsage));
107
108 quota_manager_->GetGlobalUsage(
109 quota::kStorageTypePersistent,
110 callback_factory_.NewCallback(
111 &QuotaInternalsProxy::DidGetGlobalUsage));
112
113 quota_manager_->DumpQuotaTable(
114 callback_factory_.NewCallback(
115 &QuotaInternalsProxy::DidDumpQuotaTable));
116
117 quota_manager_->DumpOriginInfoTable(
118 callback_factory_.NewCallback(
119 &QuotaInternalsProxy::DidDumpOriginInfoTable));
120
121 std::map<std::string, std::string> stats;
122 quota_manager_->GetStatistics(&stats);
123 ReportStatistics(stats);
124 }
125
126 void QuotaInternalsProxy::DidGetAvailableSpace(quota::QuotaStatusCode status,
127 int64 space) {
128 if (status == quota::kQuotaStatusOk)
129 ReportAvailableSpace(space);
130 }
131
132 void QuotaInternalsProxy::DidGetGlobalQuota(quota::QuotaStatusCode status,
133 quota::StorageType type,
134 int64 quota) {
135 if (status == quota::kQuotaStatusOk) {
136 GlobalStorageInfo info(type);
137 info.set_quota(quota);
138 ReportGlobalInfo(info);
139 }
140 }
141
142 void QuotaInternalsProxy::DidGetGlobalUsage(quota::StorageType type,
143 int64 usage,
144 int64 unlimited_usage) {
145 GlobalStorageInfo info(type);
146 info.set_usage(usage);
147 info.set_unlimited_usage(unlimited_usage);
148
149 ReportGlobalInfo(info);
150 RequestPerOriginInfo(type);
151 }
152
153 void QuotaInternalsProxy::DidDumpQuotaTable(const QuotaTableEntries& entries) {
154 std::vector<PerHostStorageInfo> host_info;
155 host_info.reserve(entries.size());
156
157 typedef QuotaTableEntries::const_iterator iterator;
158 for (iterator itr(entries.begin()); itr != entries.end(); ++itr) {
159 PerHostStorageInfo info(itr->host, itr->type);
160 info.set_quota(itr->quota);
161 host_info.push_back(info);
162 }
163
164 ReportPerHostInfo(host_info);
165 }
166
167 void QuotaInternalsProxy::DidDumpOriginInfoTable(
168 const OriginInfoTableEntries& entries) {
169 std::vector<PerOriginStorageInfo> origin_info;
170 origin_info.reserve(entries.size());
171
172 typedef OriginInfoTableEntries::const_iterator iterator;
173 for (iterator itr(entries.begin()); itr != entries.end(); ++itr) {
174 PerOriginStorageInfo info(itr->origin, itr->type);
175 info.set_used_count(itr->used_count);
176 info.set_last_access_time(itr->last_access_time);
177 info.set_last_modified_time(itr->last_modified_time);
178
179 origin_info.push_back(info);
180 }
181
182 ReportPerOriginInfo(origin_info);
183 }
184
185 void QuotaInternalsProxy::DidGetHostUsage(const std::string& host,
186 quota::StorageType type,
187 int64 usage) {
188 DCHECK(type == quota::kStorageTypeTemporary ||
189 type == quota::kStorageTypePersistent);
190
191 PerHostStorageInfo info(host, type);
192 info.set_usage(usage);
193
194 report_pending_.push_back(info);
195 hosts_pending_.erase(make_pair(host, type));
196 if (report_pending_.size() >= 10 || hosts_pending_.empty()) {
197 ReportPerHostInfo(report_pending_);
198 report_pending_.clear();
199 }
200
201 if (!hosts_pending_.empty())
202 GetHostUsage(hosts_pending_.begin()->first,
203 hosts_pending_.begin()->second);
204 }
205
206 void QuotaInternalsProxy::VisitHost(const std::string& host,
207 quota::StorageType type) {
208 if (hosts_visited_.insert(std::make_pair(host, type)).second) {
209 hosts_pending_.insert(std::make_pair(host, type));
210 if (hosts_pending_.size() == 1) {
211 GetHostUsage(host, type);
212 }
213 }
214 }
215
216 void QuotaInternalsProxy::GetHostUsage(const std::string& host,
217 quota::StorageType type) {
218 DCHECK(quota_manager_);
219 quota_manager_->GetHostUsage(
220 host, type,
221 callback_factory_.NewCallback(
222 &QuotaInternalsProxy::DidGetHostUsage));
223 }
224
225 void QuotaInternalsProxy::RequestPerOriginInfo(quota::StorageType type) {
226 DCHECK(quota_manager_);
227
228 std::set<GURL> origins;
229 quota_manager_->GetCachedOrigins(type, &origins);
230
231 std::vector<PerOriginStorageInfo> origin_info;
232 origin_info.reserve(origins.size());
233
234 std::set<std::string> hosts;
235 std::vector<PerHostStorageInfo> host_info;
236
237 for (std::set<GURL>::iterator itr(origins.begin());
238 itr != origins.end(); ++itr) {
239 PerOriginStorageInfo info(*itr, type);
240 info.set_in_use(quota_manager_->IsOriginInUse(*itr));
241 origin_info.push_back(info);
242
243 std::string host(net::GetHostOrSpecFromURL(*itr));
244 if (hosts.insert(host).second) {
245 PerHostStorageInfo info(host, type);
246 host_info.push_back(info);
247 VisitHost(host, type);
248 }
249 }
250 ReportPerOriginInfo(origin_info);
251 ReportPerHostInfo(host_info);
252 }
253
254 } // namespace quota_internals
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698