OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 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 "chromeos/network/network_state_handler.h" | 5 #include "chromeos/network/network_state_handler.h" |
6 | 6 |
| 7 #include "base/bind.h" |
7 #include "base/format_macros.h" | 8 #include "base/format_macros.h" |
8 #include "base/stl_util.h" | 9 #include "base/stl_util.h" |
9 #include "base/string_util.h" | 10 #include "base/string_util.h" |
10 #include "base/stringprintf.h" | 11 #include "base/stringprintf.h" |
11 #include "base/values.h" | 12 #include "base/values.h" |
12 #include "chromeos/network/device_state.h" | 13 #include "chromeos/network/device_state.h" |
13 #include "chromeos/network/managed_state.h" | 14 #include "chromeos/network/managed_state.h" |
14 #include "chromeos/network/network_event_log.h" | 15 #include "chromeos/network/network_event_log.h" |
15 #include "chromeos/network/network_state.h" | 16 #include "chromeos/network/network_state.h" |
16 #include "chromeos/network/network_state_handler_observer.h" | 17 #include "chromeos/network/network_state_handler_observer.h" |
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
290 list->clear(); | 291 list->clear(); |
291 for (ManagedStateList::const_iterator iter = network_list_.begin(); | 292 for (ManagedStateList::const_iterator iter = network_list_.begin(); |
292 iter != network_list_.end(); ++iter) { | 293 iter != network_list_.end(); ++iter) { |
293 const NetworkState* network = (*iter)->AsNetworkState(); | 294 const NetworkState* network = (*iter)->AsNetworkState(); |
294 DCHECK(network); | 295 DCHECK(network); |
295 list->push_back(network); | 296 list->push_back(network); |
296 } | 297 } |
297 } | 298 } |
298 | 299 |
299 void NetworkStateHandler::RequestScan() const { | 300 void NetworkStateHandler::RequestScan() const { |
| 301 network_event_log::AddEntry(kLogModule, "RequestScan", ""); |
300 shill_property_handler_->RequestScan(); | 302 shill_property_handler_->RequestScan(); |
301 } | 303 } |
302 | 304 |
| 305 void NetworkStateHandler::WaitForScan(const std::string& type, |
| 306 const base::Closure& callback) { |
| 307 scan_complete_callbacks_[type].push_back(callback); |
| 308 if (!GetScanningByType(type)) |
| 309 RequestScan(); |
| 310 } |
| 311 |
| 312 void NetworkStateHandler::ConnectToBestWifiNetwork() { |
| 313 network_event_log::AddEntry(kLogModule, "ConnectToBestWifiNetwork", ""); |
| 314 WaitForScan(flimflam::kTypeWifi, |
| 315 base::Bind(&internal::ShillPropertyHandler::ConnectToBestServices, |
| 316 shill_property_handler_->AsWeakPtr())); |
| 317 } |
| 318 |
303 void NetworkStateHandler::SetConnectingNetwork( | 319 void NetworkStateHandler::SetConnectingNetwork( |
304 const std::string& service_path) { | 320 const std::string& service_path) { |
305 connecting_network_ = service_path; | 321 connecting_network_ = service_path; |
306 network_event_log::AddEntry( | 322 network_event_log::AddEntry( |
307 kLogModule, "SetConnectingNetwork", service_path); | 323 kLogModule, "SetConnectingNetwork", service_path); |
308 } | 324 } |
309 | 325 |
310 void NetworkStateHandler::GetNetworkStatePropertiesForTest( | 326 void NetworkStateHandler::GetNetworkStatePropertiesForTest( |
311 base::DictionaryValue* dictionary) const { | 327 base::DictionaryValue* dictionary) const { |
312 for (ManagedStateList::const_iterator iter = network_list_.begin(); | 328 for (ManagedStateList::const_iterator iter = network_list_.begin(); |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
379 prev_connection_state = managed->AsNetworkState()->connection_state(); | 395 prev_connection_state = managed->AsNetworkState()->connection_state(); |
380 for (base::DictionaryValue::Iterator iter(properties); | 396 for (base::DictionaryValue::Iterator iter(properties); |
381 iter.HasNext(); iter.Advance()) { | 397 iter.HasNext(); iter.Advance()) { |
382 if (type == ManagedState::MANAGED_TYPE_NETWORK) { | 398 if (type == ManagedState::MANAGED_TYPE_NETWORK) { |
383 if (managed->PropertyChanged(iter.key(), iter.value())) | 399 if (managed->PropertyChanged(iter.key(), iter.value())) |
384 network_property_updated = true; | 400 network_property_updated = true; |
385 } else { | 401 } else { |
386 managed->PropertyChanged(iter.key(), iter.value()); | 402 managed->PropertyChanged(iter.key(), iter.value()); |
387 } | 403 } |
388 } | 404 } |
| 405 network_event_log::AddEntry( |
| 406 kLogModule, "PropertiesReceived", |
| 407 base::StringPrintf("%s (%s)", path.c_str(), managed->name().c_str())); |
389 // Notify observers. | 408 // Notify observers. |
390 if (network_property_updated) { | 409 if (network_property_updated) { |
391 NetworkState* network = managed->AsNetworkState(); | 410 NetworkState* network = managed->AsNetworkState(); |
392 DCHECK(network); | 411 DCHECK(network); |
393 // Signal connection state changed after all properties have been updated. | 412 // Signal connection state changed after all properties have been updated. |
394 if (network->connection_state() != prev_connection_state) | 413 if (network->connection_state() != prev_connection_state) |
395 OnNetworkConnectionStateChanged(network); | 414 OnNetworkConnectionStateChanged(network); |
396 NetworkPropertiesUpdated(network); | 415 NetworkPropertiesUpdated(network); |
397 } | 416 } |
398 network_event_log::AddEntry( | |
399 kLogModule, "PropertiesReceived", | |
400 base::StringPrintf("%s (%s)", path.c_str(), managed->name().c_str())); | |
401 } | 417 } |
402 | 418 |
403 void NetworkStateHandler::UpdateNetworkServiceProperty( | 419 void NetworkStateHandler::UpdateNetworkServiceProperty( |
404 const std::string& service_path, | 420 const std::string& service_path, |
405 const std::string& key, | 421 const std::string& key, |
406 const base::Value& value) { | 422 const base::Value& value) { |
407 NetworkState* network = GetModifiableNetworkState(service_path); | 423 NetworkState* network = GetModifiableNetworkState(service_path); |
408 if (!network) | 424 if (!network) |
409 return; | 425 return; |
410 std::string prev_connection_state = network->connection_state(); | 426 std::string prev_connection_state = network->connection_state(); |
411 if (!network->PropertyChanged(key, value)) | 427 if (!network->PropertyChanged(key, value)) |
412 return; | 428 return; |
413 if (network->connection_state() != prev_connection_state) | |
414 OnNetworkConnectionStateChanged(network); | |
415 | |
416 NetworkPropertiesUpdated(network); | |
417 | 429 |
418 std::string detail = network->name() + "." + key; | 430 std::string detail = network->name() + "." + key; |
419 std::string vstr = ValueAsString(value); | 431 std::string vstr = ValueAsString(value); |
420 if (!vstr.empty()) | 432 if (!vstr.empty()) |
421 detail += " = " + vstr; | 433 detail += " = " + vstr; |
422 network_event_log::AddEntry(kLogModule, "NetworkPropertyUpdated", detail); | 434 network_event_log::AddEntry(kLogModule, "NetworkPropertyUpdated", detail); |
| 435 |
| 436 if (network->connection_state() != prev_connection_state) |
| 437 OnNetworkConnectionStateChanged(network); |
| 438 NetworkPropertiesUpdated(network); |
423 } | 439 } |
424 | 440 |
425 void NetworkStateHandler::UpdateNetworkServiceIPAddress( | 441 void NetworkStateHandler::UpdateNetworkServiceIPAddress( |
426 const std::string& service_path, | 442 const std::string& service_path, |
427 const std::string& ip_address) { | 443 const std::string& ip_address) { |
428 NetworkState* network = GetModifiableNetworkState(service_path); | 444 NetworkState* network = GetModifiableNetworkState(service_path); |
429 if (!network) | 445 if (!network) |
430 return; | 446 return; |
431 std::string detail = network->name() + ".IPAddress = " + ip_address; | 447 std::string detail = network->name() + ".IPAddress = " + ip_address; |
432 network_event_log::AddEntry(kLogModule, "NetworkIPChanged", detail); | 448 network_event_log::AddEntry(kLogModule, "NetworkIPChanged", detail); |
433 network->set_ip_address(ip_address); | 449 network->set_ip_address(ip_address); |
434 NetworkPropertiesUpdated(network); | 450 NetworkPropertiesUpdated(network); |
435 } | 451 } |
436 | 452 |
437 void NetworkStateHandler::UpdateDeviceProperty(const std::string& device_path, | 453 void NetworkStateHandler::UpdateDeviceProperty(const std::string& device_path, |
438 const std::string& key, | 454 const std::string& key, |
439 const base::Value& value) { | 455 const base::Value& value) { |
440 DeviceState* device = GetModifiableDeviceState(device_path); | 456 DeviceState* device = GetModifiableDeviceState(device_path); |
441 if (!device) | 457 if (!device) |
442 return; | 458 return; |
443 if (!device->PropertyChanged(key, value)) | 459 if (!device->PropertyChanged(key, value)) |
444 return; | 460 return; |
445 | 461 |
446 FOR_EACH_OBSERVER(NetworkStateHandlerObserver, observers_, | |
447 DeviceListChanged()); | |
448 | |
449 std::string detail = device->name() + "." + key; | 462 std::string detail = device->name() + "." + key; |
450 std::string vstr = ValueAsString(value); | 463 std::string vstr = ValueAsString(value); |
451 if (!vstr.empty()) | 464 if (!vstr.empty()) |
452 detail += " = " + vstr; | 465 detail += " = " + vstr; |
453 network_event_log::AddEntry(kLogModule, "DevicePropertyUpdated", detail); | 466 network_event_log::AddEntry(kLogModule, "DevicePropertyUpdated", detail); |
| 467 |
| 468 FOR_EACH_OBSERVER(NetworkStateHandlerObserver, observers_, |
| 469 DeviceListChanged()); |
| 470 |
| 471 if (key == flimflam::kScanningProperty && device->scanning() == false) |
| 472 ScanCompleted(device->type()); |
454 } | 473 } |
455 | 474 |
456 void NetworkStateHandler::ManagerPropertyChanged() { | 475 void NetworkStateHandler::ManagerPropertyChanged() { |
457 FOR_EACH_OBSERVER(NetworkStateHandlerObserver, observers_, | 476 FOR_EACH_OBSERVER(NetworkStateHandlerObserver, observers_, |
458 NetworkManagerChanged()); | 477 NetworkManagerChanged()); |
459 } | 478 } |
460 | 479 |
461 void NetworkStateHandler::ManagedStateListChanged( | 480 void NetworkStateHandler::ManagedStateListChanged( |
462 ManagedState::ManagedType type) { | 481 ManagedState::ManagedType type) { |
463 if (type == ManagedState::MANAGED_TYPE_NETWORK) { | 482 if (type == ManagedState::MANAGED_TYPE_NETWORK) { |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
568 !network->IsConnectingState() && | 587 !network->IsConnectingState() && |
569 network->connection_state() != flimflam::kStateIdle) { | 588 network->connection_state() != flimflam::kStateIdle) { |
570 connecting_network_.clear(); | 589 connecting_network_.clear(); |
571 network_event_log::AddEntry( | 590 network_event_log::AddEntry( |
572 kLogModule, "ClearConnectingNetwork", | 591 kLogModule, "ClearConnectingNetwork", |
573 base::StringPrintf("%s: %s", network->path().c_str(), | 592 base::StringPrintf("%s: %s", network->path().c_str(), |
574 network->connection_state().c_str())); | 593 network->connection_state().c_str())); |
575 } | 594 } |
576 } | 595 } |
577 | 596 |
| 597 void NetworkStateHandler::ScanCompleted(const std::string& type) { |
| 598 size_t num_callbacks = scan_complete_callbacks_.count(type); |
| 599 network_event_log::AddEntry( |
| 600 kLogModule, "ScanCompleted", |
| 601 base::StringPrintf("%s: %"PRIuS, type.c_str(), num_callbacks)); |
| 602 if (num_callbacks == 0) |
| 603 return; |
| 604 ScanCallbackList& callback_list = scan_complete_callbacks_[type]; |
| 605 for (ScanCallbackList::iterator iter = callback_list.begin(); |
| 606 iter != callback_list.end(); ++iter) { |
| 607 (*iter).Run(); |
| 608 } |
| 609 scan_complete_callbacks_.erase(type); |
| 610 } |
| 611 |
578 } // namespace chromeos | 612 } // namespace chromeos |
OLD | NEW |