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

Side by Side Diff: extensions/browser/api/networking_private/networking_private_chromeos.cc

Issue 1059033002: Implement networkingPrivate.getDeviceStates (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix test Created 5 years, 8 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "extensions/browser/api/networking_private/networking_private_chromeos. h" 5 #include "extensions/browser/api/networking_private/networking_private_chromeos. h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/callback.h" 9 #include "base/callback.h"
10 #include "chromeos/dbus/dbus_thread_manager.h" 10 #include "chromeos/dbus/dbus_thread_manager.h"
11 #include "chromeos/dbus/shill_manager_client.h" 11 #include "chromeos/dbus/shill_manager_client.h"
12 #include "chromeos/login/login_state.h" 12 #include "chromeos/login/login_state.h"
13 #include "chromeos/network/device_state.h"
13 #include "chromeos/network/managed_network_configuration_handler.h" 14 #include "chromeos/network/managed_network_configuration_handler.h"
14 #include "chromeos/network/network_activation_handler.h" 15 #include "chromeos/network/network_activation_handler.h"
15 #include "chromeos/network/network_connection_handler.h" 16 #include "chromeos/network/network_connection_handler.h"
16 #include "chromeos/network/network_device_handler.h" 17 #include "chromeos/network/network_device_handler.h"
17 #include "chromeos/network/network_event_log.h" 18 #include "chromeos/network/network_event_log.h"
18 #include "chromeos/network/network_state.h" 19 #include "chromeos/network/network_state.h"
19 #include "chromeos/network/network_state_handler.h" 20 #include "chromeos/network/network_state_handler.h"
20 #include "chromeos/network/network_util.h" 21 #include "chromeos/network/network_util.h"
21 #include "chromeos/network/onc/onc_signature.h" 22 #include "chromeos/network/onc/onc_signature.h"
22 #include "chromeos/network/onc/onc_translator.h" 23 #include "chromeos/network/onc/onc_translator.h"
23 #include "chromeos/network/onc/onc_utils.h" 24 #include "chromeos/network/onc/onc_utils.h"
24 #include "chromeos/network/portal_detector/network_portal_detector.h" 25 #include "chromeos/network/portal_detector/network_portal_detector.h"
25 #include "components/onc/onc_constants.h" 26 #include "components/onc/onc_constants.h"
26 #include "content/public/browser/browser_context.h" 27 #include "content/public/browser/browser_context.h"
27 #include "extensions/browser/api/networking_private/networking_private_api.h" 28 #include "extensions/browser/api/networking_private/networking_private_api.h"
28 #include "extensions/browser/extensions_browser_client.h" 29 #include "extensions/browser/extensions_browser_client.h"
29 #include "extensions/common/api/networking_private.h"
30 30
31 using chromeos::DeviceState;
31 using chromeos::NetworkHandler; 32 using chromeos::NetworkHandler;
33 using chromeos::NetworkStateHandler;
32 using chromeos::NetworkTypePattern; 34 using chromeos::NetworkTypePattern;
33 using chromeos::ShillManagerClient; 35 using chromeos::ShillManagerClient;
34 using extensions::NetworkingPrivateDelegate; 36 using extensions::NetworkingPrivateDelegate;
35 37
38 namespace private_api = extensions::core_api::networking_private;
39
36 namespace { 40 namespace {
37 41
38 chromeos::NetworkStateHandler* GetStateHandler() { 42 chromeos::NetworkStateHandler* GetStateHandler() {
39 return NetworkHandler::Get()->network_state_handler(); 43 return NetworkHandler::Get()->network_state_handler();
40 } 44 }
41 45
42 chromeos::ManagedNetworkConfigurationHandler* GetManagedConfigurationHandler() { 46 chromeos::ManagedNetworkConfigurationHandler* GetManagedConfigurationHandler() {
43 return NetworkHandler::Get()->managed_network_configuration_handler(); 47 return NetworkHandler::Get()->managed_network_configuration_handler();
44 } 48 }
45 49
(...skipping 24 matching lines...) Expand all
70 // to avoid complexities with the policy code. 74 // to avoid complexities with the policy code.
71 LOG(ERROR) << "networkingPrivate API call from non primary user: " 75 LOG(ERROR) << "networkingPrivate API call from non primary user: "
72 << context_user_hash; 76 << context_user_hash;
73 *error = "Error.NonPrimaryUser"; 77 *error = "Error.NonPrimaryUser";
74 return false; 78 return false;
75 } 79 }
76 *user_hash = context_user_hash; 80 *user_hash = context_user_hash;
77 return true; 81 return true;
78 } 82 }
79 83
84 void AppendDeviceState(
85 const std::string& type,
86 const DeviceState* device,
87 NetworkingPrivateDelegate::DeviceStateList* device_state_list) {
88 DCHECK(!type.empty());
89 NetworkTypePattern pattern =
90 chromeos::onc::NetworkTypePatternFromOncType(type);
91 NetworkStateHandler::TechnologyState technology_state =
92 GetStateHandler()->GetTechnologyState(pattern);
93 private_api::DeviceStateType state = private_api::DEVICE_STATE_TYPE_NONE;
94 switch (technology_state) {
95 case NetworkStateHandler::TECHNOLOGY_UNAVAILABLE:
96 if (!device)
97 return;
98 // If we have a DeviceState entry but the technology is not available,
99 // assume the technology is not initialized.
100 state = private_api::DEVICE_STATE_TYPE_UNINITIALIZED;
101 break;
102 case NetworkStateHandler::TECHNOLOGY_AVAILABLE:
103 state = private_api::DEVICE_STATE_TYPE_DISABLED;
104 break;
105 case NetworkStateHandler::TECHNOLOGY_UNINITIALIZED:
106 state = private_api::DEVICE_STATE_TYPE_UNINITIALIZED;
107 break;
108 case NetworkStateHandler::TECHNOLOGY_ENABLING:
109 state = private_api::DEVICE_STATE_TYPE_ENABLING;
110 break;
111 case NetworkStateHandler::TECHNOLOGY_ENABLED:
112 state = private_api::DEVICE_STATE_TYPE_ENABLED;
113 break;
114 }
115 DCHECK(state != private_api::DEVICE_STATE_TYPE_NONE);
pneubeck (no reviews) 2015/04/09 09:41:22 DCHECK_NE( , )
stevenjb 2015/04/09 16:20:25 Done.
116 scoped_ptr<private_api::DeviceStateProperties> properties(
117 new private_api::DeviceStateProperties);
118 properties->type = private_api::ParseNetworkType(type);
119 properties->state = state;
120 if (device && state == private_api::DEVICE_STATE_TYPE_ENABLED)
121 properties->scanning.reset(new bool(device->scanning()));
122 device_state_list->push_back(properties.Pass());
123 }
124
80 void NetworkHandlerDictionaryCallback( 125 void NetworkHandlerDictionaryCallback(
81 const NetworkingPrivateDelegate::DictionaryCallback& callback, 126 const NetworkingPrivateDelegate::DictionaryCallback& callback,
82 const std::string& service_path, 127 const std::string& service_path,
83 const base::DictionaryValue& dictionary) { 128 const base::DictionaryValue& dictionary) {
84 scoped_ptr<base::DictionaryValue> dictionary_copy(dictionary.DeepCopy()); 129 scoped_ptr<base::DictionaryValue> dictionary_copy(dictionary.DeepCopy());
85 callback.Run(dictionary_copy.Pass()); 130 callback.Run(dictionary_copy.Pass());
86 } 131 }
87 132
88 void NetworkHandlerFailureCallback( 133 void NetworkHandlerFailureCallback(
89 const NetworkingPrivateDelegate::FailureCallback& callback, 134 const NetworkingPrivateDelegate::FailureCallback& callback,
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after
326 if (state_handler->IsTechnologyEnabled(NetworkTypePattern::WiFi())) 371 if (state_handler->IsTechnologyEnabled(NetworkTypePattern::WiFi()))
327 network_list->AppendString(::onc::network_type::kWiFi); 372 network_list->AppendString(::onc::network_type::kWiFi);
328 if (state_handler->IsTechnologyEnabled(NetworkTypePattern::Wimax())) 373 if (state_handler->IsTechnologyEnabled(NetworkTypePattern::Wimax()))
329 network_list->AppendString(::onc::network_type::kWimax); 374 network_list->AppendString(::onc::network_type::kWimax);
330 if (state_handler->IsTechnologyEnabled(NetworkTypePattern::Cellular())) 375 if (state_handler->IsTechnologyEnabled(NetworkTypePattern::Cellular()))
331 network_list->AppendString(::onc::network_type::kCellular); 376 network_list->AppendString(::onc::network_type::kCellular);
332 377
333 return network_list.Pass(); 378 return network_list.Pass();
334 } 379 }
335 380
381 scoped_ptr<NetworkingPrivateDelegate::DeviceStateList>
382 NetworkingPrivateChromeOS::GetDeviceStateList() {
383 std::set<std::string> technologies_found;
384 NetworkStateHandler::DeviceStateList devices;
385 NetworkHandler::Get()->network_state_handler()->GetDeviceList(&devices);
386
387 scoped_ptr<DeviceStateList> device_state_list(new DeviceStateList);
388 for (const DeviceState* device : devices) {
389 std::string onc_type =
390 chromeos::network_util::TranslateShillTypeToONC(device->type());
391 AppendDeviceState(onc_type, device, device_state_list.get());
392 technologies_found.insert(onc_type);
393 }
394
395 // For any technologies that we do not have a DeviceState entry for, append
396 // an entry if the technolog is available.
397 const char* technology_types[] = {::onc::network_type::kEthernet,
pneubeck (no reviews) 2015/04/09 09:41:22 NetworkTypePattern is copyable, so you should be a
stevenjb 2015/04/09 16:20:25 I don't follow. In line 390 we do shill -> ONC, he
398 ::onc::network_type::kWiFi,
399 ::onc::network_type::kWimax,
400 ::onc::network_type::kCellular};
401 for (size_t i = 0; i < arraysize(technology_types); ++i) {
pneubeck (no reviews) 2015/04/09 09:41:22 for (const char* technology : technology_types) {
stevenjb 2015/04/09 16:20:25 Huh, I didn't know that worked with arrays. Done.
402 std::string technology(technology_types[i]);
403 if (technologies_found.count(technology) > 0)
pneubeck (no reviews) 2015/04/09 09:41:22 from stl_util.h ContainsValue(technologies_found,
stevenjb 2015/04/09 16:20:25 Done.
404 continue;
405 AppendDeviceState(technology, nullptr /* device */,
406 device_state_list.get());
407 }
408 return device_state_list.Pass();
409 }
410
336 bool NetworkingPrivateChromeOS::EnableNetworkType(const std::string& type) { 411 bool NetworkingPrivateChromeOS::EnableNetworkType(const std::string& type) {
337 NetworkTypePattern pattern = 412 NetworkTypePattern pattern =
338 chromeos::onc::NetworkTypePatternFromOncType(type); 413 chromeos::onc::NetworkTypePatternFromOncType(type);
339 414
340 GetStateHandler()->SetTechnologyEnabled( 415 GetStateHandler()->SetTechnologyEnabled(
341 pattern, true, chromeos::network_handler::ErrorCallback()); 416 pattern, true, chromeos::network_handler::ErrorCallback());
342 417
343 return true; 418 return true;
344 } 419 }
345 420
346 bool NetworkingPrivateChromeOS::DisableNetworkType(const std::string& type) { 421 bool NetworkingPrivateChromeOS::DisableNetworkType(const std::string& type) {
347 NetworkTypePattern pattern = 422 NetworkTypePattern pattern =
348 chromeos::onc::NetworkTypePatternFromOncType(type); 423 chromeos::onc::NetworkTypePatternFromOncType(type);
349 424
350 GetStateHandler()->SetTechnologyEnabled( 425 GetStateHandler()->SetTechnologyEnabled(
351 pattern, false, chromeos::network_handler::ErrorCallback()); 426 pattern, false, chromeos::network_handler::ErrorCallback());
352 427
353 return true; 428 return true;
354 } 429 }
355 430
356 bool NetworkingPrivateChromeOS::RequestScan() { 431 bool NetworkingPrivateChromeOS::RequestScan() {
357 GetStateHandler()->RequestScan(); 432 GetStateHandler()->RequestScan();
358 return true; 433 return true;
359 } 434 }
360 435
361 } // namespace extensions 436 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698