diff --git a/www/mozilla-firefox/Makefile b/www/mozilla-firefox/Makefile index 3e71315087e..d04d8eb03e7 100644 --- a/www/mozilla-firefox/Makefile +++ b/www/mozilla-firefox/Makefile @@ -10,6 +10,8 @@ MOZILLA_PROJECT = firefox MOZILLA_CODENAME = browser MOZILLA_PROFDATA_TASKID = ZJmsHlaQS1eJnAogyhIejg +REVISION = 0 + WRKDIST = ${WRKDIR}/${MOZILLA_DIST}-${MOZILLA_DIST_VERSION:C/b[0-9]*//} HOMEPAGE = https://www.mozilla.org/firefox/ SO_VERSION = 163.0 diff --git a/www/mozilla-firefox/patches/patch-third_party_libwebrtc_modules_desktop_capture_linux_x11_x_server_pixel_buffer_cc b/www/mozilla-firefox/patches/patch-third_party_libwebrtc_modules_desktop_capture_linux_x11_x_server_pixel_buffer_cc index 21050cf5c33..cf66afe3090 100644 --- a/www/mozilla-firefox/patches/patch-third_party_libwebrtc_modules_desktop_capture_linux_x11_x_server_pixel_buffer_cc +++ b/www/mozilla-firefox/patches/patch-third_party_libwebrtc_modules_desktop_capture_linux_x11_x_server_pixel_buffer_cc @@ -1,19 +1,108 @@ -https://bugzil.la/1702919, fallback to ximage +Add XShm 1.2 support Index: third_party/libwebrtc/modules/desktop_capture/linux/x11/x_server_pixel_buffer.cc --- third_party/libwebrtc/modules/desktop_capture/linux/x11/x_server_pixel_buffer.cc.orig +++ third_party/libwebrtc/modules/desktop_capture/linux/x11/x_server_pixel_buffer.cc -@@ -212,7 +212,12 @@ bool XServerPixelBuffer::Init(XAtomCache* cache, Windo - void XServerPixelBuffer::InitShm(const XWindowAttributes& attributes) { - Visual* default_visual = attributes.visual; - int default_depth = attributes.depth; -- +@@ -17,6 +17,13 @@ + #include + #include + +#if defined(__OpenBSD__) -+// pledge(2) -+ RTC_LOG(LS_WARNING) << "Unable to use shmget(2) while using pledge(2). " -+ "Performance may be degraded."; -+ return; ++#include ++#include ++#include ++#include +#endif - int major, minor; - Bool have_pixmaps; - if (!XShmQueryVersion(display_, &major, &minor, &have_pixmaps)) { ++ + #include + #include + +@@ -170,13 +177,23 @@ void XServerPixelBuffer::ReleaseSharedMemorySegment() + if (!shm_segment_info_) + return; + if (xshm_attached_) { ++#if defined(__OpenBSD__) ++ xcb_shm_detach(xcb_connection_, shm_segment_info_->shmseg); ++#else + XShmDetach(display_, shm_segment_info_); ++#endif + xshm_attached_ = false; + } + if (shm_segment_info_->shmaddr != nullptr) ++#if defined(__OpenBSD__) ++ munmap(shm_segment_info_->shmaddr, shm_size_); ++#else + shmdt(shm_segment_info_->shmaddr); ++#endif + if (shm_segment_info_->shmid != -1) ++#if !defined(__OpenBSD__) + shmctl(shm_segment_info_->shmid, IPC_RMID, nullptr); ++#endif + delete shm_segment_info_; + shm_segment_info_ = nullptr; + } +@@ -224,21 +241,54 @@ void XServerPixelBuffer::InitShm(const XWindowAttribut + shm_segment_info_->shmid = -1; + shm_segment_info_->shmaddr = nullptr; + shm_segment_info_->readOnly = False; ++#if defined(__OpenBSD__) ++ shm_segment_info_->shmseg = XCB_NONE; ++#endif + x_shm_image_ = XShmCreateImage(display_, default_visual, default_depth, + ZPixmap, nullptr, shm_segment_info_, + window_rect_.width(), window_rect_.height()); + if (x_shm_image_) { ++#if defined(__OpenBSD__) ++ char name[19] = "/webrtc-XXXXXXXXXX"; ++ shm_size_ = x_shm_image_->bytes_per_line * x_shm_image_->height; ++ shm_segment_info_->shmid = shm_mkstemp(name); ++ shm_unlink(name); ++#else + shm_segment_info_->shmid = + shmget(IPC_PRIVATE, x_shm_image_->bytes_per_line * x_shm_image_->height, + IPC_CREAT | 0600); ++#endif + if (shm_segment_info_->shmid != -1) { ++#if defined(__OpenBSD__) ++ if (ftruncate(shm_segment_info_->shmid, shm_size_) < 0) { ++ close(shm_segment_info_->shmid); ++ return; ++ } ++ void* shmat_result = mmap(nullptr, shm_size_, PROT_READ | PROT_WRITE, ++ MAP_SHARED | __MAP_NOFAULT, shm_segment_info_->shmid, 0); ++ if (shmat_result == MAP_FAILED) { ++ close(shm_segment_info_->shmid); ++ return; ++ } ++#else + void* shmat_result = shmat(shm_segment_info_->shmid, nullptr, 0); ++#endif + if (shmat_result != reinterpret_cast(-1)) { + shm_segment_info_->shmaddr = reinterpret_cast(shmat_result); + x_shm_image_->data = shm_segment_info_->shmaddr; + + XErrorTrap error_trap(display_); ++#if defined(__OpenBSD__) ++ xcb_connection_ = XGetXCBConnection(display_); ++ shm_segment_info_->shmseg = xcb_generate_id(xcb_connection_); ++ xcb_void_cookie_t cookie = ++ xcb_shm_attach_fd_checked(xcb_connection_, shm_segment_info_->shmseg, ++ shm_segment_info_->shmid, 0); ++ if (xcb_request_check(xcb_connection_, cookie) == NULL) ++ xshm_attached_ = true; ++#else + xshm_attached_ = XShmAttach(display_, shm_segment_info_); ++#endif + XSync(display_, False); + if (error_trap.GetLastErrorAndDisable() != 0) + xshm_attached_ = false; +@@ -263,7 +313,9 @@ void XServerPixelBuffer::InitShm(const XWindowAttribut + if (have_pixmaps) + have_pixmaps = InitPixmaps(default_depth); + ++#if !defined(__OpenBSD__) + shmctl(shm_segment_info_->shmid, IPC_RMID, nullptr); ++#endif + shm_segment_info_->shmid = -1; + + RTC_LOG(LS_VERBOSE) << "Using X shared memory extension v" << major << "." diff --git a/www/mozilla-firefox/patches/patch-third_party_libwebrtc_modules_desktop_capture_linux_x11_x_server_pixel_buffer_h b/www/mozilla-firefox/patches/patch-third_party_libwebrtc_modules_desktop_capture_linux_x11_x_server_pixel_buffer_h new file mode 100644 index 00000000000..e45c672eaea --- /dev/null +++ b/www/mozilla-firefox/patches/patch-third_party_libwebrtc_modules_desktop_capture_linux_x11_x_server_pixel_buffer_h @@ -0,0 +1,27 @@ +XShm 1.2 support + +Index: third_party/libwebrtc/modules/desktop_capture/linux/x11/x_server_pixel_buffer.h +--- third_party/libwebrtc/modules/desktop_capture/linux/x11/x_server_pixel_buffer.h.orig ++++ third_party/libwebrtc/modules/desktop_capture/linux/x11/x_server_pixel_buffer.h +@@ -17,6 +17,10 @@ + #include + #include + ++#if defined(__OpenBSD__) ++#include ++#endif ++ + #include + #include + +@@ -84,6 +88,10 @@ class XServerPixelBuffer { + bool xshm_attached_ = false; + bool xshm_get_image_succeeded_ = false; + std::vector icc_profile_; ++#if defined(__OpenBSD__) ++ size_t shm_size_ = 0; ++ xcb_connection_t* xcb_connection_ = nullptr; ++#endif + }; + + } // namespace webrtc