Home | History | Annotate | Download | only in login
      1 // Copyright (c) 2012 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/login/network_dropdown_handler.h"
      6 
      7 #include "chrome/browser/chromeos/login/ui/webui_login_display.h"
      8 #include "chrome/browser/ui/webui/chromeos/login/network_dropdown.h"
      9 #include "grit/generated_resources.h"
     10 
     11 namespace {
     12 
     13 const char kJsScreenPath[] = "cr.ui.DropDown";
     14 
     15 // JS API callbacks names.
     16 const char kJsApiNetworkItemChosen[] = "networkItemChosen";
     17 const char kJsApiNetworkDropdownShow[] = "networkDropdownShow";
     18 const char kJsApiNetworkDropdownHide[] = "networkDropdownHide";
     19 const char kJsApiNetworkDropdownRefresh[] = "networkDropdownRefresh";
     20 
     21 }  // namespace
     22 
     23 namespace chromeos {
     24 
     25 NetworkDropdownHandler::NetworkDropdownHandler()
     26     : BaseScreenHandler(kJsScreenPath) {
     27 }
     28 
     29 NetworkDropdownHandler::~NetworkDropdownHandler() {
     30 }
     31 
     32 void NetworkDropdownHandler::AddObserver(Observer* observer) {
     33   if (observer && !observers_.HasObserver(observer))
     34     observers_.AddObserver(observer);
     35 }
     36 
     37 void NetworkDropdownHandler::RemoveObserver(Observer* observer) {
     38   observers_.RemoveObserver(observer);
     39 }
     40 
     41 void NetworkDropdownHandler::DeclareLocalizedValues(
     42     LocalizedValuesBuilder* builder) {
     43   builder->Add("selectNetwork", IDS_NETWORK_SELECTION_SELECT);
     44   builder->Add("selectAnotherNetwork", IDS_ANOTHER_NETWORK_SELECTION_SELECT);
     45 }
     46 
     47 void NetworkDropdownHandler::Initialize() {
     48 }
     49 
     50 void NetworkDropdownHandler::RegisterMessages() {
     51   AddCallback(kJsApiNetworkItemChosen,
     52               &NetworkDropdownHandler::HandleNetworkItemChosen);
     53   AddCallback(kJsApiNetworkDropdownShow,
     54               &NetworkDropdownHandler::HandleNetworkDropdownShow);
     55   AddCallback(kJsApiNetworkDropdownHide,
     56               &NetworkDropdownHandler::HandleNetworkDropdownHide);
     57   AddCallback(kJsApiNetworkDropdownRefresh,
     58               &NetworkDropdownHandler::HandleNetworkDropdownRefresh);
     59 }
     60 
     61 void NetworkDropdownHandler::OnConnectToNetworkRequested(
     62     const std::string& service_path) {
     63   FOR_EACH_OBSERVER(Observer, observers_,
     64                     OnConnectToNetworkRequested(service_path));
     65 }
     66 
     67 void NetworkDropdownHandler::HandleNetworkItemChosen(double id) {
     68   if (dropdown_.get()) {
     69     dropdown_->OnItemChosen(static_cast<int>(id));
     70   } else {
     71     // It could happen with very low probability but still keep NOTREACHED to
     72     // detect if it starts happening all the time.
     73     NOTREACHED();
     74   }
     75 }
     76 
     77 void NetworkDropdownHandler::HandleNetworkDropdownShow(
     78     const std::string& element_id,
     79     bool oobe) {
     80   dropdown_.reset(new NetworkDropdown(this, web_ui(), oobe));
     81 }
     82 
     83 void NetworkDropdownHandler::HandleNetworkDropdownHide() {
     84   dropdown_.reset();
     85 }
     86 
     87 void NetworkDropdownHandler::HandleNetworkDropdownRefresh() {
     88   // Since language change is async,
     89   // we may in theory be on another screen during this call.
     90   if (dropdown_.get())
     91     dropdown_->Refresh();
     92 }
     93 
     94 }  // namespace chromeos
     95