| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/ui/webui/quota_internals_proxy.h" | 5 #include "chrome/browser/ui/webui/quota_internals_proxy.h" |
| 6 | 6 |
| 7 #include <set> | 7 #include <set> |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| 11 #include "chrome/browser/ui/webui/quota_internals_handler.h" | 11 #include "chrome/browser/ui/webui/quota_internals_handler.h" |
| 12 #include "chrome/browser/ui/webui/quota_internals_types.h" | 12 #include "chrome/browser/ui/webui/quota_internals_types.h" |
| 13 #include "net/base/net_util.h" | 13 #include "net/base/net_util.h" |
| 14 | 14 |
| 15 using content::BrowserThread; | 15 using content::BrowserThread; |
| 16 | 16 |
| 17 namespace quota_internals { | 17 namespace quota_internals { |
| 18 | 18 |
| 19 QuotaInternalsProxy::QuotaInternalsProxy(QuotaInternalsHandler* handler) | 19 QuotaInternalsProxy::QuotaInternalsProxy(QuotaInternalsHandler* handler) |
| 20 : handler_(handler), | 20 : handler_(handler), |
| 21 weak_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) { | 21 weak_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) { |
| 22 } | 22 } |
| 23 | 23 |
| 24 QuotaInternalsProxy::~QuotaInternalsProxy() {} | |
| 25 | |
| 26 #define RELAY_TO_HANDLER(func, arg_t) \ | |
| 27 void QuotaInternalsProxy::func(arg_t arg) { \ | |
| 28 if (!handler_) \ | |
| 29 return; \ | |
| 30 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) { \ | |
| 31 BrowserThread::PostTask( \ | |
| 32 BrowserThread::UI, FROM_HERE, \ | |
| 33 base::Bind(&QuotaInternalsProxy::func, this, arg)); \ | |
| 34 return; \ | |
| 35 } \ | |
| 36 \ | |
| 37 handler_->func(arg); \ | |
| 38 } | |
| 39 | |
| 40 RELAY_TO_HANDLER(ReportAvailableSpace, int64) | |
| 41 RELAY_TO_HANDLER(ReportGlobalInfo, const GlobalStorageInfo&) | |
| 42 RELAY_TO_HANDLER(ReportPerHostInfo, const std::vector<PerHostStorageInfo>&) | |
| 43 RELAY_TO_HANDLER(ReportPerOriginInfo, const std::vector<PerOriginStorageInfo>&) | |
| 44 RELAY_TO_HANDLER(ReportStatistics, const Statistics&) | |
| 45 | |
| 46 #undef RELAY_TO_HANDLER | |
| 47 | |
| 48 void QuotaInternalsProxy::RequestInfo( | 24 void QuotaInternalsProxy::RequestInfo( |
| 49 scoped_refptr<quota::QuotaManager> quota_manager) { | 25 scoped_refptr<quota::QuotaManager> quota_manager) { |
| 50 DCHECK(quota_manager); | 26 DCHECK(quota_manager); |
| 51 if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) { | 27 if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) { |
| 52 BrowserThread::PostTask( | 28 BrowserThread::PostTask( |
| 53 BrowserThread::IO, FROM_HERE, | 29 BrowserThread::IO, FROM_HERE, |
| 54 base::Bind(&QuotaInternalsProxy::RequestInfo, this, quota_manager)); | 30 base::Bind(&QuotaInternalsProxy::RequestInfo, this, quota_manager)); |
| 55 return; | 31 return; |
| 56 } | 32 } |
| 57 | 33 |
| (...skipping 22 matching lines...) Expand all Loading... |
| 80 | 56 |
| 81 quota_manager_->DumpOriginInfoTable( | 57 quota_manager_->DumpOriginInfoTable( |
| 82 base::Bind(&QuotaInternalsProxy::DidDumpOriginInfoTable, | 58 base::Bind(&QuotaInternalsProxy::DidDumpOriginInfoTable, |
| 83 weak_factory_.GetWeakPtr())); | 59 weak_factory_.GetWeakPtr())); |
| 84 | 60 |
| 85 std::map<std::string, std::string> stats; | 61 std::map<std::string, std::string> stats; |
| 86 quota_manager_->GetStatistics(&stats); | 62 quota_manager_->GetStatistics(&stats); |
| 87 ReportStatistics(stats); | 63 ReportStatistics(stats); |
| 88 } | 64 } |
| 89 | 65 |
| 66 QuotaInternalsProxy::~QuotaInternalsProxy() {} |
| 67 |
| 68 #define RELAY_TO_HANDLER(func, arg_t) \ |
| 69 void QuotaInternalsProxy::func(arg_t arg) { \ |
| 70 if (!handler_) \ |
| 71 return; \ |
| 72 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) { \ |
| 73 BrowserThread::PostTask( \ |
| 74 BrowserThread::UI, FROM_HERE, \ |
| 75 base::Bind(&QuotaInternalsProxy::func, this, arg)); \ |
| 76 return; \ |
| 77 } \ |
| 78 \ |
| 79 handler_->func(arg); \ |
| 80 } |
| 81 |
| 82 RELAY_TO_HANDLER(ReportAvailableSpace, int64) |
| 83 RELAY_TO_HANDLER(ReportGlobalInfo, const GlobalStorageInfo&) |
| 84 RELAY_TO_HANDLER(ReportPerHostInfo, const std::vector<PerHostStorageInfo>&) |
| 85 RELAY_TO_HANDLER(ReportPerOriginInfo, const std::vector<PerOriginStorageInfo>&) |
| 86 RELAY_TO_HANDLER(ReportStatistics, const Statistics&) |
| 87 |
| 88 #undef RELAY_TO_HANDLER |
| 89 |
| 90 void QuotaInternalsProxy::DidGetAvailableSpace(quota::QuotaStatusCode status, | 90 void QuotaInternalsProxy::DidGetAvailableSpace(quota::QuotaStatusCode status, |
| 91 int64 space) { | 91 int64 space) { |
| 92 if (status == quota::kQuotaStatusOk) | 92 if (status == quota::kQuotaStatusOk) |
| 93 ReportAvailableSpace(space); | 93 ReportAvailableSpace(space); |
| 94 } | 94 } |
| 95 | 95 |
| 96 void QuotaInternalsProxy::DidGetGlobalQuota(quota::QuotaStatusCode status, | 96 void QuotaInternalsProxy::DidGetGlobalQuota(quota::QuotaStatusCode status, |
| 97 quota::StorageType type, | 97 quota::StorageType type, |
| 98 int64 quota) { | 98 int64 quota) { |
| 99 if (status == quota::kQuotaStatusOk) { | 99 if (status == quota::kQuotaStatusOk) { |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 160 if (report_pending_.size() >= 10 || hosts_pending_.empty()) { | 160 if (report_pending_.size() >= 10 || hosts_pending_.empty()) { |
| 161 ReportPerHostInfo(report_pending_); | 161 ReportPerHostInfo(report_pending_); |
| 162 report_pending_.clear(); | 162 report_pending_.clear(); |
| 163 } | 163 } |
| 164 | 164 |
| 165 if (!hosts_pending_.empty()) | 165 if (!hosts_pending_.empty()) |
| 166 GetHostUsage(hosts_pending_.begin()->first, | 166 GetHostUsage(hosts_pending_.begin()->first, |
| 167 hosts_pending_.begin()->second); | 167 hosts_pending_.begin()->second); |
| 168 } | 168 } |
| 169 | 169 |
| 170 void QuotaInternalsProxy::VisitHost(const std::string& host, | |
| 171 quota::StorageType type) { | |
| 172 if (hosts_visited_.insert(std::make_pair(host, type)).second) { | |
| 173 hosts_pending_.insert(std::make_pair(host, type)); | |
| 174 if (hosts_pending_.size() == 1) { | |
| 175 GetHostUsage(host, type); | |
| 176 } | |
| 177 } | |
| 178 } | |
| 179 | |
| 180 void QuotaInternalsProxy::GetHostUsage(const std::string& host, | |
| 181 quota::StorageType type) { | |
| 182 DCHECK(quota_manager_); | |
| 183 quota_manager_->GetHostUsage( | |
| 184 host, type, | |
| 185 base::Bind(&QuotaInternalsProxy::DidGetHostUsage, | |
| 186 weak_factory_.GetWeakPtr())); | |
| 187 } | |
| 188 | |
| 189 void QuotaInternalsProxy::RequestPerOriginInfo(quota::StorageType type) { | 170 void QuotaInternalsProxy::RequestPerOriginInfo(quota::StorageType type) { |
| 190 DCHECK(quota_manager_); | 171 DCHECK(quota_manager_); |
| 191 | 172 |
| 192 std::set<GURL> origins; | 173 std::set<GURL> origins; |
| 193 quota_manager_->GetCachedOrigins(type, &origins); | 174 quota_manager_->GetCachedOrigins(type, &origins); |
| 194 | 175 |
| 195 std::vector<PerOriginStorageInfo> origin_info; | 176 std::vector<PerOriginStorageInfo> origin_info; |
| 196 origin_info.reserve(origins.size()); | 177 origin_info.reserve(origins.size()); |
| 197 | 178 |
| 198 std::set<std::string> hosts; | 179 std::set<std::string> hosts; |
| 199 std::vector<PerHostStorageInfo> host_info; | 180 std::vector<PerHostStorageInfo> host_info; |
| 200 | 181 |
| 201 for (std::set<GURL>::iterator itr(origins.begin()); | 182 for (std::set<GURL>::iterator itr(origins.begin()); |
| 202 itr != origins.end(); ++itr) { | 183 itr != origins.end(); ++itr) { |
| 203 PerOriginStorageInfo info(*itr, type); | 184 PerOriginStorageInfo info(*itr, type); |
| 204 info.set_in_use(quota_manager_->IsOriginInUse(*itr)); | 185 info.set_in_use(quota_manager_->IsOriginInUse(*itr)); |
| 205 origin_info.push_back(info); | 186 origin_info.push_back(info); |
| 206 | 187 |
| 207 std::string host(net::GetHostOrSpecFromURL(*itr)); | 188 std::string host(net::GetHostOrSpecFromURL(*itr)); |
| 208 if (hosts.insert(host).second) { | 189 if (hosts.insert(host).second) { |
| 209 PerHostStorageInfo info(host, type); | 190 PerHostStorageInfo info(host, type); |
| 210 host_info.push_back(info); | 191 host_info.push_back(info); |
| 211 VisitHost(host, type); | 192 VisitHost(host, type); |
| 212 } | 193 } |
| 213 } | 194 } |
| 214 ReportPerOriginInfo(origin_info); | 195 ReportPerOriginInfo(origin_info); |
| 215 ReportPerHostInfo(host_info); | 196 ReportPerHostInfo(host_info); |
| 216 } | 197 } |
| 217 | 198 |
| 199 void QuotaInternalsProxy::VisitHost(const std::string& host, |
| 200 quota::StorageType type) { |
| 201 if (hosts_visited_.insert(std::make_pair(host, type)).second) { |
| 202 hosts_pending_.insert(std::make_pair(host, type)); |
| 203 if (hosts_pending_.size() == 1) { |
| 204 GetHostUsage(host, type); |
| 205 } |
| 206 } |
| 207 } |
| 208 |
| 209 void QuotaInternalsProxy::GetHostUsage(const std::string& host, |
| 210 quota::StorageType type) { |
| 211 DCHECK(quota_manager_); |
| 212 quota_manager_->GetHostUsage( |
| 213 host, type, |
| 214 base::Bind(&QuotaInternalsProxy::DidGetHostUsage, |
| 215 weak_factory_.GetWeakPtr())); |
| 216 } |
| 217 |
| 218 } // namespace quota_internals | 218 } // namespace quota_internals |
| OLD | NEW |