Home | History | Annotate | Download | only in quota_internals
      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/quota_internals_handler.h"
      6 
      7 #include <string>
      8 
      9 #include "base/bind.h"
     10 #include "base/bind_helpers.h"
     11 #include "base/values.h"
     12 #include "chrome/browser/profiles/profile.h"
     13 #include "chrome/browser/ui/webui/quota_internals/quota_internals_proxy.h"
     14 #include "chrome/browser/ui/webui/quota_internals/quota_internals_types.h"
     15 #include "content/public/browser/storage_partition.h"
     16 #include "content/public/browser/web_ui.h"
     17 #include "net/base/net_util.h"
     18 
     19 using content::BrowserContext;
     20 
     21 namespace quota_internals {
     22 
     23 QuotaInternalsHandler::QuotaInternalsHandler() {}
     24 
     25 QuotaInternalsHandler::~QuotaInternalsHandler() {
     26   if (proxy_.get())
     27     proxy_->handler_ = NULL;
     28 }
     29 
     30 void QuotaInternalsHandler::RegisterMessages() {
     31   web_ui()->RegisterMessageCallback("requestInfo",
     32       base::Bind(&QuotaInternalsHandler::OnRequestInfo,
     33                  base::Unretained(this)));
     34 }
     35 
     36 void QuotaInternalsHandler::ReportAvailableSpace(int64 available_space) {
     37   SendMessage("AvailableSpaceUpdated",
     38               base::FundamentalValue(static_cast<double>(available_space)));
     39 }
     40 
     41 void QuotaInternalsHandler::ReportGlobalInfo(const GlobalStorageInfo& data) {
     42   scoped_ptr<base::Value> value(data.NewValue());
     43   SendMessage("GlobalInfoUpdated", *value);
     44 }
     45 
     46 void QuotaInternalsHandler::ReportPerHostInfo(
     47     const std::vector<PerHostStorageInfo>& hosts) {
     48   base::ListValue values;
     49   typedef std::vector<PerHostStorageInfo>::const_iterator iterator;
     50   for (iterator itr(hosts.begin()); itr != hosts.end(); ++itr) {
     51     values.Append(itr->NewValue());
     52   }
     53 
     54   SendMessage("PerHostInfoUpdated", values);
     55 }
     56 
     57 void QuotaInternalsHandler::ReportPerOriginInfo(
     58     const std::vector<PerOriginStorageInfo>& origins) {
     59   base::ListValue origins_value;
     60   typedef std::vector<PerOriginStorageInfo>::const_iterator iterator;
     61   for (iterator itr(origins.begin()); itr != origins.end(); ++itr) {
     62     origins_value.Append(itr->NewValue());
     63   }
     64 
     65   SendMessage("PerOriginInfoUpdated", origins_value);
     66 }
     67 
     68 void QuotaInternalsHandler::ReportStatistics(const Statistics& stats) {
     69   base::DictionaryValue dict;
     70   typedef Statistics::const_iterator iterator;
     71   for (iterator itr(stats.begin()); itr != stats.end(); ++itr) {
     72     dict.SetString(itr->first, itr->second);
     73   }
     74 
     75   SendMessage("StatisticsUpdated", dict);
     76 }
     77 
     78 void QuotaInternalsHandler::SendMessage(const std::string& message,
     79                                         const base::Value& value) {
     80   web_ui()->CallJavascriptFunction(
     81       "cr.quota.messageHandler", base::StringValue(message), value);
     82 }
     83 
     84 void QuotaInternalsHandler::OnRequestInfo(const base::ListValue*) {
     85   if (!proxy_.get())
     86     proxy_ = new QuotaInternalsProxy(this);
     87   proxy_->RequestInfo(
     88       BrowserContext::GetDefaultStoragePartition(
     89           Profile::FromWebUI(web_ui()))->GetQuotaManager());
     90 }
     91 
     92 }  // namespace quota_internals
     93