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
|
diff --git a/browser/actors/WebRTCParent.jsm b/browser/actors/WebRTCParent.jsm
--- a/browser/actors/WebRTCParent.jsm
+++ b/browser/actors/WebRTCParent.jsm
@@ -756,6 +756,8 @@
);
menupopup.appendChild(doc.createXULElement("menuseparator"));
+ let isPipeWire = false;
+
// Build the list of 'devices'.
let monitorIndex = 1;
for (let i = 0; i < devices.length; ++i) {
@@ -783,6 +785,7 @@
// Don't mark it as scary as there's an extra confirmation step by
// PipeWire portal dialog.
if (name == PIPEWIRE_PORTAL_NAME && device.id == PIPEWIRE_ID) {
+ isPipeWire = true;
let sawcStringId = "getUserMedia.sharePipeWirePortal.label";
let item = addDeviceToList(
menupopup,
@@ -908,39 +911,41 @@
perms.EXPIRE_SESSION
);
- video.deviceId = deviceId;
- let constraints = {
- video: { mediaSource: type, deviceId: { exact: deviceId } },
- };
- chromeWin.navigator.mediaDevices.getUserMedia(constraints).then(
- stream => {
- if (video.deviceId != deviceId) {
- // The user has selected a different device or closed the panel
- // before getUserMedia finished.
- stream.getTracks().forEach(t => t.stop());
- return;
+ if (!isPipeWire) {
+ video.deviceId = deviceId;
+ let constraints = {
+ video: { mediaSource: type, deviceId: { exact: deviceId } },
+ };
+ chromeWin.navigator.mediaDevices.getUserMedia(constraints).then(
+ stream => {
+ if (video.deviceId != deviceId) {
+ // The user has selected a different device or closed the panel
+ // before getUserMedia finished.
+ stream.getTracks().forEach(t => t.stop());
+ return;
+ }
+ video.srcObject = stream;
+ video.stream = stream;
+ doc.getElementById("webRTC-preview").hidden = false;
+ video.onloadedmetadata = function(e) {
+ video.play();
+ };
+ },
+ err => {
+ if (
+ err.name == "OverconstrainedError" &&
+ err.constraint == "deviceId"
+ ) {
+ // Window has disappeared since enumeration, which can happen.
+ // No preview for you.
+ return;
+ }
+ Cu.reportError(
+ `error in preview: ${err.message} ${err.constraint}`
+ );
}
- video.srcObject = stream;
- video.stream = stream;
- doc.getElementById("webRTC-preview").hidden = false;
- video.onloadedmetadata = function(e) {
- video.play();
- };
- },
- err => {
- if (
- err.name == "OverconstrainedError" &&
- err.constraint == "deviceId"
- ) {
- // Window has disappeared since enumeration, which can happen.
- // No preview for you.
- return;
- }
- Cu.reportError(
- `error in preview: ${err.message} ${err.constraint}`
- );
- }
- );
+ );
+ }
};
menupopup.addEventListener("command", menupopup._commandEventListener);
}
|