Home | History | Annotate | Download | only in cloud
      1 // Copyright (c) 2012 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 "components/policy/core/common/cloud/cloud_policy_core.h"
      6 
      7 #include "base/bind.h"
      8 #include "base/bind_helpers.h"
      9 #include "base/prefs/pref_service.h"
     10 #include "components/policy/core/common/cloud/cloud_policy_client.h"
     11 #include "components/policy/core/common/cloud/cloud_policy_refresh_scheduler.h"
     12 #include "components/policy/core/common/cloud/cloud_policy_service.h"
     13 #include "components/policy/core/common/cloud/cloud_policy_store.h"
     14 
     15 namespace policy {
     16 
     17 CloudPolicyCore::Observer::~Observer() {}
     18 
     19 CloudPolicyCore::CloudPolicyCore(
     20     const PolicyNamespaceKey& key,
     21     CloudPolicyStore* store,
     22     const scoped_refptr<base::SequencedTaskRunner>& task_runner)
     23     : policy_ns_key_(key),
     24       store_(store),
     25       task_runner_(task_runner) {}
     26 
     27 CloudPolicyCore::~CloudPolicyCore() {}
     28 
     29 void CloudPolicyCore::Connect(scoped_ptr<CloudPolicyClient> client) {
     30   CHECK(!client_);
     31   CHECK(client);
     32   client_ = client.Pass();
     33   service_.reset(new CloudPolicyService(policy_ns_key_, client_.get(), store_));
     34   FOR_EACH_OBSERVER(Observer, observers_, OnCoreConnected(this));
     35 }
     36 
     37 void CloudPolicyCore::Disconnect() {
     38   if (client_)
     39     FOR_EACH_OBSERVER(Observer, observers_, OnCoreDisconnecting(this));
     40   refresh_delay_.reset();
     41   refresh_scheduler_.reset();
     42   service_.reset();
     43   client_.reset();
     44 }
     45 
     46 void CloudPolicyCore::RefreshSoon() {
     47   if (refresh_scheduler_)
     48     refresh_scheduler_->RefreshSoon();
     49 }
     50 
     51 void CloudPolicyCore::StartRefreshScheduler() {
     52   if (!refresh_scheduler_) {
     53     refresh_scheduler_.reset(
     54         new CloudPolicyRefreshScheduler(client_.get(), store_, task_runner_));
     55     UpdateRefreshDelayFromPref();
     56     FOR_EACH_OBSERVER(Observer, observers_, OnRefreshSchedulerStarted(this));
     57   }
     58 }
     59 
     60 void CloudPolicyCore::TrackRefreshDelayPref(
     61     PrefService* pref_service,
     62     const std::string& refresh_pref_name) {
     63   refresh_delay_.reset(new IntegerPrefMember());
     64   refresh_delay_->Init(
     65       refresh_pref_name.c_str(), pref_service,
     66       base::Bind(&CloudPolicyCore::UpdateRefreshDelayFromPref,
     67                  base::Unretained(this)));
     68   UpdateRefreshDelayFromPref();
     69 }
     70 
     71 void CloudPolicyCore::AddObserver(CloudPolicyCore::Observer* observer) {
     72   observers_.AddObserver(observer);
     73 }
     74 
     75 void CloudPolicyCore::RemoveObserver(CloudPolicyCore::Observer* observer) {
     76   observers_.RemoveObserver(observer);
     77 }
     78 
     79 void CloudPolicyCore::UpdateRefreshDelayFromPref() {
     80   if (refresh_scheduler_ && refresh_delay_)
     81     refresh_scheduler_->SetRefreshDelay(refresh_delay_->GetValue());
     82 }
     83 
     84 }  // namespace policy
     85