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
3// found in the LICENSE file.
4
5#include "chromeos/network/network_activation_handler.h"
6
7#include "base/bind.h"
8#include "base/bind_helpers.h"
9#include "chromeos/dbus/dbus_thread_manager.h"
10#include "chromeos/dbus/shill_service_client.h"
11#include "chromeos/network/network_event_log.h"
12#include "chromeos/network/network_handler.h"
13#include "dbus/object_proxy.h"
14
15namespace chromeos {
16
17// static
18const char NetworkActivationHandler::kErrorShillError[] = "shill-error";
19
20NetworkActivationHandler::NetworkActivationHandler() {}
21NetworkActivationHandler::~NetworkActivationHandler() {}
22
23void NetworkActivationHandler::Activate(
24    const std::string& service_path,
25    const std::string& carrier,
26    const base::Closure& success_callback,
27    const network_handler::ErrorCallback& error_callback) {
28  NET_LOG_USER("ActivateNetwork", service_path);
29  CallShillActivate(service_path, carrier, success_callback, error_callback);
30}
31
32void NetworkActivationHandler::CompleteActivation(
33    const std::string& service_path,
34    const base::Closure& success_callback,
35    const network_handler::ErrorCallback& error_callback) {
36  NET_LOG_USER("CompleteActivation", service_path);
37  CallShillCompleteActivation(service_path, success_callback, error_callback);
38}
39
40void NetworkActivationHandler::CallShillActivate(
41    const std::string& service_path,
42    const std::string& carrier,
43    const base::Closure& success_callback,
44    const network_handler::ErrorCallback& error_callback) {
45  NET_LOG_USER("Activation Request", service_path + ": '" + carrier + "'");
46  DBusThreadManager::Get()->GetShillServiceClient()->ActivateCellularModem(
47      dbus::ObjectPath(service_path),
48      carrier,
49      base::Bind(&NetworkActivationHandler::HandleShillSuccess,
50                 AsWeakPtr(), service_path, success_callback),
51      base::Bind(&network_handler::ShillErrorCallbackFunction,
52                 kErrorShillError, service_path, error_callback));
53}
54
55void NetworkActivationHandler::CallShillCompleteActivation(
56    const std::string& service_path,
57    const base::Closure& success_callback,
58    const network_handler::ErrorCallback& error_callback) {
59  NET_LOG_USER("CompleteActivation Request", service_path);
60  DBusThreadManager::Get()->GetShillServiceClient()->CompleteCellularActivation(
61      dbus::ObjectPath(service_path),
62      base::Bind(&NetworkActivationHandler::HandleShillSuccess,
63                 AsWeakPtr(), service_path, success_callback),
64      base::Bind(&network_handler::ShillErrorCallbackFunction,
65                 kErrorShillError, service_path, error_callback));
66}
67
68void NetworkActivationHandler::HandleShillSuccess(
69    const std::string& service_path,
70    const base::Closure& success_callback) {
71  if (!success_callback.is_null())
72    success_callback.Run();
73}
74
75}  // namespace chromeos
76