1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 2eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// found in the LICENSE file. 4eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 5eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#ifndef CHROME_BROWSER_CHROMEOS_POLICY_RECOMMENDATION_RESTORER_H_ 6eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define CHROME_BROWSER_CHROMEOS_POLICY_RECOMMENDATION_RESTORER_H_ 7eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include <string> 9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/basictypes.h" 11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/compiler_specific.h" 12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/prefs/pref_change_registrar.h" 13eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/timer/timer.h" 14a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "components/keyed_service/core/keyed_service.h" 15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "content/public/browser/notification_observer.h" 16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "content/public/browser/notification_registrar.h" 17c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "ui/wm/core/user_activity_observer.h" 18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass Profile; 20eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace policy { 22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Observes a set of prefs in the login profile. If any of the prefs has a 24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// recommended value, its user setting is cleared so that the recommendation can 25eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// take effect. This happens immediately when the login screen is shown, when 26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// a session is being started and whenever recommended values change during a 27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// user session. On the login screen, user settings are cleared when the user 28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// becomes idle for one minute. 29a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class RecommendationRestorer : public KeyedService, 30eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch public content::NotificationObserver, 31c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public wm::UserActivityObserver { 32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch public: 33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch explicit RecommendationRestorer(Profile* profile); 34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual ~RecommendationRestorer(); 35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 36a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // KeyedService: 37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual void Shutdown() OVERRIDE; 38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // content::NotificationObserver: 40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual void Observe(int type, 41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const content::NotificationSource& source, 42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const content::NotificationDetails& details) OVERRIDE; 43eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 44c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // wm::UserActivityObserver: 457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void OnUserActivity(const ui::Event* event) OVERRIDE; 46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // If a recommended value and a user setting exist for |pref_name|, clears the 48eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // user setting so that the recommended value can take effect. If 49eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // |allow_delay| is |true| and the login screen is being shown, a timer is 50eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // started that will clear the setting when the user becomes idle for one 51eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // minute. Otherwise, the setting is cleared immediately. 52eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void Restore(bool allow_delay, const std::string& pref_name); 53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 54eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch private: 55eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch friend class RecommendationRestorerTest; 56eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 57eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void RestoreAll(); 58eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 59eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void StartTimer(); 60eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void StopTimer(); 61eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 62eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PrefChangeRegistrar pref_change_registrar_; 63eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch content::NotificationRegistrar notification_registrar_; 64eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 65eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch bool logged_in_; 66eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 67eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::OneShotTimer<RecommendationRestorer> restore_timer_; 68eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 69eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DISALLOW_COPY_AND_ASSIGN(RecommendationRestorer); 70eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}; 71eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} // namespace policy 73eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 74eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif // CHROME_BROWSER_CHROMEOS_POLICY_RECOMMENDATION_RESTORER_H_ 75