summaryrefslogtreecommitdiff
path: root/pw6.patch
diff options
context:
space:
mode:
Diffstat (limited to 'pw6.patch')
-rw-r--r--pw6.patch75
1 files changed, 75 insertions, 0 deletions
diff --git a/pw6.patch b/pw6.patch
new file mode 100644
index 0000000..cc0cd7e
--- /dev/null
+++ b/pw6.patch
@@ -0,0 +1,75 @@
+diff --git a/browser/actors/WebRTCParent.jsm b/browser/actors/WebRTCParent.jsm
+--- a/browser/actors/WebRTCParent.jsm
++++ b/browser/actors/WebRTCParent.jsm
+@@ -45,6 +45,9 @@
+ "nsIOSPermissionRequest"
+ );
+
++const PIPEWIRE_PORTAL_NAME = "####_PIPEWIRE_PORTAL_####";
++const PIPEWIRE_ID = 0xaffffff;
++
+ class WebRTCParent extends JSWindowActorParent {
+ didDestroy() {
+ webrtcUI.forgetStreamsFromBrowserContext(this.browsingContext);
+@@ -774,6 +777,23 @@
+ }
+ } else {
+ name = device.name;
++ // When we share content by PipeWire add only one item to the device
++ // list. When it's selected PipeWire portal dialog is opened and
++ // user confirms actual window/screen sharing there.
++ // 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) {
++ let sawcStringId = "getUserMedia.sharePipeWirePortal.label";
++ let item = addDeviceToList(
++ menupopup,
++ stringBundle.getString(sawcStringId),
++ i,
++ type
++ );
++ item.deviceId = device.id;
++ item.mediaSource = type;
++ break;
++ }
+ if (type == "application") {
+ // The application names returned by the platform are of the form:
+ // <window count>\x1e<application name>
+diff --git a/browser/locales/en-US/chrome/browser/browser.properties b/browser/locales/en-US/chrome/browser/browser.properties
+--- a/browser/locales/en-US/chrome/browser/browser.properties
++++ b/browser/locales/en-US/chrome/browser/browser.properties
+@@ -767,6 +767,7 @@
+ getUserMedia.selectWindowOrScreen.accesskey=W
+ getUserMedia.pickWindowOrScreen.label = Select Window or Screen
+ getUserMedia.shareEntireScreen.label = Entire screen
++getUserMedia.sharePipeWirePortal.label = Use operating system settings
+ # LOCALIZATION NOTE (getUserMedia.shareMonitor.label):
+ # %S is screen number (digits 1, 2, etc)
+ # Example: Screen 1, Screen 2,..
+diff --git a/third_party/libwebrtc/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.cc b/third_party/libwebrtc/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.cc
+--- a/third_party/libwebrtc/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.cc
++++ b/third_party/libwebrtc/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.cc
+@@ -898,17 +898,17 @@
+ callback_->OnCaptureResult(Result::SUCCESS, std::move(result));
+ }
+
++#define PIPEWIRE_ID 0xaffffff
++#define PIPEWIRE_NAME "####_PIPEWIRE_PORTAL_####"
++
+ bool BaseCapturerPipeWire::GetSourceList(SourceList* sources) {
+- RTC_DCHECK(sources->size() == 0);
+- // List of available screens is already presented by the xdg-desktop-portal.
+- // But we have to add an empty source as the code expects it.
+- sources->push_back({0});
++ sources->push_back({PIPEWIRE_ID, 0, PIPEWIRE_NAME});
+ return true;
+ }
+
+ bool BaseCapturerPipeWire::SelectSource(SourceId id) {
+ // Screen selection is handled by the xdg-desktop-portal.
+- return true;
++ return id == PIPEWIRE_ID;
+ }
+
+ // static
+
bgstack15