1 // Copyright 2020 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_CHROMEOS_CHILD_ACCOUNTS_TIME_LIMITS_WEB_TIME_ACTIVITY_PROVIDER_H_ 6 #define CHROME_BROWSER_CHROMEOS_CHILD_ACCOUNTS_TIME_LIMITS_WEB_TIME_ACTIVITY_PROVIDER_H_ 7 8 #include <set> 9 10 #include "base/observer_list.h" 11 #include "base/observer_list_types.h" 12 #include "chrome/browser/chromeos/child_accounts/time_limits/app_service_wrapper.h" 13 #include "chrome/browser/chromeos/child_accounts/time_limits/web_time_navigation_observer.h" 14 #include "chrome/browser/ui/browser_list_observer.h" 15 #include "chrome/browser/ui/tabs/tab_strip_model_observer.h" 16 17 namespace aura { 18 class Window; 19 } // namespace aura 20 21 namespace base { 22 class Time; 23 } // namespace base 24 25 class Browser; 26 27 namespace chromeos { 28 namespace app_time { 29 30 class AppId; 31 class AppTimeController; 32 class AppServiceWrapper; 33 enum class ChromeAppActivityState; 34 35 class WebTimeActivityProvider : public WebTimeNavigationObserver::EventListener, 36 public BrowserListObserver, 37 public TabStripModelObserver, 38 public AppServiceWrapper::EventListener { 39 public: 40 WebTimeActivityProvider(AppTimeController* app_time_controller, 41 AppServiceWrapper* app_service_wrapper); 42 WebTimeActivityProvider(const WebTimeActivityProvider&) = delete; 43 WebTimeActivityProvider& operator=(const WebTimeActivityProvider&) = delete; 44 45 ~WebTimeActivityProvider() override; 46 47 // WebTimeNavigationObserver::EventListener: 48 void OnWebActivityChanged( 49 const WebTimeNavigationObserver::NavigationInfo& info) override; 50 void WebTimeNavigationObserverDestroyed( 51 WebTimeNavigationObserver* navigation_observer) override; 52 53 // TabStripModelObserver: 54 void OnTabStripModelChanged( 55 TabStripModel* tab_strip_model, 56 const TabStripModelChange& change, 57 const TabStripSelectionChange& selection) override; 58 59 // BrowserListObserver: 60 void OnBrowserAdded(Browser* browser) override; 61 void OnBrowserRemoved(Browser* browser) override; 62 63 // AppServiceWrapper::EventListener: 64 void OnAppActive(const AppId& app_id, 65 aura::Window* window, 66 base::Time timestamp) override; 67 void OnAppInactive(const AppId& app_id, 68 aura::Window* window, 69 base::Time timestamp) override; 70 chrome_app_activty_state()71 ChromeAppActivityState chrome_app_activty_state() const { 72 return chrome_app_activity_state_; 73 } 74 75 private: 76 void TabsInserted(const TabStripModelChange::Insert* insert); 77 78 // Notifies AppActivityRegistry if there is a change in ChromeAppState. 79 void MaybeNotifyStateChange(base::Time timestamp); 80 81 // Calculates whether the Chrome app is kActive, kActiveWhitelisted or 82 // kInactive. 83 ChromeAppActivityState CalculateChromeAppActivityState() const; 84 85 // Reference to AppTimeController. Owned by ChildUserService. 86 AppTimeController* const app_time_controller_; 87 88 // Reference to AppServiceWrapper. Owned by AppTimeController. 89 AppServiceWrapper* const app_service_wrapper_; 90 91 // The set of navigation observers |this| instance is listening to. 92 std::set<WebTimeNavigationObserver*> navigation_observers_; 93 94 // A set of active browser instances. 95 std::set<const Browser*> active_browsers_; 96 97 // The default chrome app activity state. 98 ChromeAppActivityState chrome_app_activity_state_ = 99 ChromeAppActivityState::kInactive; 100 }; 101 102 } // namespace app_time 103 } // namespace chromeos 104 105 #endif // CHROME_BROWSER_CHROMEOS_CHILD_ACCOUNTS_TIME_LIMITS_WEB_TIME_ACTIVITY_PROVIDER_H_ 106