OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/policy/cloud_policy_cache_base.h" | 5 #include "chrome/browser/policy/cloud_policy_cache_base.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/metrics/histogram.h" | 10 #include "base/metrics/histogram.h" |
11 #include "chrome/browser/policy/enterprise_metrics.h" | 11 #include "chrome/browser/policy/enterprise_metrics.h" |
12 #include "chrome/browser/policy/policy_notifier.h" | 12 #include "chrome/browser/policy/policy_notifier.h" |
13 | 13 |
14 namespace policy { | 14 namespace policy { |
15 | 15 |
16 CloudPolicyCacheBase::CloudPolicyCacheBase() | 16 CloudPolicyCacheBase::CloudPolicyCacheBase() |
17 : notifier_(NULL), | 17 : notifier_(NULL), |
18 initialization_complete_(false), | 18 initialization_complete_(false), |
19 is_unmanaged_(false) { | 19 is_unmanaged_(false) { |
20 public_key_version_.version = 0; | 20 public_key_version_.version = 0; |
21 public_key_version_.valid = false; | 21 public_key_version_.valid = false; |
22 } | 22 } |
23 | 23 |
24 CloudPolicyCacheBase::~CloudPolicyCacheBase() { | 24 CloudPolicyCacheBase::~CloudPolicyCacheBase() { |
25 FOR_EACH_OBSERVER(Observer, observer_list_, OnCacheGoingAway(this)); | 25 FOR_EACH_OBSERVER(Observer, observer_list_, OnCacheGoingAway(this)); |
26 } | 26 } |
27 | 27 |
| 28 void CloudPolicyCacheBase::SetFetchingDone() { |
| 29 // NotifyObservers only fires notifications if the cache is ready. |
| 30 NotifyObservers(); |
| 31 } |
| 32 |
28 void CloudPolicyCacheBase::AddObserver(Observer* observer) { | 33 void CloudPolicyCacheBase::AddObserver(Observer* observer) { |
29 observer_list_.AddObserver(observer); | 34 observer_list_.AddObserver(observer); |
30 } | 35 } |
31 | 36 |
32 void CloudPolicyCacheBase::RemoveObserver(Observer* observer) { | 37 void CloudPolicyCacheBase::RemoveObserver(Observer* observer) { |
33 observer_list_.RemoveObserver(observer); | 38 observer_list_.RemoveObserver(observer); |
34 } | 39 } |
35 | 40 |
36 void CloudPolicyCacheBase::Reset() { | 41 void CloudPolicyCacheBase::Reset() { |
37 last_policy_refresh_time_ = base::Time(); | 42 last_policy_refresh_time_ = base::Time(); |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
102 !mandatory_policy_.Equals(mandatory_policy) || | 107 !mandatory_policy_.Equals(mandatory_policy) || |
103 !recommended_policy_.Equals(recommended_policy); | 108 !recommended_policy_.Equals(recommended_policy); |
104 mandatory_policy_.Swap(&mandatory_policy); | 109 mandatory_policy_.Swap(&mandatory_policy); |
105 recommended_policy_.Swap(&recommended_policy); | 110 recommended_policy_.Swap(&recommended_policy); |
106 | 111 |
107 if (!new_policy_differs) { | 112 if (!new_policy_differs) { |
108 UMA_HISTOGRAM_ENUMERATION(kMetricPolicy, kMetricPolicyFetchNotModified, | 113 UMA_HISTOGRAM_ENUMERATION(kMetricPolicy, kMetricPolicyFetchNotModified, |
109 kMetricPolicySize); | 114 kMetricPolicySize); |
110 } | 115 } |
111 | 116 |
112 NotifyObservers(); | |
113 | |
114 InformNotifier(CloudPolicySubsystem::SUCCESS, | 117 InformNotifier(CloudPolicySubsystem::SUCCESS, |
115 CloudPolicySubsystem::NO_DETAILS); | 118 CloudPolicySubsystem::NO_DETAILS); |
116 return true; | 119 return true; |
117 } | 120 } |
118 | 121 |
119 void CloudPolicyCacheBase::SetUnmanagedInternal(const base::Time& timestamp) { | 122 void CloudPolicyCacheBase::SetUnmanagedInternal(const base::Time& timestamp) { |
120 is_unmanaged_ = true; | 123 is_unmanaged_ = true; |
121 public_key_version_.valid = false; | 124 public_key_version_.valid = false; |
122 mandatory_policy_.Clear(); | 125 mandatory_policy_.Clear(); |
123 recommended_policy_.Clear(); | 126 recommended_policy_.Clear(); |
124 last_policy_refresh_time_ = timestamp; | 127 last_policy_refresh_time_ = timestamp; |
125 | |
126 NotifyObservers(); | |
127 } | 128 } |
128 | 129 |
129 void CloudPolicyCacheBase::SetReady() { | 130 void CloudPolicyCacheBase::SetReady() { |
130 initialization_complete_ = true; | 131 initialization_complete_ = true; |
131 NotifyObservers(); | 132 NotifyObservers(); |
132 } | 133 } |
133 | 134 |
134 bool CloudPolicyCacheBase::DecodePolicyResponse( | 135 bool CloudPolicyCacheBase::DecodePolicyResponse( |
135 const em::PolicyFetchResponse& policy_response, | 136 const em::PolicyFetchResponse& policy_response, |
136 PolicyMap* mandatory, | 137 PolicyMap* mandatory, |
(...skipping 27 matching lines...) Expand all Loading... |
164 void CloudPolicyCacheBase::InformNotifier( | 165 void CloudPolicyCacheBase::InformNotifier( |
165 CloudPolicySubsystem::PolicySubsystemState state, | 166 CloudPolicySubsystem::PolicySubsystemState state, |
166 CloudPolicySubsystem::ErrorDetails error_details) { | 167 CloudPolicySubsystem::ErrorDetails error_details) { |
167 // TODO(jkummerow): To obsolete this NULL-check, make all uses of | 168 // TODO(jkummerow): To obsolete this NULL-check, make all uses of |
168 // UserPolicyCache explicitly set a notifier using |set_policy_notifier()|. | 169 // UserPolicyCache explicitly set a notifier using |set_policy_notifier()|. |
169 if (notifier_) | 170 if (notifier_) |
170 notifier_->Inform(state, error_details, PolicyNotifier::POLICY_CACHE); | 171 notifier_->Inform(state, error_details, PolicyNotifier::POLICY_CACHE); |
171 } | 172 } |
172 | 173 |
173 } // namespace policy | 174 } // namespace policy |
OLD | NEW |