forked from mirrors/gecko-dev
109 lines
3.1 KiB
JavaScript
109 lines
3.1 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
const { AddonTestUtils } = ChromeUtils.importESModule(
|
|
"resource://testing-common/AddonTestUtils.sys.mjs"
|
|
);
|
|
|
|
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
|
|
"http://test.addons.org/api/abuse/report/addon/",
|
|
],
|
|
],
|
|
});
|
|
});
|
|
|
|
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();
|
|
});
|
|
});
|