1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
ash / user_education / user_education_delegate.h [blame]
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef ASH_USER_EDUCATION_USER_EDUCATION_DELEGATE_H_
#define ASH_USER_EDUCATION_USER_EDUCATION_DELEGATE_H_
#include <memory>
#include <optional>
#include <string>
#include "ash/ash_export.h"
#include "base/functional/callback_forward.h"
class AccountId;
namespace apps {
enum class LaunchSource;
} // namespace apps
namespace ui {
class ElementContext;
class ElementIdentifier;
} // namespace ui
namespace user_education {
struct TutorialDescription;
} // namespace user_education
namespace ash {
enum class SystemWebAppType;
enum class TutorialId;
// The delegate of the `UserEducationController` which facilitates communication
// between Ash and user education services in the browser.
class ASH_EXPORT UserEducationDelegate {
public:
virtual ~UserEducationDelegate() = default;
// Returns the identifier for an element associated with the specified
// `app_id`, or an absent value if no such identifier exists. Note that
// existence of an identifier does not imply the existence of an associated
// element.
virtual std::optional<ui::ElementIdentifier> GetElementIdentifierForAppId(
const std::string& app_id) const = 0;
// If present, indicates whether the user associated with the given
// `account_id` is considered new. A user is considered new if the first app
// list sync in the session was the first sync ever across all ChromeOS
// devices and sessions for the given user. As such, this value is absent
// until the first app list sync of the session is completed.
// NOTE: Currently only the primary user profile is supported.
virtual const std::optional<bool>& IsNewUser(
const AccountId& account_id) const = 0;
// Returns whether the tutorial specified by `tutorial_id` is registered for
// the user associated with the given `account_id`.
// NOTE: Currently only the primary user profile is supported.
virtual bool IsTutorialRegistered(const AccountId& account_id,
TutorialId tutorial_id) const = 0;
// Registers the tutorial defined by the specified `tutorial_id` and
// `tutorial_description` for the user associated with the given `account_id`.
// NOTE: Currently only the primary user profile is supported.
virtual void RegisterTutorial(
const AccountId& account_id,
TutorialId tutorial_id,
user_education::TutorialDescription tutorial_description) = 0;
// Starts the tutorial previously registered with the specified `tutorial_id`
// for the user associated with the given `account_id`. Any running tutorial
// is cancelled. One of either `completed_callback` or `aborted_callback` will
// be run on tutorial finish.
// NOTE: Currently only the primary user profile is supported.
virtual void StartTutorial(const AccountId& account_id,
TutorialId tutorial_id,
ui::ElementContext element_context,
base::OnceClosure completed_callback,
base::OnceClosure aborted_callback) = 0;
// Aborts the currently running tutorial. If `tutorial_id` is given, will only
// abort the tutorial if it matches the id. If no `tutorial_id` is given, it
// aborts any running tutorial whether it was started by this controller or
// not. Any `aborted_callback` passed in at the time of start will be called.
// NOTE: Currently only the primary user profile is supported.
virtual void AbortTutorial(
const AccountId& account_id,
std::optional<TutorialId> tutorial_id = std::nullopt) = 0;
// Attempts to launch the system web app associated with the given type on
// the display associated with the given ID asynchronously.
// NOTE: Currently only the primary user profile is supported.
virtual void LaunchSystemWebAppAsync(const AccountId& account_id,
SystemWebAppType system_web_app_type,
apps::LaunchSource launch_source,
int64_t display_id) = 0;
// Returns true if there is a currently running tutorial for the user
// associated with `account_id`. If `tutorial_id` is specified, specifically
// returns whether *that* tutorial is running.
virtual bool IsRunningTutorial(
const AccountId& account_id,
std::optional<TutorialId> tutorial_id = std::nullopt) const = 0;
};
} // namespace ash
#endif // ASH_USER_EDUCATION_USER_EDUCATION_DELEGATE_H_