Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* 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/. */
"use strict";
const FRONTEND_URL =
add_task(async function test_webchannel_get_js_sources() {
info("Test the WebChannel GET_JS_SOURCES request functionality");
// Register some mock JS sources for testing. We already test the logic that
// retrieves the sources in other tests. This test focuses on the webchannel
// itself only.
const mockJSSources = {
"uuid-12345-1": "function testFunction() { return 42; }",
"uuid-12345-2": "console.log('Hello from source 2');",
"uuid-67890-5": "function anotherFunction() { return 'test'; }",
"uuid-67890-6": "alert('Hello world');",
};
const sourcesToRequest = ["uuid-12345-1", "uuid-12345-2", "uuid-67890-5"];
const expectedResponse = [
{ sourceText: "function testFunction() { return 42; }" },
{ sourceText: "console.log('Hello from source 2');" },
{ sourceText: "function anotherFunction() { return 'test'; }" },
];
await BrowserTestUtils.withNewTab(
{
gBrowser,
url: "about:blank",
},
async browser => {
// Register the mock sources for the current browser
BackgroundJSM.registerProfileCaptureForBrowser(
browser,
Promise.resolve(new ArrayBuffer(0)), // Mock profile result
null, // No symbolication service
mockJSSources
);
// Now navigate to the test HTML page
const url =
FRONTEND_URL +
"?testType=basic" +
"&sourceUuids=" +
encodeURIComponent(JSON.stringify(sourcesToRequest)) +
"&expectedResponse=" +
encodeURIComponent(JSON.stringify(expectedResponse));
const loaded = BrowserTestUtils.browserLoaded(browser);
BrowserTestUtils.startLoadingURIString(browser, url);
await loaded;
await waitForTabTitle("JS sources received");
ok(true, "The JS sources are successfully retrieved by the WebChannel.");
}
);
});
add_task(async function test_webchannel_get_js_sources_nonexistent() {
info("Test GET_JS_SOURCES WebChannel request with non-existent sources");
// Register some mock JS sources
const mockJSSources = {
"uuid-12345-1": "function testFunction() { return 42; }",
};
// Request non-existent sources (should return null)
const sourcesToRequest = [
"uuid-12345-999", // Non-existent UUID
"uuid-99999-1", // Non-existent UUID
];
const expectedResponse = [
{ error: "Source not found in the browser" },
{ error: "Source not found in the browser" },
];
await BrowserTestUtils.withNewTab(
{
gBrowser,
url: "about:blank",
},
async browser => {
// Register the mock sources for the current browser
BackgroundJSM.registerProfileCaptureForBrowser(
browser,
Promise.resolve(new ArrayBuffer(0)),
null,
mockJSSources
);
// Now navigate to the test HTML page
const url =
FRONTEND_URL +
"?testType=nonexistent" +
"&sourceUuids=" +
encodeURIComponent(JSON.stringify(sourcesToRequest)) +
"&expectedResponse=" +
encodeURIComponent(JSON.stringify(expectedResponse));
const loaded = BrowserTestUtils.browserLoaded(browser);
BrowserTestUtils.startLoadingURIString(browser, url);
await loaded;
await waitForTabTitle("JS sources received");
ok(
true,
"Successfully verified GET_JS_SOURCES with non-existent sources"
);
}
);
});
add_task(async function test_webchannel_get_js_sources_no_data() {
info("Test GET_JS_SOURCES WebChannel request when no data is registered");
const sourcesToRequest = ["uuid-12345-1"];
// Open a new tab without registering JS sources
await BrowserTestUtils.withNewTab(
{
gBrowser,
url: "about:blank",
},
async browser => {
// Don't register any JS sources - this should cause an error
// Now navigate to the test HTML page
const url =
FRONTEND_URL +
"?testType=no-data" +
"&sourceUuids=" +
encodeURIComponent(JSON.stringify(sourcesToRequest)) +
"&expectError=true";
const loaded = BrowserTestUtils.browserLoaded(browser);
BrowserTestUtils.startLoadingURIString(browser, url);
await loaded;
await waitForTabTitle("JS sources received");
ok(true, "Successfully verified GET_JS_SOURCES error handling");
}
);
});
add_task(async function test_webchannel_get_js_sources_invalid_request() {
info("Test GET_JS_SOURCES WebChannel request with invalid sources parameter");
await BrowserTestUtils.withNewTab(
{
gBrowser,
url: "about:blank",
},
async browser => {
// Don't need to register JS sources for this test
// For this test, we need to pass invalid sourceUuids directly in the HTML
// We'll use a special URL parameter that the HTML will use directly
const url =
FRONTEND_URL +
"?testType=invalid-request" +
"&sourceUuids=invalid_not_array" + // This is intentionally not JSON
"&expectError=true";
const loaded = BrowserTestUtils.browserLoaded(browser);
BrowserTestUtils.startLoadingURIString(browser, url);
await loaded;
await waitForTabTitle("JS sources received");
ok(true, "Successfully verified GET_JS_SOURCES invalid request handling");
}
);
});