forked from mirrors/gecko-dev
		
	 752e716bc5
			
		
	
	
		752e716bc5
		
	
	
	
	
		
			
			Depends on D191341 Differential Revision: https://phabricator.services.mozilla.com/D191238
		
			
				
	
	
		
			74 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /* This Source Code Form is subject to the terms of the Mozilla Public
 | |
|  * License, v. 2.0. If a copy of the MPL was not distributed with this
 | |
|  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 | |
| 
 | |
| const lazy = {};
 | |
| ChromeUtils.defineESModuleGetters(lazy, {
 | |
|   TelemetryEnvironment: "resource://gre/modules/TelemetryEnvironment.sys.mjs",
 | |
|   pktApi: "chrome://pocket/content/pktApi.sys.mjs",
 | |
| });
 | |
| 
 | |
| const PREF_IMPRESSION_ID = "browser.newtabpage.activity-stream.impressionId";
 | |
| 
 | |
| export var pktTelemetry = {
 | |
|   get impressionId() {
 | |
|     if (!this._impressionId) {
 | |
|       this._impressionId = this.getOrCreateImpressionId();
 | |
|     }
 | |
|     return this._impressionId;
 | |
|   },
 | |
| 
 | |
|   // Sets or gets the impression id that's use for Pocket impressions.
 | |
|   // The impression id cannot be tied to a client id.
 | |
|   // This is the same impression id used in newtab pocket impressions.
 | |
|   getOrCreateImpressionId() {
 | |
|     let impressionId = Services.prefs.getStringPref(PREF_IMPRESSION_ID, "");
 | |
| 
 | |
|     if (!impressionId) {
 | |
|       impressionId = String(Services.uuid.generateUUID());
 | |
|       Services.prefs.setStringPref(PREF_IMPRESSION_ID, impressionId);
 | |
|     }
 | |
|     return impressionId;
 | |
|   },
 | |
| 
 | |
|   _profileCreationDate() {
 | |
|     return (
 | |
|       lazy.TelemetryEnvironment.currentEnvironment.profile.resetDate ||
 | |
|       lazy.TelemetryEnvironment.currentEnvironment.profile.creationDate
 | |
|     );
 | |
|   },
 | |
| 
 | |
|   /**
 | |
|    * Records the provided data and common pocket-button data to Glean,
 | |
|    * then submits it all in a pocket-button ping.
 | |
|    *
 | |
|    * @param eventAction - A string like "click"
 | |
|    * @param eventSource - A string like "save_button"
 | |
|    * @param eventPosition - (optional) A 0-based index.
 | |
|    *                        If falsey and not 0, is coalesced to undefined.
 | |
|    * @param model - (optional) An identifier for the machine learning model
 | |
|    *                used to generate the recommendations like "vec-bestarticle"
 | |
|    */
 | |
|   submitPocketButtonPing(
 | |
|     eventAction,
 | |
|     eventSource,
 | |
|     eventPosition = undefined,
 | |
|     model = undefined
 | |
|   ) {
 | |
|     eventPosition = eventPosition || eventPosition === 0 ? 0 : undefined;
 | |
|     Glean.pocketButton.impressionId.set(this.impressionId);
 | |
|     Glean.pocketButton.pocketLoggedInStatus.set(lazy.pktApi.isUserLoggedIn());
 | |
|     Glean.pocketButton.profileCreationDate.set(this._profileCreationDate());
 | |
| 
 | |
|     Glean.pocketButton.eventAction.set(eventAction);
 | |
|     Glean.pocketButton.eventSource.set(eventSource);
 | |
|     if (eventPosition !== undefined) {
 | |
|       Glean.pocketButton.eventPosition.set(eventPosition);
 | |
|     }
 | |
|     if (model !== undefined) {
 | |
|       Glean.pocketButton.model.set(model);
 | |
|     }
 | |
| 
 | |
|     GleanPings.pocketButton.submit();
 | |
|   },
 | |
| };
 |