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