blob: e468dd92cba4d37ecd9f0cbbe8f4276b30c86f08 [file] [log] [blame]
Peter Qiu326b6cf2015-09-02 11:11:42 -07001//
2// Copyright (C) 2014 The Android Open Source Project
3//
4// Licensed under the Apache License, Version 2.0 (the "License");
5// you may not use this file except in compliance with the License.
6// You may obtain a copy of the License at
7//
8// http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13// See the License for the specific language governing permissions and
14// limitations under the License.
15//
Peter Qiu5dd242d2014-10-14 12:23:21 -070016
17#include "apmanager/daemon.h"
18
19#include <sysexits.h>
20
Peter Qiu5dd242d2014-10-14 12:23:21 -070021#include <base/logging.h>
22#include <base/message_loop/message_loop_proxy.h>
23#include <base/run_loop.h>
Peter Qiu5dd242d2014-10-14 12:23:21 -070024
Peter Qiube128822015-10-13 13:55:03 -070025#include "apmanager/dbus_control.h"
26
Peter Qiu5dd242d2014-10-14 12:23:21 -070027namespace apmanager {
28
Vitaly Bukaa4630922014-12-11 18:46:46 -080029namespace {
30const char kAPManagerServiceName[] = "org.chromium.apmanager";
31const char kAPMRootServicePath[] = "/org/chromium/apmanager";
32} // namespace
33
Peter Qiu5dd242d2014-10-14 12:23:21 -070034// static
Peter Qiu2a9f3482015-09-28 15:00:04 -070035#if !defined(__ANDROID__)
Peter Qiu5dd242d2014-10-14 12:23:21 -070036const char Daemon::kAPManagerGroupName[] = "apmanager";
37const char Daemon::kAPManagerUserName[] = "apmanager";
Peter Qiu2a9f3482015-09-28 15:00:04 -070038#else
39const char Daemon::kAPManagerGroupName[] = "system";
40const char Daemon::kAPManagerUserName[] = "system";
41#endif // __ANDROID__
Peter Qiu5dd242d2014-10-14 12:23:21 -070042
43Daemon::Daemon(const base::Closure& startup_callback)
Vitaly Bukaa4630922014-12-11 18:46:46 -080044 : DBusServiceDaemon(kAPManagerServiceName, kAPMRootServicePath),
45 startup_callback_(startup_callback) {
46}
Peter Qiu5dd242d2014-10-14 12:23:21 -070047
48int Daemon::OnInit() {
Alex Vakulenko8d0c31b2015-10-13 09:14:24 -070049 int return_code = brillo::DBusServiceDaemon::OnInit();
Peter Qiu5dd242d2014-10-14 12:23:21 -070050 if (return_code != EX_OK) {
51 return return_code;
52 }
53
Peter Qiu5dd242d2014-10-14 12:23:21 -070054 // Signal that we've acquired all resources.
55 startup_callback_.Run();
Peter Qiufb39ba42014-11-21 09:09:59 -080056
57 // Start manager.
58 manager_->Start();
59
Peter Qiu5dd242d2014-10-14 12:23:21 -070060 return EX_OK;
61}
62
63void Daemon::OnShutdown(int* return_code) {
64 manager_.reset();
Alex Vakulenko8d0c31b2015-10-13 09:14:24 -070065 brillo::DBusServiceDaemon::OnShutdown(return_code);
Peter Qiu5dd242d2014-10-14 12:23:21 -070066}
67
Peter Qiu376e4042014-11-13 09:40:28 -080068void Daemon::RegisterDBusObjectsAsync(
Alex Vakulenko8d0c31b2015-10-13 09:14:24 -070069 brillo::dbus_utils::AsyncEventSequencer* sequencer) {
Peter Qiube128822015-10-13 13:55:03 -070070 control_interface_.reset(new DBusControl(bus_));
Peter Qiu376e4042014-11-13 09:40:28 -080071 manager_.reset(new apmanager::Manager());
Peter Qiube128822015-10-13 13:55:03 -070072 // TODO(zqiu): remove object_manager_ and bus_ references once we moved over
73 // to use control interface for creating adaptors.
74 manager_->RegisterAsync(control_interface_.get(),
75 object_manager_.get(),
76 bus_,
77 sequencer);
Peter Qiu376e4042014-11-13 09:40:28 -080078}
79
Peter Qiu5dd242d2014-10-14 12:23:21 -070080} // namespace apmanager