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
|
/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
var gTests = [
{
desc: "device sharing animation on background tabs",
run: async function checkAudioVideo() {
async function getStreamAndCheckBackgroundAnim(aAudio, aVideo, aSharing) {
// Get a stream
let observerPromise = expectObserverCalled("getUserMedia:request");
let popupPromise = promisePopupNotificationShown("webRTC-shareDevices");
await promiseRequestDevice(aAudio, aVideo);
await popupPromise;
await observerPromise;
let observerPromise1 = expectObserverCalled(
"getUserMedia:response:allow"
);
let observerPromise2 = expectObserverCalled("recording-device-events");
await promiseMessage("ok", () => {
PopupNotifications.panel.firstElementChild.button.click();
});
await observerPromise1;
await observerPromise2;
let expected = {};
if (aVideo) {
expected.video = true;
}
if (aAudio) {
expected.audio = true;
}
Assert.deepEqual(
await getMediaCaptureState(),
expected,
"expected " + Object.keys(expected).join(" and ") + " 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 = tab.sharingIcon;
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.
await BrowserTestUtils.switchTab(
gBrowser,
BrowserTestUtils.addTab(gBrowser)
);
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.
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.
await closeStream();
// TODO(Bug 1304997): Fix the race in closeStream() and remove this
// TestUtils.waitForCondition().
await TestUtils.waitForCondition(() => !tab.getAttribute("sharing"));
is(
tab.getAttribute("sharing"),
"",
"the tab no longer has the 'sharing' attribute after closing the stream"
);
}
await getStreamAndCheckBackgroundAnim(true, true, "camera");
await getStreamAndCheckBackgroundAnim(false, true, "camera");
await getStreamAndCheckBackgroundAnim(true, false, "microphone");
},
},
];
add_task(async function test() {
await runTests(gTests);
});
|