blob: 027a4fe5767bb0d2b16de93ef27a6593938d5c4a [file] [log] [blame]
Alex Deymoc705cc82014-02-19 11:15:00 -08001// Copyright (c) 2014 The Chromium OS 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
Alex Deymoc705cc82014-02-19 11:15:00 -08005#include "update_engine/policy_manager/policy_manager.h"
Alex Deymo7b948f02014-03-10 17:01:10 -07006
7#include "update_engine/policy_manager/chromeos_policy.h"
Alex Deymo2de23f52014-02-26 14:30:13 -08008#include "update_engine/policy_manager/real_state.h"
Alex Deymoc705cc82014-02-19 11:15:00 -08009
Alex Deymo7b948f02014-03-10 17:01:10 -070010using base::Closure;
11
Alex Deymoc705cc82014-02-19 11:15:00 -080012namespace chromeos_policy_manager {
13
14template <typename T>
15bool InitProvider(scoped_ptr<T>* handle_ptr, T* provider) {
16 handle_ptr->reset(provider);
17 return handle_ptr->get() && (*handle_ptr)->Init();
18}
19
Gilad Arnold5ef9c482014-03-03 13:51:02 -080020bool PolicyManager::Init(chromeos_update_engine::DBusWrapperInterface* dbus,
21 chromeos_update_engine::ClockInterface* clock) {
Alex Deymoc705cc82014-02-19 11:15:00 -080022 // TODO(deymo): Make it possible to replace this policy with a different
23 // implementation with a build-time flag.
24 policy_.reset(new ChromeOSPolicy());
25
Gilad Arnold5ef9c482014-03-03 13:51:02 -080026 state_.reset(new RealState(dbus, clock));
Alex Deymoc705cc82014-02-19 11:15:00 -080027
Alex Deymo2de23f52014-02-26 14:30:13 -080028 return state_->Init();
Alex Deymoc705cc82014-02-19 11:15:00 -080029}
30
Alex Deymo7b948f02014-03-10 17:01:10 -070031void PolicyManager::RunFromMainLoop(const Closure& callback) {
32 Closure* callback_p = new base::Closure(callback);
33 g_idle_add_full(G_PRIORITY_DEFAULT,
34 OnRanFromMainLoop,
35 reinterpret_cast<gpointer>(callback_p),
36 NULL);
37}
38
39void PolicyManager::RunFromMainLoopAfterTimeout(
40 const Closure& callback,
41 base::TimeDelta timeout) {
42 Closure* callback_p = new Closure(callback);
43 g_timeout_add_seconds(timeout.InSeconds(),
44 OnRanFromMainLoop,
45 reinterpret_cast<gpointer>(callback_p));
46}
47
48gboolean PolicyManager::OnRanFromMainLoop(gpointer user_data) {
49 Closure* callback_p = reinterpret_cast<Closure*>(user_data);
50 callback_p->Run();
51 delete callback_p;
52 return FALSE; // Removes the source since a callback can only be called once.
53}
54
Alex Deymoc705cc82014-02-19 11:15:00 -080055} // namespace chromeos_policy_manager