Chromium Code Reviews| Index: chrome/browser/chromeos/system/device_disabling_manager.h |
| diff --git a/chrome/browser/chromeos/system/device_disabling_manager.h b/chrome/browser/chromeos/system/device_disabling_manager.h |
| index 426140a6852ad094abdcc685d92f43778074d209..5e1e964539536721b1099e85b255aef733b85f78 100644 |
| --- a/chrome/browser/chromeos/system/device_disabling_manager.h |
| +++ b/chrome/browser/chromeos/system/device_disabling_manager.h |
| @@ -9,12 +9,19 @@ |
| #include "base/callback.h" |
| #include "base/macros.h" |
| +#include "base/memory/scoped_ptr.h" |
| #include "base/memory/weak_ptr.h" |
| +#include "base/observer_list.h" |
| +#include "chrome/browser/chromeos/settings/cros_settings.h" |
| namespace policy { |
| class BrowserPolicyConnectorChromeOS; |
| } |
| +namespace user_manager { |
| +class UserManager; |
| +} |
| + |
| namespace chromeos { |
| namespace system { |
| @@ -31,28 +38,91 @@ namespace system { |
| // device disabled screen. |
| // - If the device has not been wiped, the disabled state is retrieved with |
| // every device policy fetch as part of the |PolicyData| protobuf, parsed and |
| -// written to the |chromeos::kDeviceDisabled| cros setting. |
| -// |
| -// TODO(bartfab): Make this class subscribe to the cros setting and trigger |
| -// the device disabled screen. http://crbug.com/425574 |
| +// written to the |chromeos::kDeviceDisabled| cros setting. This class |
| +// monitors the cros setting. When the device becomes disabled, one of two |
| +// actions is taken: |
| +// 1) If no session is in progress, the device disabled screen is shown |
| +// immediately. |
| +// 2) If a session is in progress, the session is terminated. After Chrome has |
| +// restarted on the login screen, the disabled screen is shown per 1). |
| +// This ensures that when a device is disabled, there is never any user |
| +// session running in the backround. |
| +// When the device is re-enabled, Chrome is restarted once more to resume the |
| +// regular login screen flows from a known-good point. |
| class DeviceDisablingManager { |
| public: |
| using DeviceDisabledCheckCallback = base::Callback<void(bool)>; |
| - explicit DeviceDisablingManager( |
| - policy::BrowserPolicyConnectorChromeOS* browser_policy_connector); |
| + class Observer { |
| + public: |
| + virtual ~Observer(); |
| + |
| + virtual void OnDisabledMessageChanged( |
| + const std::string& disabled_message) = 0; |
| + |
| + private: |
| + DISALLOW_ASSIGN(Observer); |
| + }; |
| + |
| + class Delegate { |
| + public: |
| + virtual ~Delegate(); |
| + |
| + // Terminate the current session (if any) and restart Chrome to show the |
| + // login screen. |
| + virtual void RestartToLoginScreen() = 0; |
| + |
| + // Show the device disabled screen. |
| + virtual void ShowDeviceDisabledScreen() = 0; |
| + |
| + private: |
| + DISALLOW_ASSIGN(Delegate); |
| + }; |
| + |
| + // If |delegate| is a nullptr, a default Delegate implementation will be used. |
| + // Otherwise, the specified |delegate| must outlive |this| and will be used. |
| + DeviceDisablingManager( |
| + Delegate* delegate, |
| + CrosSettings* cros_settings, |
| + user_manager::UserManager* user_manager); |
| + |
| + void AddObserver(Observer* observer); |
| + void RemoveObserver(Observer* observer); |
| // Returns the cached disabled message. The message is only guaranteed to be |
| // up to date if the disabled screen was triggered. |
| const std::string& disabled_message() const { return disabled_message_; } |
| - // Checks whether the device is disabled. |callback| will be invoked with the |
| - // result of the check. |
| + // Performs a check whether the device is disabled during OOBE. |callback| |
| + // will be invoked with the result of the check. |
| void CheckWhetherDeviceDisabledDuringOOBE( |
| const DeviceDisabledCheckCallback& callback); |
| + // Whenever trusted cros settings indicate that the device is disabled, this |
| + // method should be used to check whether the device disabling is to be |
| + // honored. If this method returns false, the device should not be disabled. |
| + static bool HonorDeviceDisablingDuringNormalOperation(); |
| + |
| private: |
| + // Cache the disabled message and inform observers if it changed. |
| + void CacheDisabledMessageAndNotify(const std::string& disabled_message); |
| + |
| + void UpdateFromCrosSettings(); |
| + |
| + scoped_ptr<Delegate> owned_delegate_; |
|
achuithb
2014/11/07 00:15:17
This owned_delegate_, delegate_ business seems so
bartfab (slow)
2014/11/07 10:11:37
Done.
|
| + Delegate* delegate_; |
| policy::BrowserPolicyConnectorChromeOS* browser_policy_connector_; |
| + CrosSettings* cros_settings_; |
| + user_manager::UserManager* user_manager_; |
| + |
| + ObserverList<Observer> observers_; |
| + |
| + scoped_ptr<CrosSettings::ObserverSubscription> device_disabled_subscription_; |
| + scoped_ptr<CrosSettings::ObserverSubscription> disabled_message_subscription_; |
| + |
| + // Indicates whether the device was disabled when the cros settings were last |
| + // read. |
| + bool device_disabled_; |
| // A cached copy of the message to show on the device disabled screen. |
| std::string disabled_message_; |