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
|
/* 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, {
AboutWelcomeTelemetry:
"resource:///modules/aboutwelcome/AboutWelcomeTelemetry.sys.mjs",
});
ChromeUtils.defineLazyGetter(
lazy,
"AWTelemetry",
() => new lazy.AboutWelcomeTelemetry()
);
export const Spotlight = {
sendUserEventTelemetry(event, message, dispatch) {
const ping = {
message_id: message.content.id,
event,
};
dispatch({
type: "SPOTLIGHT_TELEMETRY",
data: { action: "spotlight_user_event", ...ping },
});
},
defaultDispatch(message) {
if (message.type === "SPOTLIGHT_TELEMETRY") {
const { message_id, event } = message.data;
lazy.AWTelemetry.sendTelemetry({ message_id, event });
}
},
/**
* Shows spotlight tab or window modal specific to the given browser
* @param browser The browser for spotlight display
* @param message Message containing content to show
* @param dispatchCFRAction A function to dispatch resulting actions
* @return boolean value capturing if spotlight was displayed
*/
async showSpotlightDialog(browser, message, dispatch = this.defaultDispatch) {
const win = browser?.ownerGlobal;
if (!win || win.gDialogBox.isOpen) {
return false;
}
const spotlight_url = "chrome://browser/content/spotlight.html";
const dispatchCFRAction =
// This also blocks CFR impressions, which is fine for current use cases.
message.content?.metrics === "block" ? () => {} : dispatch;
// This handles `IMPRESSION` events used by ASRouter for frequency caps.
// AboutWelcome handles `IMPRESSION` events for telemetry.
this.sendUserEventTelemetry("IMPRESSION", message, dispatchCFRAction);
dispatchCFRAction({ type: "IMPRESSION", data: message });
if (message.content?.modal === "tab") {
let { closedPromise } = win.gBrowser.getTabDialogBox(browser).open(
spotlight_url,
{
features: "resizable=no",
allowDuplicateDialogs: false,
},
message.content
);
await closedPromise;
} else {
await win.gDialogBox.open(spotlight_url, message.content);
}
// If dismissed report telemetry and exit
this.sendUserEventTelemetry("DISMISS", message, dispatchCFRAction);
return true;
},
};
|