/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */ /* vim: set sts=2 sw=2 et tw=80: */ "use strict"; const HISTOGRAM = "WEBEXT_CONTENT_SCRIPT_INJECTION_MS"; const HISTOGRAM_KEYED = "WEBEXT_CONTENT_SCRIPT_INJECTION_MS_BY_ADDONID"; const server = createHttpServer(); server.registerDirectory("/data/", do_get_file("data")); const BASE_URL = `http://localhost:${server.identity.primaryPort}/data`; add_task(async function test_telemetry() { function contentScript() { browser.test.sendMessage("content-script-run"); } let extension1 = ExtensionTestUtils.loadExtension({ manifest: { content_scripts: [ { matches: ["http://*/*/file_sample.html"], js: ["content_script.js"], run_at: "document_end", }, ], }, files: { "content_script.js": contentScript, }, }); let extension2 = ExtensionTestUtils.loadExtension({ manifest: { content_scripts: [ { matches: ["http://*/*/file_sample.html"], js: ["content_script.js"], run_at: "document_end", }, ], }, files: { "content_script.js": contentScript, }, }); clearHistograms(); let process = IS_OOP ? "content" : "parent"; ok( !(HISTOGRAM in getSnapshots(process)), `No data recorded for histogram: ${HISTOGRAM}.` ); ok( !(HISTOGRAM_KEYED in getKeyedSnapshots(process)), `No data recorded for keyed histogram: ${HISTOGRAM_KEYED}.` ); await extension1.startup(); let extensionId = extension1.extension.id; info(`Started extension with id ${extensionId}`); ok( !(HISTOGRAM in getSnapshots(process)), `No data recorded for histogram after startup: ${HISTOGRAM}.` ); ok( !(HISTOGRAM_KEYED in getKeyedSnapshots(process)), `No data recorded for keyed histogram: ${HISTOGRAM_KEYED}.` ); let contentPage = await ExtensionTestUtils.loadContentPage( `${BASE_URL}/file_sample.html` ); await extension1.awaitMessage("content-script-run"); await promiseTelemetryRecorded(HISTOGRAM, process, 1); await promiseKeyedTelemetryRecorded(HISTOGRAM_KEYED, process, extensionId, 1); equal( valueSum(getSnapshots(process)[HISTOGRAM].values), 1, `Data recorded for histogram: ${HISTOGRAM}.` ); equal( valueSum(getKeyedSnapshots(process)[HISTOGRAM_KEYED][extensionId].values), 1, `Data recorded for histogram: ${HISTOGRAM_KEYED} with key ${extensionId}.` ); await contentPage.close(); await extension1.unload(); await extension2.startup(); let extensionId2 = extension2.extension.id; info(`Started extension with id ${extensionId2}`); equal( valueSum(getSnapshots(process)[HISTOGRAM].values), 1, `No new data recorded for histogram after extension2 startup: ${HISTOGRAM}.` ); equal( valueSum(getKeyedSnapshots(process)[HISTOGRAM_KEYED][extensionId].values), 1, `No new data recorded for histogram after extension2 startup: ${HISTOGRAM_KEYED} with key ${extensionId}.` ); ok( !(extensionId2 in getKeyedSnapshots(process)[HISTOGRAM_KEYED]), `No data recorded for histogram after startup: ${HISTOGRAM_KEYED} with key ${extensionId2}.` ); contentPage = await ExtensionTestUtils.loadContentPage( `${BASE_URL}/file_sample.html` ); await extension2.awaitMessage("content-script-run"); await promiseTelemetryRecorded(HISTOGRAM, process, 2); await promiseKeyedTelemetryRecorded( HISTOGRAM_KEYED, process, extensionId2, 1 ); equal( valueSum(getSnapshots(process)[HISTOGRAM].values), 2, `Data recorded for histogram: ${HISTOGRAM}.` ); equal( valueSum(getKeyedSnapshots(process)[HISTOGRAM_KEYED][extensionId].values), 1, `No new data recorded for histogram: ${HISTOGRAM_KEYED} with key ${extensionId}.` ); equal( valueSum(getKeyedSnapshots(process)[HISTOGRAM_KEYED][extensionId2].values), 1, `Data recorded for histogram: ${HISTOGRAM_KEYED} with key ${extensionId2}.` ); await contentPage.close(); await extension2.unload(); });