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