blob: 13577071481291ca22ae8c3b0189db4276ecfc40 [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 Arnold308c1012014-03-12 15:37:06 -070020bool PolicyManager::Init(State* state) {
Alex Deymoc705cc82014-02-19 11:15:00 -080021 // TODO(deymo): Make it possible to replace this policy with a different
22 // implementation with a build-time flag.
23 policy_.reset(new ChromeOSPolicy());
24
Gilad Arnold308c1012014-03-12 15:37:06 -070025 state_.reset(state);
Alex Deymoc705cc82014-02-19 11:15:00 -080026
Gilad Arnold308c1012014-03-12 15:37:06 -070027 return true;
Alex Deymoc705cc82014-02-19 11:15:00 -080028}
29
Alex Deymo7b948f02014-03-10 17:01:10 -070030void PolicyManager::RunFromMainLoop(const Closure& callback) {
31 Closure* callback_p = new base::Closure(callback);
32 g_idle_add_full(G_PRIORITY_DEFAULT,
33 OnRanFromMainLoop,
34 reinterpret_cast<gpointer>(callback_p),
35 NULL);
36}
37
38void PolicyManager::RunFromMainLoopAfterTimeout(
39 const Closure& callback,
40 base::TimeDelta timeout) {
41 Closure* callback_p = new Closure(callback);
42 g_timeout_add_seconds(timeout.InSeconds(),
43 OnRanFromMainLoop,
44 reinterpret_cast<gpointer>(callback_p));
45}
46
47gboolean PolicyManager::OnRanFromMainLoop(gpointer user_data) {
48 Closure* callback_p = reinterpret_cast<Closure*>(user_data);
49 callback_p->Run();
50 delete callback_p;
51 return FALSE; // Removes the source since a callback can only be called once.
52}
53
Alex Deymoc705cc82014-02-19 11:15:00 -080054} // namespace chromeos_policy_manager