forked from mirrors/gecko-dev
		
	Bug 1634054 - Document trigger and button actions for CFRs r=k88hudson
Differential Revision: https://phabricator.services.mozilla.com/D73269
This commit is contained in:
		
							parent
							
								
									65ea880202
								
							
						
					
					
						commit
						dd545d38b7
					
				
					 5 changed files with 187 additions and 7 deletions
				
			
		|  | @ -96,4 +96,3 @@ Detailed Docs | |||
|   first-run | ||||
|   targeting-attributes | ||||
|   targeting-guide | ||||
|   user-actions | ||||
|  |  | |||
|  | @ -0,0 +1,94 @@ | |||
| # Trigger Listeners | ||||
| 
 | ||||
| A set of action listeners that can be used to trigger CFR messages. | ||||
| 
 | ||||
| ## Usage | ||||
| 
 | ||||
| [As part of the CFR definition](https://searchfox.org/mozilla-central/rev/2bfe3415fb3a2fba9b1c694bc0b376365e086927/browser/components/newtab/lib/CFRMessageProvider.jsm#194) the message can register at most one trigger used to decide when the message is shown. | ||||
| 
 | ||||
| Most triggers (unless otherwise specified) take the same arguments of `hosts` and/or `patterns` | ||||
| used to target the message to specific websites. | ||||
| 
 | ||||
| ```javascript | ||||
| // Optional set of hosts to filter out triggers only to certain websites | ||||
| let params: string[]; | ||||
| // Optional set of [match patterns](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Match_patterns) to filter out triggers only to certain websites | ||||
| let patterns: string[]; | ||||
| ``` | ||||
| 
 | ||||
| ```javascript | ||||
| { | ||||
|   ... | ||||
|   // Show the message when opening mozilla.org | ||||
|   "trigger": { "id": "openURL", "params": ["mozilla.org", "www.mozilla.org"] } | ||||
|   ... | ||||
| } | ||||
| ``` | ||||
| 
 | ||||
| ```javascript | ||||
| { | ||||
|   ... | ||||
|   // Show the message when opening any HTTP, HTTPS URL. | ||||
|   trigger: { id: "openURL", patterns: ["*://*/*"] } | ||||
|   ... | ||||
| } | ||||
| ``` | ||||
| 
 | ||||
| ## Available trigger actions | ||||
| 
 | ||||
| ### `openArticleURL` | ||||
| 
 | ||||
| Happens when the user loads a Reader Mode compatible webpage. | ||||
| 
 | ||||
| ### `openBookmarkedURL` | ||||
| 
 | ||||
| Happens when the user bookmarks or navigates to a bookmarked URL. | ||||
| 
 | ||||
| Does not filter by host or patterns. | ||||
| 
 | ||||
| ### `frequentVisits` | ||||
| 
 | ||||
| Happens every time a user navigates (or switches tab to) to any of the `hosts` or `patterns` arguments | ||||
| provided. Additionally it stores timestamps of these visits that are provided back to the targeting context. | ||||
| They can be used inside of the targeting expression: | ||||
| 
 | ||||
| ```javascript | ||||
| // Has at least 3 visits in the past hour | ||||
| recentVisits[.timestamp > (currentDate|date - 3600 * 1000 * 1)]|length >= 3 | ||||
| 
 | ||||
| ``` | ||||
| 
 | ||||
| ```typescript | ||||
| interface visit { | ||||
|   host: string, | ||||
|   timestamp: UnixTimestamp | ||||
| }; | ||||
| // Host and timestamp for every visit to "Host" | ||||
| let recentVisits: visit[]; | ||||
| ``` | ||||
| 
 | ||||
| ### `openURL` | ||||
| 
 | ||||
| Happens every time the user loads a new URL that matches the provided `hosts` or `patterns`. | ||||
| 
 | ||||
| ### `newSavedLogin` | ||||
| 
 | ||||
| Happens every time the user saves or updates a login via the login capture doorhanger. | ||||
| Provides a `type` to diferentiate between the two events that can be used in targeting. | ||||
| 
 | ||||
| Does not filter by host or patterns. | ||||
| 
 | ||||
| ```typescript | ||||
| let type = "update" | "save"; | ||||
| ``` | ||||
| 
 | ||||
| ### `contentBlocking` | ||||
| 
 | ||||
| Happens every time there is a content blocked event. Provides a context of the | ||||
| number of pages loaded in the current browsing session that can be used in targeting. | ||||
| 
 | ||||
| Does not filter by host or patterns. | ||||
| 
 | ||||
| ```typescript | ||||
| let pageLoad = number; | ||||
| ``` | ||||
|  | @ -45,7 +45,13 @@ Example: | |||
| 
 | ||||
| ### `OPEN_ABOUT_PAGE` | ||||
| 
 | ||||
| * args: `string` (a valid about page without the `about:` prefix) | ||||
| * args: | ||||
| ```ts | ||||
| { | ||||
|   args: string, // (a valid about page without the `about:` prefix) | ||||
|   entrypoint?: string, // URL search param used for referrals | ||||
| } | ||||
| ``` | ||||
| 
 | ||||
| Opens a given about page | ||||
| 
 | ||||
|  | @ -60,7 +66,11 @@ Example: | |||
| 
 | ||||
| ### `OPEN_PREFERENCES_PAGE` | ||||
| 
 | ||||
| * args: `string` (a category accessible via a `#`) | ||||
| * args: | ||||
| ``` | ||||
| { | ||||
|   args?: string, // (a category accessible via a `#`) | ||||
|   entrypoint?: string // URL search param used to referrals | ||||
| 
 | ||||
| Opens `about:preferences` with an optional category accessible via a `#` in the URL (e.g. `about:preferences#home`). | ||||
| 
 | ||||
|  | @ -107,7 +117,7 @@ Pins the currently focused tab. | |||
| 
 | ||||
| Opens an oauth flow to enable Firefox Monitor at a given `url` and adds Firefox metrics that user given a set of `flowRequestParams`. | ||||
| 
 | ||||
| ### `url` | ||||
| #### `url` | ||||
| 
 | ||||
| The URL should start with `https://monitor.firefox.com/oauth/init` and add various metrics tags as search params, including: | ||||
| 
 | ||||
|  | @ -118,7 +128,7 @@ The URL should start with `https://monitor.firefox.com/oauth/init` and add vario | |||
| 
 | ||||
| You should verify the values of these search params with whoever is doing the data analysis (e.g. Leif Oines). | ||||
| 
 | ||||
| ### `flowRequestParams` | ||||
| #### `flowRequestParams` | ||||
| 
 | ||||
| These params are used by Firefox to add information specific to that individual user to the final oauth URL. You should include: | ||||
| 
 | ||||
|  | @ -130,7 +140,7 @@ The `entrypoint` and `form_type` values should match the encoded values in your | |||
| 
 | ||||
| You should verify the values with whoever is doing the data analysis (e.g. Leif Oines). | ||||
| 
 | ||||
| ### Example | ||||
| #### Example | ||||
| 
 | ||||
| ```json | ||||
| { | ||||
|  | @ -145,3 +155,48 @@ You should verify the values with whoever is doing the data analysis (e.g. Leif | |||
|   } | ||||
| } | ||||
| ``` | ||||
| 
 | ||||
| ### `HIGHLIGHT_FEATURE` | ||||
| 
 | ||||
| Can be used to highlight (show a light blue overlay) a certain button or part of the browser UI. | ||||
| 
 | ||||
| * args: `string` a [valid targeting defined in the UITour](https://searchfox.org/mozilla-central/rev/7fd1c1c34923ece7ad8c822bee062dd0491d64dc/browser/components/uitour/UITour.jsm#108) | ||||
| 
 | ||||
| ### `INSTALL_ADDON_FROM_URL` | ||||
| 
 | ||||
| Can be used to install an addon from addons.mozilla.org. | ||||
| 
 | ||||
| * args: | ||||
| ```ts | ||||
| { | ||||
|   url: string, | ||||
|   telemetrySource?: string | ||||
| }; | ||||
| ``` | ||||
| 
 | ||||
| ### `OPEN_PROTECTION_REPORT` | ||||
| 
 | ||||
| Opens `about:protections` | ||||
| 
 | ||||
| ### `OPEN_PROTECTION_PANEL` | ||||
| 
 | ||||
| Opens the protection panel behind on the lock icon of the awesomebar | ||||
| 
 | ||||
| ### `DISABLE_STP_DOORHANGERS` | ||||
| 
 | ||||
| Disables all Social Tracking Protection messages | ||||
| 
 | ||||
| * args: (none) | ||||
| 
 | ||||
| ### `OPEN_AWESOME_BAR` | ||||
| 
 | ||||
| Focuses and expands the awesome bar. | ||||
| 
 | ||||
| * args: (none) | ||||
| 
 | ||||
| ### `CANCEL` | ||||
| 
 | ||||
| No-op action used to dismiss CFR notifications (but not remove or block them) | ||||
| 
 | ||||
| * args: (none) | ||||
| 
 | ||||
|  | @ -3,6 +3,7 @@ prefs = | |||
|   identity.fxaccounts.remote.root=https://example.com/ | ||||
| support-files = | ||||
|   head.js | ||||
|   ../../../schemas/SpecialMessageActionSchemas.md | ||||
| 
 | ||||
| [browser_sma_open_about_page.js] | ||||
| [browser_sma_open_awesome_bar.js] | ||||
|  | @ -14,4 +15,4 @@ support-files = | |||
| [browser_sma_show_firefox_accounts.js] | ||||
| [browser_sma_show_migration_wizard.js] | ||||
| [browser_sma.js] | ||||
| 
 | ||||
| [browser_sma_docs.js] | ||||
|  |  | |||
|  | @ -0,0 +1,31 @@ | |||
| const TEST_URL = | ||||
|   "https://example.com/browser/toolkit/components/messaging-system/test/browser/specialMessageActions/SpecialMessageActionSchemas.md"; | ||||
| 
 | ||||
| const { SpecialMessageActionSchemas } = ChromeUtils.import( | ||||
|   "resource://testing-common/SpecialMessageActionSchemas.js" | ||||
| ); | ||||
| 
 | ||||
| function getHeadingsFromDocs(docs) { | ||||
|   const re = /### `(\w+)`/g; | ||||
|   const found = []; | ||||
|   let match = 1; | ||||
|   while (match) { | ||||
|     match = re.exec(docs); | ||||
|     if (match) { | ||||
|       found.push(match[1]); | ||||
|     } | ||||
|   } | ||||
|   return found; | ||||
| } | ||||
| 
 | ||||
| add_task(async function test_sma_docs() { | ||||
|   let request = await fetch(TEST_URL); | ||||
|   let docs = await request.text(); | ||||
|   let headings = getHeadingsFromDocs(docs); | ||||
|   for (let action_name of Object.keys(SpecialMessageActionSchemas)) { | ||||
|     Assert.ok( | ||||
|       headings.includes(action_name), | ||||
|       `${action_name} not found in SpecialMessageActionSchemas.md` | ||||
|     ); | ||||
|   } | ||||
| }); | ||||
		Loading…
	
		Reference in a new issue
	
	 Andrei Oprea
						Andrei Oprea