15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file.
45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/policy/core/common/policy_provider_android.h"
65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/policy/core/common/policy_provider_android_delegate.h"
75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace policy {
95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace {
115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool g_wait_for_policies = false;
135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}  // namespace
155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)PolicyProviderAndroid::PolicyProviderAndroid()
175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    : delegate_(NULL),
185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      initialized_(!g_wait_for_policies) {}
195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)PolicyProviderAndroid::~PolicyProviderAndroid() {}
215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
22f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)const Schema* PolicyProviderAndroid::GetChromeSchema() const {
23f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  PolicyNamespace ns(POLICY_DOMAIN_CHROME, std::string());
24f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  return schema_map()->GetSchema(ns);
25f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
26f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// static
285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void PolicyProviderAndroid::SetShouldWaitForPolicy(
295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    bool should_wait_for_policy) {
305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  g_wait_for_policies = should_wait_for_policy;
315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void PolicyProviderAndroid::SetDelegate(
345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    PolicyProviderAndroidDelegate* delegate) {
355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  delegate_ = delegate;
365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void PolicyProviderAndroid::SetPolicies(scoped_ptr<PolicyBundle> policy) {
395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  initialized_ = true;
405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UpdatePolicy(policy.Pass());
415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void PolicyProviderAndroid::Shutdown() {
445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (delegate_)
455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    delegate_->PolicyProviderShutdown();
465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ConfigurationPolicyProvider::Shutdown();
485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool PolicyProviderAndroid::IsInitializationComplete(
515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    PolicyDomain domain) const {
525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return initialized_;
535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void PolicyProviderAndroid::RefreshPolicies() {
565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (delegate_) {
575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    delegate_->RefreshPolicies();
585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  } else {
595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    // If we don't have a delegate, pass a copy of the current policies.
605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    scoped_ptr<PolicyBundle> bundle(new PolicyBundle());
615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    bundle->CopyFrom(policies());
625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    UpdatePolicy(bundle.Pass());
635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}  // namespace policy
67