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 3 // found in the LICENSE file. 4 5 #ifndef CHROME_BROWSER_POLICY_POLICY_NOTIFIER_H_ 6 #define CHROME_BROWSER_POLICY_POLICY_NOTIFIER_H_ 7 #pragma once 8 9 #include "base/observer_list.h" 10 #include "chrome/browser/policy/cloud_policy_subsystem.h" 11 12 namespace policy { 13 14 // Keeps track of the state of the policy subsystem components as far as it's 15 // relevant to the outside world. Is informed by components about status 16 // changes (failures and successes), determines the overall state and 17 // communicates it. 18 class PolicyNotifier { 19 public: 20 typedef CloudPolicySubsystem::PolicySubsystemState PolicySubsystemState; 21 typedef CloudPolicySubsystem::ErrorDetails ErrorDetails; 22 23 enum StatusSource { 24 TOKEN_FETCHER, 25 POLICY_CONTROLLER, 26 POLICY_CACHE, 27 NUM_SOURCES // This must be the last element in the enum. 28 }; 29 30 PolicyNotifier(); 31 ~PolicyNotifier(); 32 33 // Called by components of the policy subsystem. Determines the new overall 34 // state and triggers observer notifications as necessary. 35 void Inform(PolicySubsystemState state, 36 ErrorDetails error_details, 37 StatusSource source); 38 39 CloudPolicySubsystem::PolicySubsystemState state() const { 40 return state_; 41 } 42 43 CloudPolicySubsystem::ErrorDetails error_details() const { 44 return error_details_; 45 } 46 47 private: 48 friend class CloudPolicyController; 49 friend class CloudPolicySubsystem::ObserverRegistrar; 50 51 void AddObserver(CloudPolicySubsystem::Observer* observer); 52 void RemoveObserver(CloudPolicySubsystem::Observer* observer); 53 54 void RecomputeState(); 55 56 PolicySubsystemState state_; 57 ErrorDetails error_details_; 58 59 PolicySubsystemState component_states_[NUM_SOURCES]; 60 ErrorDetails component_error_details_[NUM_SOURCES]; 61 62 ObserverList<CloudPolicySubsystem::Observer, true> observer_list_; 63 64 DISALLOW_COPY_AND_ASSIGN(PolicyNotifier); 65 }; 66 67 } // namespace policy 68 69 #endif // CHROME_BROWSER_POLICY_POLICY_NOTIFIER_H_ 70