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();
|
|
},
|
|
};
|