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

Unified Diff: chromeos/dbus/shill_service_client_stub.cc

Issue 31773002: cryptohome: Convet all *Stub classes into Fake* classes (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: address comments Created 7 years, 2 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chromeos/dbus/shill_service_client_stub.h ('k') | chromeos/dbus/shill_stub_helper.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chromeos/dbus/shill_service_client_stub.cc
diff --git a/chromeos/dbus/shill_service_client_stub.cc b/chromeos/dbus/shill_service_client_stub.cc
deleted file mode 100644
index c03fc486dbcdaabd5a0bf6223ee480f224704ab4..0000000000000000000000000000000000000000
--- a/chromeos/dbus/shill_service_client_stub.cc
+++ /dev/null
@@ -1,569 +0,0 @@
-// Copyright (c) 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chromeos/dbus/shill_service_client_stub.h"
-
-#include "base/bind.h"
-#include "base/bind_helpers.h"
-#include "base/command_line.h"
-#include "base/message_loop/message_loop.h"
-#include "base/stl_util.h"
-#include "base/strings/string_util.h"
-#include "base/values.h"
-#include "chromeos/chromeos_switches.h"
-#include "chromeos/dbus/dbus_thread_manager.h"
-#include "chromeos/dbus/shill_manager_client.h"
-#include "chromeos/dbus/shill_property_changed_observer.h"
-#include "chromeos/dbus/shill_stub_helper.h"
-#include "chromeos/network/shill_property_util.h"
-#include "dbus/bus.h"
-#include "dbus/message.h"
-#include "dbus/object_path.h"
-#include "third_party/cros_system_api/dbus/service_constants.h"
-
-namespace chromeos {
-
-namespace {
-
-void ErrorFunction(const std::string& error_name,
- const std::string& error_message) {
- LOG(ERROR) << "Shill Error: " << error_name << " : " << error_message;
-}
-
-void PassStubListValue(const ShillServiceClient::ListValueCallback& callback,
- base::ListValue* value) {
- callback.Run(*value);
-}
-
-void PassStubServiceProperties(
- const ShillServiceClient::DictionaryValueCallback& callback,
- DBusMethodCallStatus call_status,
- const base::DictionaryValue* properties) {
- callback.Run(call_status, *properties);
-}
-
-} // namespace
-
-ShillServiceClientStub::ShillServiceClientStub() : weak_ptr_factory_(this) {
-}
-
-ShillServiceClientStub::~ShillServiceClientStub() {
- STLDeleteContainerPairSecondPointers(
- observer_list_.begin(), observer_list_.end());
-}
-
-
-// ShillServiceClient overrides.
-
-void ShillServiceClientStub::Init(dbus::Bus* bus) {
-}
-
-void ShillServiceClientStub::AddPropertyChangedObserver(
- const dbus::ObjectPath& service_path,
- ShillPropertyChangedObserver* observer) {
- GetObserverList(service_path).AddObserver(observer);
-}
-
-void ShillServiceClientStub::RemovePropertyChangedObserver(
- const dbus::ObjectPath& service_path,
- ShillPropertyChangedObserver* observer) {
- GetObserverList(service_path).RemoveObserver(observer);
-}
-
-void ShillServiceClientStub::GetProperties(
- const dbus::ObjectPath& service_path,
- const DictionaryValueCallback& callback) {
- base::DictionaryValue* nested_dict = NULL;
- scoped_ptr<base::DictionaryValue> result_properties;
- DBusMethodCallStatus call_status;
- stub_services_.GetDictionaryWithoutPathExpansion(service_path.value(),
- &nested_dict);
- if (nested_dict) {
- result_properties.reset(nested_dict->DeepCopy());
- // Remove credentials that Shill wouldn't send.
- result_properties->RemoveWithoutPathExpansion(shill::kPassphraseProperty,
- NULL);
- call_status = DBUS_METHOD_CALL_SUCCESS;
- } else {
- LOG(ERROR) << "Properties not found for: " << service_path.value();
- result_properties.reset(new base::DictionaryValue);
- call_status = DBUS_METHOD_CALL_FAILURE;
- }
-
- base::MessageLoop::current()->PostTask(
- FROM_HERE,
- base::Bind(&PassStubServiceProperties,
- callback,
- call_status,
- base::Owned(result_properties.release())));
-}
-
-void ShillServiceClientStub::SetProperty(const dbus::ObjectPath& service_path,
- const std::string& name,
- const base::Value& value,
- const base::Closure& callback,
- const ErrorCallback& error_callback) {
- if (!SetServiceProperty(service_path.value(), name, value)) {
- LOG(ERROR) << "Service not found: " << service_path.value();
- error_callback.Run("Error.InvalidService", "Invalid Service");
- return;
- }
- base::MessageLoop::current()->PostTask(FROM_HERE, callback);
-}
-
-void ShillServiceClientStub::SetProperties(
- const dbus::ObjectPath& service_path,
- const base::DictionaryValue& properties,
- const base::Closure& callback,
- const ErrorCallback& error_callback) {
- for (base::DictionaryValue::Iterator iter(properties);
- !iter.IsAtEnd(); iter.Advance()) {
- if (!SetServiceProperty(service_path.value(), iter.key(), iter.value())) {
- LOG(ERROR) << "Service not found: " << service_path.value();
- error_callback.Run("Error.InvalidService", "Invalid Service");
- return;
- }
- }
- base::MessageLoop::current()->PostTask(FROM_HERE, callback);
-}
-
-void ShillServiceClientStub::ClearProperty(
- const dbus::ObjectPath& service_path,
- const std::string& name,
- const base::Closure& callback,
- const ErrorCallback& error_callback) {
- base::DictionaryValue* dict = NULL;
- if (!stub_services_.GetDictionaryWithoutPathExpansion(
- service_path.value(), &dict)) {
- error_callback.Run("Error.InvalidService", "Invalid Service");
- return;
- }
- dict->RemoveWithoutPathExpansion(name, NULL);
- // Note: Shill does not send notifications when properties are cleared.
- base::MessageLoop::current()->PostTask(FROM_HERE, callback);
-}
-
-void ShillServiceClientStub::ClearProperties(
- const dbus::ObjectPath& service_path,
- const std::vector<std::string>& names,
- const ListValueCallback& callback,
- const ErrorCallback& error_callback) {
- base::DictionaryValue* dict = NULL;
- if (!stub_services_.GetDictionaryWithoutPathExpansion(
- service_path.value(), &dict)) {
- error_callback.Run("Error.InvalidService", "Invalid Service");
- return;
- }
- scoped_ptr<base::ListValue> results(new base::ListValue);
- for (std::vector<std::string>::const_iterator iter = names.begin();
- iter != names.end(); ++iter) {
- dict->RemoveWithoutPathExpansion(*iter, NULL);
- // Note: Shill does not send notifications when properties are cleared.
- results->AppendBoolean(true);
- }
- base::MessageLoop::current()->PostTask(
- FROM_HERE,
- base::Bind(&PassStubListValue,
- callback, base::Owned(results.release())));
-}
-
-void ShillServiceClientStub::Connect(const dbus::ObjectPath& service_path,
- const base::Closure& callback,
- const ErrorCallback& error_callback) {
- VLOG(1) << "ShillServiceClientStub::Connect: " << service_path.value();
- base::DictionaryValue* service_properties = NULL;
- if (!stub_services_.GetDictionary(
- service_path.value(), &service_properties)) {
- LOG(ERROR) << "Service not found: " << service_path.value();
- error_callback.Run("Error.InvalidService", "Invalid Service");
- return;
- }
-
- // Set any other services of the same Type to 'offline' first, before setting
- // State to Association which will trigger sorting Manager.Services and
- // sending an update.
- SetOtherServicesOffline(service_path.value());
-
- // Set Associating.
- base::StringValue associating_value(shill::kStateAssociation);
- SetServiceProperty(service_path.value(),
- shill::kStateProperty,
- associating_value);
-
- // Stay Associating until the state is changed again after a delay.
- base::TimeDelta delay;
- if (CommandLine::ForCurrentProcess()->HasSwitch(
- chromeos::switches::kEnableStubInteractive)) {
- const int kConnectDelaySeconds = 5;
- delay = base::TimeDelta::FromSeconds(kConnectDelaySeconds);
- }
- base::MessageLoop::current()->PostDelayedTask(
- FROM_HERE,
- base::Bind(&ShillServiceClientStub::ContinueConnect,
- weak_ptr_factory_.GetWeakPtr(),
- service_path.value()),
- delay);
-
- callback.Run();
-}
-
-void ShillServiceClientStub::Disconnect(const dbus::ObjectPath& service_path,
- const base::Closure& callback,
- const ErrorCallback& error_callback) {
- base::Value* service;
- if (!stub_services_.Get(service_path.value(), &service)) {
- error_callback.Run("Error.InvalidService", "Invalid Service");
- return;
- }
- base::TimeDelta delay;
- if (CommandLine::ForCurrentProcess()->HasSwitch(
- chromeos::switches::kEnableStubInteractive)) {
- const int kConnectDelaySeconds = 2;
- delay = base::TimeDelta::FromSeconds(kConnectDelaySeconds);
- }
- // Set Idle after a delay
- base::StringValue idle_value(shill::kStateIdle);
- base::MessageLoop::current()->PostDelayedTask(
- FROM_HERE,
- base::Bind(&ShillServiceClientStub::SetProperty,
- weak_ptr_factory_.GetWeakPtr(),
- service_path,
- shill::kStateProperty,
- idle_value,
- base::Bind(&base::DoNothing),
- error_callback),
- delay);
- callback.Run();
-}
-
-void ShillServiceClientStub::Remove(const dbus::ObjectPath& service_path,
- const base::Closure& callback,
- const ErrorCallback& error_callback) {
- base::MessageLoop::current()->PostTask(FROM_HERE, callback);
-}
-
-void ShillServiceClientStub::ActivateCellularModem(
- const dbus::ObjectPath& service_path,
- const std::string& carrier,
- const base::Closure& callback,
- const ErrorCallback& error_callback) {
- base::DictionaryValue* service_properties =
- GetModifiableServiceProperties(service_path.value(), false);
- if (!service_properties) {
- LOG(ERROR) << "Service not found: " << service_path.value();
- error_callback.Run("Error.InvalidService", "Invalid Service");
- }
- SetServiceProperty(service_path.value(),
- shill::kActivationStateProperty,
- base::StringValue(shill::kActivationStateActivating));
- base::TimeDelta delay;
- if (CommandLine::ForCurrentProcess()->HasSwitch(
- chromeos::switches::kEnableStubInteractive)) {
- const int kConnectDelaySeconds = 2;
- delay = base::TimeDelta::FromSeconds(kConnectDelaySeconds);
- }
- // Set Activated after a delay
- base::MessageLoop::current()->PostDelayedTask(
- FROM_HERE,
- base::Bind(&ShillServiceClientStub::SetCellularActivated,
- weak_ptr_factory_.GetWeakPtr(),
- service_path,
- error_callback),
- delay);
-
- base::MessageLoop::current()->PostTask(FROM_HERE, callback);
-}
-
-void ShillServiceClientStub::CompleteCellularActivation(
- const dbus::ObjectPath& service_path,
- const base::Closure& callback,
- const ErrorCallback& error_callback) {
- base::MessageLoop::current()->PostTask(FROM_HERE, callback);
-}
-
-void ShillServiceClientStub::GetLoadableProfileEntries(
- const dbus::ObjectPath& service_path,
- const DictionaryValueCallback& callback) {
- // Provide a dictionary with a single { profile_path, service_path } entry
- // if the Profile property is set, or an empty dictionary.
- scoped_ptr<base::DictionaryValue> result_properties(
- new base::DictionaryValue);
- base::DictionaryValue* service_properties =
- GetModifiableServiceProperties(service_path.value(), false);
- if (service_properties) {
- std::string profile_path;
- if (service_properties->GetStringWithoutPathExpansion(
- shill::kProfileProperty, &profile_path)) {
- result_properties->SetStringWithoutPathExpansion(
- profile_path, service_path.value());
- }
- } else {
- LOG(WARNING) << "Service not in profile: " << service_path.value();
- }
-
- DBusMethodCallStatus call_status = DBUS_METHOD_CALL_SUCCESS;
- base::MessageLoop::current()->PostTask(
- FROM_HERE,
- base::Bind(&PassStubServiceProperties,
- callback,
- call_status,
- base::Owned(result_properties.release())));
-}
-
-ShillServiceClient::TestInterface* ShillServiceClientStub::GetTestInterface() {
- return this;
-}
-
-// ShillServiceClient::TestInterface overrides.
-
-void ShillServiceClientStub::AddService(const std::string& service_path,
- const std::string& name,
- const std::string& type,
- const std::string& state,
- bool add_to_visible_list,
- bool add_to_watch_list) {
- std::string nstate = state;
- if (CommandLine::ForCurrentProcess()->HasSwitch(
- chromeos::switches::kDefaultStubNetworkStateIdle)) {
- nstate = shill::kStateIdle;
- }
- AddServiceWithIPConfig(service_path, name, type, nstate, "",
- add_to_visible_list, add_to_watch_list);
-}
-
-void ShillServiceClientStub::AddServiceWithIPConfig(
- const std::string& service_path,
- const std::string& name,
- const std::string& type,
- const std::string& state,
- const std::string& ipconfig_path,
- bool add_to_visible_list,
- bool add_to_watch_list) {
- DBusThreadManager::Get()->GetShillManagerClient()->GetTestInterface()->
- AddManagerService(service_path, add_to_visible_list, add_to_watch_list);
-
- base::DictionaryValue* properties =
- GetModifiableServiceProperties(service_path, true);
- connect_behavior_.erase(service_path);
- shill_property_util::SetSSID(name, properties);
- properties->SetWithoutPathExpansion(
- shill::kNameProperty,
- base::Value::CreateStringValue(name));
- properties->SetWithoutPathExpansion(
- shill::kDeviceProperty,
- base::Value::CreateStringValue(
- shill_stub_helper::DevicePathForType(type)));
- properties->SetWithoutPathExpansion(
- shill::kTypeProperty,
- base::Value::CreateStringValue(type));
- properties->SetWithoutPathExpansion(
- shill::kStateProperty,
- base::Value::CreateStringValue(state));
- if (!ipconfig_path.empty())
- properties->SetWithoutPathExpansion(
- shill::kIPConfigProperty,
- base::Value::CreateStringValue(ipconfig_path));
-}
-
-void ShillServiceClientStub::RemoveService(const std::string& service_path) {
- DBusThreadManager::Get()->GetShillManagerClient()->GetTestInterface()->
- RemoveManagerService(service_path);
-
- stub_services_.RemoveWithoutPathExpansion(service_path, NULL);
- connect_behavior_.erase(service_path);
-}
-
-bool ShillServiceClientStub::SetServiceProperty(const std::string& service_path,
- const std::string& property,
- const base::Value& value) {
- base::DictionaryValue* dict = NULL;
- if (!stub_services_.GetDictionaryWithoutPathExpansion(service_path, &dict))
- return false;
-
- VLOG(1) << "Service.SetProperty: " << property << " = " << value
- << " For: " << service_path;
-
- base::DictionaryValue new_properties;
- std::string changed_property;
- bool case_sensitive = true;
- if (StartsWithASCII(property, "Provider.", case_sensitive) ||
- StartsWithASCII(property, "OpenVPN.", case_sensitive) ||
- StartsWithASCII(property, "L2TPIPsec.", case_sensitive)) {
- // These properties are only nested within the Provider dictionary if read
- // from Shill.
- base::DictionaryValue* provider = new base::DictionaryValue;
- provider->SetWithoutPathExpansion(property, value.DeepCopy());
- new_properties.SetWithoutPathExpansion(shill::kProviderProperty, provider);
- changed_property = shill::kProviderProperty;
- } else {
- new_properties.SetWithoutPathExpansion(property, value.DeepCopy());
- changed_property = property;
- }
-
- dict->MergeDictionary(&new_properties);
-
- if (property == shill::kStateProperty) {
- // When State changes the sort order of Services may change.
- DBusThreadManager::Get()->GetShillManagerClient()->GetTestInterface()->
- SortManagerServices();
- }
-
- base::MessageLoop::current()->PostTask(
- FROM_HERE,
- base::Bind(&ShillServiceClientStub::NotifyObserversPropertyChanged,
- weak_ptr_factory_.GetWeakPtr(),
- dbus::ObjectPath(service_path), changed_property));
- return true;
-}
-
-const base::DictionaryValue* ShillServiceClientStub::GetServiceProperties(
- const std::string& service_path) const {
- const base::DictionaryValue* properties = NULL;
- stub_services_.GetDictionaryWithoutPathExpansion(service_path, &properties);
- return properties;
-}
-
-void ShillServiceClientStub::ClearServices() {
- DBusThreadManager::Get()->GetShillManagerClient()->GetTestInterface()->
- ClearManagerServices();
-
- stub_services_.Clear();
- connect_behavior_.clear();
-}
-
-void ShillServiceClientStub::SetConnectBehavior(const std::string& service_path,
- const base::Closure& behavior) {
- connect_behavior_[service_path] = behavior;
-}
-
-void ShillServiceClientStub::NotifyObserversPropertyChanged(
- const dbus::ObjectPath& service_path,
- const std::string& property) {
- base::DictionaryValue* dict = NULL;
- std::string path = service_path.value();
- if (!stub_services_.GetDictionaryWithoutPathExpansion(path, &dict)) {
- LOG(ERROR) << "Notify for unknown service: " << path;
- return;
- }
- base::Value* value = NULL;
- if (!dict->GetWithoutPathExpansion(property, &value)) {
- LOG(ERROR) << "Notify for unknown property: "
- << path << " : " << property;
- return;
- }
- FOR_EACH_OBSERVER(ShillPropertyChangedObserver,
- GetObserverList(service_path),
- OnPropertyChanged(property, *value));
-}
-
-base::DictionaryValue* ShillServiceClientStub::GetModifiableServiceProperties(
- const std::string& service_path, bool create_if_missing) {
- base::DictionaryValue* properties = NULL;
- if (!stub_services_.GetDictionaryWithoutPathExpansion(service_path,
- &properties) &&
- create_if_missing) {
- properties = new base::DictionaryValue;
- stub_services_.Set(service_path, properties);
- }
- return properties;
-}
-
-ShillServiceClientStub::PropertyObserverList&
-ShillServiceClientStub::GetObserverList(const dbus::ObjectPath& device_path) {
- std::map<dbus::ObjectPath, PropertyObserverList*>::iterator iter =
- observer_list_.find(device_path);
- if (iter != observer_list_.end())
- return *(iter->second);
- PropertyObserverList* observer_list = new PropertyObserverList();
- observer_list_[device_path] = observer_list;
- return *observer_list;
-}
-
-void ShillServiceClientStub::SetOtherServicesOffline(
- const std::string& service_path) {
- const base::DictionaryValue* service_properties = GetServiceProperties(
- service_path);
- if (!service_properties) {
- LOG(ERROR) << "Missing service: " << service_path;
- return;
- }
- std::string service_type;
- service_properties->GetString(shill::kTypeProperty, &service_type);
- // Set all other services of the same type to offline (Idle).
- for (base::DictionaryValue::Iterator iter(stub_services_);
- !iter.IsAtEnd(); iter.Advance()) {
- std::string path = iter.key();
- if (path == service_path)
- continue;
- base::DictionaryValue* properties;
- if (!stub_services_.GetDictionaryWithoutPathExpansion(path, &properties))
- NOTREACHED();
-
- std::string type;
- properties->GetString(shill::kTypeProperty, &type);
- if (type != service_type)
- continue;
- properties->SetWithoutPathExpansion(
- shill::kStateProperty,
- base::Value::CreateStringValue(shill::kStateIdle));
- }
-}
-
-void ShillServiceClientStub::SetCellularActivated(
- const dbus::ObjectPath& service_path,
- const ErrorCallback& error_callback) {
- SetProperty(service_path,
- shill::kActivationStateProperty,
- base::StringValue(shill::kActivationStateActivated),
- base::Bind(&base::DoNothing),
- error_callback);
- SetProperty(service_path,
- shill::kConnectableProperty,
- base::FundamentalValue(true),
- base::Bind(&base::DoNothing),
- error_callback);
-}
-
-void ShillServiceClientStub::ContinueConnect(
- const std::string& service_path) {
- VLOG(1) << "ShillServiceClientStub::ContinueConnect: " << service_path;
- base::DictionaryValue* service_properties = NULL;
- if (!stub_services_.GetDictionary(service_path, &service_properties)) {
- LOG(ERROR) << "Service not found: " << service_path;
- return;
- }
-
- if (ContainsKey(connect_behavior_, service_path)) {
- const base::Closure& custom_connect_behavior =
- connect_behavior_[service_path];
- custom_connect_behavior.Run();
- return;
- }
-
- // No custom connect behavior set, continue with the default connect behavior.
- std::string passphrase;
- service_properties->GetStringWithoutPathExpansion(
- shill::kPassphraseProperty, &passphrase);
- if (passphrase == "failure") {
- // Simulate a password failure.
- SetServiceProperty(service_path,
- shill::kStateProperty,
- base::StringValue(shill::kStateFailure));
- base::MessageLoop::current()->PostTask(
- FROM_HERE,
- base::Bind(
- base::IgnoreResult(&ShillServiceClientStub::SetServiceProperty),
- weak_ptr_factory_.GetWeakPtr(),
- service_path,
- shill::kErrorProperty,
- base::StringValue(shill::kErrorBadPassphrase)));
- } else {
- // Set Online.
- SetServiceProperty(service_path,
- shill::kStateProperty,
- base::StringValue(shill::kStateOnline));
- }
-}
-
-} // namespace chromeos
« no previous file with comments | « chromeos/dbus/shill_service_client_stub.h ('k') | chromeos/dbus/shill_stub_helper.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698