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