15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 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_handler.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind_helpers.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 1390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/ui/webui/quota_internals/quota_internals_proxy.h" 1490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/ui/webui/quota_internals/quota_internals_types.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/storage_partition.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_ui.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/net_util.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserContext; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace quota_internals { 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)QuotaInternalsHandler::QuotaInternalsHandler() {} 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)QuotaInternalsHandler::~QuotaInternalsHandler() { 26868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (proxy_.get()) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) proxy_->handler_ = NULL; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void QuotaInternalsHandler::RegisterMessages() { 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_ui()->RegisterMessageCallback("requestInfo", 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&QuotaInternalsHandler::OnRequestInfo, 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this))); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void QuotaInternalsHandler::ReportAvailableSpace(int64 available_space) { 37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SendMessage("AvailableSpaceUpdated", 38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::FundamentalValue(static_cast<double>(available_space))); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void QuotaInternalsHandler::ReportGlobalInfo(const GlobalStorageInfo& data) { 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> value(data.NewValue()); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SendMessage("GlobalInfoUpdated", *value); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void QuotaInternalsHandler::ReportPerHostInfo( 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::vector<PerHostStorageInfo>& hosts) { 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::ListValue values; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef std::vector<PerHostStorageInfo>::const_iterator iterator; 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (iterator itr(hosts.begin()); itr != hosts.end(); ++itr) { 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) values.Append(itr->NewValue()); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SendMessage("PerHostInfoUpdated", values); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void QuotaInternalsHandler::ReportPerOriginInfo( 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::vector<PerOriginStorageInfo>& origins) { 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::ListValue origins_value; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef std::vector<PerOriginStorageInfo>::const_iterator iterator; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (iterator itr(origins.begin()); itr != origins.end(); ++itr) { 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) origins_value.Append(itr->NewValue()); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SendMessage("PerOriginInfoUpdated", origins_value); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void QuotaInternalsHandler::ReportStatistics(const Statistics& stats) { 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue dict; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef Statistics::const_iterator iterator; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (iterator itr(stats.begin()); itr != stats.end(); ++itr) { 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dict.SetString(itr->first, itr->second); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SendMessage("StatisticsUpdated", dict); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void QuotaInternalsHandler::SendMessage(const std::string& message, 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Value& value) { 80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch web_ui()->CallJavascriptFunction( 81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "cr.quota.messageHandler", base::StringValue(message), value); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void QuotaInternalsHandler::OnRequestInfo(const base::ListValue*) { 85868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (!proxy_.get()) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) proxy_ = new QuotaInternalsProxy(this); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) proxy_->RequestInfo( 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserContext::GetDefaultStoragePartition( 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile::FromWebUI(web_ui()))->GetQuotaManager()); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace quota_internals 93