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_UI_WEBUI_SETTINGS_CHROMEOS_SETTINGS_USER_ACTION_TRACKER_H_ 6 #define CHROME_BROWSER_UI_WEBUI_SETTINGS_CHROMEOS_SETTINGS_USER_ACTION_TRACKER_H_ 7 8 #include <memory> 9 10 #include "base/optional.h" 11 #include "chrome/browser/ui/webui/settings/chromeos/constants/setting.mojom.h" 12 #include "chrome/browser/ui/webui/settings/chromeos/search/per_session_settings_user_action_tracker.h" 13 #include "chrome/browser/ui/webui/settings/chromeos/search/user_action_recorder.mojom.h" 14 #include "mojo/public/cpp/bindings/pending_receiver.h" 15 #include "mojo/public/cpp/bindings/receiver.h" 16 17 namespace chromeos { 18 namespace settings { 19 20 class Hierarchy; 21 class OsSettingsSections; 22 23 // Records user actions within Settings. Utilizes a per session tracker that 24 // measures the user's effort required to change a setting. Eventually uses 25 // a per section tracker to record metrics in each section. 26 class SettingsUserActionTracker : public mojom::UserActionRecorder { 27 public: 28 SettingsUserActionTracker(Hierarchy* hierarchy, OsSettingsSections* sections); 29 SettingsUserActionTracker(const SettingsUserActionTracker& other) = delete; 30 SettingsUserActionTracker& operator=(const SettingsUserActionTracker& other) = 31 delete; 32 ~SettingsUserActionTracker() override; 33 34 void BindInterface( 35 mojo::PendingReceiver<mojom::UserActionRecorder> pending_receiver); 36 37 private: 38 // For unit tests. 39 // SettingsUserActionTracker(); 40 friend class SettingsUserActionTrackerTest; 41 FRIEND_TEST_ALL_PREFIXES(SettingsUserActionTrackerTest, 42 TestRecordSettingChangedBool); 43 FRIEND_TEST_ALL_PREFIXES(SettingsUserActionTrackerTest, 44 TestRecordSettingChangedInt); 45 FRIEND_TEST_ALL_PREFIXES(SettingsUserActionTrackerTest, 46 TestRecordSettingChangedBoolPref); 47 FRIEND_TEST_ALL_PREFIXES(SettingsUserActionTrackerTest, 48 TestRecordSettingChangedIntPref); 49 50 // mojom::UserActionRecorder: 51 void RecordPageFocus() override; 52 void RecordPageBlur() override; 53 void RecordClick() override; 54 void RecordNavigation() override; 55 void RecordSearch() override; 56 void RecordSettingChange() override; 57 void RecordSettingChangeWithDetails( 58 mojom::Setting setting, 59 mojom::SettingChangeValuePtr value) override; 60 61 void EndCurrentSession(); 62 void OnBindingDisconnected(); 63 64 Hierarchy* hierarchy_; 65 OsSettingsSections* sections_; 66 67 std::unique_ptr<PerSessionSettingsUserActionTracker> per_session_tracker_; 68 mojo::Receiver<mojom::UserActionRecorder> receiver_{this}; 69 }; 70 71 } // namespace settings 72 } // namespace chromeos 73 74 #endif // CHROME_BROWSER_UI_WEBUI_SETTINGS_CHROMEOS_SETTINGS_USER_ACTION_TRACKER_H_ 75