1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
registerCleanupFunction(function() {
gBrowser.removeCurrentTab();
});
var gTests = [
{
desc: "device sharing animation on background tabs",
run: function* checkAudioVideo() {
function* getStreamAndCheckBackgroundAnim(aAudio, aVideo, aSharing) {
// Get a stream
let popupPromise = promisePopupNotificationShown("webRTC-shareDevices");
yield promiseRequestDevice(aAudio, aVideo);
yield popupPromise;
yield expectObserverCalled("getUserMedia:request");
yield promiseMessage("ok", () => {
PopupNotifications.panel.firstChild.button.click();
});
yield expectObserverCalled("getUserMedia:response:allow");
yield expectObserverCalled("recording-device-events");
let expected = [];
if (aVideo)
expected.push("Camera");
if (aAudio)
expected.push("Microphone");
is((yield getMediaCaptureState()), expected.join("And"),
"expected stream to be shared");
// Check the attribute on the tab, and check there's no visible
// sharing icon on the tab
let tab = gBrowser.selectedTab;
is(tab.getAttribute("sharing"), aSharing,
"the tab has the attribute to show the " + aSharing + " icon");
let icon =
document.getAnonymousElementByAttribute(tab, "anonid", "sharing-icon");
is(window.getComputedStyle(icon).display, "none",
"the animated sharing icon of the tab is hidden");
// After selecting a new tab, check the attribute is still there,
// and the icon is now visible.
yield BrowserTestUtils.switchTab(gBrowser, gBrowser.addTab());
is(gBrowser.selectedTab.getAttribute("sharing"), "",
"the new tab doesn't have the 'sharing' attribute");
is(tab.getAttribute("sharing"), aSharing,
"the tab still has the 'sharing' attribute");
isnot(window.getComputedStyle(icon).display, "none",
"the animated sharing icon of the tab is now visible");
// Ensure the icon disappears when selecting the tab.
yield BrowserTestUtils.removeTab(gBrowser.selectedTab);
ok(tab.selected, "the tab with ongoing sharing is selected again");
is(window.getComputedStyle(icon).display, "none",
"the animated sharing icon is gone after selecting the tab again");
// And finally verify the attribute is removed when closing the stream.
yield closeStream();
// TODO(Bug 1304997): Fix the race in closeStream() and remove this
// promiseWaitForCondition().
yield promiseWaitForCondition(() => !tab.getAttribute("sharing"));
is(tab.getAttribute("sharing"), "",
"the tab no longer has the 'sharing' attribute after closing the stream");
}
yield getStreamAndCheckBackgroundAnim(true, true, "camera");
yield getStreamAndCheckBackgroundAnim(false, true, "camera");
yield getStreamAndCheckBackgroundAnim(true, false, "microphone");
}
}
];
function test() {
waitForExplicitFinish();
let tab = gBrowser.addTab();
gBrowser.selectedTab = tab;
let browser = tab.linkedBrowser;
browser.messageManager.loadFrameScript(CONTENT_SCRIPT_HELPER, true);
browser.addEventListener("load", function onload() {
browser.removeEventListener("load", onload, true);
is(PopupNotifications._currentNotifications.length, 0,
"should start the test without any prior popup notification");
Task.spawn(function* () {
yield SpecialPowers.pushPrefEnv({"set": [[PREF_PERMISSION_FAKE, true]]});
for (let test of gTests) {
info(test.desc);
yield test.run();
}
}).then(finish, ex => {
Cu.reportError(ex);
ok(false, "Unexpected Exception: " + ex);
finish();
});
}, true);
let rootDir = getRootDirectory(gTestPath);
rootDir = rootDir.replace("chrome://mochitests/content/",
"https://example.com/");
content.location = rootDir + "get_user_media.html";
}
|