| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/dbus/fake_shill_manager_client.h" | 5 #include "chromeos/dbus/fake_shill_manager_client.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
| 9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
| 10 #include "base/strings/string_number_conversions.h" |
| 11 #include "base/strings/string_split.h" |
| 12 #include "base/strings/string_util.h" |
| 10 #include "base/values.h" | 13 #include "base/values.h" |
| 11 #include "chromeos/chromeos_switches.h" | 14 #include "chromeos/chromeos_switches.h" |
| 12 #include "chromeos/dbus/dbus_thread_manager.h" | 15 #include "chromeos/dbus/dbus_thread_manager.h" |
| 13 #include "chromeos/dbus/shill_device_client.h" | 16 #include "chromeos/dbus/shill_device_client.h" |
| 14 #include "chromeos/dbus/shill_profile_client.h" | 17 #include "chromeos/dbus/shill_profile_client.h" |
| 15 #include "chromeos/dbus/shill_property_changed_observer.h" | 18 #include "chromeos/dbus/shill_property_changed_observer.h" |
| 16 #include "chromeos/dbus/shill_service_client.h" | 19 #include "chromeos/dbus/shill_service_client.h" |
| 17 #include "dbus/bus.h" | 20 #include "dbus/bus.h" |
| 18 #include "dbus/message.h" | 21 #include "dbus/message.h" |
| 19 #include "dbus/object_path.h" | 22 #include "dbus/object_path.h" |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 76 void LogErrorCallback(const std::string& error_name, | 79 void LogErrorCallback(const std::string& error_name, |
| 77 const std::string& error_message) { | 80 const std::string& error_message) { |
| 78 LOG(ERROR) << error_name << ": " << error_message; | 81 LOG(ERROR) << error_name << ": " << error_message; |
| 79 } | 82 } |
| 80 | 83 |
| 81 bool IsConnectedState(const std::string& state) { | 84 bool IsConnectedState(const std::string& state) { |
| 82 return state == shill::kStateOnline || state == shill::kStatePortal || | 85 return state == shill::kStateOnline || state == shill::kStatePortal || |
| 83 state == shill::kStateReady; | 86 state == shill::kStateReady; |
| 84 } | 87 } |
| 85 | 88 |
| 89 void UpdatePortaledWifiState(const std::string& service_path) { |
| 90 DBusThreadManager::Get()->GetShillServiceClient()->GetTestInterface() |
| 91 ->SetServiceProperty(service_path, |
| 92 shill::kStateProperty, |
| 93 base::StringValue(shill::kStatePortal)); |
| 94 } |
| 95 |
| 96 const char* kTechnologyUnavailable = "unavailable"; |
| 97 const char* kNetworkActivated = "activated"; |
| 98 const char* kNetworkDisabled = "disabled"; |
| 99 |
| 86 } // namespace | 100 } // namespace |
| 87 | 101 |
| 88 FakeShillManagerClient::FakeShillManagerClient() | 102 FakeShillManagerClient::FakeShillManagerClient() |
| 89 : weak_ptr_factory_(this) { | 103 : interactive_delay_(0), |
| 104 weak_ptr_factory_(this) { |
| 105 ParseCommandLineSwitch(); |
| 90 } | 106 } |
| 91 | 107 |
| 92 FakeShillManagerClient::~FakeShillManagerClient() {} | 108 FakeShillManagerClient::~FakeShillManagerClient() {} |
| 93 | 109 |
| 94 // ShillManagerClient overrides. | 110 // ShillManagerClient overrides. |
| 95 | 111 |
| 96 void FakeShillManagerClient::Init(dbus::Bus* bus) {} | 112 void FakeShillManagerClient::Init(dbus::Bus* bus) {} |
| 97 | 113 |
| 98 void FakeShillManagerClient::AddPropertyChangedObserver( | 114 void FakeShillManagerClient::AddPropertyChangedObserver( |
| 99 ShillPropertyChangedObserver* observer) { | 115 ShillPropertyChangedObserver* observer) { |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 136 const base::Closure& callback, | 152 const base::Closure& callback, |
| 137 const ErrorCallback& error_callback) { | 153 const ErrorCallback& error_callback) { |
| 138 // For Stub purposes, default to a Wifi scan. | 154 // For Stub purposes, default to a Wifi scan. |
| 139 std::string device_type = shill::kTypeWifi; | 155 std::string device_type = shill::kTypeWifi; |
| 140 if (!type.empty()) | 156 if (!type.empty()) |
| 141 device_type = type; | 157 device_type = type; |
| 142 ShillDeviceClient::TestInterface* device_client = | 158 ShillDeviceClient::TestInterface* device_client = |
| 143 DBusThreadManager::Get()->GetShillDeviceClient()->GetTestInterface(); | 159 DBusThreadManager::Get()->GetShillDeviceClient()->GetTestInterface(); |
| 144 std::string device_path = device_client->GetDevicePathForType(device_type); | 160 std::string device_path = device_client->GetDevicePathForType(device_type); |
| 145 if (!device_path.empty()) { | 161 if (!device_path.empty()) { |
| 146 device_client->SetDeviceProperty(device_path, | 162 device_client->SetDeviceProperty( |
| 147 shill::kScanningProperty, | 163 device_path, shill::kScanningProperty, base::FundamentalValue(true)); |
| 148 base::FundamentalValue(true)); | |
| 149 } | |
| 150 const int kScanDurationSeconds = 3; | |
| 151 int scan_duration_seconds = kScanDurationSeconds; | |
| 152 if (!CommandLine::ForCurrentProcess()->HasSwitch( | |
| 153 chromeos::switches::kEnableStubInteractive)) { | |
| 154 scan_duration_seconds = 0; | |
| 155 } | 164 } |
| 156 base::MessageLoop::current()->PostDelayedTask( | 165 base::MessageLoop::current()->PostDelayedTask( |
| 157 FROM_HERE, | 166 FROM_HERE, |
| 158 base::Bind(&FakeShillManagerClient::ScanCompleted, | 167 base::Bind(&FakeShillManagerClient::ScanCompleted, |
| 159 weak_ptr_factory_.GetWeakPtr(), device_path, callback), | 168 weak_ptr_factory_.GetWeakPtr(), |
| 160 base::TimeDelta::FromSeconds(scan_duration_seconds)); | 169 device_path, |
| 170 callback), |
| 171 base::TimeDelta::FromSeconds(interactive_delay_)); |
| 161 } | 172 } |
| 162 | 173 |
| 163 void FakeShillManagerClient::EnableTechnology( | 174 void FakeShillManagerClient::EnableTechnology( |
| 164 const std::string& type, | 175 const std::string& type, |
| 165 const base::Closure& callback, | 176 const base::Closure& callback, |
| 166 const ErrorCallback& error_callback) { | 177 const ErrorCallback& error_callback) { |
| 167 base::ListValue* enabled_list = NULL; | 178 base::ListValue* enabled_list = NULL; |
| 168 if (!stub_properties_.GetListWithoutPathExpansion( | 179 if (!stub_properties_.GetListWithoutPathExpansion( |
| 169 shill::kEnabledTechnologiesProperty, &enabled_list)) { | 180 shill::kAvailableTechnologiesProperty, &enabled_list)) { |
| 170 base::MessageLoop::current()->PostTask(FROM_HERE, callback); | 181 base::MessageLoop::current()->PostTask(FROM_HERE, callback); |
| 171 base::MessageLoop::current()->PostTask( | 182 base::MessageLoop::current()->PostTask( |
| 172 FROM_HERE, | 183 FROM_HERE, |
| 173 base::Bind(error_callback, "StubError", "Property not found")); | 184 base::Bind(error_callback, "StubError", "Property not found")); |
| 174 return; | 185 return; |
| 175 } | 186 } |
| 176 if (CommandLine::ForCurrentProcess()->HasSwitch( | 187 base::MessageLoop::current()->PostDelayedTask( |
| 177 chromeos::switches::kEnableStubInteractive)) { | 188 FROM_HERE, |
| 178 const int kEnableTechnologyDelaySeconds = 3; | 189 base::Bind(&FakeShillManagerClient::SetTechnologyEnabled, |
| 179 base::MessageLoop::current()->PostDelayedTask( | 190 weak_ptr_factory_.GetWeakPtr(), |
| 180 FROM_HERE, | 191 type, |
| 181 base::Bind(&FakeShillManagerClient::SetTechnologyEnabled, | 192 callback, |
| 182 weak_ptr_factory_.GetWeakPtr(), type, callback, true), | 193 true), |
| 183 base::TimeDelta::FromSeconds(kEnableTechnologyDelaySeconds)); | 194 base::TimeDelta::FromSeconds(interactive_delay_)); |
| 184 } else { | |
| 185 SetTechnologyEnabled(type, callback, true); | |
| 186 } | |
| 187 } | 195 } |
| 188 | 196 |
| 189 void FakeShillManagerClient::DisableTechnology( | 197 void FakeShillManagerClient::DisableTechnology( |
| 190 const std::string& type, | 198 const std::string& type, |
| 191 const base::Closure& callback, | 199 const base::Closure& callback, |
| 192 const ErrorCallback& error_callback) { | 200 const ErrorCallback& error_callback) { |
| 193 base::ListValue* enabled_list = NULL; | 201 base::ListValue* enabled_list = NULL; |
| 194 if (!stub_properties_.GetListWithoutPathExpansion( | 202 if (!stub_properties_.GetListWithoutPathExpansion( |
| 195 shill::kEnabledTechnologiesProperty, &enabled_list)) { | 203 shill::kAvailableTechnologiesProperty, &enabled_list)) { |
| 196 base::MessageLoop::current()->PostTask( | 204 base::MessageLoop::current()->PostTask( |
| 197 FROM_HERE, | 205 FROM_HERE, |
| 198 base::Bind(error_callback, "StubError", "Property not found")); | 206 base::Bind(error_callback, "StubError", "Property not found")); |
| 199 return; | 207 return; |
| 200 } | 208 } |
| 201 if (CommandLine::ForCurrentProcess()->HasSwitch( | 209 base::MessageLoop::current()->PostDelayedTask( |
| 202 chromeos::switches::kEnableStubInteractive)) { | 210 FROM_HERE, |
| 203 const int kDisableTechnologyDelaySeconds = 3; | 211 base::Bind(&FakeShillManagerClient::SetTechnologyEnabled, |
| 204 base::MessageLoop::current()->PostDelayedTask( | 212 weak_ptr_factory_.GetWeakPtr(), |
| 205 FROM_HERE, | 213 type, |
| 206 base::Bind(&FakeShillManagerClient::SetTechnologyEnabled, | 214 callback, |
| 207 weak_ptr_factory_.GetWeakPtr(), type, callback, false), | 215 false), |
| 208 base::TimeDelta::FromSeconds(kDisableTechnologyDelaySeconds)); | 216 base::TimeDelta::FromSeconds(interactive_delay_)); |
| 209 } else { | |
| 210 SetTechnologyEnabled(type, callback, false); | |
| 211 } | |
| 212 } | 217 } |
| 213 | 218 |
| 214 void FakeShillManagerClient::ConfigureService( | 219 void FakeShillManagerClient::ConfigureService( |
| 215 const base::DictionaryValue& properties, | 220 const base::DictionaryValue& properties, |
| 216 const ObjectPathCallback& callback, | 221 const ObjectPathCallback& callback, |
| 217 const ErrorCallback& error_callback) { | 222 const ErrorCallback& error_callback) { |
| 218 ShillServiceClient::TestInterface* service_client = | 223 ShillServiceClient::TestInterface* service_client = |
| 219 DBusThreadManager::Get()->GetShillServiceClient()->GetTestInterface(); | 224 DBusThreadManager::Get()->GetShillServiceClient()->GetTestInterface(); |
| 220 | 225 |
| 221 std::string guid; | 226 std::string guid; |
| 222 std::string type; | 227 std::string type; |
| 223 if (!properties.GetString(shill::kGuidProperty, &guid) || | 228 if (!properties.GetString(shill::kGuidProperty, &guid) || |
| 224 !properties.GetString(shill::kTypeProperty, &type)) { | 229 !properties.GetString(shill::kTypeProperty, &type)) { |
| 225 LOG(ERROR) << "ConfigureService requies GUID and Type to be defined"; | 230 LOG(ERROR) << "ConfigureService requires GUID and Type to be defined"; |
| 226 // If the properties aren't filled out completely, then just return an empty | 231 // If the properties aren't filled out completely, then just return an empty |
| 227 // object path. | 232 // object path. |
| 228 base::MessageLoop::current()->PostTask( | 233 base::MessageLoop::current()->PostTask( |
| 229 FROM_HERE, base::Bind(callback, dbus::ObjectPath())); | 234 FROM_HERE, base::Bind(callback, dbus::ObjectPath())); |
| 230 return; | 235 return; |
| 231 } | 236 } |
| 232 | 237 |
| 233 // For the purposes of this stub, we're going to assume that the GUID property | 238 // For the purposes of this stub, we're going to assume that the GUID property |
| 234 // is set to the service path because we don't want to re-implement Shill's | 239 // is set to the service path because we don't want to re-implement Shill's |
| 235 // property matching magic here. | 240 // property matching magic here. |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 309 const ErrorCallback& error_callback) { | 314 const ErrorCallback& error_callback) { |
| 310 base::MessageLoop::current()->PostTask( | 315 base::MessageLoop::current()->PostTask( |
| 311 FROM_HERE, base::Bind(callback, "encrypted_credentials")); | 316 FROM_HERE, base::Bind(callback, "encrypted_credentials")); |
| 312 } | 317 } |
| 313 | 318 |
| 314 void FakeShillManagerClient::VerifyAndEncryptData( | 319 void FakeShillManagerClient::VerifyAndEncryptData( |
| 315 const VerificationProperties& properties, | 320 const VerificationProperties& properties, |
| 316 const std::string& data, | 321 const std::string& data, |
| 317 const StringCallback& callback, | 322 const StringCallback& callback, |
| 318 const ErrorCallback& error_callback) { | 323 const ErrorCallback& error_callback) { |
| 319 base::MessageLoop::current()->PostTask(FROM_HERE, | 324 base::MessageLoop::current()->PostTask( |
| 320 base::Bind(callback, "encrypted_data")); | 325 FROM_HERE, base::Bind(callback, "encrypted_data")); |
| 321 } | 326 } |
| 322 | 327 |
| 323 void FakeShillManagerClient::ConnectToBestServices( | 328 void FakeShillManagerClient::ConnectToBestServices( |
| 324 const base::Closure& callback, | 329 const base::Closure& callback, |
| 325 const ErrorCallback& error_callback) { | 330 const ErrorCallback& error_callback) { |
| 326 } | 331 } |
| 327 | 332 |
| 328 ShillManagerClient::TestInterface* FakeShillManagerClient::GetTestInterface() { | 333 ShillManagerClient::TestInterface* FakeShillManagerClient::GetTestInterface() { |
| 329 return this; | 334 return this; |
| 330 } | 335 } |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 390 } | 395 } |
| 391 } else { | 396 } else { |
| 392 if (GetListProperty(shill::kUninitializedTechnologiesProperty)->Remove( | 397 if (GetListProperty(shill::kUninitializedTechnologiesProperty)->Remove( |
| 393 base::StringValue(type), NULL)) { | 398 base::StringValue(type), NULL)) { |
| 394 CallNotifyObserversPropertyChanged( | 399 CallNotifyObserversPropertyChanged( |
| 395 shill::kUninitializedTechnologiesProperty); | 400 shill::kUninitializedTechnologiesProperty); |
| 396 } | 401 } |
| 397 } | 402 } |
| 398 } | 403 } |
| 399 | 404 |
| 405 void FakeShillManagerClient::AddGeoNetwork( |
| 406 const std::string& technology, |
| 407 const base::DictionaryValue& network) { |
| 408 base::ListValue* list_value = NULL; |
| 409 if (!stub_geo_networks_.GetListWithoutPathExpansion(technology, |
| 410 &list_value)) { |
| 411 list_value = new base::ListValue; |
| 412 stub_geo_networks_.SetWithoutPathExpansion(technology, list_value); |
| 413 } |
| 414 list_value->Append(network.DeepCopy()); |
| 415 } |
| 416 |
| 417 void FakeShillManagerClient::AddProfile(const std::string& profile_path) { |
| 418 const char* key = shill::kProfilesProperty; |
| 419 if (GetListProperty(key) |
| 420 ->AppendIfNotPresent(new base::StringValue(profile_path))) { |
| 421 CallNotifyObserversPropertyChanged(key); |
| 422 } |
| 423 } |
| 424 |
| 400 void FakeShillManagerClient::ClearProperties() { | 425 void FakeShillManagerClient::ClearProperties() { |
| 401 stub_properties_.Clear(); | 426 stub_properties_.Clear(); |
| 402 } | 427 } |
| 403 | 428 |
| 404 void FakeShillManagerClient::SetManagerProperty(const std::string& key, | 429 void FakeShillManagerClient::SetManagerProperty(const std::string& key, |
| 405 const base::Value& value) { | 430 const base::Value& value) { |
| 406 SetProperty(key, value, | 431 SetProperty(key, value, |
| 407 base::Bind(&base::DoNothing), base::Bind(&LogErrorCallback)); | 432 base::Bind(&base::DoNothing), base::Bind(&LogErrorCallback)); |
| 408 } | 433 } |
| 409 | 434 |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 506 new_default_service = service_path; | 531 new_default_service = service_path; |
| 507 } | 532 } |
| 508 } | 533 } |
| 509 if (default_service_ != new_default_service) { | 534 if (default_service_ != new_default_service) { |
| 510 default_service_ = new_default_service; | 535 default_service_ = new_default_service; |
| 511 base::StringValue default_service_value(default_service_); | 536 base::StringValue default_service_value(default_service_); |
| 512 SetManagerProperty(shill::kDefaultServiceProperty, default_service_value); | 537 SetManagerProperty(shill::kDefaultServiceProperty, default_service_value); |
| 513 } | 538 } |
| 514 } | 539 } |
| 515 | 540 |
| 516 void FakeShillManagerClient::AddGeoNetwork( | 541 |
| 517 const std::string& technology, | 542 int FakeShillManagerClient::GetInteractiveDelay() const { |
| 518 const base::DictionaryValue& network) { | 543 return interactive_delay_; |
| 519 base::ListValue* list_value = NULL; | |
| 520 if (!stub_geo_networks_.GetListWithoutPathExpansion( | |
| 521 technology, &list_value)) { | |
| 522 list_value = new base::ListValue; | |
| 523 stub_geo_networks_.SetWithoutPathExpansion(technology, list_value); | |
| 524 } | |
| 525 list_value->Append(network.DeepCopy()); | |
| 526 } | 544 } |
| 527 | 545 |
| 528 void FakeShillManagerClient::AddProfile(const std::string& profile_path) { | 546 void FakeShillManagerClient::SetupDefaultEnvironment() { |
| 529 const char* key = shill::kProfilesProperty; | 547 DBusThreadManager* dbus_manager = DBusThreadManager::Get(); |
| 530 if (GetListProperty(key)->AppendIfNotPresent( | 548 ShillServiceClient::TestInterface* services = |
| 531 new base::StringValue(profile_path))) { | 549 dbus_manager->GetShillServiceClient()->GetTestInterface(); |
| 532 CallNotifyObserversPropertyChanged(key); | 550 ShillProfileClient::TestInterface* profiles = |
| 551 dbus_manager->GetShillProfileClient()->GetTestInterface(); |
| 552 ShillDeviceClient::TestInterface* devices = |
| 553 dbus_manager->GetShillDeviceClient()->GetTestInterface(); |
| 554 if (!services || !profiles || !devices) |
| 555 return; |
| 556 |
| 557 const std::string shared_profile = ShillProfileClient::GetSharedProfilePath(); |
| 558 profiles->AddProfile(shared_profile, std::string()); |
| 559 |
| 560 const bool add_to_visible = true; |
| 561 const bool add_to_watchlist = true; |
| 562 |
| 563 bool enabled; |
| 564 std::string state; |
| 565 |
| 566 // Ethernet |
| 567 state = GetInitialStateForType(shill::kTypeEthernet, &enabled); |
| 568 if (state == shill::kStateOnline) { |
| 569 AddTechnology(shill::kTypeEthernet, enabled); |
| 570 devices->AddDevice( |
| 571 "/device/eth1", shill::kTypeEthernet, "stub_eth_device1"); |
| 572 services->AddService("eth1", "eth1", |
| 573 shill::kTypeEthernet, |
| 574 state, |
| 575 add_to_visible, add_to_watchlist); |
| 576 profiles->AddService(shared_profile, "eth1"); |
| 533 } | 577 } |
| 578 |
| 579 // Wifi |
| 580 state = GetInitialStateForType(shill::kTypeWifi, &enabled); |
| 581 if (state != kTechnologyUnavailable) { |
| 582 bool portaled = false; |
| 583 if (state == shill::kStatePortal) { |
| 584 portaled = true; |
| 585 state = shill::kStateIdle; |
| 586 } |
| 587 AddTechnology(shill::kTypeWifi, enabled); |
| 588 devices->AddDevice("/device/wifi1", shill::kTypeWifi, "stub_wifi_device1"); |
| 589 |
| 590 services->AddService("wifi1", |
| 591 "wifi1", |
| 592 shill::kTypeWifi, |
| 593 state, |
| 594 add_to_visible, add_to_watchlist); |
| 595 services->SetServiceProperty("wifi1", |
| 596 shill::kSecurityProperty, |
| 597 base::StringValue(shill::kSecurityWep)); |
| 598 profiles->AddService(shared_profile, "wifi1"); |
| 599 |
| 600 services->AddService("wifi2", |
| 601 "wifi2_PSK", |
| 602 shill::kTypeWifi, |
| 603 shill::kStateIdle, |
| 604 add_to_visible, add_to_watchlist); |
| 605 services->SetServiceProperty("wifi2", |
| 606 shill::kSecurityProperty, |
| 607 base::StringValue(shill::kSecurityPsk)); |
| 608 |
| 609 base::FundamentalValue strength_value(80); |
| 610 services->SetServiceProperty( |
| 611 "wifi2", shill::kSignalStrengthProperty, strength_value); |
| 612 profiles->AddService(shared_profile, "wifi2"); |
| 613 |
| 614 if (portaled) { |
| 615 const std::string kPortaledWifiPath = "portaled_wifi"; |
| 616 services->AddService(kPortaledWifiPath, |
| 617 "Portaled Wifi", |
| 618 shill::kTypeWifi, |
| 619 shill::kStatePortal, |
| 620 add_to_visible, add_to_watchlist); |
| 621 services->SetServiceProperty(kPortaledWifiPath, |
| 622 shill::kSecurityProperty, |
| 623 base::StringValue(shill::kSecurityNone)); |
| 624 services->SetConnectBehavior(kPortaledWifiPath, |
| 625 base::Bind(&UpdatePortaledWifiState, |
| 626 "portaled_wifi")); |
| 627 services->SetServiceProperty(kPortaledWifiPath, |
| 628 shill::kConnectableProperty, |
| 629 base::FundamentalValue(true)); |
| 630 profiles->AddService(shared_profile, kPortaledWifiPath); |
| 631 } |
| 632 } |
| 633 |
| 634 // Wimax |
| 635 state = GetInitialStateForType(shill::kTypeWimax, &enabled); |
| 636 if (state != kTechnologyUnavailable) { |
| 637 AddTechnology(shill::kTypeWimax, enabled); |
| 638 devices->AddDevice( |
| 639 "/device/wimax1", shill::kTypeWimax, "stub_wimax_device1"); |
| 640 |
| 641 services->AddService("wimax1", |
| 642 "wimax1", |
| 643 shill::kTypeWimax, |
| 644 state, |
| 645 add_to_visible, add_to_watchlist); |
| 646 services->SetServiceProperty( |
| 647 "wimax1", shill::kConnectableProperty, base::FundamentalValue(true)); |
| 648 } |
| 649 |
| 650 // Cellular |
| 651 state = GetInitialStateForType(shill::kTypeCellular, &enabled); |
| 652 if (state != kTechnologyUnavailable) { |
| 653 bool activated = false; |
| 654 if (state == kNetworkActivated) { |
| 655 activated = true; |
| 656 state = shill::kStateIdle; |
| 657 } |
| 658 AddTechnology(shill::kTypeCellular, enabled); |
| 659 devices->AddDevice( |
| 660 "/device/cellular1", shill::kTypeCellular, "stub_cellular_device1"); |
| 661 devices->SetDeviceProperty("/device/cellular1", |
| 662 shill::kCarrierProperty, |
| 663 base::StringValue(shill::kCarrierSprint)); |
| 664 |
| 665 services->AddService("cellular1", |
| 666 "cellular1", |
| 667 shill::kTypeCellular, |
| 668 state, |
| 669 add_to_visible, add_to_watchlist); |
| 670 base::StringValue technology_value(shill::kNetworkTechnologyGsm); |
| 671 services->SetServiceProperty( |
| 672 "cellular1", shill::kNetworkTechnologyProperty, technology_value); |
| 673 |
| 674 if (activated) { |
| 675 services->SetServiceProperty( |
| 676 "cellular1", |
| 677 shill::kActivationStateProperty, |
| 678 base::StringValue(shill::kActivationStateActivated)); |
| 679 services->SetServiceProperty("cellular1", |
| 680 shill::kConnectableProperty, |
| 681 base::FundamentalValue(true)); |
| 682 } else { |
| 683 services->SetServiceProperty( |
| 684 "cellular1", |
| 685 shill::kActivationStateProperty, |
| 686 base::StringValue(shill::kActivationStateNotActivated)); |
| 687 } |
| 688 |
| 689 services->SetServiceProperty("cellular1", |
| 690 shill::kRoamingStateProperty, |
| 691 base::StringValue(shill::kRoamingStateHome)); |
| 692 } |
| 693 |
| 694 // VPN |
| 695 state = GetInitialStateForType(shill::kTypeVPN, &enabled); |
| 696 if (state != kTechnologyUnavailable) { |
| 697 // Set the "Provider" dictionary properties. Note: when setting these in |
| 698 // Shill, "Provider.Type", etc keys are used, but when reading the values |
| 699 // "Provider" . "Type", etc keys are used. Here we are setting the values |
| 700 // that will be read (by the UI, tests, etc). |
| 701 base::DictionaryValue provider_properties; |
| 702 provider_properties.SetString(shill::kTypeProperty, |
| 703 shill::kProviderOpenVpn); |
| 704 provider_properties.SetString(shill::kHostProperty, "vpn_host"); |
| 705 |
| 706 services->AddService("vpn1", |
| 707 "vpn1", |
| 708 shill::kTypeVPN, |
| 709 state, |
| 710 add_to_visible, add_to_watchlist); |
| 711 services->SetServiceProperty( |
| 712 "vpn1", shill::kProviderProperty, provider_properties); |
| 713 profiles->AddService(shared_profile, "vpn1"); |
| 714 |
| 715 services->AddService("vpn2", |
| 716 "vpn2", |
| 717 shill::kTypeVPN, |
| 718 shill::kStateIdle, |
| 719 add_to_visible, add_to_watchlist); |
| 720 services->SetServiceProperty( |
| 721 "vpn2", shill::kProviderProperty, provider_properties); |
| 722 } |
| 723 |
| 724 SortManagerServices(); |
| 534 } | 725 } |
| 535 | 726 |
| 727 // Private methods |
| 728 |
| 536 void FakeShillManagerClient::AddServiceToWatchList( | 729 void FakeShillManagerClient::AddServiceToWatchList( |
| 537 const std::string& service_path) { | 730 const std::string& service_path) { |
| 538 // Remove and insert the service, moving it to the front of the watch list. | 731 // Remove and insert the service, moving it to the front of the watch list. |
| 539 GetListProperty(shill::kServiceWatchListProperty)->Remove( | 732 GetListProperty(shill::kServiceWatchListProperty)->Remove( |
| 540 base::StringValue(service_path), NULL); | 733 base::StringValue(service_path), NULL); |
| 541 GetListProperty(shill::kServiceWatchListProperty)->Insert( | 734 GetListProperty(shill::kServiceWatchListProperty)->Insert( |
| 542 0, base::Value::CreateStringValue(service_path)); | 735 0, base::Value::CreateStringValue(service_path)); |
| 543 CallNotifyObserversPropertyChanged( | 736 CallNotifyObserversPropertyChanged( |
| 544 shill::kServiceWatchListProperty); | 737 shill::kServiceWatchListProperty); |
| 545 } | 738 } |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 628 if (technologies->Find(type_value) != technologies->end()) | 821 if (technologies->Find(type_value) != technologies->end()) |
| 629 enabled = true; | 822 enabled = true; |
| 630 } | 823 } |
| 631 return enabled; | 824 return enabled; |
| 632 } | 825 } |
| 633 | 826 |
| 634 void FakeShillManagerClient::SetTechnologyEnabled( | 827 void FakeShillManagerClient::SetTechnologyEnabled( |
| 635 const std::string& type, | 828 const std::string& type, |
| 636 const base::Closure& callback, | 829 const base::Closure& callback, |
| 637 bool enabled) { | 830 bool enabled) { |
| 638 base::ListValue* enabled_list = NULL; | 831 base::ListValue* enabled_list = |
| 639 stub_properties_.GetListWithoutPathExpansion( | 832 GetListProperty(shill::kEnabledTechnologiesProperty); |
| 640 shill::kEnabledTechnologiesProperty, &enabled_list); | |
| 641 DCHECK(enabled_list); | |
| 642 if (enabled) | 833 if (enabled) |
| 643 enabled_list->AppendIfNotPresent(new base::StringValue(type)); | 834 enabled_list->AppendIfNotPresent(new base::StringValue(type)); |
| 644 else | 835 else |
| 645 enabled_list->Remove(base::StringValue(type), NULL); | 836 enabled_list->Remove(base::StringValue(type), NULL); |
| 646 CallNotifyObserversPropertyChanged( | 837 CallNotifyObserversPropertyChanged( |
| 647 shill::kEnabledTechnologiesProperty); | 838 shill::kEnabledTechnologiesProperty); |
| 648 base::MessageLoop::current()->PostTask(FROM_HERE, callback); | 839 base::MessageLoop::current()->PostTask(FROM_HERE, callback); |
| 649 // May affect available services | 840 // May affect available services |
| 650 CallNotifyObserversPropertyChanged(shill::kServicesProperty); | 841 CallNotifyObserversPropertyChanged(shill::kServicesProperty); |
| 651 CallNotifyObserversPropertyChanged(shill::kServiceWatchListProperty); | 842 CallNotifyObserversPropertyChanged(shill::kServiceWatchListProperty); |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 686 DBusThreadManager::Get()->GetShillDeviceClient()->GetTestInterface()-> | 877 DBusThreadManager::Get()->GetShillDeviceClient()->GetTestInterface()-> |
| 687 SetDeviceProperty(device_path, | 878 SetDeviceProperty(device_path, |
| 688 shill::kScanningProperty, | 879 shill::kScanningProperty, |
| 689 base::FundamentalValue(false)); | 880 base::FundamentalValue(false)); |
| 690 } | 881 } |
| 691 CallNotifyObserversPropertyChanged(shill::kServicesProperty); | 882 CallNotifyObserversPropertyChanged(shill::kServicesProperty); |
| 692 CallNotifyObserversPropertyChanged(shill::kServiceWatchListProperty); | 883 CallNotifyObserversPropertyChanged(shill::kServiceWatchListProperty); |
| 693 base::MessageLoop::current()->PostTask(FROM_HERE, callback); | 884 base::MessageLoop::current()->PostTask(FROM_HERE, callback); |
| 694 } | 885 } |
| 695 | 886 |
| 887 void FakeShillManagerClient::ParseCommandLineSwitch() { |
| 888 CommandLine* command_line = CommandLine::ForCurrentProcess(); |
| 889 if (command_line->HasSwitch(switches::kShillStub)) { |
| 890 std::string option_str = |
| 891 command_line->GetSwitchValueASCII(switches::kShillStub); |
| 892 base::StringPairs string_pairs; |
| 893 base::SplitStringIntoKeyValuePairs(option_str, '=', ',', &string_pairs); |
| 894 for (base::StringPairs::iterator iter = string_pairs.begin(); |
| 895 iter != string_pairs.end(); ++iter) { |
| 896 ParseOption((*iter).first, (*iter).second); |
| 897 } |
| 898 return; |
| 899 } |
| 900 // Default setup |
| 901 SetInitialNetworkState(shill::kTypeEthernet, shill::kStateOnline); |
| 902 SetInitialNetworkState(shill::kTypeWifi, shill::kStateOnline); |
| 903 SetInitialNetworkState(shill::kTypeCellular, shill::kStateIdle); |
| 904 SetInitialNetworkState(shill::kTypeVPN, shill::kStateIdle); |
| 905 } |
| 906 |
| 907 bool FakeShillManagerClient::ParseOption(const std::string& arg0, |
| 908 const std::string& arg1) { |
| 909 if (arg0 == "interactive") { |
| 910 int seconds = 3; |
| 911 if (!arg1.empty()) |
| 912 base::StringToInt(arg1, &seconds); |
| 913 interactive_delay_ = seconds; |
| 914 return true; |
| 915 } |
| 916 return SetInitialNetworkState(arg0, arg1); |
| 917 } |
| 918 |
| 919 bool FakeShillManagerClient::SetInitialNetworkState(std::string type_arg, |
| 920 std::string state_arg) { |
| 921 std::string state; |
| 922 state_arg = StringToLowerASCII(state_arg); |
| 923 if (state_arg.empty() || state_arg == "1" || state_arg == "on" || |
| 924 state_arg == "enabled" || state_arg == "connected" || |
| 925 state_arg == "online") { |
| 926 // Enabled and connected (default value) |
| 927 state = shill::kStateOnline; |
| 928 } else if (state_arg == "0" || state_arg == "off" || |
| 929 state_arg == "inactive" || state_arg == shill::kStateIdle) { |
| 930 // Technology enabled, services are created but are not connected. |
| 931 state = shill::kStateIdle; |
| 932 } else if (state_arg == "disabled" || state_arg == "disconnect") { |
| 933 // Technology disabled but available, services created but not connected. |
| 934 state = kNetworkDisabled; |
| 935 } else if (state_arg == "none" || state_arg == "offline") { |
| 936 // Technology not available, do not create services. |
| 937 state = kTechnologyUnavailable; |
| 938 } else if (state_arg == "portal") { |
| 939 // Technology is enabled, a service is connected and in Portal state. |
| 940 state = shill::kStatePortal; |
| 941 } else if (state_arg == "active" || state_arg == "activated") { |
| 942 // Technology is enabled, a service is connected and Activated. |
| 943 state = kNetworkActivated; |
| 944 } else { |
| 945 LOG(ERROR) << "Unrecognized initial state: " << state_arg; |
| 946 return false; |
| 947 } |
| 948 |
| 949 type_arg = StringToLowerASCII(type_arg); |
| 950 // Special cases |
| 951 if (type_arg == "wireless") { |
| 952 shill_initial_state_map_[shill::kTypeWifi] = state; |
| 953 shill_initial_state_map_[shill::kTypeCellular] = state; |
| 954 return true; |
| 955 } |
| 956 // Convenience synonyms. |
| 957 if (type_arg == "eth") |
| 958 type_arg = shill::kTypeEthernet; |
| 959 |
| 960 if (type_arg != shill::kTypeEthernet && |
| 961 type_arg != shill::kTypeWifi && |
| 962 type_arg != shill::kTypeCellular && |
| 963 type_arg != shill::kTypeWimax && |
| 964 type_arg != shill::kTypeVPN) { |
| 965 LOG(WARNING) << "Unrecognized Shill network type: " << type_arg; |
| 966 return false; |
| 967 } |
| 968 |
| 969 // Unconnected or disabled ethernet is the same as unavailable. |
| 970 if (type_arg == shill::kTypeEthernet && |
| 971 (state == shill::kStateIdle || state == kNetworkDisabled)) { |
| 972 state = kTechnologyUnavailable; |
| 973 } |
| 974 |
| 975 shill_initial_state_map_[type_arg] = state; |
| 976 return true; |
| 977 } |
| 978 |
| 979 std::string FakeShillManagerClient::GetInitialStateForType( |
| 980 const std::string& type, |
| 981 bool* enabled) { |
| 982 std::map<std::string, std::string>::const_iterator iter = |
| 983 shill_initial_state_map_.find(type); |
| 984 if (iter == shill_initial_state_map_.end()) { |
| 985 *enabled = false; |
| 986 return kTechnologyUnavailable; |
| 987 } |
| 988 std::string state = iter->second; |
| 989 if (state == kNetworkDisabled) { |
| 990 *enabled = false; |
| 991 return shill::kStateIdle; |
| 992 } |
| 993 *enabled = true; |
| 994 if ((state == shill::kStatePortal && type != shill::kTypeWifi) || |
| 995 (state == kNetworkActivated && type != shill::kTypeCellular)) { |
| 996 LOG(WARNING) << "Invalid state: " << state << " for " << type; |
| 997 return shill::kStateIdle; |
| 998 } |
| 999 return state; |
| 1000 } |
| 1001 |
| 696 } // namespace chromeos | 1002 } // namespace chromeos |
| OLD | NEW |