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) 590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/ui/webui/quota_internals/quota_internals_proxy.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <set> 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h" 1190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/ui/webui/quota_internals/quota_internals_handler.h" 1290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/ui/webui/quota_internals/quota_internals_types.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/net_util.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread; 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace quota_internals { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)QuotaInternalsProxy::QuotaInternalsProxy(QuotaInternalsHandler* handler) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : handler_(handler), 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) weak_factory_(this) { 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void QuotaInternalsProxy::RequestInfo( 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<quota::QuotaManager> quota_manager) { 26868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DCHECK(quota_manager.get()); 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) { 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::IO, FROM_HERE, 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&QuotaInternalsProxy::RequestInfo, this, quota_manager)); 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_manager_ = quota_manager; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_manager_->GetAvailableSpace( 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&QuotaInternalsProxy::DidGetAvailableSpace, 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) weak_factory_.GetWeakPtr())); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_manager_->GetTemporaryGlobalQuota( 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&QuotaInternalsProxy::DidGetGlobalQuota, 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) weak_factory_.GetWeakPtr(), quota::kStorageTypeTemporary)); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_manager_->GetGlobalUsage( 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota::kStorageTypeTemporary, 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&QuotaInternalsProxy::DidGetGlobalUsage, 4690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) weak_factory_.GetWeakPtr(), 4790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) quota::kStorageTypeTemporary)); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_manager_->GetGlobalUsage( 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota::kStorageTypePersistent, 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&QuotaInternalsProxy::DidGetGlobalUsage, 5290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) weak_factory_.GetWeakPtr(), 5390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) quota::kStorageTypePersistent)); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) quota_manager_->GetGlobalUsage( 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) quota::kStorageTypeSyncable, 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::Bind(&QuotaInternalsProxy::DidGetGlobalUsage, 5890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) weak_factory_.GetWeakPtr(), 5990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) quota::kStorageTypeSyncable)); 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_manager_->DumpQuotaTable( 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&QuotaInternalsProxy::DidDumpQuotaTable, 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) weak_factory_.GetWeakPtr())); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_manager_->DumpOriginInfoTable( 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&QuotaInternalsProxy::DidDumpOriginInfoTable, 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) weak_factory_.GetWeakPtr())); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::map<std::string, std::string> stats; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_manager_->GetStatistics(&stats); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReportStatistics(stats); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)QuotaInternalsProxy::~QuotaInternalsProxy() {} 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define RELAY_TO_HANDLER(func, arg_t) \ 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void QuotaInternalsProxy::func(arg_t arg) { \ 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!handler_) \ 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; \ 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) { \ 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( \ 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::UI, FROM_HERE, \ 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&QuotaInternalsProxy::func, this, arg)); \ 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; \ 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } \ 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) \ 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handler_->func(arg); \ 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)RELAY_TO_HANDLER(ReportAvailableSpace, int64) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)RELAY_TO_HANDLER(ReportGlobalInfo, const GlobalStorageInfo&) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)RELAY_TO_HANDLER(ReportPerHostInfo, const std::vector<PerHostStorageInfo>&) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)RELAY_TO_HANDLER(ReportPerOriginInfo, const std::vector<PerOriginStorageInfo>&) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)RELAY_TO_HANDLER(ReportStatistics, const Statistics&) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef RELAY_TO_HANDLER 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void QuotaInternalsProxy::DidGetAvailableSpace(quota::QuotaStatusCode status, 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 space) { 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (status == quota::kQuotaStatusOk) 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReportAvailableSpace(space); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void QuotaInternalsProxy::DidGetGlobalQuota(quota::StorageType type, 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota::QuotaStatusCode status, 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 quota) { 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (status == quota::kQuotaStatusOk) { 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GlobalStorageInfo info(type); 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) info.set_quota(quota); 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReportGlobalInfo(info); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void QuotaInternalsProxy::DidGetGlobalUsage(quota::StorageType type, 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 usage, 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 unlimited_usage) { 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GlobalStorageInfo info(type); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) info.set_usage(usage); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) info.set_unlimited_usage(unlimited_usage); 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReportGlobalInfo(info); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RequestPerOriginInfo(type); 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void QuotaInternalsProxy::DidDumpQuotaTable(const QuotaTableEntries& entries) { 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<PerHostStorageInfo> host_info; 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_info.reserve(entries.size()); 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef QuotaTableEntries::const_iterator iterator; 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (iterator itr(entries.begin()); itr != entries.end(); ++itr) { 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PerHostStorageInfo info(itr->host, itr->type); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) info.set_quota(itr->quota); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_info.push_back(info); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReportPerHostInfo(host_info); 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void QuotaInternalsProxy::DidDumpOriginInfoTable( 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const OriginInfoTableEntries& entries) { 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<PerOriginStorageInfo> origin_info; 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) origin_info.reserve(entries.size()); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef OriginInfoTableEntries::const_iterator iterator; 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (iterator itr(entries.begin()); itr != entries.end(); ++itr) { 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PerOriginStorageInfo info(itr->origin, itr->type); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) info.set_used_count(itr->used_count); 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) info.set_last_access_time(itr->last_access_time); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) info.set_last_modified_time(itr->last_modified_time); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) origin_info.push_back(info); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReportPerOriginInfo(origin_info); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void QuotaInternalsProxy::DidGetHostUsage(const std::string& host, 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota::StorageType type, 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 usage) { 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(type == quota::kStorageTypeTemporary || 161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) type == quota::kStorageTypePersistent || 162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) type == quota::kStorageTypeSyncable); 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PerHostStorageInfo info(host, type); 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) info.set_usage(usage); 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) report_pending_.push_back(info); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hosts_pending_.erase(make_pair(host, type)); 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (report_pending_.size() >= 10 || hosts_pending_.empty()) { 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReportPerHostInfo(report_pending_); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) report_pending_.clear(); 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!hosts_pending_.empty()) 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage(hosts_pending_.begin()->first, 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hosts_pending_.begin()->second); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void QuotaInternalsProxy::RequestPerOriginInfo(quota::StorageType type) { 180868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DCHECK(quota_manager_.get()); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<GURL> origins; 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_manager_->GetCachedOrigins(type, &origins); 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<PerOriginStorageInfo> origin_info; 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) origin_info.reserve(origins.size()); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<std::string> hosts; 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<PerHostStorageInfo> host_info; 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (std::set<GURL>::iterator itr(origins.begin()); 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) itr != origins.end(); ++itr) { 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PerOriginStorageInfo info(*itr, type); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) info.set_in_use(quota_manager_->IsOriginInUse(*itr)); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) origin_info.push_back(info); 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string host(net::GetHostOrSpecFromURL(*itr)); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (hosts.insert(host).second) { 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PerHostStorageInfo info(host, type); 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_info.push_back(info); 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VisitHost(host, type); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReportPerOriginInfo(origin_info); 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReportPerHostInfo(host_info); 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void QuotaInternalsProxy::VisitHost(const std::string& host, 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota::StorageType type) { 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (hosts_visited_.insert(std::make_pair(host, type)).second) { 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hosts_pending_.insert(std::make_pair(host, type)); 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (hosts_pending_.size() == 1) { 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage(host, type); 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void QuotaInternalsProxy::GetHostUsage(const std::string& host, 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota::StorageType type) { 220868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DCHECK(quota_manager_.get()); 221868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) quota_manager_->GetHostUsage(host, 222868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) type, 223868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::Bind(&QuotaInternalsProxy::DidGetHostUsage, 224868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) weak_factory_.GetWeakPtr(), 225868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) host, 226868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) type)); 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace quota_internals 230