Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* Any copyright is dedicated to the Public Domain.
const { AddonTestUtils } = ChromeUtils.importESModule(
);
const TESTPAGE = `${SECURE_TESTROOT}webapi_checkavailable.html`;
const ADDON_ID = "@test-extension-to-report";
AddonTestUtils.initMochitest(this);
const server = AddonTestUtils.createHttpServer({ hosts: ["test.addons.org"] });
let apiRequestHandler;
server.registerPathHandler("/api/abuse/report/addon/", (request, response) => {
apiRequestHandler(request, response);
});
add_setup(async function () {
await SpecialPowers.pushPrefEnv({
set: [
["extensions.webapi.testing", true],
[
"extensions.addonAbuseReport.url",
// eslint-disable-next-line @microsoft/sdl/no-insecure-url
],
],
});
});
add_task(async function test_mozAddonManager_sendAbuseReport() {
apiRequestHandler = (req, res) => {
res.setStatusLine(req.httpVersion, 200, "OK");
res.setHeader("Content-Type", "application/json", false);
res.write('{"ok":true}');
};
await BrowserTestUtils.withNewTab(TESTPAGE, async browser => {
const extension = ExtensionTestUtils.loadExtension({
manifest: {
name: "some extension reported",
browser_specific_settings: { gecko: { id: ADDON_ID } },
},
useAddonManager: "temporary",
});
await extension.startup();
const response = await SpecialPowers.spawn(browser, [ADDON_ID], addonId => {
const data = { some: "data" };
return content.navigator.mozAddonManager.sendAbuseReport(addonId, data);
});
Assert.deepEqual(
response,
{ ok: true },
"expected API response to be returned"
);
await extension.unload();
});
});
add_task(async function test_mozAddonManager_sendAbuseReport_error() {
apiRequestHandler = (req, res) => {
res.setStatusLine(req.httpVersion, 400, "BAD REQUEST");
};
await BrowserTestUtils.withNewTab(TESTPAGE, async browser => {
const extension = ExtensionTestUtils.loadExtension({
manifest: {
name: "some extension reported",
browser_specific_settings: { gecko: { id: ADDON_ID } },
},
useAddonManager: "temporary",
});
await extension.startup();
const webApiResult = await SpecialPowers.spawn(
browser,
[ADDON_ID],
addonId => {
const data = { some: "data" };
return content.navigator.mozAddonManager
.sendAbuseReport(addonId, data)
.then(
res => ({ gotRejection: false, result: res }),
err => ({
gotRejection: true,
message: err.message,
errorName: err.name,
isErrorInstance: err instanceof content.Error,
})
);
}
);
Assert.deepEqual(
webApiResult,
{
gotRejection: true,
message: 'ERROR_CLIENT - {"status":400,"responseText":""}',
errorName: "Error",
isErrorInstance: true,
},
"expected rejection"
);
await extension.unload();
});
});