summaryrefslogtreecommitdiffstats
path: root/browser/components/extensions/test/browser/browser_ext_tabs_sharingState.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/extensions/test/browser/browser_ext_tabs_sharingState.js')
-rw-r--r--browser/components/extensions/test/browser/browser_ext_tabs_sharingState.js110
1 files changed, 110 insertions, 0 deletions
diff --git a/browser/components/extensions/test/browser/browser_ext_tabs_sharingState.js b/browser/components/extensions/test/browser/browser_ext_tabs_sharingState.js
new file mode 100644
index 0000000000..47f2006307
--- /dev/null
+++ b/browser/components/extensions/test/browser/browser_ext_tabs_sharingState.js
@@ -0,0 +1,110 @@
+"use strict";
+
+add_task(async function test_tabs_mediaIndicators() {
+ let initialTab = gBrowser.selectedTab;
+ let tab = await BrowserTestUtils.openNewForegroundTab(
+ gBrowser,
+ "http://example.com/#tab-sharing"
+ );
+
+ // Ensure that the tab to hide is not selected (otherwise
+ // it will not be hidden because it is selected).
+ gBrowser.selectedTab = initialTab;
+
+ // updateBrowserSharing is called when a request for media icons occurs. We're
+ // just testing that extension tabs get the info and are updated when it is
+ // called.
+ gBrowser.updateBrowserSharing(tab.linkedBrowser, {
+ webRTC: {
+ sharing: "screen",
+ screen: "Window",
+ microphone: Ci.nsIMediaManagerService.STATE_CAPTURE_ENABLED,
+ camera: Ci.nsIMediaManagerService.STATE_CAPTURE_ENABLED,
+ },
+ });
+
+ async function background() {
+ let tabs = await browser.tabs.query({ url: "http://example.com/*" });
+ let testTab = tabs[0];
+
+ browser.test.assertEq(
+ testTab.url,
+ "http://example.com/#tab-sharing",
+ "Got the expected tab url"
+ );
+
+ browser.test.assertFalse(testTab.active, "test tab should not be selected");
+
+ let state = testTab.sharingState;
+ browser.test.assertTrue(state.camera, "sharing camera was turned on");
+ browser.test.assertTrue(state.microphone, "sharing mic was turned on");
+ browser.test.assertEq(state.screen, "Window", "sharing screen is window");
+
+ tabs = await browser.tabs.query({ screen: true });
+ browser.test.assertEq(tabs.length, 1, "screen sharing tab was found");
+
+ tabs = await browser.tabs.query({ screen: "Window" });
+ browser.test.assertEq(
+ tabs.length,
+ 1,
+ "screen sharing (window) tab was found"
+ );
+
+ tabs = await browser.tabs.query({ screen: "Screen" });
+ browser.test.assertEq(tabs.length, 0, "screen sharing tab was not found");
+
+ // Verify we cannot hide a sharing tab.
+ let hidden = await browser.tabs.hide(testTab.id);
+ browser.test.assertEq(hidden.length, 0, "unable to hide sharing tab");
+ tabs = await browser.tabs.query({ hidden: true });
+ browser.test.assertEq(tabs.length, 0, "unable to hide sharing tab");
+
+ browser.tabs.onUpdated.addListener(async (tabId, changeInfo, tab) => {
+ if (testTab.id !== tabId) {
+ return;
+ }
+ let state = changeInfo.sharingState;
+
+ // Ignore tab update events unrelated to the sharing state.
+ if (!state) {
+ return;
+ }
+
+ browser.test.assertFalse(state.camera, "sharing camera was turned off");
+ browser.test.assertFalse(state.microphone, "sharing mic was turned off");
+ browser.test.assertFalse(state.screen, "sharing screen was turned off");
+
+ // Verify we can hide the tab once it is not shared over webRTC anymore.
+ let hidden = await browser.tabs.hide(testTab.id);
+ browser.test.assertEq(hidden.length, 1, "tab hidden successfully");
+ tabs = await browser.tabs.query({ hidden: true });
+ browser.test.assertEq(tabs.length, 1, "hidden tab found");
+
+ browser.test.notifyPass("done");
+ });
+ browser.test.sendMessage("ready");
+ }
+
+ let extdata = {
+ manifest: { permissions: ["tabs", "tabHide"] },
+ useAddonManager: "temporary",
+ background,
+ };
+ let extension = ExtensionTestUtils.loadExtension(extdata);
+ await extension.startup();
+
+ // Test that onUpdated is called after the sharing state is changed from
+ // chrome code.
+ await extension.awaitMessage("ready");
+
+ info("Updating browser sharing on the test tab");
+
+ // Clear only the webRTC part of the browser sharing state
+ // (used to test Bug 1577480 regression fix).
+ gBrowser.updateBrowserSharing(tab.linkedBrowser, { webRTC: null });
+
+ await extension.awaitFinish("done");
+ await extension.unload();
+
+ BrowserTestUtils.removeTab(tab);
+});