Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(29)

Side by Side Diff: chrome/browser/chromeos/dom_ui/internet_options_handler.cc

Issue 3036020: Port network options to DOM UI. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
Property Changes:
Added: svn:eol-style
+ LF
OLDNEW
(Empty)
1 // Copyright (c) 2010 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/chromeos/dom_ui/internet_options_handler.h"
6
7 #include <string>
8 #include <vector>
9
10 #include "app/l10n_util.h"
11 #include "app/resource_bundle.h"
12 #include "base/base64.h"
13 #include "base/basictypes.h"
14 #include "base/callback.h"
15 #include "base/values.h"
16 #include "chrome/browser/browser.h"
17 #include "chrome/browser/browser_list.h"
18 #include "chrome/browser/browser_window.h"
19 #include "chrome/browser/chromeos/cros/cros_library.h"
20 #include "chrome/browser/chromeos/status/network_menu_button.h"
21 #include "chrome/browser/tab_contents/tab_contents.h"
22 #include "chrome/browser/tab_contents/tab_contents_view.h"
23 #include "chrome/common/notification_service.h"
24 #include "gfx/codec/png_codec.h"
25 #include "grit/browser_resources.h"
26 #include "grit/chromium_strings.h"
27 #include "grit/generated_resources.h"
28 #include "grit/locale_settings.h"
29 #include "grit/theme_resources.h"
30 #include "third_party/skia/include/core/SkBitmap.h"
31 #include "views/window/window.h"
32
33 InternetOptionsHandler::InternetOptionsHandler() {
34 chromeos::CrosLibrary::Get()->GetNetworkLibrary()->AddObserver(this);
35 }
36
37 InternetOptionsHandler::~InternetOptionsHandler() {
38 chromeos::CrosLibrary::Get()->GetNetworkLibrary()->RemoveObserver(this);
39 }
40
41 void InternetOptionsHandler::GetLocalizedValues(
42 DictionaryValue* localized_strings) {
43 DCHECK(localized_strings);
44 // Internet page - ChromeOS
45 localized_strings->SetString(L"internetPage",
46 l10n_util::GetString(IDS_OPTIONS_INTERNET_TAB_LABEL));
47
48 localized_strings->SetString(L"wired_title",
49 l10n_util::GetString(IDS_OPTIONS_SETTINGS_SECTION_TITLE_WIRED_NETWORK));
50 localized_strings->SetString(L"wireless_title",
51 l10n_util::GetString(
52 IDS_OPTIONS_SETTINGS_SECTION_TITLE_WIRELESS_NETWORK));
53 localized_strings->SetString(L"remembered_title",
54 l10n_util::GetString(
55 IDS_OPTIONS_SETTINGS_SECTION_TITLE_REMEMBERED_NETWORK));
56
57 localized_strings->SetString(L"connect_button",
58 l10n_util::GetString(
59 IDS_OPTIONS_SETTINGS_CONNECT));
60 localized_strings->SetString(L"disconnect_button",
61 l10n_util::GetString(
62 IDS_OPTIONS_SETTINGS_DISCONNECT));
63 localized_strings->SetString(L"options_button",
64 l10n_util::GetString(
65 IDS_OPTIONS_SETTINGS_OPTIONS));
66 localized_strings->SetString(L"forget_button",
67 l10n_util::GetString(
68 IDS_OPTIONS_SETTINGS_FORGET));
69
70 localized_strings->Set(L"wiredList", GetWiredList());
71 localized_strings->Set(L"wirelessList", GetWirelessList());
72 localized_strings->Set(L"rememberedList", GetRememberedList());
73 }
74
75 void InternetOptionsHandler::RegisterMessages() {
76 // Setup handlers specific to this panel.
77 DCHECK(dom_ui_);
78 dom_ui_->RegisterMessageCallback("buttonClickCallback",
79 NewCallback(this, &InternetOptionsHandler::ButtonClickCallback));
80 }
81
82 void InternetOptionsHandler::NetworkChanged(chromeos::NetworkLibrary* cros) {
83 if (dom_ui_) {
84 DictionaryValue dictionary;
85 dictionary.Set(L"wiredList", GetWiredList());
86 dictionary.Set(L"wirelessList", GetWirelessList());
87 dictionary.Set(L"rememberedList", GetRememberedList());
88 dom_ui_->CallJavascriptFunction(L"refreshNetworkData", dictionary);
89 }
90 }
91
92 void InternetOptionsHandler::CreateModalPopup(views::WindowDelegate* view) {
93 Browser* browser = NULL;
94 TabContentsDelegate* delegate = dom_ui_->tab_contents()->delegate();
95 if (delegate)
96 browser = delegate->GetBrowser();
97 DCHECK(browser);
98 views::Window* window = views::Window::CreateChromeWindow(
99 browser->window()->GetNativeHandle(), gfx::Rect(), view);
100 window->SetIsAlwaysOnTop(true);
101 window->Show();
102 }
103
104 void InternetOptionsHandler::ButtonClickCallback(const Value* value) {
105 if (!value || !value->IsType(Value::TYPE_LIST)) {
106 NOTREACHED();
107 return;
108 }
109 const ListValue* list_value = static_cast<const ListValue*>(value);
110 std::string str_type;
111 std::string service_path;
112 std::string command;
113 if (list_value->GetSize() != 3 ||
114 !list_value->GetString(0, &str_type) ||
115 !list_value->GetString(1, &service_path) ||
116 !list_value->GetString(2, &command)) {
117 NOTREACHED();
118 return;
119 }
120
121 int type = atoi(str_type.c_str());
122 chromeos::NetworkLibrary* cros =
123 chromeos::CrosLibrary::Get()->GetNetworkLibrary();
124 if (type == chromeos::TYPE_ETHERNET) {
125 CreateModalPopup(new chromeos::NetworkConfigView(cros->ethernet_network()));
126 } else if (type == chromeos::TYPE_WIFI) {
127 chromeos::WifiNetwork network;
128 if (command == "forget") {
129 cros->ForgetWirelessNetwork(service_path);
130 } else if (cros->FindWifiNetworkByPath(service_path, &network)) {
131 if (command == "connect") {
132 // Connect to wifi here. Open password page if appropriate.
133 if (network.encrypted()) {
134 chromeos::NetworkConfigView* view =
135 new chromeos::NetworkConfigView(network, true);
136 CreateModalPopup(view);
137 view->SetLoginTextfieldFocus();
138 } else {
139 cros->ConnectToWifiNetwork(
140 network, std::string(), std::string(), std::string());
141 }
142 } else if (command == "disconnect") {
143 cros->DisconnectFromWirelessNetwork(network);
144 } else if (command == "options") {
145 CreateModalPopup(new chromeos::NetworkConfigView(network, false));
146 }
147 }
148 } else if (type == chromeos::TYPE_CELLULAR) {
149 chromeos::CellularNetwork network;
150 if (command == "forget") {
151 cros->ForgetWirelessNetwork(service_path);
152 } else if (cros->FindCellularNetworkByPath(service_path, &network)) {
153 if (command == "connect") {
154 cros->ConnectToCellularNetwork(network);
155 } else if (command == "disconnect") {
156 cros->DisconnectFromWirelessNetwork(network);
157 } else if (command == "options") {
158 CreateModalPopup(new chromeos::NetworkConfigView(network));
159 }
160 }
161 } else {
162 NOTREACHED();
163 }
164 }
165
166 // Helper function to convert an icon to a data: URL
167 // with the icon encoded as a PNG.
168 static std::string ConvertSkBitmapToDataURL(const SkBitmap& icon) {
169 DCHECK(!icon.isNull());
170
171 // Get the icon data.
172 std::vector<unsigned char> icon_data;
173 gfx::PNGCodec::EncodeBGRASkBitmap(icon, false, &icon_data);
174
175 // Base64-encode it (to make it a data URL).
176 std::string icon_data_str(reinterpret_cast<char*>(&icon_data[0]),
177 icon_data.size());
178 std::string icon_base64_encoded;
179 base::Base64Encode(icon_data_str, &icon_base64_encoded);
180 return std::string("data:image/png;base64," + icon_base64_encoded);
181 }
182
183 ListValue* InternetOptionsHandler::GetNetwork(const std::string& service_path,
184 const SkBitmap& icon, const std::string& name, bool connecting,
185 bool connected, int connection_type, bool remembered) {
186
187 ListValue* network = new ListValue();
188
189 int s = IDS_STATUSBAR_NETWORK_DEVICE_DISCONNECTED;
190 if (connecting)
191 s = IDS_STATUSBAR_NETWORK_DEVICE_CONNECTING;
192 else if (connected)
193 s = IDS_STATUSBAR_NETWORK_DEVICE_CONNECTED;
194 std::wstring status = l10n_util::GetString(s);
195
196 // service path
197 network->Append(Value::CreateStringValue(service_path));
198 // name
199 network->Append(Value::CreateStringValue(name));
200 // status
201 network->Append(Value::CreateStringValue(l10n_util::GetString(s)));
202 // type
203 network->Append(Value::CreateIntegerValue(connection_type));
204 // connected
205 network->Append(Value::CreateBooleanValue(connected));
206 // connecting
207 network->Append(Value::CreateBooleanValue(connecting));
208 // icon data url
209 network->Append(Value::CreateStringValue(ConvertSkBitmapToDataURL(icon)));
210 // remembered
211 network->Append(Value::CreateBooleanValue(remembered));
212 return network;
213 }
214
215 ListValue* InternetOptionsHandler::GetWiredList() {
216 chromeos::NetworkLibrary* cros =
217 chromeos::CrosLibrary::Get()->GetNetworkLibrary();
218 ResourceBundle& rb = ResourceBundle::GetSharedInstance();
219 ListValue* list = new ListValue();
220
221 const chromeos::EthernetNetwork& ethernet_network = cros->ethernet_network();
222 SkBitmap icon = *rb.GetBitmapNamed(IDR_STATUSBAR_WIRED_BLACK);
223 if (!ethernet_network.connecting() &&
224 !ethernet_network.connected()) {
225 icon = chromeos::NetworkMenuButton::IconForDisplay(icon,
226 *rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_DISCONNECTED));
227 }
228 list->Append(GetNetwork(
229 ethernet_network.service_path(),
230 icon,
231 WideToASCII(l10n_util::GetString(IDS_STATUSBAR_NETWORK_DEVICE_ETHERNET)),
232 ethernet_network.connecting(),
233 ethernet_network.connected(),
234 chromeos::TYPE_ETHERNET,
235 false));
236 return list;
237 }
238
239 ListValue* InternetOptionsHandler::GetWirelessList() {
240 chromeos::NetworkLibrary* cros =
241 chromeos::CrosLibrary::Get()->GetNetworkLibrary();
242 ResourceBundle& rb = ResourceBundle::GetSharedInstance();
243 ListValue* list = new ListValue();
244
245 const chromeos::WifiNetworkVector& wifi_networks = cros->wifi_networks();
246 for (chromeos::WifiNetworkVector::const_iterator it =
247 wifi_networks.begin(); it != wifi_networks.end(); ++it) {
248 SkBitmap icon = chromeos::NetworkMenuButton::IconForNetworkStrength(
249 it->strength(), true);
250 if (it->encrypted()) {
251 icon = chromeos::NetworkMenuButton::IconForDisplay(icon,
252 *rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_SECURE));
253 }
254 list->Append(GetNetwork(
255 it->service_path(),
256 icon,
257 it->name(),
258 it->connecting(),
259 it->connected(),
260 chromeos::TYPE_WIFI,
261 false));
262 }
263
264 const chromeos::CellularNetworkVector& cellular_networks =
265 cros->cellular_networks();
266 for (chromeos::CellularNetworkVector::const_iterator it =
267 cellular_networks.begin(); it != cellular_networks.end(); ++it) {
268 SkBitmap icon = chromeos::NetworkMenuButton::IconForNetworkStrength(
269 it->strength(), true);
270 SkBitmap badge = *rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_3G);
271 icon = chromeos::NetworkMenuButton::IconForDisplay(icon, badge);
272 list->Append(GetNetwork(
273 it->service_path(),
274 icon,
275 it->name(),
276 it->connecting(),
277 it->connected(),
278 chromeos::TYPE_CELLULAR,
279 false));
280 }
281
282 return list;
283 }
284
285 ListValue* InternetOptionsHandler::GetRememberedList() {
286 chromeos::NetworkLibrary* cros =
287 chromeos::CrosLibrary::Get()->GetNetworkLibrary();
288 ResourceBundle& rb = ResourceBundle::GetSharedInstance();
289 ListValue* list = new ListValue();
290
291 const chromeos::WifiNetworkVector& wifi_networks =
292 cros->remembered_wifi_networks();
293 for (chromeos::WifiNetworkVector::const_iterator it =
294 wifi_networks.begin(); it != wifi_networks.end(); ++it) {
295 SkBitmap icon = *rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_BARS0);
296 if (it->encrypted()) {
297 icon = chromeos::NetworkMenuButton::IconForDisplay(icon,
298 *rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_SECURE));
299 }
300 list->Append(GetNetwork(
301 it->service_path(),
302 icon,
303 it->name(),
304 it->connecting(),
305 it->connected(),
306 chromeos::TYPE_WIFI,
307 true));
308 }
309
310 const chromeos::CellularNetworkVector& cellular_networks =
311 cros->remembered_cellular_networks();
312 for (chromeos::CellularNetworkVector::const_iterator it =
313 cellular_networks.begin(); it != cellular_networks.end(); ++it) {
314 SkBitmap icon = *rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_BARS0);
315 SkBitmap badge = *rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_3G);
316 icon = chromeos::NetworkMenuButton::IconForDisplay(icon, badge);
317 list->Append(GetNetwork(
318 it->service_path(),
319 icon,
320 it->name(),
321 it->connecting(),
322 it->connected(),
323 chromeos::TYPE_CELLULAR,
324 true));
325 }
326
327 return list;
328 }
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/dom_ui/internet_options_handler.h ('k') | chrome/browser/chromeos/options/internet_page_view.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698