From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- .../extensions/test/browser/browser_ext_webrtc.js | 131 +++++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 browser/components/extensions/test/browser/browser_ext_webrtc.js (limited to 'browser/components/extensions/test/browser/browser_ext_webrtc.js') diff --git a/browser/components/extensions/test/browser/browser_ext_webrtc.js b/browser/components/extensions/test/browser/browser_ext_webrtc.js new file mode 100644 index 0000000000..520cb9cd69 --- /dev/null +++ b/browser/components/extensions/test/browser/browser_ext_webrtc.js @@ -0,0 +1,131 @@ +"use strict"; + +const { PermissionTestUtils } = ChromeUtils.importESModule( + "resource://testing-common/PermissionTestUtils.sys.mjs" +); + +add_setup(async function () { + await SpecialPowers.pushPrefEnv({ + set: [["media.navigator.permission.fake", true]], + }); +}); + +add_task(async function test_background_request() { + let extension = ExtensionTestUtils.loadExtension({ + manifest: {}, + async background() { + browser.test.onMessage.addListener(async msg => { + if (msg.type != "testGUM") { + browser.test.fail("unknown message"); + } + + await browser.test.assertRejects( + navigator.mediaDevices.getUserMedia({ audio: true }), + /The request is not allowed/, + "Calling gUM in background pages throws an error" + ); + browser.test.notifyPass("done"); + }); + }, + }); + + await extension.startup(); + + let policy = WebExtensionPolicy.getByID(extension.id); + let principal = policy.extension.principal; + // Add a permission for the extension to make sure that we throw even + // if permission was given. + PermissionTestUtils.add(principal, "microphone", Services.perms.ALLOW_ACTION); + + let finished = extension.awaitFinish("done"); + extension.sendMessage({ type: "testGUM" }); + await finished; + + PermissionTestUtils.remove(principal, "microphone"); + await extension.unload(); +}); + +let scriptPage = url => + `${url}`; + +add_task(async function test_popup_request() { + let extension = ExtensionTestUtils.loadExtension({ + manifest: { + browser_action: { + default_popup: "popup.html", + browser_style: true, + }, + }, + + files: { + "popup.html": scriptPage("popup.js"), + "popup.js": function () { + browser.test + .assertRejects( + navigator.mediaDevices.getUserMedia({ audio: true }), + /The request is not allowed/, + "Calling gUM in popup pages without permission throws an error" + ) + .then(function () { + browser.test.notifyPass("done"); + }); + }, + }, + }); + + await extension.startup(); + clickBrowserAction(extension); + await extension.awaitFinish("done"); + await extension.unload(); + + extension = ExtensionTestUtils.loadExtension({ + manifest: { + // Use the same url for background page and browserAction popup, + // to double-check that the page url is not being used to decide + // if webRTC requests should be allowed or not. + background: { page: "page.html" }, + browser_action: { + default_popup: "page.html", + browser_style: true, + }, + }, + + files: { + "page.html": scriptPage("page.js"), + "page.js": async function () { + const isBackgroundPage = + window == (await browser.runtime.getBackgroundPage()); + + if (isBackgroundPage) { + await browser.test.assertRejects( + navigator.mediaDevices.getUserMedia({ audio: true }), + /The request is not allowed/, + "Calling gUM in background pages throws an error" + ); + } else { + try { + await navigator.mediaDevices.getUserMedia({ audio: true }); + browser.test.notifyPass("done"); + } catch (err) { + browser.test.fail(`Failed with error ${err.message}`); + browser.test.notifyFail("done"); + } + } + }, + }, + }); + + // Add a permission for the extension to make sure that we throw even + // if permission was given. + await extension.startup(); + + let policy = WebExtensionPolicy.getByID(extension.id); + let principal = policy.extension.principal; + + PermissionTestUtils.add(principal, "microphone", Services.perms.ALLOW_ACTION); + clickBrowserAction(extension); + + await extension.awaitFinish("done"); + PermissionTestUtils.remove(principal, "microphone"); + await extension.unload(); +}); -- cgit v1.2.3