Bug 1901629 Comment 0 Edit History

Note: The actual edited comment in the bug view page will always show the original commenter’s name and original timestamp.

Investigate triggering and marking completion of actions to be used in a new onboarding "Set Up" checklist template for Feature Callout. This will support experimentation slotted for Fx131.

[Experiment spec with description of checklist actions](https://docs.google.com/document/d/180BI3yO7pA2dVwvXBiezy8Fj_D75V6zo5iHhvMLGjEA/edit#heading=h.ganlbxwxxmz)

---
**Initial findings / proposed approach (7.11.24)**

**Add a New Action List Component**
- We have a [MultiAction component](https://searchfox.org/mozilla-central/source/browser/components/aboutwelcome/content-src/components/MultiSelect.jsx) in about:welcome which is useful for reference, but too different to be repurposed for this use case
- First use case is in the FeatureCallout surface
- Includes a progress bar the reflects percentage of action items completed
		- Updates when an item is checked due to user click OR pref change
- Component should display a list of items, each of which is a button that:
	- can trigger a special message action
		- shows a visual “checked” indicator if the action is complete
		- is disabled if checked (no action arrow)
	- can be configured to initially show as checked or unchecked based on a targeting string
	- can be configured to be marked complete by:
		- user clicking the item
		- OR a reevaluation of the targeting string triggered by a pref change
			- we can allow a configurable list of prefs to watch per action item
			- For each pref, register a pref observer
				- Create a method in AboutWelcomeChild to handle this, sending a content message to AboutWelcomeParent to do something like: `Services.prefs.addObserver(PREF_NAME, handleChange);`
					- `handleChange` callback can use the [evaluateScreenTargeting util](https://searchfox.org/mozilla-central/source/browser/components/aboutwelcome/modules/AWScreenUtils.sys.mjs#33-43) to determine if the action complete targeting is now true and, if so, update the checked status of the item and remove the pref observer
				- Also clean up observers when when message dismissed / destroyed

**Actions for Initial Experiment**
 - Import data
    - action complete targeting:
        - All of the observed prefs below are false
            - `!(‘browser.migrate.interactions.password’|preferenceValue || ‘browser.migrate.interactions….`
    - prefs to observe:
        - [`preferenceObserver for browser.migrate.interactions.bookmarks`, `browser.migrate.interactions.passwords`, `browser.migrate.interactions.csvpasswords`, `browser.migrate.interactions.history`]
- Pin to taskbar
    - action complete targeting: `doesAppNeedPin`
    - mark complete on item click (confirm with product that this is acceptable)
- Set to default
    - action complete targeting: `browser.shell.checkDefaultBrowser'|preferenceValue && !isDefaultBrowser`
    - mark complete on item click
- Install extension & Add a theme (explore pages)
    - mark complete on item click
    - action complete targeting:
        - In the brief, the plan is to just mark these complete on click and then gate them on actually installing extensions/themes in the future
        - We could store whether the user has visited each of these pages as messaging system prefs and use this pref value for the items' action complete targeting
        - It might be fairly straight forward to do the installation gating in the first iteration
            - New/updated targeting would be required - some options:
                - Update `addonInfo` to include themes
                - Add targeting for `hasThemeEnabled` or `hasThemesInstalled` or (more generally useful) `themesInfo`, similar to `addonInfo`, but filtered just to themes (discuss with product to determine best path forward here)
- Sync mobile
    - action complete targeting: `!isFxASignedIn || sync.mobileDevices == 0`
    - prefs to observe: [`services.sync.clients.lastSync`]
        - Confirm this is the appropriate pref, brief specifies that *“Action is marked as completed as soon as they’ve successfully signed in or signed up”*

**Additonal Notes / Supplemental Work Required**
- Callout will automatically be removed if its anchor, the "Finish Setting Up" button, is removed
- Clicking the "Finish Setting Up" button should toggle showing the callout
    - If this button will no longer link to about:welcome, we’ll need to [update the AWToolbarButton code](https://searchfox.org/mozilla-central/source/browser/components/aboutwelcome/modules/AWToolbarUtils.sys.mjs) to trigger the callout message on click using `sendTriggerMessage`
    - We can use a `page_event_listener` in the Feature Callout message configuration to close the message when the user clicks the "Finish Setting Up" button ([see example here](https://searchfox.org/mozilla-central/source/browser/components/asrouter/modules/FeatureCalloutMessages.sys.mjs#565-573)).
- Callout should show on new tab after user finishes with about:welcome flow
    - We could potentially have two version of the callout message:
        - One triggered when [DID_SEE_FINAL_SCREEN_PREF](https://searchfox.org/mozilla-central/source/browser/components/aboutwelcome/actors/AboutWelcomeChild.sys.mjs#23) for about:welcome changes to true (meaning onboarding has ended)
        - One triggered by a `featureCalloutCheck` called from `AWToolbarUtils` when the "Finish Setting Up" button is clicked
- As noted above, we may need new or updated targeting for having themes added/enabled (depending on which approach we go with)
- Currently, [only one feature callout can show at a time](https://searchfox.org/mozilla-central/source/browser/components/asrouter/modules/FeatureCalloutBroker.sys.mjs#82-85), we'll need to add the ability to configure a callout that overrides this limit or closes the current callout if present to ensure clicking "Finish Setting Up" always toggles the action checklist in this initial experiment.
    - We should explore the implications of this change further.

**Questions**
- Do we want to capture telemetry every time an item is checked (by click or targeting reevaluation)? Or can we aggregate this information using existing telemetry?
- What's the expected behavior if another callout is already open and the user clicks "Finish Setting Up" to toggle on the checklist?
- Is the user clicking on the pin action enough to mark it complete if we update the completion status to reflect the actual state of pinning every time the message is shown? 
  - Same for add-ons/themes installation (if we go the "check for installation" route rather than just marking complete when the user visits the add-ons/themes pages).
Investigate triggering and marking completion of actions to be used in a new onboarding "Set Up" checklist template for Feature Callout. This will support experimentation slotted for Fx131.

[Experiment spec with description of checklist actions](https://docs.google.com/document/d/180BI3yO7pA2dVwvXBiezy8Fj_D75V6zo5iHhvMLGjEA/edit#heading=h.ganlbxwxxmz)

---
**Initial findings / proposed approach (7.11.24)**

**Add a New Action List Component**
- We have a [MultiAction component](https://searchfox.org/mozilla-central/source/browser/components/aboutwelcome/content-src/components/MultiSelect.jsx) in about:welcome which is useful for reference, but too different to be repurposed for this use case
- First use case is in the FeatureCallout surface
- Includes a progress bar the reflects percentage of action items completed
		- Updates when an item is checked due to user click OR pref change
- Component should display a list of items, each of which is a button that:
	- can trigger a special message action
		- shows a visual “checked” indicator if the action is complete
		- is disabled if checked (no action arrow)
	- can be configured to initially show as checked or unchecked based on a targeting string
	- can be configured to be marked complete by:
		- user clicking the item
		- OR a reevaluation of the targeting string triggered by a pref change
			- we can allow a configurable list of prefs to watch per action item
			- For each pref, register a pref observer
				- Create a method in AboutWelcomeChild to handle this, sending a content message to AboutWelcomeParent to do something like: `Services.prefs.addObserver(PREF_NAME, handleChange);`
					- `handleChange` callback can use the [evaluateScreenTargeting util](https://searchfox.org/mozilla-central/source/browser/components/aboutwelcome/modules/AWScreenUtils.sys.mjs#33-43) to determine if the action complete targeting is now true and, if so, update the checked status of the item and remove the pref observer
				- Also clean up observers when when message dismissed / destroyed

**Actions for Initial Experiment**
 - Import data
    - action complete targeting:
        - All of the observed prefs below are false
            - `!(‘browser.migrate.interactions.password’|preferenceValue || ‘browser.migrate.interactions….`
    - prefs to observe:
        - [`preferenceObserver for browser.migrate.interactions.bookmarks`, `browser.migrate.interactions.passwords`, `browser.migrate.interactions.csvpasswords`, `browser.migrate.interactions.history`]
- Pin to taskbar
    - action complete targeting: `doesAppNeedPin`
    - mark complete on item click (confirm with product that this is acceptable)
- Set to default
    - action complete targeting: `browser.shell.checkDefaultBrowser'|preferenceValue && !isDefaultBrowser`
    - mark complete on item click
- Install extension & Add a theme (explore pages)
    - mark complete on item click
    - action complete targeting:
        - In the brief, the plan is to just mark these complete on click and then gate them on actually installing extensions/themes in the future
        - We could store whether the user has visited each of these pages as messaging system prefs and use this pref value for the items' action complete targeting
        - It might be fairly straight forward to do the installation gating in the first iteration
            - New/updated targeting would be required - some options:
                - Update `addonInfo` to include themes
                - Add targeting for `hasThemeEnabled` or `hasThemesInstalled` or (more generally useful) `themesInfo`, similar to `addonInfo`, but filtered just to themes (discuss with product to determine best path forward here)
- Sync mobile
    - action complete targeting: `!isFxASignedIn || sync.mobileDevices == 0`
    - prefs to observe: [`services.sync.clients.lastSync`]
        - Confirm this is the appropriate pref, brief specifies that *“Action is marked as completed as soon as they’ve successfully signed in or signed up”*

**Additonal Notes / Supplemental Work Required**
- Callout will automatically be removed if its anchor, the "Finish Setting Up" button, is removed
- Clicking the "Finish Setting Up" button should toggle showing the callout
    - If this button will no longer link to about:welcome, we’ll need to [update the AWToolbarButton code](https://searchfox.org/mozilla-central/source/browser/components/aboutwelcome/modules/AWToolbarUtils.sys.mjs) to trigger the callout message on click using `sendTriggerMessage`
    - We can use a `page_event_listener` in the Feature Callout message configuration to close the message when the user clicks the "Finish Setting Up" button ([see example here](https://searchfox.org/mozilla-central/source/browser/components/asrouter/modules/FeatureCalloutMessages.sys.mjs#565-573)).
- Callout should show on new tab after user finishes with about:welcome flow
    - We could potentially have two version of the callout message:
        - One triggered when [DID_SEE_FINAL_SCREEN_PREF](https://searchfox.org/mozilla-central/source/browser/components/aboutwelcome/actors/AboutWelcomeChild.sys.mjs#23) for about:welcome changes to true (meaning onboarding has ended)
        - One triggered by a `featureCalloutCheck` called from `AWToolbarUtils` when the "Finish Setting Up" button is clicked
- As noted above, we may need new or updated targeting for having themes added/enabled (depending on which approach we go with)
- Currently, [only one feature callout can show at a time](https://searchfox.org/mozilla-central/source/browser/components/asrouter/modules/FeatureCalloutBroker.sys.mjs#82-85).

**Questions**
- Do we want to capture telemetry every time an item is checked (by click or targeting reevaluation)? Or can we aggregate this information using existing telemetry?
- What's the expected behavior if another callout is already open and the user clicks "Finish Setting Up" to toggle on the checklist?
- Is the user clicking on the pin action enough to mark it complete if we update the completion status to reflect the actual state of pinning every time the message is shown? 
  - Same for add-ons/themes installation (if we go the "check for installation" route rather than just marking complete when the user visits the add-ons/themes pages).
- Is it acceptable that clicking the "Finish Setup" button will close any open feature callout message before showing the set up checklist?
Investigate triggering and marking completion of actions to be used in a new onboarding "Set Up" checklist template for Feature Callout. This will support experimentation slotted for Fx131.

[Experiment spec with description of checklist actions](https://docs.google.com/document/d/180BI3yO7pA2dVwvXBiezy8Fj_D75V6zo5iHhvMLGjEA/edit#heading=h.ganlbxwxxmz)

---
**Initial findings / proposed approach (7.11.24)**

**Add a New Action List Component**
- We have a [MultiAction component](https://searchfox.org/mozilla-central/source/browser/components/aboutwelcome/content-src/components/MultiSelect.jsx) in about:welcome which is useful for reference, but too different to be repurposed for this use case
- First use case is in the FeatureCallout surface
- Includes a progress bar the reflects percentage of action items completed
		- Updates when an item is checked due to user click OR pref change
- Component should display a list of items, each of which is a button that:
	- can trigger a special message action
		- shows a visual “checked” indicator if the action is complete
		- is disabled if checked (no action arrow)
	- can be configured to initially show as checked or unchecked based on a targeting string
	- can be configured to be marked complete by:
		- user clicking the item
		- OR a reevaluation of the targeting string triggered by a pref change
			- we can allow a configurable list of prefs to watch per action item
			- For each pref, register a pref observer
				- Create a method in AboutWelcomeChild to handle this, sending a content message to AboutWelcomeParent to do something like: `Services.prefs.addObserver(PREF_NAME, handleChange);`
					- `handleChange` callback can use the [evaluateScreenTargeting util](https://searchfox.org/mozilla-central/source/browser/components/aboutwelcome/modules/AWScreenUtils.sys.mjs#33-43) to determine if the action complete targeting is now true and, if so, update the checked status of the item and remove the pref observer
				- Also clean up observers when when message dismissed / destroyed

**Actions for Initial Experiment**
 - Import data
    - action complete targeting:
        - All of the observed prefs below are false
            - `!(‘browser.migrate.interactions.password’|preferenceValue || ‘browser.migrate.interactions….`
    - prefs to observe:
        - [`preferenceObserver for browser.migrate.interactions.bookmarks`, `browser.migrate.interactions.passwords`, `browser.migrate.interactions.csvpasswords`, `browser.migrate.interactions.history`]
- Pin to taskbar
    - action complete targeting: `doesAppNeedPin`
    - mark complete on item click (confirm with product that this is acceptable)
- Set to default
    - action complete targeting: `browser.shell.checkDefaultBrowser'|preferenceValue && !isDefaultBrowser`
    - mark complete on item click
- Install extension & Add a theme (explore pages)
    - mark complete on item click
    - action complete targeting:
        - In the brief, the plan is to just mark these complete on click and then gate them on actually installing extensions/themes in the future
        - We could store whether the user has visited each of these pages as messaging system prefs and use this pref value for the items' action complete targeting
        - It might be fairly straight forward to do the installation gating in the first iteration
            - New/updated targeting would be required - some options:
                - Update `addonInfo` to include themes
                - Add targeting for `hasThemeEnabled` or `hasThemesInstalled` or (more generally useful) `themesInfo`, similar to `addonInfo`, but filtered just to themes (discuss with product to determine best path forward here)
- Sync mobile
    - action complete targeting: `!isFxASignedIn || sync.mobileDevices == 0`
    - prefs to observe: [`services.sync.clients.lastSync`]
        - Confirm this is the appropriate pref, brief specifies that *“Action is marked as completed as soon as they’ve successfully signed in or signed up”*

**Additonal Notes / Supplemental Work Required**
- Callout will automatically be removed if its anchor, the "Finish Setting Up" button, is removed
- Clicking the "Finish Setting Up" button should toggle showing the callout
    - If this button will no longer link to about:welcome, we’ll need to [update the AWToolbarButton code](https://searchfox.org/mozilla-central/source/browser/components/aboutwelcome/modules/AWToolbarUtils.sys.mjs) to trigger the callout message on click using `sendTriggerMessage`
    - We can use a `page_event_listener` in the Feature Callout message configuration to close the message when the user clicks the "Finish Setting Up" button ([see example here](https://searchfox.org/mozilla-central/source/browser/components/asrouter/modules/FeatureCalloutMessages.sys.mjs#565-573)).
- Callout should show on new tab after user finishes with about:welcome flow
    - We could potentially have two version of the callout message:
        - One triggered when [DID_SEE_FINAL_SCREEN_PREF](https://searchfox.org/mozilla-central/source/browser/components/aboutwelcome/actors/AboutWelcomeChild.sys.mjs#23) for about:welcome changes to true (meaning onboarding has ended)
        - One triggered by a `featureCalloutCheck` called from `AWToolbarUtils` when the "Finish Setting Up" button is clicked
    - Alternatively, we could explore adding a special message action that sends a trigger message with a configurable trigger id.
- As noted above, we may need new or updated targeting for having themes added/enabled (depending on which approach we go with)
- Currently, [only one feature callout can show at a time](https://searchfox.org/mozilla-central/source/browser/components/asrouter/modules/FeatureCalloutBroker.sys.mjs#82-85).

**Questions**
- Do we want to capture telemetry every time an item is checked (by click or targeting reevaluation)? Or can we aggregate this information using existing telemetry?
- What's the expected behavior if another callout is already open and the user clicks "Finish Setting Up" to toggle on the checklist?
- Is the user clicking on the pin action enough to mark it complete if we update the completion status to reflect the actual state of pinning every time the message is shown? 
  - Same for add-ons/themes installation (if we go the "check for installation" route rather than just marking complete when the user visits the add-ons/themes pages).
- Is it acceptable that clicking the "Finish Setup" button will close any open feature callout message before showing the set up checklist?
Investigate triggering and marking completion of actions to be used in a new onboarding "Set Up" checklist template for Feature Callout. This will support experimentation slotted for Fx131.

[Experiment spec with description of checklist actions](https://docs.google.com/document/d/180BI3yO7pA2dVwvXBiezy8Fj_D75V6zo5iHhvMLGjEA/edit#heading=h.ganlbxwxxmz)

---
**Initial findings / proposed approach (7.11.24)**

**Add a New Action List Component**
- We have a [MultiAction component](https://searchfox.org/mozilla-central/source/browser/components/aboutwelcome/content-src/components/MultiSelect.jsx) in about:welcome which is useful for reference, but too different to be repurposed for this use case
- First use case is in the FeatureCallout surface
- Includes a progress bar the reflects percentage of action items completed
		- Updates when an item is checked due to user click ~~OR pref change~~
- Component should display a list of items, each of which is a button that:
	- can trigger a special message action
		- shows a visual “checked” indicator if the action is complete
		- is disabled if checked (no action arrow)
	- can be configured to initially show as checked (complete) or unchecked based on a targeting string
	- can be configured to be marked complete by:
		- user clicking the item
		- [no longer required] ~~OR a reevaluation of the targeting string triggered by a pref change~~
			- ~~we can allow a configurable list of prefs to watch per action item~~
			- ~~For each pref, register a pref observer~~
				- ~~Create a method in AboutWelcomeChild to handle this, sending a content message to AboutWelcomeParent to do something like: `Services.prefs.addObserver(PREF_NAME, handleChange);`~~
					- ~~`handleChange` callback can use the [evaluateScreenTargeting util](https://searchfox.org/mozilla-central/source/browser/components/aboutwelcome/modules/AWScreenUtils.sys.mjs#33-43) to determine if the action complete targeting is now true and, if so, update the checked status of the item and remove the pref observer~~
				- ~~Also clean up observers when when message dismissed / destroyed ~~

**Actions for Initial Experiment**
 - Import data
    - action complete targeting:
        - All of the observed prefs below are false
            - `!(‘browser.migrate.interactions.password’|preferenceValue || ‘browser.migrate.interactions….`
    - ~~prefs to observe:~~
        - ~~[`preferenceObserver for browser.migrate.interactions.bookmarks`, `browser.migrate.interactions.passwords`, `browser.migrate.interactions.csvpasswords`, `browser.migrate.interactions.history`]~~
- Pin to taskbar
    - action complete targeting: `doesAppNeedPin`
- Set to default
    - action complete targeting: `browser.shell.checkDefaultBrowser'|preferenceValue && !isDefaultBrowser`
- Install extension & Add a theme (explore pages)
    - action complete targeting:
        - Store whether the user has visited each of these pages as messaging system prefs and use this pref value to check for completeness
        - ~~It might be fairly straight forward to do the installation gating in the first iteration~~
            - ~~New/updated targeting would be required - some options:~~
                - ~~Update `addonInfo` to include themes~~
                - ~~Add targeting for `hasThemeEnabled` or `hasThemesInstalled` or (more generally useful) `themesInfo`, similar to `addonInfo`, but filtered just to themes (discuss with product to determine best path forward here)~~
- Sync mobile
    - action complete targeting: `!isFxASignedIn || sync.mobileDevices == 0`
    - ~~prefs to observe: [`services.sync.clients.lastSync`]~~
        - ~~Confirm this is the appropriate pref, brief specifies that *“Action is marked as completed as soon as they’ve successfully signed in or signed up”*~~

**Additonal Notes / Supplemental Work Required**
- Callout will automatically be removed if its anchor, the "Finish Setting Up" button, is removed
- Clicking the "Finish Setting Up" button should toggle showing the callout
    - If this button will no longer link to about:welcome, we’ll need to [update the AWToolbarButton code](https://searchfox.org/mozilla-central/source/browser/components/aboutwelcome/modules/AWToolbarUtils.sys.mjs) to trigger the callout message on click using `sendTriggerMessage`
    - We can use a `page_event_listener` in the Feature Callout message configuration to close the message when the user clicks the "Finish Setting Up" button ([see example here](https://searchfox.org/mozilla-central/source/browser/components/asrouter/modules/FeatureCalloutMessages.sys.mjs#565-573)).
- Callout should show on new tab after user finishes with about:welcome flow
    - We could potentially have two version of the callout message:
        - One triggered when [DID_SEE_FINAL_SCREEN_PREF](https://searchfox.org/mozilla-central/source/browser/components/aboutwelcome/actors/AboutWelcomeChild.sys.mjs#23) for about:welcome changes to true (meaning onboarding has ended)
        - One triggered by a `featureCalloutCheck` called from `AWToolbarUtils` when the "Finish Setting Up" button is clicked
    - Alternatively, we could explore adding a special message action that sends a trigger message with a configurable trigger id.
- As noted above, we may need new or updated targeting for having themes added/enabled (depending on which approach we go with)
- Currently, [only one feature callout can show at a time](https://searchfox.org/mozilla-central/source/browser/components/asrouter/modules/FeatureCalloutBroker.sys.mjs#82-85).
Investigate triggering and marking completion of actions to be used in a new onboarding "Set Up" checklist template for Feature Callout. This will support experimentation slotted for Fx131.

[Experiment spec with description of checklist actions](https://docs.google.com/document/d/180BI3yO7pA2dVwvXBiezy8Fj_D75V6zo5iHhvMLGjEA/edit#heading=h.ganlbxwxxmz)

---
**Initial findings / proposed approach (updated 7.15.24)**

**Add a New Action List Component**
- We have a [MultiAction component](https://searchfox.org/mozilla-central/source/browser/components/aboutwelcome/content-src/components/MultiSelect.jsx) in about:welcome which is useful for reference, but too different to be repurposed for this use case
- First use case is in the FeatureCallout surface
- Includes a progress bar the reflects percentage of action items completed
		- Updates when an item is checked due to user click ~~OR pref change~~
- Component should display a list of items, each of which is a button that:
	- can trigger a special message action
		- shows a visual “checked” indicator if the action is complete
		- is disabled if checked (no action arrow)
	- can be configured to initially show as checked (complete) or unchecked based on a targeting string
	- can be configured to be marked complete by:
		- user clicking the item
		- [no longer required] ~~OR a reevaluation of the targeting string triggered by a pref change~~
			- ~~we can allow a configurable list of prefs to watch per action item~~
			- ~~For each pref, register a pref observer~~
				- ~~Create a method in AboutWelcomeChild to handle this, sending a content message to AboutWelcomeParent to do something like: `Services.prefs.addObserver(PREF_NAME, handleChange);`~~
					- ~~`handleChange` callback can use the [evaluateScreenTargeting util](https://searchfox.org/mozilla-central/source/browser/components/aboutwelcome/modules/AWScreenUtils.sys.mjs#33-43) to determine if the action complete targeting is now true and, if so, update the checked status of the item and remove the pref observer~~
				- ~~Also clean up observers when when message dismissed / destroyed ~~

**Actions for Initial Experiment**
 - Import data
    - action complete targeting:
        - All of the observed prefs below are false
            - `!(‘browser.migrate.interactions.password’|preferenceValue || ‘browser.migrate.interactions….`
    - ~~prefs to observe:~~
        - ~~[`preferenceObserver for browser.migrate.interactions.bookmarks`, `browser.migrate.interactions.passwords`, `browser.migrate.interactions.csvpasswords`, `browser.migrate.interactions.history`]~~
- Pin to taskbar
    - action complete targeting: `doesAppNeedPin`
- Set to default
    - action complete targeting: `browser.shell.checkDefaultBrowser'|preferenceValue && !isDefaultBrowser`
- Install extension & Add a theme (explore pages)
    - action complete targeting:
        - Store whether the user has visited each of these pages as messaging system prefs and use this pref value to check for completeness
        - ~~It might be fairly straight forward to do the installation gating in the first iteration~~
            - ~~New/updated targeting would be required - some options:~~
                - ~~Update `addonInfo` to include themes~~
                - ~~Add targeting for `hasThemeEnabled` or `hasThemesInstalled` or (more generally useful) `themesInfo`, similar to `addonInfo`, but filtered just to themes (discuss with product to determine best path forward here)~~
- Sync mobile
    - action complete targeting: `!isFxASignedIn || sync.mobileDevices == 0`
    - ~~prefs to observe: [`services.sync.clients.lastSync`]~~
        - ~~Confirm this is the appropriate pref, brief specifies that *“Action is marked as completed as soon as they’ve successfully signed in or signed up”*~~

**Additonal Notes / Supplemental Work Required**
- Callout will automatically be removed if its anchor, the "Finish Setting Up" button, is removed
- Clicking the "Finish Setting Up" button should toggle showing the callout
    - If this button will no longer link to about:welcome, we’ll need to [update the AWToolbarButton code](https://searchfox.org/mozilla-central/source/browser/components/aboutwelcome/modules/AWToolbarUtils.sys.mjs) to trigger the callout message on click using `sendTriggerMessage`
    - We can use a `page_event_listener` in the Feature Callout message configuration to close the message when the user clicks the "Finish Setting Up" button ([see example here](https://searchfox.org/mozilla-central/source/browser/components/asrouter/modules/FeatureCalloutMessages.sys.mjs#565-573)).
- Callout should show on new tab after user finishes with about:welcome flow
    - We could potentially have two version of the callout message:
        - One triggered when [DID_SEE_FINAL_SCREEN_PREF](https://searchfox.org/mozilla-central/source/browser/components/aboutwelcome/actors/AboutWelcomeChild.sys.mjs#23) for about:welcome changes to true (meaning onboarding has ended)
        - One triggered by a `featureCalloutCheck` called from `AWToolbarUtils` when the "Finish Setting Up" button is clicked
    - Alternatively, we could explore adding a special message action that sends a trigger message with a configurable trigger id.
- As noted above, we may need new or updated targeting for having themes added/enabled (depending on which approach we go with)
- Currently, [only one feature callout can show at a time](https://searchfox.org/mozilla-central/source/browser/components/asrouter/modules/FeatureCalloutBroker.sys.mjs#82-85).
Investigate triggering and marking completion of actions to be used in a new onboarding "Set Up" checklist template for Feature Callout. This will support experimentation slotted for Fx131.

[Experiment spec with description of checklist actions](https://docs.google.com/document/d/180BI3yO7pA2dVwvXBiezy8Fj_D75V6zo5iHhvMLGjEA/edit#heading=h.ganlbxwxxmz)

---
**Initial findings / proposed approach (updated 7.15.24)**

**Add a New Action List Component**
- We have a [MultiAction component](https://searchfox.org/mozilla-central/source/browser/components/aboutwelcome/content-src/components/MultiSelect.jsx) in about:welcome which is useful for reference, but too different to be repurposed for this use case
- First use case is in the FeatureCallout surface
- Includes a progress bar the reflects percentage of action items completed
		- Updates when an item is checked due to user click ~~OR pref change~~
- Component should display a list of items, each of which is a button that:
	- can trigger a special message action
		- shows a visual “checked” indicator if the action is complete
		- is disabled if checked (no action arrow)
	- can be configured to initially show as checked (complete) or unchecked based on a targeting string
	- can be configured to be marked complete by:
		- user clicking the item
		- [no longer required] ~~OR a reevaluation of the targeting string triggered by a pref change~~
			- ~~we can allow a configurable list of prefs to watch per action item~~
			- ~~For each pref, register a pref observer~~
				- ~~Create a method in AboutWelcomeChild to handle this, sending a content message to AboutWelcomeParent to do something like: `Services.prefs.addObserver(PREF_NAME, handleChange);`~~
					- ~~`handleChange` callback can use the [evaluateScreenTargeting util](https://searchfox.org/mozilla-central/source/browser/components/aboutwelcome/modules/AWScreenUtils.sys.mjs#33-43) to determine if the action complete targeting is now true and, if so, update the checked status of the item and remove the pref observer~~
				- ~~Also clean up observers when when message dismissed / destroyed~~

**Actions for Initial Experiment**
 - Import data
    - action complete targeting:
        - All of the observed prefs below are false
            - `!(‘browser.migrate.interactions.password’|preferenceValue || ‘browser.migrate.interactions….`
    - ~~prefs to observe:~~
        - ~~[`preferenceObserver for browser.migrate.interactions.bookmarks`, `browser.migrate.interactions.passwords`, `browser.migrate.interactions.csvpasswords`, `browser.migrate.interactions.history`]~~
- Pin to taskbar
    - action complete targeting: `doesAppNeedPin`
- Set to default
    - action complete targeting: `browser.shell.checkDefaultBrowser'|preferenceValue && !isDefaultBrowser`
- Install extension & Add a theme (explore pages)
    - action complete targeting:
        - Store whether the user has visited each of these pages as messaging system prefs and use this pref value to check for completeness
        - ~~It might be fairly straight forward to do the installation gating in the first iteration~~
            - ~~New/updated targeting would be required - some options:~~
                - ~~Update `addonInfo` to include themes~~
                - ~~Add targeting for `hasThemeEnabled` or `hasThemesInstalled` or (more generally useful) `themesInfo`, similar to `addonInfo`, but filtered just to themes (discuss with product to determine best path forward here)~~
- Sync mobile
    - action complete targeting: `!isFxASignedIn || sync.mobileDevices == 0`
    - ~~prefs to observe: [`services.sync.clients.lastSync`]~~
        - ~~Confirm this is the appropriate pref, brief specifies that *“Action is marked as completed as soon as they’ve successfully signed in or signed up”*~~

**Additonal Notes / Supplemental Work Required**
- Callout will automatically be removed if its anchor, the "Finish Setting Up" button, is removed
- Clicking the "Finish Setting Up" button should toggle showing the callout
    - If this button will no longer link to about:welcome, we’ll need to [update the AWToolbarButton code](https://searchfox.org/mozilla-central/source/browser/components/aboutwelcome/modules/AWToolbarUtils.sys.mjs) to trigger the callout message on click using `sendTriggerMessage`
    - We can use a `page_event_listener` in the Feature Callout message configuration to close the message when the user clicks the "Finish Setting Up" button ([see example here](https://searchfox.org/mozilla-central/source/browser/components/asrouter/modules/FeatureCalloutMessages.sys.mjs#565-573)).
- Callout should show on new tab after user finishes with about:welcome flow
    - We could potentially have two version of the callout message:
        - One triggered when [DID_SEE_FINAL_SCREEN_PREF](https://searchfox.org/mozilla-central/source/browser/components/aboutwelcome/actors/AboutWelcomeChild.sys.mjs#23) for about:welcome changes to true (meaning onboarding has ended)
        - One triggered by a `featureCalloutCheck` called from `AWToolbarUtils` when the "Finish Setting Up" button is clicked
    - Alternatively, we could explore adding a special message action that sends a trigger message with a configurable trigger id.
- As noted above, we may need new or updated targeting for having themes added/enabled (depending on which approach we go with)
- Currently, [only one feature callout can show at a time](https://searchfox.org/mozilla-central/source/browser/components/asrouter/modules/FeatureCalloutBroker.sys.mjs#82-85).
Investigate triggering and marking completion of actions to be used in a new onboarding "Set Up" checklist template for Feature Callout. This will support experimentation slotted for Fx131.

[Experiment spec with description of checklist actions](https://docs.google.com/document/d/180BI3yO7pA2dVwvXBiezy8Fj_D75V6zo5iHhvMLGjEA/edit#heading=h.ganlbxwxxmz)

---
**Initial findings / proposed approach (updated 7.15.24)**

**Add a New Action List Component**
- We have a [MultiAction component](https://searchfox.org/mozilla-central/source/browser/components/aboutwelcome/content-src/components/MultiSelect.jsx) in about:welcome which is useful for reference, but too different to be repurposed for this use case
- First use case is in the FeatureCallout surface
- Includes a progress bar the reflects percentage of action items completed
		- Updates when an item is checked due to user click ~~OR pref change~~
- Component should display a list of items, each of which is a button that:
	- can trigger a special message action
		- shows a visual “checked” indicator if the action is complete
		- is disabled if checked (no action arrow)
	- can be configured to initially show as checked (complete) or unchecked based on a targeting string
	- can be configured to be marked complete by:
		- user clicking the item
		- [no longer required] ~~OR a reevaluation of the targeting string triggered by a pref change~~
			- ~~we can allow a configurable list of prefs to watch per action item~~
			- ~~For each pref, register a pref observer~~
				- ~~Create a method in AboutWelcomeChild to handle this, sending a content message to AboutWelcomeParent to do something like: `Services.prefs.addObserver(PREF_NAME, handleChange);`~~
					- ~~`handleChange` callback can use the [evaluateScreenTargeting util](https://searchfox.org/mozilla-central/source/browser/components/aboutwelcome/modules/AWScreenUtils.sys.mjs#33-43) to determine if the action complete targeting is now true and, if so, update the checked status of the item and remove the pref observer~~
				- ~~Also clean up observers when when message dismissed / destroyed~~

**Actions for Initial Experiment**
 - Import data
    - action complete targeting:
        - All of the observed prefs below are false
            - `!(‘browser.migrate.interactions.password’|preferenceValue || ‘browser.migrate.interactions….`
    - ~~prefs to observe:~~
        - ~~[`preferenceObserver for browser.migrate.interactions.bookmarks`, `browser.migrate.interactions.passwords`, `browser.migrate.interactions.csvpasswords`, `browser.migrate.interactions.history`]~~
- Pin to taskbar
    - action complete targeting: `doesAppNeedPin`
- Set to default
    - action complete targeting: `browser.shell.checkDefaultBrowser'|preferenceValue && !isDefaultBrowser`
- Install extension & Add a theme (explore pages)
    - action complete targeting:
        - Store whether the user has visited each of these pages as messaging system prefs and use this pref value to check for completeness
        - ~~It might be fairly straight forward to do the installation gating in the first iteration~~
            - ~~New/updated targeting would be required - some options:~~
                - ~~Update `addonInfo` to include themes~~
                - ~~Add targeting for `hasThemeEnabled` or `hasThemesInstalled` or (more generally useful) `themesInfo`, similar to `addonInfo`, but filtered just to themes (discuss with product to determine best path forward here)~~
- Sync mobile
    - action complete targeting: `!isFxASignedIn || sync.mobileDevices == 0`
    - ~~prefs to observe: [`services.sync.clients.lastSync`]~~
        - ~~Confirm this is the appropriate pref, brief specifies that *“Action is marked as completed as soon as they’ve successfully signed in or signed up”*~~

**Additonal Notes / Supplemental Work Required**
- Callout will automatically be removed if its anchor, the "Finish Setting Up" button, is removed
- Clicking the "Finish Setting Up" button should toggle showing the callout
    - If this button will no longer link to about:welcome, we’ll need to [update the AWToolbarButton code](https://searchfox.org/mozilla-central/source/browser/components/aboutwelcome/modules/AWToolbarUtils.sys.mjs) to trigger the callout message on click using `sendTriggerMessage`
    - We can use a `page_event_listener` in the Feature Callout message configuration to close the message when the user clicks the "Finish Setting Up" button ([see example here](https://searchfox.org/mozilla-central/source/browser/components/asrouter/modules/FeatureCalloutMessages.sys.mjs#565-573)).
- Callout should show on new tab after user finishes with about:welcome flow
    - We could potentially have two version of the callout message:
        - One triggered when [DID_SEE_FINAL_SCREEN_PREF](https://searchfox.org/mozilla-central/source/browser/components/aboutwelcome/actors/AboutWelcomeChild.sys.mjs#23) for about:welcome changes to true (meaning onboarding has ended)
        - One triggered by a `featureCalloutCheck` called from `AWToolbarUtils` when the "Finish Setting Up" button is clicked
            - This could have special "first time" copy with something like "Click this button to view again"
    - Alternatively, we could explore adding a special message action that sends a trigger message with a configurable trigger id (see bug 1907952)
- Currently, [only one feature callout can show at a time](https://searchfox.org/mozilla-central/source/browser/components/asrouter/modules/FeatureCalloutBroker.sys.mjs#82-85).
Investigate triggering and marking completion of actions to be used in a new onboarding "Set Up" checklist template for Feature Callout. This will support experimentation slotted for Fx131.

[Experiment spec with description of checklist actions](https://docs.google.com/document/d/180BI3yO7pA2dVwvXBiezy8Fj_D75V6zo5iHhvMLGjEA/edit#heading=h.ganlbxwxxmz)

---
**Initial findings / proposed approach (updated 7.18.24)**

**Add a New Action List Component**
- We have a [MultiAction component](https://searchfox.org/mozilla-central/source/browser/components/aboutwelcome/content-src/components/MultiSelect.jsx) in about:welcome which is useful for reference, but too different to be repurposed for this use case
- First use case is in the FeatureCallout surface
- Includes a progress bar the reflects percentage of action items completed
		- Updates when an item is checked due to user click ~~OR pref change~~
- Component should display a list of items, each of which is a button that:
	- can trigger a special message action
		- shows a visual “checked” indicator if the action is complete
		- is disabled if checked (no action arrow)
	- can be configured to initially show as checked (complete) or unchecked based on a targeting string (we may be able to utilize something like  [evaluateScreenTargeting util](https://searchfox.org/mozilla-central/source/browser/components/aboutwelcome/modules/AWScreenUtils.sys.mjs#33-43) here)
	- can be configured to be marked complete by:
		- user clicking the item

**Actions for Initial Experiment**
 - Import data
    - action complete targeting:
        - All of the migration prefs are false: `!(hasMigratedBookmarks || hasMigratedCSVPasswords || hasMigratedHistory || hasMigratedPasswords)`
- Pin to taskbar
    - action complete targeting: `doesAppNeedPin`
- Set to default
    - action complete targeting: `browser.shell.checkDefaultBrowser'|preferenceValue && !isDefaultBrowser`
- Install extension & Add a theme (explore pages)
    - action complete targeting:
        - Store whether the user has visited each of these pages as messaging system prefs and use this pref value to check for completeness
- Sync mobile
    - action complete targeting: `!isFxASignedIn || sync.mobileDevices == 0`

**Additonal Notes / Supplemental Work Required**
- Callout will automatically be removed if its anchor, the "Finish Setting Up" button, is removed
- Clicking the "Finish Setting Up" button should toggle showing the callout
    - If this button will no longer link to about:welcome, we’ll need to [update the AWToolbarButton code](https://searchfox.org/mozilla-central/source/browser/components/aboutwelcome/modules/AWToolbarUtils.sys.mjs) to trigger the callout message on click using `sendTriggerMessage`
    - We can use a `page_event_listener` in the Feature Callout message configuration to close the message when the user clicks the "Finish Setting Up" button ([see example here](https://searchfox.org/mozilla-central/source/browser/components/asrouter/modules/FeatureCalloutMessages.sys.mjs#565-573)).
- Callout should show on new tab after user finishes with about:welcome flow
    - We could potentially have two version of the callout message:
        - One triggered when [DID_SEE_FINAL_SCREEN_PREF](https://searchfox.org/mozilla-central/source/browser/components/aboutwelcome/actors/AboutWelcomeChild.sys.mjs#23) for about:welcome changes to true (meaning onboarding has ended)
        - One triggered by a `featureCalloutCheck` called from `AWToolbarUtils` when the "Finish Setting Up" button is clicked
            - This could have special "first time" copy with something like "Click this button to view again"
    - Alternatively, we could explore adding a special message action that sends a trigger message with a configurable trigger id (see bug 1907952)
- Currently, [only one feature callout can show at a time](https://searchfox.org/mozilla-central/source/browser/components/asrouter/modules/FeatureCalloutBroker.sys.mjs#82-85).
Investigate triggering and marking completion of actions to be used in a new onboarding "Set Up" checklist template for Feature Callout. This will support experimentation slotted for Fx131.

[Experiment spec with description of checklist actions](https://docs.google.com/document/d/180BI3yO7pA2dVwvXBiezy8Fj_D75V6zo5iHhvMLGjEA/edit#heading=h.ganlbxwxxmz)

---
**Initial findings / proposed approach (updated 7.18.24)**

**Add a New Action List Component**
- We have a [MultiAction component](https://searchfox.org/mozilla-central/source/browser/components/aboutwelcome/content-src/components/MultiSelect.jsx) in about:welcome which is useful for reference, but too different to be repurposed for this use case
- First use case is in the FeatureCallout surface
- Includes a progress bar the reflects percentage of action items completed
		- Updates when an item is checked due to user click ~~OR pref change~~
- Component should display a list of items, each of which is a button that:
	- can trigger a special message action
		- shows a visual “checked” indicator if the action is complete
		- is disabled if checked (no action arrow)
	- can be configured to initially show as checked (complete) or unchecked based on a targeting string (we may be able to utilize something like  [evaluateScreenTargeting util](https://searchfox.org/mozilla-central/source/browser/components/aboutwelcome/modules/AWScreenUtils.sys.mjs#33-43) here)
	- can be configured to be marked complete by:
		- user clicking the item

**Actions for Initial Experiment**
 - Import data
    - action complete targeting:
        - All of the migration prefs are false: `!(hasMigratedBookmarks || hasMigratedCSVPasswords || hasMigratedHistory || hasMigratedPasswords)`
- Pin to taskbar
    - action complete targeting: `doesAppNeedPin`
- Set to default
    - action complete targeting: `browser.shell.checkDefaultBrowser'|preferenceValue && !isDefaultBrowser`
- Install extension & Add a theme (explore pages)
    - action complete targeting:
        - Store whether the user has visited each of these pages as messaging system prefs and use this pref value to check for completeness
- Sync mobile
    - action complete targeting: `!isFxASignedIn || sync.mobileDevices == 0`

**Additonal Notes / Supplemental Work Required**
- Callout will automatically be removed if its anchor, the "Finish Setting Up" button, is removed
- Clicking the "Finish Setting Up" button should toggle showing the callout
    - If this button will no longer link to about:welcome, we’ll need to [update the AWToolbarButton code](https://searchfox.org/mozilla-central/source/browser/components/aboutwelcome/modules/AWToolbarUtils.sys.mjs) to trigger the callout message on click using `sendTriggerMessage`
    - We can use a `page_event_listener` in the Feature Callout message configuration to close the message when the user clicks the "Finish Setting Up" button ([see example here](https://searchfox.org/mozilla-central/source/browser/components/asrouter/modules/FeatureCalloutMessages.sys.mjs#565-573)).
- Callout should show on new tab after user finishes with about:welcome flow
    - We could potentially have two version of the callout message:
        - One triggered when [DID_SEE_FINAL_SCREEN_PREF](https://searchfox.org/mozilla-central/source/browser/components/aboutwelcome/actors/AboutWelcomeChild.sys.mjs#23) for about:welcome changes to true (meaning onboarding has ended)
        - One triggered by a `featureCalloutCheck` called from `AWToolbarUtils` when the "Finish Setting Up" button is clicked
            - This could have special "first time" copy with something like "Click this button to view again"
    - Alternatively, we could explore adding a special message action that sends a trigger message with a configurable trigger id (see bug 1907952)
- Currently, [only one feature callout can show at a time](https://searchfox.org/mozilla-central/source/browser/components/asrouter/modules/FeatureCalloutBroker.sys.mjs#82-85).
- Some targeting attributes, like `doesAppNeedPin` and `isDefaultBrowser` are cached (see [here](https://searchfox.org/mozilla-central/source/browser/components/asrouter/modules/ASRouterTargeting.sys.mjs#301), so we may need to exposure uncached versions of these noting any negative impacts on perceived performance.
Investigate triggering and marking completion of actions to be used in a new onboarding "Set Up" checklist template for Feature Callout. This will support experimentation slotted for Fx131.

[Experiment spec with description of checklist actions](https://docs.google.com/document/d/180BI3yO7pA2dVwvXBiezy8Fj_D75V6zo5iHhvMLGjEA/edit#heading=h.ganlbxwxxmz)

---
**Initial findings / proposed approach (updated 7.18.24)**

**Add a New Action List Component**
- We have a [MultiAction component](https://searchfox.org/mozilla-central/source/browser/components/aboutwelcome/content-src/components/MultiSelect.jsx) in about:welcome which is useful for reference, but too different to be repurposed for this use case
- First use case is in the FeatureCallout surface
- Includes a progress bar the reflects percentage of action items completed
    - Updates when an item is checked due to user click
- Component should display a list of items, each of which is a button that:
	- can trigger a special message action
		- shows a visual “checked” indicator if the action is complete
		- is disabled if checked (no action arrow)
	- can be configured to initially show as checked (complete) or unchecked based on a targeting string (see [prototype patch](https://bugzilla.mozilla.org/attachment.cgi?id=9413502))
	- can be configured to be marked complete by:
		- user clicking the item

**Actions for Initial Experiment**
 - Import data action complete targeting:
    - All of the migration prefs are false: `!(hasMigratedBookmarks || hasMigratedCSVPasswords || hasMigratedHistory || hasMigratedPasswords)`
- Pin to taskbar action complete targeting: 
    - `doesAppNeedPin`
- Set to default action complete targeting: 
    - `browser.shell.checkDefaultBrowser'|preferenceValue && !isDefaultBrowser`
- Install extension & Add a theme (explore pages) action complete targeting:
    - Store whether the user has visited each of these pages as messaging system prefs and use this pref value to check for completeness
- Sync mobile action complete targeting: 
    - `!isFxASignedIn || sync.mobileDevices == 0`

**Additonal Notes / Supplemental Work Required**
- Callout will automatically be removed if its anchor, the "Finish Setting Up" button, is removed
- Clicking the "Finish Setting Up" button should toggle showing the callout
    - If this button will no longer link to about:welcome, we’ll need to [update the AWToolbarButton code](https://searchfox.org/mozilla-central/source/browser/components/aboutwelcome/modules/AWToolbarUtils.sys.mjs) to trigger the callout message on click using `sendTriggerMessage`
    - We can use a `page_event_listener` in the Feature Callout message configuration to close the message when the user clicks the "Finish Setting Up" button ([see example here](https://searchfox.org/mozilla-central/source/browser/components/asrouter/modules/FeatureCalloutMessages.sys.mjs#565-573)).
- Callout should show on new tab after user finishes with about:welcome flow
    - We could potentially have two version of the callout message:
        - One triggered when [DID_SEE_FINAL_SCREEN_PREF](https://searchfox.org/mozilla-central/source/browser/components/aboutwelcome/actors/AboutWelcomeChild.sys.mjs#23) for about:welcome changes to true (meaning onboarding has ended)
        - One triggered by a `featureCalloutCheck` called from `AWToolbarUtils` when the "Finish Setting Up" button is clicked
            - This could have special "first time" copy with something like "Click this button to view again"
    - Alternatively, we could explore adding a special message action that sends a trigger message with a configurable trigger id (see bug 1907952)
- Currently, [only one feature callout can show at a time](https://searchfox.org/mozilla-central/source/browser/components/asrouter/modules/FeatureCalloutBroker.sys.mjs#82-85).
- Some targeting attributes, like `doesAppNeedPin` and `isDefaultBrowser` are cached (see [here](https://searchfox.org/mozilla-central/source/browser/components/asrouter/modules/ASRouterTargeting.sys.mjs#301), so we may need to exposure uncached versions of these noting any negative impacts on perceived performance (see [attached patch](https://bugzilla.mozilla.org/attachment.cgi?id=9413502)).
- We would like to capture when items are marked as "complete" in telemetry, but we'll no longer be listening for pref changes in real-time. So, we can explore other options for reporting the complete state of items.
Investigate triggering and marking completion of actions to be used in a new onboarding "Set Up" checklist template for Feature Callout. This will support experimentation slotted for Fx131.

[Experiment spec with description of checklist actions](https://docs.google.com/document/d/180BI3yO7pA2dVwvXBiezy8Fj_D75V6zo5iHhvMLGjEA/edit#heading=h.ganlbxwxxmz)

---
**Initial findings / proposed approach (updated 7.18.24)**

**Add a New Action List Component**
- We have a [MultiAction component](https://searchfox.org/mozilla-central/source/browser/components/aboutwelcome/content-src/components/MultiSelect.jsx) in about:welcome which is useful for reference, but too different to be repurposed for this use case
- First use case is in the FeatureCallout surface
- Includes a progress bar the reflects percentage of action items completed
    - Updates when an item is checked due to user click
- Component should display a list of items, each of which is a button that:
	- can trigger a special message action
		- shows a visual “checked” indicator if the action is complete
		- is disabled if checked (no action arrow)
	- can be configured to initially show as checked (complete) or unchecked based on a targeting string (see [prototype patch](https://bugzilla.mozilla.org/attachment.cgi?id=9413502))
	- can be configured to be marked complete by:
		- user clicking the item

**Actions for Initial Experiment**
 - Import data action complete targeting:
    - All of the migration prefs are false: `!(hasMigratedBookmarks || hasMigratedCSVPasswords || hasMigratedHistory || hasMigratedPasswords)`
- Pin to taskbar action complete targeting: 
    - `doesAppNeedPin`
- Set to default action complete targeting: 
    - `'browser.shell.checkDefaultBrowser'|preferenceValue && !isDefaultBrowser`
- Install extension & Add a theme (explore pages) action complete targeting:
    - Store whether the user has visited each of these pages as messaging system prefs and use this pref value to check for completeness
- Sync mobile action complete targeting: 
    - `!isFxASignedIn || sync.mobileDevices == 0`

**Additonal Notes / Supplemental Work Required**
- Callout will automatically be removed if its anchor, the "Finish Setting Up" button, is removed
- Clicking the "Finish Setting Up" button should toggle showing the callout
    - If this button will no longer link to about:welcome, we’ll need to [update the AWToolbarButton code](https://searchfox.org/mozilla-central/source/browser/components/aboutwelcome/modules/AWToolbarUtils.sys.mjs) to trigger the callout message on click using `sendTriggerMessage`
    - We can use a `page_event_listener` in the Feature Callout message configuration to close the message when the user clicks the "Finish Setting Up" button ([see example here](https://searchfox.org/mozilla-central/source/browser/components/asrouter/modules/FeatureCalloutMessages.sys.mjs#565-573)).
- Callout should show on new tab after user finishes with about:welcome flow
    - We could potentially have two version of the callout message:
        - One triggered when [DID_SEE_FINAL_SCREEN_PREF](https://searchfox.org/mozilla-central/source/browser/components/aboutwelcome/actors/AboutWelcomeChild.sys.mjs#23) for about:welcome changes to true (meaning onboarding has ended)
        - One triggered by a `featureCalloutCheck` called from `AWToolbarUtils` when the "Finish Setting Up" button is clicked
            - This could have special "first time" copy with something like "Click this button to view again"
    - Alternatively, we could explore adding a special message action that sends a trigger message with a configurable trigger id (see bug 1907952)
- Currently, [only one feature callout can show at a time](https://searchfox.org/mozilla-central/source/browser/components/asrouter/modules/FeatureCalloutBroker.sys.mjs#82-85).
- Some targeting attributes, like `doesAppNeedPin` and `isDefaultBrowser` are cached (see [here](https://searchfox.org/mozilla-central/source/browser/components/asrouter/modules/ASRouterTargeting.sys.mjs#301), so we may need to exposure uncached versions of these noting any negative impacts on perceived performance (see [attached patch](https://bugzilla.mozilla.org/attachment.cgi?id=9413502)).
- We would like to capture when items are marked as "complete" in telemetry, but we'll no longer be listening for pref changes in real-time. So, we can explore other options for reporting the complete state of items.

Back to Bug 1901629 Comment 0