- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / webui / chromeos / login / network_dropdown_handler.cc
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/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