18bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 58bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "chromeos/dbus/fake_shill_ipconfig_client.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/bind.h" 89ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/stl_util.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/values.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/dbus/shill_property_changed_observer.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "dbus/bus.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "dbus/message.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "dbus/object_path.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "dbus/object_proxy.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "dbus/values_util.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "third_party/cros_system_api/dbus/service_constants.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace chromeos { 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 218bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)FakeShillIPConfigClient::FakeShillIPConfigClient() : weak_ptr_factory_(this) { 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 248bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)FakeShillIPConfigClient::~FakeShillIPConfigClient() { 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 278bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)void FakeShillIPConfigClient::Init(dbus::Bus* bus) { 28424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 29424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 308bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)void FakeShillIPConfigClient::AddPropertyChangedObserver( 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const dbus::ObjectPath& ipconfig_path, 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShillPropertyChangedObserver* observer) { 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 358bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)void FakeShillIPConfigClient::RemovePropertyChangedObserver( 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const dbus::ObjectPath& ipconfig_path, 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShillPropertyChangedObserver* observer) { 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 408bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)void FakeShillIPConfigClient::Refresh(const dbus::ObjectPath& ipconfig_path, 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const VoidDBusMethodCallback& callback) { 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 448bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)void FakeShillIPConfigClient::GetProperties( 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const dbus::ObjectPath& ipconfig_path, 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const DictionaryValueCallback& callback) { 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::DictionaryValue* dict = NULL; 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!ipconfigs_.GetDictionaryWithoutPathExpansion(ipconfig_path.value(), 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &dict)) 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 51868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::MessageLoop::current()->PostTask( 528bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) FROM_HERE, base::Bind(&FakeShillIPConfigClient::PassProperties, 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) weak_ptr_factory_.GetWeakPtr(), 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) dict, 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) callback)); 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 588bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)void FakeShillIPConfigClient::SetProperty( 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const dbus::ObjectPath& ipconfig_path, 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& name, 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Value& value, 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const VoidDBusMethodCallback& callback) { 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue* dict = NULL; 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (ipconfigs_.GetDictionaryWithoutPathExpansion(ipconfig_path.value(), 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &dict)) { 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Update existing ip config stub object's properties. 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) dict->SetWithoutPathExpansion(name, value.DeepCopy()); 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } else { 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Create a new stub ipconfig object, and update its properties. 70eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::DictionaryValue* dvalue = new base::DictionaryValue; 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) dvalue->SetWithoutPathExpansion(name, value.DeepCopy()); 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ipconfigs_.SetWithoutPathExpansion(ipconfig_path.value(), 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) dvalue); 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 75868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::MessageLoop::current()->PostTask( 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS)); 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 798bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)void FakeShillIPConfigClient::ClearProperty( 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const dbus::ObjectPath& ipconfig_path, 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& name, 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const VoidDBusMethodCallback& callback) { 83868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::MessageLoop::current()->PostTask( 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS)); 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 878bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)void FakeShillIPConfigClient::Remove(const dbus::ObjectPath& ipconfig_path, 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const VoidDBusMethodCallback& callback) { 89868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::MessageLoop::current()->PostTask( 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS)); 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 93010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)ShillIPConfigClient::TestInterface* 94010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)FakeShillIPConfigClient::GetTestInterface() { 95010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return this; 96010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 97010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 98010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// ShillIPConfigClient::TestInterface overrides 99010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 100010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void FakeShillIPConfigClient::AddIPConfig( 101010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const std::string& ip_config_path, 102010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const base::DictionaryValue& properties) { 103010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ipconfigs_.SetWithoutPathExpansion(ip_config_path, properties.DeepCopy()); 104010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 105010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 106010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Private methods 107010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 1088bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)void FakeShillIPConfigClient::PassProperties( 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::DictionaryValue* values, 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const DictionaryValueCallback& callback) const { 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) callback.Run(DBUS_METHOD_CALL_SUCCESS, *values); 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace chromeos 115