1c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu//
2c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Copyright (C) 2015 The Android Open Source Project
3c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu//
4c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Licensed under the Apache License, Version 2.0 (the "License");
5c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// you may not use this file except in compliance with the License.
6c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// You may obtain a copy of the License at
7c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu//
8c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu//      http://www.apache.org/licenses/LICENSE-2.0
9c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu//
10c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Unless required by applicable law or agreed to in writing, software
11c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// distributed under the License is distributed on an "AS IS" BASIS,
12c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// See the License for the specific language governing permissions and
14c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// limitations under the License.
15c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu//
1672e7e252c0594c2d58d2d8d64e4eede24608240ePeter Qiu
1772e7e252c0594c2d58d2d8d64e4eede24608240ePeter Qiu#include "shill/dbus/chromeos_dbus_control.h"
1872e7e252c0594c2d58d2d8d64e4eede24608240ePeter Qiu
19646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan#include <brillo/dbus/async_event_sequencer.h>
20646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan
21646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan#if defined(__ANDROID__)
22646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan#include <dbus/service_constants.h>
23646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan#else
24646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan#include <chromeos/dbus/service_constants.h>
25646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan#endif  // __ANDROID__
26646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan
2772e7e252c0594c2d58d2d8d64e4eede24608240ePeter Qiu#include "shill/dbus/chromeos_device_dbus_adaptor.h"
28484261aa33319098fca2fc44d523648f8ec97da8Peter Qiu#include "shill/dbus/chromeos_ipconfig_dbus_adaptor.h"
29484261aa33319098fca2fc44d523648f8ec97da8Peter Qiu#include "shill/dbus/chromeos_manager_dbus_adaptor.h"
30484261aa33319098fca2fc44d523648f8ec97da8Peter Qiu#include "shill/dbus/chromeos_profile_dbus_adaptor.h"
31484261aa33319098fca2fc44d523648f8ec97da8Peter Qiu#include "shill/dbus/chromeos_rpc_task_dbus_adaptor.h"
32484261aa33319098fca2fc44d523648f8ec97da8Peter Qiu#include "shill/dbus/chromeos_service_dbus_adaptor.h"
33484261aa33319098fca2fc44d523648f8ec97da8Peter Qiu#include "shill/dbus/chromeos_third_party_vpn_dbus_adaptor.h"
3472e7e252c0594c2d58d2d8d64e4eede24608240ePeter Qiu
35c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu#include "shill/dbus/chromeos_dhcpcd_listener.h"
36c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu#include "shill/dbus/chromeos_dhcpcd_proxy.h"
37fbd504da99b182c11266c182c7bb5d9795bc4036Samuel Tan#if defined(__ANDROID__)
38fbd504da99b182c11266c182c7bb5d9795bc4036Samuel Tan#include "shill/dbus/chromeos_firewalld_proxy.h"
39ddc794a8542795df886d639f8b1bcc8d70f1e1a1Samuel Tan#include "shill/power_manager_proxy_stub.h"
404eb5d7a99904c45bacde798f9b6bdfa915d51d68Samuel Tan#include "shill/upstart/upstart_proxy_stub.h"
41fbd504da99b182c11266c182c7bb5d9795bc4036Samuel Tan#else
42c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu#include "shill/dbus/chromeos_permission_broker_proxy.h"
43c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu#include "shill/dbus/chromeos_power_manager_proxy.h"
44c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu#include "shill/dbus/chromeos_upstart_proxy.h"
454eb5d7a99904c45bacde798f9b6bdfa915d51d68Samuel Tan#endif  // __ANDROID__
46c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu#include "shill/dbus/chromeos_dbus_service_watcher.h"
47c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu
48da6745bdee7e21b3d9476d80febcc9e743e9ca90Peter Qiu#if !defined(DISABLE_CELLULAR)
49da6745bdee7e21b3d9476d80febcc9e743e9ca90Peter Qiu#include "shill/dbus/chromeos_dbus_objectmanager_proxy.h"
50da6745bdee7e21b3d9476d80febcc9e743e9ca90Peter Qiu#include "shill/dbus/chromeos_dbus_properties_proxy.h"
5128af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu#include "shill/dbus/chromeos_mm1_modem_modem3gpp_proxy.h"
5228af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu#include "shill/dbus/chromeos_mm1_modem_modemcdma_proxy.h"
5328af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu#include "shill/dbus/chromeos_mm1_modem_proxy.h"
5428af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu#include "shill/dbus/chromeos_mm1_modem_simple_proxy.h"
5528af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu#include "shill/dbus/chromeos_mm1_sim_proxy.h"
56f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu#include "shill/dbus/chromeos_modem_cdma_proxy.h"
57f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu#include "shill/dbus/chromeos_modem_gobi_proxy.h"
58f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu#include "shill/dbus/chromeos_modem_gsm_card_proxy.h"
59f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu#include "shill/dbus/chromeos_modem_gsm_network_proxy.h"
60f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu#include "shill/dbus/chromeos_modem_manager_proxy.h"
61f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu#include "shill/dbus/chromeos_modem_proxy.h"
62f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu#include "shill/dbus/chromeos_modem_simple_proxy.h"
63da6745bdee7e21b3d9476d80febcc9e743e9ca90Peter Qiu#endif  // DISABLE_CELLULAR
64da6745bdee7e21b3d9476d80febcc9e743e9ca90Peter Qiu
65c252556c77323da28d546c2f33d2f9768dcd25ebPeter Qiu#if !defined(DISABLE_WIFI)
66c252556c77323da28d546c2f33d2f9768dcd25ebPeter Qiu#include "shill/dbus/chromeos_supplicant_bss_proxy.h"
67c252556c77323da28d546c2f33d2f9768dcd25ebPeter Qiu#endif  // DISABLE_WIFI
68c252556c77323da28d546c2f33d2f9768dcd25ebPeter Qiu
69c252556c77323da28d546c2f33d2f9768dcd25ebPeter Qiu#if !defined(DISABLE_WIFI) || !defined(DISABLE_WIRED_8021X)
70c252556c77323da28d546c2f33d2f9768dcd25ebPeter Qiu#include "shill/dbus/chromeos_supplicant_interface_proxy.h"
71c252556c77323da28d546c2f33d2f9768dcd25ebPeter Qiu#include "shill/dbus/chromeos_supplicant_network_proxy.h"
72c252556c77323da28d546c2f33d2f9768dcd25ebPeter Qiu#include "shill/dbus/chromeos_supplicant_process_proxy.h"
73c252556c77323da28d546c2f33d2f9768dcd25ebPeter Qiu#endif  // DISABLE_WIFI || DISABLE_WIRED_8021X
74c252556c77323da28d546c2f33d2f9768dcd25ebPeter Qiu
75c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu#if !defined(DISABLE_WIMAX)
76c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu#include "shill/dbus/chromeos_wimax_device_proxy.h"
77c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu#include "shill/dbus/chromeos_wimax_manager_proxy.h"
78c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu#include "shill/dbus/chromeos_wimax_network_proxy.h"
79c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu#endif  // DISABLE_WIMAX
80c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu
81646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan#include "shill/manager.h"
82646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan
83646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tanusing brillo::dbus_utils::AsyncEventSequencer;
840d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiuusing std::string;
8572e7e252c0594c2d58d2d8d64e4eede24608240ePeter Qiu
8672e7e252c0594c2d58d2d8d64e4eede24608240ePeter Qiunamespace shill {
8772e7e252c0594c2d58d2d8d64e4eede24608240ePeter Qiu
88c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu// static.
89c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiuconst char ChromeosDBusControl::kNullPath[] = "/";
90c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu
91646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel TanChromeosDBusControl::ChromeosDBusControl(EventDispatcher* dispatcher)
92646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan    : dispatcher_(dispatcher),
93526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu      null_identifier_(kNullPath) {
94526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu  dbus::Bus::Options options;
95526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu  options.bus_type = dbus::Bus::SYSTEM;
9672e7e252c0594c2d58d2d8d64e4eede24608240ePeter Qiu
97646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan  adaptor_bus_ = new dbus::Bus(options);
98526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu  proxy_bus_ = new dbus::Bus(options);
99646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan  CHECK(adaptor_bus_->Connect());
100526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu  CHECK(proxy_bus_->Connect());
101526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu}
102526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu
103526ed5f13bac449210b290ca027be8599bc5ea83Peter QiuChromeosDBusControl::~ChromeosDBusControl() {
104646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan  if (adaptor_bus_) {
105646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan    adaptor_bus_->ShutdownAndBlock();
106646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan  }
107526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu  if (proxy_bus_) {
108526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu    proxy_bus_->ShutdownAndBlock();
109526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu  }
110526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu}
11172e7e252c0594c2d58d2d8d64e4eede24608240ePeter Qiu
112c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiuconst string& ChromeosDBusControl::NullRPCIdentifier() {
113c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu  return null_identifier_;
114c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu}
115c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu
116646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tanvoid ChromeosDBusControl::RegisterManagerObject(
117646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan    Manager* manager, const base::Closure& registration_done_callback) {
118646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan  registration_done_callback_ = registration_done_callback;
119646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan  scoped_refptr<AsyncEventSequencer> sequencer(new AsyncEventSequencer());
120646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan  manager->RegisterAsync(
121646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan      base::Bind(
122646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan          &ChromeosDBusControl::OnDBusServiceRegistered,
123646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan          base::Unretained(this),
124646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan          sequencer->GetHandler("Manager.RegisterAsync() failed.", true)));
125646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan  sequencer->OnAllTasksCompletedCall({
126646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan      base::Bind(&ChromeosDBusControl::TakeServiceOwnership,
127646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan                 base::Unretained(this))
128646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan  });
129646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan}
130646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan
13172e7e252c0594c2d58d2d8d64e4eede24608240ePeter Qiutemplate <typename Object, typename AdaptorInterface, typename Adaptor>
13272e7e252c0594c2d58d2d8d64e4eede24608240ePeter QiuAdaptorInterface* ChromeosDBusControl::CreateAdaptor(Object* object) {
133526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu  return new Adaptor(adaptor_bus_, object);
13472e7e252c0594c2d58d2d8d64e4eede24608240ePeter Qiu}
13572e7e252c0594c2d58d2d8d64e4eede24608240ePeter Qiu
136646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tanvoid ChromeosDBusControl::OnDBusServiceRegistered(
137646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan    const base::Callback<void(bool)>& completion_action, bool success) {
138646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan  // The DBus control interface will take over the ownership of the DBus service
139646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan  // in this callback.  The daemon will crash if registration failed.
140646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan  completion_action.Run(success);
141646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan
142646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan  // We can start the manager now that we have ownership of the D-Bus service.
143646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan  // Doing so earlier would allow the manager to emit signals before service
144646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan  // ownership was acquired.
145646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan  registration_done_callback_.Run();
146646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan}
147646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan
148646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tanvoid ChromeosDBusControl::TakeServiceOwnership(bool success) {
149646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan  // Success should always be true since we've said that failures are fatal.
150646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan  CHECK(success) << "Init of one or more objects has failed.";
151646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan  CHECK(adaptor_bus_->RequestOwnershipAndBlock(kFlimflamServiceName,
152646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan                                       dbus::Bus::REQUIRE_PRIMARY))
153646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan      << "Unable to take ownership of " << kFlimflamServiceName;
154646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan}
155646c7e891789ea8abadd9e88bdd625d8bea2536dSamuel Tan
15672e7e252c0594c2d58d2d8d64e4eede24608240ePeter QiuDeviceAdaptorInterface* ChromeosDBusControl::CreateDeviceAdaptor(
15772e7e252c0594c2d58d2d8d64e4eede24608240ePeter Qiu    Device* device) {
15872e7e252c0594c2d58d2d8d64e4eede24608240ePeter Qiu  return
15972e7e252c0594c2d58d2d8d64e4eede24608240ePeter Qiu      CreateAdaptor<Device, DeviceAdaptorInterface, ChromeosDeviceDBusAdaptor>(
16072e7e252c0594c2d58d2d8d64e4eede24608240ePeter Qiu          device);
16172e7e252c0594c2d58d2d8d64e4eede24608240ePeter Qiu}
16272e7e252c0594c2d58d2d8d64e4eede24608240ePeter Qiu
16324b34a0263ade24d39dfe41a7422bfcd0148fda6Peter QiuIPConfigAdaptorInterface* ChromeosDBusControl::CreateIPConfigAdaptor(
16424b34a0263ade24d39dfe41a7422bfcd0148fda6Peter Qiu    IPConfig* config) {
165484261aa33319098fca2fc44d523648f8ec97da8Peter Qiu  return
166484261aa33319098fca2fc44d523648f8ec97da8Peter Qiu      CreateAdaptor<IPConfig, IPConfigAdaptorInterface,
167484261aa33319098fca2fc44d523648f8ec97da8Peter Qiu                    ChromeosIPConfigDBusAdaptor>(config);
16824b34a0263ade24d39dfe41a7422bfcd0148fda6Peter Qiu}
16924b34a0263ade24d39dfe41a7422bfcd0148fda6Peter Qiu
17024b34a0263ade24d39dfe41a7422bfcd0148fda6Peter QiuManagerAdaptorInterface* ChromeosDBusControl::CreateManagerAdaptor(
17124b34a0263ade24d39dfe41a7422bfcd0148fda6Peter Qiu    Manager* manager) {
1728a3f68edbcf7fe59380609588787baa54cbd9bddSamuel Tan  return new ChromeosManagerDBusAdaptor(adaptor_bus_, proxy_bus_, manager);
17324b34a0263ade24d39dfe41a7422bfcd0148fda6Peter Qiu}
17424b34a0263ade24d39dfe41a7422bfcd0148fda6Peter Qiu
17524b34a0263ade24d39dfe41a7422bfcd0148fda6Peter QiuProfileAdaptorInterface* ChromeosDBusControl::CreateProfileAdaptor(
17624b34a0263ade24d39dfe41a7422bfcd0148fda6Peter Qiu    Profile* profile) {
177484261aa33319098fca2fc44d523648f8ec97da8Peter Qiu  return
178484261aa33319098fca2fc44d523648f8ec97da8Peter Qiu      CreateAdaptor<Profile, ProfileAdaptorInterface,
179484261aa33319098fca2fc44d523648f8ec97da8Peter Qiu                    ChromeosProfileDBusAdaptor>(profile);
18024b34a0263ade24d39dfe41a7422bfcd0148fda6Peter Qiu}
18124b34a0263ade24d39dfe41a7422bfcd0148fda6Peter Qiu
18224b34a0263ade24d39dfe41a7422bfcd0148fda6Peter QiuRPCTaskAdaptorInterface* ChromeosDBusControl::CreateRPCTaskAdaptor(
18324b34a0263ade24d39dfe41a7422bfcd0148fda6Peter Qiu    RPCTask* task) {
184484261aa33319098fca2fc44d523648f8ec97da8Peter Qiu  return
185484261aa33319098fca2fc44d523648f8ec97da8Peter Qiu      CreateAdaptor<RPCTask, RPCTaskAdaptorInterface,
186484261aa33319098fca2fc44d523648f8ec97da8Peter Qiu                    ChromeosRPCTaskDBusAdaptor>(task);
18724b34a0263ade24d39dfe41a7422bfcd0148fda6Peter Qiu}
18824b34a0263ade24d39dfe41a7422bfcd0148fda6Peter Qiu
18924b34a0263ade24d39dfe41a7422bfcd0148fda6Peter QiuServiceAdaptorInterface* ChromeosDBusControl::CreateServiceAdaptor(
19024b34a0263ade24d39dfe41a7422bfcd0148fda6Peter Qiu    Service* service) {
191484261aa33319098fca2fc44d523648f8ec97da8Peter Qiu  return
192484261aa33319098fca2fc44d523648f8ec97da8Peter Qiu      CreateAdaptor<Service, ServiceAdaptorInterface,
193484261aa33319098fca2fc44d523648f8ec97da8Peter Qiu                    ChromeosServiceDBusAdaptor>(service);
19424b34a0263ade24d39dfe41a7422bfcd0148fda6Peter Qiu}
19524b34a0263ade24d39dfe41a7422bfcd0148fda6Peter Qiu
19624b34a0263ade24d39dfe41a7422bfcd0148fda6Peter Qiu#ifndef DISABLE_VPN
19724b34a0263ade24d39dfe41a7422bfcd0148fda6Peter QiuThirdPartyVpnAdaptorInterface* ChromeosDBusControl::CreateThirdPartyVpnAdaptor(
19824b34a0263ade24d39dfe41a7422bfcd0148fda6Peter Qiu    ThirdPartyVpnDriver* driver) {
199484261aa33319098fca2fc44d523648f8ec97da8Peter Qiu  return
200484261aa33319098fca2fc44d523648f8ec97da8Peter Qiu      CreateAdaptor<ThirdPartyVpnDriver, ThirdPartyVpnAdaptorInterface,
201484261aa33319098fca2fc44d523648f8ec97da8Peter Qiu                    ChromeosThirdPartyVpnDBusAdaptor>(driver);
20224b34a0263ade24d39dfe41a7422bfcd0148fda6Peter Qiu}
20324b34a0263ade24d39dfe41a7422bfcd0148fda6Peter Qiu#endif
20424b34a0263ade24d39dfe41a7422bfcd0148fda6Peter Qiu
2050d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter QiuPowerManagerProxyInterface* ChromeosDBusControl::CreatePowerManagerProxy(
206c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu    PowerManagerProxyDelegate* delegate,
207c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu    const base::Closure& service_appeared_callback,
208c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu    const base::Closure& service_vanished_callback) {
209ddc794a8542795df886d639f8b1bcc8d70f1e1a1Samuel Tan#if defined(__ANDROID__)
210ddc794a8542795df886d639f8b1bcc8d70f1e1a1Samuel Tan  return new PowerManagerProxyStub();
211ddc794a8542795df886d639f8b1bcc8d70f1e1a1Samuel Tan#else
212c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu  return new ChromeosPowerManagerProxy(dispatcher_,
213526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu                                       proxy_bus_,
214c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu                                       delegate,
215c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu                                       service_appeared_callback,
216c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu                                       service_vanished_callback);
217ddc794a8542795df886d639f8b1bcc8d70f1e1a1Samuel Tan#endif  // __ANDROID__
2180d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu}
2190d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu
2200d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu#if !defined(DISABLE_WIFI) || !defined(DISABLE_WIRED_8021X)
2210d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter QiuSupplicantProcessProxyInterface*
2220d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu    ChromeosDBusControl::CreateSupplicantProcessProxy(
223c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu        const base::Closure& service_appeared_callback,
224c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu        const base::Closure& service_vanished_callback) {
225526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu  return new ChromeosSupplicantProcessProxy(dispatcher_,
226526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu                                            proxy_bus_,
227526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu                                            service_appeared_callback,
228526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu                                            service_vanished_callback);
2290d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu}
2300d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu
2310d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter QiuSupplicantInterfaceProxyInterface*
2320d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu    ChromeosDBusControl::CreateSupplicantInterfaceProxy(
2330d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu        SupplicantEventDelegateInterface* delegate,
234c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu        const string& object_path) {
235526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu  return new ChromeosSupplicantInterfaceProxy(
236526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu      proxy_bus_, object_path, delegate);
2370d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu}
2380d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu
2390d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter QiuSupplicantNetworkProxyInterface*
2400d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu    ChromeosDBusControl::CreateSupplicantNetworkProxy(
241c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu        const string& object_path) {
242526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu  return new ChromeosSupplicantNetworkProxy(proxy_bus_, object_path);
2430d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu}
2440d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu#endif  // DISABLE_WIFI || DISABLE_WIRED_8021X
2450d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu
2460d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu#if !defined(DISABLE_WIFI)
2470d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter QiuSupplicantBSSProxyInterface* ChromeosDBusControl::CreateSupplicantBSSProxy(
2480d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu    WiFiEndpoint* wifi_endpoint,
249c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu    const string& object_path) {
250526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu  return new ChromeosSupplicantBSSProxy(proxy_bus_, object_path, wifi_endpoint);
2510d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu}
2520d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu#endif  // DISABLE_WIFI
2530d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu
254820012496f8c171a7c5da4a4904a6ee93bfea2e9Peter QiuDHCPCDListenerInterface* ChromeosDBusControl::CreateDHCPCDListener(
255820012496f8c171a7c5da4a4904a6ee93bfea2e9Peter Qiu    DHCPProvider* provider) {
256526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu  return new ChromeosDHCPCDListener(proxy_bus_, dispatcher_, provider);
257820012496f8c171a7c5da4a4904a6ee93bfea2e9Peter Qiu}
258820012496f8c171a7c5da4a4904a6ee93bfea2e9Peter Qiu
2590d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter QiuDHCPProxyInterface* ChromeosDBusControl::CreateDHCPProxy(
2600d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu    const string& service) {
261526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu  return new ChromeosDHCPCDProxy(proxy_bus_, service);
2620d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu}
2630d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu
2640d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter QiuUpstartProxyInterface* ChromeosDBusControl::CreateUpstartProxy() {
2654eb5d7a99904c45bacde798f9b6bdfa915d51d68Samuel Tan#if defined(__ANDROID__)
2664eb5d7a99904c45bacde798f9b6bdfa915d51d68Samuel Tan  return new UpstartProxyStub();
2674eb5d7a99904c45bacde798f9b6bdfa915d51d68Samuel Tan#else
268526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu  return new ChromeosUpstartProxy(proxy_bus_);
2694eb5d7a99904c45bacde798f9b6bdfa915d51d68Samuel Tan#endif  // __ANDROID__
2700d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu}
2710d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu
272a330ecd23b1ce4112fd7a28f4b2a062b8df10735Peter QiuFirewallProxyInterface* ChromeosDBusControl::CreateFirewallProxy() {
273fbd504da99b182c11266c182c7bb5d9795bc4036Samuel Tan#if defined(__ANDROID__)
274fbd504da99b182c11266c182c7bb5d9795bc4036Samuel Tan  return new ChromeosFirewalldProxy(proxy_bus_);
275fbd504da99b182c11266c182c7bb5d9795bc4036Samuel Tan#else
276526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu  return new ChromeosPermissionBrokerProxy(proxy_bus_);
277fbd504da99b182c11266c182c7bb5d9795bc4036Samuel Tan#endif  // __ANDROID__
2780d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu}
2790d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu
2800d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu#if !defined(DISABLE_CELLULAR)
281607796ab5bd9488a9ce4f74aeb48eefdbc7f8b46Peter QiuDBusPropertiesProxyInterface* ChromeosDBusControl::CreateDBusPropertiesProxy(
282607796ab5bd9488a9ce4f74aeb48eefdbc7f8b46Peter Qiu    const string& path,
283607796ab5bd9488a9ce4f74aeb48eefdbc7f8b46Peter Qiu    const string& service) {
284607796ab5bd9488a9ce4f74aeb48eefdbc7f8b46Peter Qiu  return new ChromeosDBusPropertiesProxy(proxy_bus_, path, service);
285607796ab5bd9488a9ce4f74aeb48eefdbc7f8b46Peter Qiu}
286607796ab5bd9488a9ce4f74aeb48eefdbc7f8b46Peter Qiu
2870d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter QiuDBusObjectManagerProxyInterface*
2880d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu    ChromeosDBusControl::CreateDBusObjectManagerProxy(
2890d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu        const string& path,
29005d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu        const string& service,
29105d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu        const base::Closure& service_appeared_callback,
29205d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu        const base::Closure& service_vanished_callback) {
293da6745bdee7e21b3d9476d80febcc9e743e9ca90Peter Qiu  return new ChromeosDBusObjectManagerProxy(dispatcher_,
294526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu                                            proxy_bus_,
295da6745bdee7e21b3d9476d80febcc9e743e9ca90Peter Qiu                                            path,
296da6745bdee7e21b3d9476d80febcc9e743e9ca90Peter Qiu                                            service,
297da6745bdee7e21b3d9476d80febcc9e743e9ca90Peter Qiu                                            service_appeared_callback,
298da6745bdee7e21b3d9476d80febcc9e743e9ca90Peter Qiu                                            service_vanished_callback);
2990d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu}
3000d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu
3010d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter QiuModemManagerProxyInterface*
3020d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu    ChromeosDBusControl::CreateModemManagerProxy(
3030d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu        ModemManagerClassic* manager,
3040d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu        const string& path,
30505d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu        const string& service,
306f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu        const base::Closure& service_appeared_callback,
307f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu        const base::Closure& service_vanished_callback) {
308f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu  return new ChromeosModemManagerProxy(dispatcher_,
309526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu                                       proxy_bus_,
310f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu                                       manager,
311f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu                                       path,
312f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu                                       service,
313f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu                                       service_appeared_callback,
314f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu                                       service_vanished_callback);
3150d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu}
3160d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu
3170d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter QiuModemProxyInterface* ChromeosDBusControl::CreateModemProxy(
3180d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu    const string& path,
3190d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu    const string& service) {
320526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu  return new ChromeosModemProxy(proxy_bus_, path, service);
3210d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu}
3220d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu
3230d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter QiuModemSimpleProxyInterface* ChromeosDBusControl::CreateModemSimpleProxy(
3240d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu    const string& path,
3250d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu    const string& service) {
326526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu  return new ChromeosModemSimpleProxy(proxy_bus_, path, service);
3270d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu}
3280d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu
3290d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter QiuModemCDMAProxyInterface* ChromeosDBusControl::CreateModemCDMAProxy(
3300d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu    const string& path,
3310d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu    const string& service) {
332526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu  return new ChromeosModemCDMAProxy(proxy_bus_, path, service);
3330d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu}
3340d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu
3350d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter QiuModemGSMCardProxyInterface* ChromeosDBusControl::CreateModemGSMCardProxy(
3360d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu    const string& path,
3370d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu    const string& service) {
338526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu  return new ChromeosModemGSMCardProxy(proxy_bus_, path, service);
3390d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu}
3400d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu
3410d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter QiuModemGSMNetworkProxyInterface* ChromeosDBusControl::CreateModemGSMNetworkProxy(
3420d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu    const string& path,
3430d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu    const string& service) {
344526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu  return new ChromeosModemGSMNetworkProxy(proxy_bus_, path, service);
3450d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu}
3460d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu
3470d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter QiuModemGobiProxyInterface* ChromeosDBusControl::CreateModemGobiProxy(
3480d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu    const string& path,
3490d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu    const string& service) {
350526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu  return new ChromeosModemGobiProxy(proxy_bus_, path, service);
3510d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu}
3520d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu
3530d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu// Proxies for ModemManager1 interfaces
3540d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiumm1::ModemModem3gppProxyInterface*
3550d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu    ChromeosDBusControl::CreateMM1ModemModem3gppProxy(
3560d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu        const string& path,
3570d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu        const string& service) {
358526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu  return new mm1::ChromeosModemModem3gppProxy(proxy_bus_, path, service);
3590d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu}
3600d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu
3610d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiumm1::ModemModemCdmaProxyInterface*
3620d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu    ChromeosDBusControl::CreateMM1ModemModemCdmaProxy(
3630d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu        const string& path,
3640d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu        const string& service) {
365526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu  return new mm1::ChromeosModemModemCdmaProxy(proxy_bus_, path, service);
3660d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu}
3670d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu
3680d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiumm1::ModemProxyInterface* ChromeosDBusControl::CreateMM1ModemProxy(
3690d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu    const string& path,
3700d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu    const string& service) {
371526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu  return new mm1::ChromeosModemProxy(proxy_bus_, path, service);
3720d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu}
3730d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu
3740d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiumm1::ModemSimpleProxyInterface* ChromeosDBusControl::CreateMM1ModemSimpleProxy(
3750d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu    const string& path,
3760d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu    const string& service) {
377526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu  return new mm1::ChromeosModemSimpleProxy(proxy_bus_, path, service);
3780d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu}
3790d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu
3800d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiumm1::SimProxyInterface* ChromeosDBusControl::CreateSimProxy(
3810d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu    const string& path,
3820d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu    const string& service) {
383526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu  return new mm1::ChromeosSimProxy(proxy_bus_, path, service);
3840d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu}
3850d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu#endif  // DISABLE_CELLULAR
3860d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu
3870d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu#if !defined(DISABLE_WIMAX)
3880d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter QiuWiMaxDeviceProxyInterface* ChromeosDBusControl::CreateWiMaxDeviceProxy(
3890d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu    const string& path) {
390526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu  return new ChromeosWiMaxDeviceProxy(proxy_bus_, path);
3910d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu}
3920d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu
393c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter QiuWiMaxManagerProxyInterface* ChromeosDBusControl::CreateWiMaxManagerProxy(
394c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu    const base::Closure& service_appeared_callback,
395c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu    const base::Closure& service_vanished_callback) {
396c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu  return new ChromeosWiMaxManagerProxy(dispatcher_,
397526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu                                       proxy_bus_,
398c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu                                       service_appeared_callback,
399c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu                                       service_vanished_callback);
4000d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu}
4010d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu
4020d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter QiuWiMaxNetworkProxyInterface* ChromeosDBusControl::CreateWiMaxNetworkProxy(
4030d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu    const string& path) {
404526ed5f13bac449210b290ca027be8599bc5ea83Peter Qiu  return new ChromeosWiMaxNetworkProxy(proxy_bus_, path);
4050d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu}
4060d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu#endif  // DISABLE_WIMAX
4070d8b91f88c68ae95840ce2eae1f058a4a53684f7Peter Qiu
40872e7e252c0594c2d58d2d8d64e4eede24608240ePeter Qiu}  // namespace shill
409