Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

"use strict";
let gleanAPIs = {
gleanHelper: {
schema: "schema.json",
parent: {
scopes: ["addon_parent"],
script: "parent.js",
paths: [["gleanHelper"]],
},
child: {
scopes: ["addon_child"],
script: "child.js",
paths: [["gleanHelper"]],
},
},
};
let gleanFiles = {
"schema.json": JSON.stringify([
{
namespace: "gleanHelper",
functions: [
{
name: "testGleanTelemetryChild",
type: "function",
parameters: [],
},
{
name: "submitTestPingChild",
type: "function",
parameters: [],
},
{
name: "testGleanTelemetryParent",
type: "function",
parameters: [],
async: true,
},
{
name: "submitTestPingParent",
type: "function",
parameters: [],
async: true,
},
],
},
]),
"parent.js": () => {
/* globals ExtensionAPI */ // (also defined for use in child.js below)
this.gleanHelper = class extends ExtensionAPI {
getAPI() {
return {
gleanHelper: {
async testGleanTelemetryParent() {
Glean.testOnly.badCode.add(42);
},
async submitTestPingParent() {
GleanPings.testPing.submit();
},
},
};
}
};
},
"child.js": () => {
this.gleanHelper = class extends ExtensionAPI {
getAPI() {
return {
gleanHelper: {
testGleanTelemetryChild() {
Glean.testOnly.badCode.add(64);
},
submitTestPingChild() {
GleanPings.testPing.submit();
},
},
};
}
};
},
};
add_setup(function test_setup() {
// FOG needs a profile directory to put its data in.
do_get_profile();
// FOG needs to be initialized in order for data to flow.
Services.fog.initializeFOG();
});
// Verify access to Glean and GleanPings from extension child/parent.
add_task(async function test_glean_access_in_extension_child() {
let extension = ExtensionTestUtils.loadExtension({
isPrivileged: true,
manifest: {
experiment_apis: gleanAPIs,
},
files: gleanFiles,
async background() {
browser.gleanHelper.testGleanTelemetryChild();
browser.gleanHelper.submitTestPingChild();
await browser.gleanHelper.testGleanTelemetryParent();
await browser.gleanHelper.submitTestPingParent();
browser.test.sendMessage("done");
},
});
// Setup `testBeforeNextSubmit` callback.
let testPingSubmitted = 0;
GleanPings.testPing.testBeforeNextSubmit(() => {
Assert.equal(64, Glean.testOnly.badCode.testGetValue());
Assert.equal(
0,
testPingSubmitted,
"Test ping was submitted, callback was called from child."
);
testPingSubmitted += 1;
// Set up the callback again, this time to be invoked by the parent.
GleanPings.testPing.testBeforeNextSubmit(() => {
Assert.equal(42, Glean.testOnly.badCode.testGetValue());
Assert.equal(
1,
testPingSubmitted,
"Test ping was submitted, callback was called from parent."
);
testPingSubmitted += 1;
});
});
await extension.startup();
await extension.awaitMessage("done");
await extension.unload();
// Final check to ensure both callbacks were invoked
Assert.equal(
2,
testPingSubmitted,
"Test pings was submitted, callback was called from parent & child."
);
// Cleanup
Services.fog.testResetFOG();
});