Home | History | Annotate | Download | only in chromeos
      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/chromeos/proxy_settings_ui.h"
      6 
      7 #include "base/memory/scoped_ptr.h"
      8 #include "base/message_loop.h"
      9 #include "base/values.h"
     10 #include "chrome/browser/profiles/profile.h"
     11 #include "chrome/browser/ui/webui/chrome_url_data_manager.h"
     12 #include "chrome/browser/ui/webui/options/chromeos/core_chromeos_options_handler.h"
     13 #include "chrome/browser/ui/webui/options/chromeos/proxy_handler.h"
     14 #include "chrome/common/jstemplate_builder.h"
     15 #include "chrome/common/url_constants.h"
     16 #include "content/browser/tab_contents/tab_contents.h"
     17 #include "grit/browser_resources.h"
     18 #include "ui/base/resource/resource_bundle.h"
     19 
     20 namespace {
     21 
     22 class ProxySettingsHTMLSource : public ChromeURLDataManager::DataSource {
     23  public:
     24   explicit ProxySettingsHTMLSource(DictionaryValue* localized_strings);
     25 
     26   // Called when the network layer has requested a resource underneath
     27   // the path we registered.
     28   virtual void StartDataRequest(const std::string& path,
     29                                 bool is_incognito,
     30                                 int request_id);
     31   virtual std::string GetMimeType(const std::string&) const {
     32     return "text/html";
     33   }
     34 
     35  private:
     36   scoped_ptr<DictionaryValue> localized_strings_;
     37 
     38   DISALLOW_COPY_AND_ASSIGN(ProxySettingsHTMLSource);
     39 };
     40 
     41 ProxySettingsHTMLSource::ProxySettingsHTMLSource(
     42     DictionaryValue* localized_strings)
     43     : DataSource(chrome::kChromeUIProxySettingsHost, MessageLoop::current()),
     44       localized_strings_(localized_strings) {
     45 }
     46 
     47 void ProxySettingsHTMLSource::StartDataRequest(const std::string& path,
     48                                                bool is_incognito,
     49                                                int request_id) {
     50   SetFontAndTextDirection(localized_strings_.get());
     51 
     52   static const base::StringPiece html(
     53       ResourceBundle::GetSharedInstance().GetRawDataResource(
     54           IDR_PROXY_SETTINGS_HTML));
     55   const std::string full_html = jstemplate_builder::GetI18nTemplateHtml(
     56       html, localized_strings_.get());
     57 
     58   scoped_refptr<RefCountedBytes> html_bytes(new RefCountedBytes);
     59   html_bytes->data.resize(full_html.size());
     60   std::copy(full_html.begin(), full_html.end(), html_bytes->data.begin());
     61 
     62   SendResponse(request_id, html_bytes);
     63 }
     64 
     65 }  // namespace
     66 
     67 namespace chromeos {
     68 
     69 ProxySettingsUI::ProxySettingsUI(TabContents* contents) : WebUI(contents) {
     70   // |localized_strings| will be owned by ProxySettingsHTMLSource.
     71   DictionaryValue* localized_strings = new DictionaryValue();
     72 
     73   CoreChromeOSOptionsHandler* core_handler = new CoreChromeOSOptionsHandler();
     74   core_handler->set_handlers_host(this);
     75   core_handler->GetLocalizedValues(localized_strings);
     76   AddMessageHandler(core_handler->Attach(this));
     77 
     78   OptionsPageUIHandler* proxy_handler = new ProxyHandler();
     79   proxy_handler->GetLocalizedValues(localized_strings);
     80   AddMessageHandler(proxy_handler->Attach(this));
     81 
     82   ProxySettingsHTMLSource* source =
     83       new ProxySettingsHTMLSource(localized_strings);
     84   contents->profile()->GetChromeURLDataManager()->AddDataSource(source);
     85 }
     86 
     87 ProxySettingsUI::~ProxySettingsUI() {
     88   // Uninitialize all registered handlers. The base class owns them and it will
     89   // eventually delete them. Skip over the generic handler.
     90   for (std::vector<WebUIMessageHandler*>::iterator iter = handlers_.begin() + 1;
     91        iter != handlers_.end();
     92        ++iter) {
     93     static_cast<OptionsPageUIHandler*>(*iter)->Uninitialize();
     94   }
     95 }
     96 
     97 void ProxySettingsUI::InitializeHandlers() {
     98   std::vector<WebUIMessageHandler*>::iterator iter;
     99   // Skip over the generic handler.
    100   for (iter = handlers_.begin() + 1; iter != handlers_.end(); ++iter) {
    101     (static_cast<OptionsPageUIHandler*>(*iter))->Initialize();
    102   }
    103 }
    104 
    105 }  // namespace chromeos
    106