import firefox-78.13.0-3.el9
This commit is contained in:
		
						commit
						ab0c7e4b84
					
				
							
								
								
									
										10
									
								
								.firefox.metadata
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								.firefox.metadata
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,10 @@ | ||||
| a9effcc06cf80eaa22f12c1f7d6aa4266a1c4966 SOURCES/cbindgen-vendor-0.14.3.tar.xz | ||||
| ee847b1d1c9aed9f14ec10ad6825c8ffe445b310 SOURCES/firefox-78.13.0esr.processed-source.tar.xz | ||||
| 140765234e3d4340710e09632d9af4a88ea10ba7 SOURCES/firefox-langpacks-78.13.0esr-20210805.tar.xz | ||||
| 0de63f863b158454b9429234b52ed28a397ec45c SOURCES/gtk3-private-3.22.26-1.el6.src.rpm | ||||
| e188ab1a444697bc649e223c28389d82ca94c472 SOURCES/libffi-3.0.13-18.el7_3.src.rpm | ||||
| 5715f987bc0024ce5d72993cb101b8268350033b SOURCES/nodejs-10.21.0-5.fc32.src.rpm | ||||
| 07d67c90367c3ec0d6cebc1a5793c21076d34b78 SOURCES/nspr-4.25.0-1.el8_0.src.rpm | ||||
| 223c02166b1cb9863b9f453ef687d7805a93e7af SOURCES/nss-3.53.1-3.fc32.src.rpm | ||||
| a379070abf5000cde61411c97af7e733b267a4d3 SOURCES/openssl-1.0.2k-19.6.bundle.el7_7.src.rpm | ||||
| 77fd30f7ebc12a629a31c1e252cec06af55a71fe SOURCES/yasm-1.2.0-3.el5.src.rpm | ||||
							
								
								
									
										10
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,10 @@ | ||||
| SOURCES/cbindgen-vendor-0.14.3.tar.xz | ||||
| SOURCES/firefox-78.13.0esr.processed-source.tar.xz | ||||
| SOURCES/firefox-langpacks-78.13.0esr-20210805.tar.xz | ||||
| SOURCES/gtk3-private-3.22.26-1.el6.src.rpm | ||||
| SOURCES/libffi-3.0.13-18.el7_3.src.rpm | ||||
| SOURCES/nodejs-10.21.0-5.fc32.src.rpm | ||||
| SOURCES/nspr-4.25.0-1.el8_0.src.rpm | ||||
| SOURCES/nss-3.53.1-3.fc32.src.rpm | ||||
| SOURCES/openssl-1.0.2k-19.6.bundle.el7_7.src.rpm | ||||
| SOURCES/yasm-1.2.0-3.el5.src.rpm | ||||
							
								
								
									
										70
									
								
								SOURCES/D110204-fscreen.diff
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								SOURCES/D110204-fscreen.diff
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,70 @@ | ||||
| diff -up firefox-78.9.0/widget/gtk/nsWindow.cpp.D110204-fscreen firefox-78.9.0/widget/gtk/nsWindow.cpp
 | ||||
| --- firefox-78.9.0/widget/gtk/nsWindow.cpp.D110204-fscreen	2021-03-30 13:28:56.212009697 +0200
 | ||||
| +++ firefox-78.9.0/widget/gtk/nsWindow.cpp	2021-03-30 13:37:41.925850585 +0200
 | ||||
| @@ -139,6 +139,7 @@ using namespace mozilla::widget;
 | ||||
|   | ||||
|  #include <dlfcn.h> | ||||
|  #include "nsPresContext.h" | ||||
| +#include "nsIBrowserHandler.h"
 | ||||
|   | ||||
|  using namespace mozilla; | ||||
|  using namespace mozilla::gfx; | ||||
| @@ -416,6 +417,7 @@ nsWindow::nsWindow() {
 | ||||
|    mRetryPointerGrab = false; | ||||
|    mWindowType = eWindowType_child; | ||||
|    mSizeState = nsSizeMode_Normal; | ||||
| +  mPendingFullscreen = false;
 | ||||
|    mBoundsAreValid = true; | ||||
|    mAspectRatio = 0.0f; | ||||
|    mAspectRatioSaved = 0.0f; | ||||
| @@ -3887,6 +3889,19 @@ void nsWindow::OnWindowStateEvent(GtkWid
 | ||||
|        } | ||||
|      } | ||||
|    } | ||||
| +
 | ||||
| +  // Hack to ensure window switched to fullscreen - avoid to fail when starting
 | ||||
| +  // in kiosk mode
 | ||||
| +  if (mPendingFullscreen &&
 | ||||
| +      !(aEvent->new_window_state & GDK_WINDOW_STATE_FULLSCREEN)) {
 | ||||
| +    LOG(
 | ||||
| +        ("  Window should be fullscreen, but it's not, retrying set to "
 | ||||
| +         "fullscreen.\n"));
 | ||||
| +    MakeFullScreen(true);
 | ||||
| +  } else {
 | ||||
| +    LOG(("  Window successfully switched to fullscreen, happy now\n"));
 | ||||
| +    mPendingFullscreen = false;
 | ||||
| +  }
 | ||||
|  } | ||||
|   | ||||
|  void nsWindow::ThemeChanged() { | ||||
| @@ -6010,6 +6025,19 @@ nsresult nsWindow::MakeFullScreen(bool a
 | ||||
|        } | ||||
|      } | ||||
|   | ||||
| +    // if in kiosk, ensure the fullscreen is called
 | ||||
| +    nsCOMPtr<nsIBrowserHandler> browserHandler =
 | ||||
| +        do_GetService("@mozilla.org/browser/clh;1");
 | ||||
| +    if (browserHandler) {
 | ||||
| +      bool isKiosk;
 | ||||
| +      browserHandler->GetKiosk(&isKiosk);
 | ||||
| +      if (isKiosk) {
 | ||||
| +        LOG(("  is kiosk, ensure the window switch to fullscreen\n"));
 | ||||
| +        mPendingFullscreen = true;
 | ||||
| +      }
 | ||||
| +    } else {
 | ||||
| +      LOG(("  Cannot find the browserHandler service.\n"));
 | ||||
| +    }
 | ||||
|      gtk_window_fullscreen(GTK_WINDOW(mShell)); | ||||
|    } else { | ||||
|      mSizeMode = mLastSizeMode; | ||||
| diff -up firefox-78.9.0/widget/gtk/nsWindow.h.D110204-fscreen firefox-78.9.0/widget/gtk/nsWindow.h
 | ||||
| --- firefox-78.9.0/widget/gtk/nsWindow.h.D110204-fscreen	2021-03-15 16:52:42.000000000 +0100
 | ||||
| +++ firefox-78.9.0/widget/gtk/nsWindow.h	2021-03-30 13:28:56.237009784 +0200
 | ||||
| @@ -703,6 +703,7 @@ class nsWindow final : public nsBaseWidg
 | ||||
|    nsRect mPreferredPopupRect; | ||||
|    bool mPreferredPopupRectFlushed; | ||||
|    bool mWaitingForMoveToRectCB; | ||||
| +  bool mPendingFullscreen;
 | ||||
|    LayoutDeviceIntRect mPendingSizeRect; | ||||
|   | ||||
|    /** | ||||
							
								
								
									
										24
									
								
								SOURCES/D117297-clone3.diff
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								SOURCES/D117297-clone3.diff
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,24 @@ | ||||
| diff --git a/security/sandbox/linux/SandboxFilter.cpp b/security/sandbox/linux/SandboxFilter.cpp
 | ||||
| --- a/security/sandbox/linux/SandboxFilter.cpp
 | ||||
| +++ b/security/sandbox/linux/SandboxFilter.cpp
 | ||||
| @@ -858,6 +858,9 @@
 | ||||
|        case __NR_clone: | ||||
|          return ClonePolicy(InvalidSyscall()); | ||||
|   | ||||
| +      case __NR_clone3:
 | ||||
| +        return Error(ENOSYS);
 | ||||
| +
 | ||||
|          // More thread creation. | ||||
|  #ifdef __NR_set_robust_list | ||||
|        case __NR_set_robust_list: | ||||
| @@ -1504,6 +1507,9 @@
 | ||||
|        case __NR_clone: | ||||
|          return ClonePolicy(Error(EPERM)); | ||||
|   | ||||
| +      case __NR_clone3:
 | ||||
| +        return Error(ENOSYS);
 | ||||
| +
 | ||||
|  #  ifdef __NR_fadvise64 | ||||
|        case __NR_fadvise64: | ||||
|          return Allow(); | ||||
| 
 | ||||
							
								
								
									
										681
									
								
								SOURCES/D87019-thin-vec-big-endian.diff
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										681
									
								
								SOURCES/D87019-thin-vec-big-endian.diff
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,681 @@ | ||||
| --- firefox-78.9.0/Cargo.lock.D87019-thin-vec-big-endian.diff	2021-03-18 15:53:29.520861862 +0100
 | ||||
| +++ firefox-78.9.0/Cargo.lock	2021-03-18 15:56:14.193397228 +0100
 | ||||
| @@ -4792,9 +4792,9 @@ checksum = "8eaa81235c7058867fa8c0e7314f
 | ||||
|   | ||||
|  [[package]] | ||||
|  name = "thin-vec" | ||||
| -version = "0.1.2"
 | ||||
| +version = "0.2.1"
 | ||||
|  source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| -checksum = "3a93c9ade36a827a69257925808463db46ffcf193442fad01eb9bdc1d31aed81"
 | ||||
| +checksum = "dcc760ada4a9f56fc6d0e81bd143984ebc7bb1b875a6891aa2fa613ca7394fc0"
 | ||||
|   | ||||
|  [[package]] | ||||
|  name = "thiserror" | ||||
| --- firefox-78.9.0/gfx/webrender_bindings/Cargo.toml.D87019-thin-vec-big-endian.diff	2021-03-15 16:52:33.000000000 +0100
 | ||||
| +++ firefox-78.9.0/gfx/webrender_bindings/Cargo.toml	2021-03-18 15:53:29.522861856 +0100
 | ||||
| @@ -20,7 +20,7 @@ nsstring = { path = "../../xpcom/rust/ns
 | ||||
|  bincode = "1.0" | ||||
|  uuid = { version = "0.8", features = ["v4"] } | ||||
|  fxhash = "0.2.1" | ||||
| -thin-vec = { version = "0.1.0", features = ["gecko-ffi"] }
 | ||||
| +thin-vec = { version = "0.2.1", features = ["gecko-ffi"] }
 | ||||
|  swgl = { path = "../wr/swgl" } | ||||
|   | ||||
|  [dependencies.webrender] | ||||
| --- firefox-78.9.0/intl/l10n/rust/fluent-ffi/Cargo.toml.D87019-thin-vec-big-endian.diff	2021-03-15 16:52:33.000000000 +0100
 | ||||
| +++ firefox-78.9.0/intl/l10n/rust/fluent-ffi/Cargo.toml	2021-03-18 15:53:29.524861850 +0100
 | ||||
| @@ -10,4 +10,4 @@ fluent-pseudo = "0.2"
 | ||||
|  intl-memoizer = "0.4" | ||||
|  unic-langid = "0.8" | ||||
|  nsstring = { path = "../../../../xpcom/rust/nsstring" } | ||||
| -thin-vec = { version = "0.1.0", features = ["gecko-ffi"] }
 | ||||
| +thin-vec = { version = "0.2.1", features = ["gecko-ffi"] }
 | ||||
| --- firefox-78.9.0/intl/locale/rust/fluent-langneg-ffi/Cargo.toml.D87019-thin-vec-big-endian.diff	2021-03-15 16:52:33.000000000 +0100
 | ||||
| +++ firefox-78.9.0/intl/locale/rust/fluent-langneg-ffi/Cargo.toml	2021-03-18 15:53:29.525861847 +0100
 | ||||
| @@ -9,7 +9,7 @@ edition = "2018"
 | ||||
|  nserror = { path = "../../../../xpcom/rust/nserror" } | ||||
|  nsstring = { path = "../../../../xpcom/rust/nsstring" } | ||||
|  xpcom = { path = "../../../../xpcom/rust/xpcom" } | ||||
| -thin-vec = { version = "0.1.0", features = ["gecko-ffi"] }
 | ||||
| +thin-vec = { version = "0.2.1", features = ["gecko-ffi"] }
 | ||||
|  fluent-langneg = { version = "0.12.1", features = ["cldr"] } | ||||
|  unic-langid = "0.8" | ||||
|  unic-langid-ffi = { path = "../unic-langid-ffi" } | ||||
| --- firefox-78.9.0/intl/locale/rust/unic-langid-ffi/Cargo.toml.D87019-thin-vec-big-endian.diff	2021-03-15 16:52:33.000000000 +0100
 | ||||
| +++ firefox-78.9.0/intl/locale/rust/unic-langid-ffi/Cargo.toml	2021-03-18 15:53:29.526861844 +0100
 | ||||
| @@ -9,5 +9,5 @@ edition = "2018"
 | ||||
|  nserror = { path = "../../../../xpcom/rust/nserror" } | ||||
|  nsstring = { path = "../../../../xpcom/rust/nsstring" } | ||||
|  xpcom = { path = "../../../../xpcom/rust/xpcom" } | ||||
| -thin-vec = { version = "0.1.0", features = ["gecko-ffi"] }
 | ||||
| +thin-vec = { version = "0.2.1", features = ["gecko-ffi"] }
 | ||||
|  unic-langid = { version = "0.8", features = ["likelysubtags"] } | ||||
| --- firefox-78.9.0/netwerk/socket/neqo_glue/Cargo.toml.D87019-thin-vec-big-endian.diff	2021-03-15 16:52:37.000000000 +0100
 | ||||
| +++ firefox-78.9.0/netwerk/socket/neqo_glue/Cargo.toml	2021-03-18 15:53:29.527861842 +0100
 | ||||
| @@ -14,7 +14,7 @@ neqo-common = { tag = "v0.2.4", git = "h
 | ||||
|  nserror = { path = "../../../xpcom/rust/nserror" } | ||||
|  nsstring = { path = "../../../xpcom/rust/nsstring" } | ||||
|  xpcom = { path = "../../../xpcom/rust/xpcom" } | ||||
| -thin-vec = { version = "0.1.0", features = ["gecko-ffi"] }
 | ||||
| +thin-vec = { version = "0.2.1", features = ["gecko-ffi"] }
 | ||||
|   | ||||
|  [dependencies.neqo-crypto] | ||||
|  tag = "v0.2.4" | ||||
| --- firefox-78.9.0/security/manager/ssl/cert_storage/Cargo.toml.D87019-thin-vec-big-endian.diff	2021-03-15 16:52:37.000000000 +0100
 | ||||
| +++ firefox-78.9.0/security/manager/ssl/cert_storage/Cargo.toml	2021-03-18 15:53:29.528861839 +0100
 | ||||
| @@ -18,6 +18,6 @@ rust_cascade = "0.6.0"
 | ||||
|  sha2 = "^0.8" | ||||
|  storage_variant = { path = "../../../../storage/variant" } | ||||
|  tempfile = "3" | ||||
| -thin-vec = { version = "0.1.0", features = ["gecko-ffi"] }
 | ||||
| +thin-vec = { version = "0.2.1", features = ["gecko-ffi"] }
 | ||||
|  time = "0.1" | ||||
|  xpcom = { path = "../../../../xpcom/rust/xpcom" } | ||||
| --- firefox-78.9.0/services/fxaccounts/rust-bridge/firefox-accounts-bridge/Cargo.toml.D87019-thin-vec-big-endian.diff	2021-03-15 16:52:38.000000000 +0100
 | ||||
| +++ firefox-78.9.0/services/fxaccounts/rust-bridge/firefox-accounts-bridge/Cargo.toml	2021-03-18 15:53:29.528861839 +0100
 | ||||
| @@ -20,5 +20,5 @@ nserror = { path = "../../../../xpcom/ru
 | ||||
|  nsstring = { path = "../../../../xpcom/rust/nsstring" } | ||||
|  xpcom = { path = "../../../../xpcom/rust/xpcom" } | ||||
|  storage_variant = { path = "../../../../storage/variant" } | ||||
| -thin-vec = { version = "0.1", features = ["gecko-ffi"] }
 | ||||
| +thin-vec = { version = "0.2.1", features = ["gecko-ffi"] }
 | ||||
|  fxa-client = { git = "https://github.com/mozilla/application-services", rev = "61dcc364ac0d6d0816ab88a494bbf20d824b009b", features = ["gecko"] } | ||||
| --- firefox-78.9.0/services/sync/golden_gate/Cargo.toml.D87019-thin-vec-big-endian.diff	2021-03-15 16:52:38.000000000 +0100
 | ||||
| +++ firefox-78.9.0/services/sync/golden_gate/Cargo.toml	2021-03-18 15:53:29.529861836 +0100
 | ||||
| @@ -19,5 +19,5 @@ sync15-traits = { git = "https://github.
 | ||||
|  xpcom = { path = "../../../xpcom/rust/xpcom" } | ||||
|   | ||||
|  [dependencies.thin-vec] | ||||
| -version = "0.1.0"
 | ||||
| +version = "0.2.1"
 | ||||
|  features = ["gecko-ffi"] | ||||
| --- firefox-78.9.0/third_party/rust/thin-vec/.cargo-checksum.json.D87019-thin-vec-big-endian.diff	2021-03-18 15:53:29.529861836 +0100
 | ||||
| +++ firefox-78.9.0/third_party/rust/thin-vec/.cargo-checksum.json	2021-03-18 15:57:43.631168890 +0100
 | ||||
| @@ -1 +1 @@
 | ||||
| -{"files":{"Cargo.toml":"7b164cc8a702a204a4732cb4da2940711b8e3be915c258e2a972d4874d767b4c","README.md":"c26d7101e3031e7dd8890ce938e50cad7a1e6adf7fc2f2b0d3c36b03afe68c0b","src/lib.rs":"9f2a087cabfe0b6f83818323bb9004b45fe7548c51376816fd8d4572256bd0e8","src/range.rs":"bac59bcb6230367a39c7e28ac15263e4526f966cd8c72015873017f17c115aaa"},"package":"3a93c9ade36a827a69257925808463db46ffcf193442fad01eb9bdc1d31aed81"}
 | ||||
| \ No newline at end of file | ||||
| +{"files":{"Cargo.toml":"754c05523d17eb7591c3ea2c9294e47c05fbb257fed04b78546fb2ec7cafa8b4","README.md":"c26d7101e3031e7dd8890ce938e50cad7a1e6adf7fc2f2b0d3c36b03afe68c0b","src/lib.rs":"627c6094c3f0286dba25bc73f5672c06c5061c25b01c513d213cbdda100673a2"},"package":"dcc760ada4a9f56fc6d0e81bd143984ebc7bb1b875a6891aa2fa613ca7394fc0"}
 | ||||
| --- firefox-78.9.0/third_party/rust/thin-vec/Cargo.toml.D87019-thin-vec-big-endian.diff	2021-03-15 16:52:42.000000000 +0100
 | ||||
| +++ firefox-78.9.0/third_party/rust/thin-vec/Cargo.toml	2021-03-18 15:59:34.162886751 +0100
 | ||||
| @@ -11,8 +11,9 @@
 | ||||
|  # will likely look very different (and much more reasonable) | ||||
|   | ||||
|  [package] | ||||
| +edition = "2018"
 | ||||
|  name = "thin-vec" | ||||
| -version = "0.1.2"
 | ||||
| +version = "0.2.1"
 | ||||
|  authors = ["Alexis Beingessner <a.beingessner@gmail.com>"] | ||||
|  description = "a vec that takes up less space on the stack" | ||||
|  homepage = "https://github.com/gankro/thin-vec" | ||||
| --- firefox-78.9.0/third_party/rust/thin-vec/src/lib.rs.D87019-thin-vec-big-endian.diff	2021-03-15 16:52:42.000000000 +0100
 | ||||
| +++ firefox-78.9.0/third_party/rust/thin-vec/src/lib.rs	2021-03-18 16:08:47.212871917 +0100
 | ||||
| @@ -1,47 +1,252 @@
 | ||||
| -mod range;
 | ||||
| +//! ThinVec is exactly the same as Vec, except that it stores its `len` and `capacity` in the buffer
 | ||||
| +//! it allocates.
 | ||||
| +//!
 | ||||
| +//! This makes the memory footprint of ThinVecs lower; notably in cases where space is reserved for
 | ||||
| +//! a non-existence ThinVec<T>. So `Vec<ThinVec<T>>` and `Option<ThinVec<T>>::None` will waste less
 | ||||
| +//! space. Being pointer-sized also means it can be passed/stored in registers.
 | ||||
| +//!
 | ||||
| +//! Of course, any actually constructed ThinVec will theoretically have a bigger allocation, but
 | ||||
| +//! the fuzzy nature of allocators means that might not actually be the case.
 | ||||
| +//!
 | ||||
| +//! Properties of Vec that are preserved:
 | ||||
| +//! * `ThinVec::new()` doesn't allocate (it points to a statically allocated singleton)
 | ||||
| +//! * reallocation can be done in place
 | ||||
| +//! * `size_of::<ThinVec<T>>()` == `size_of::<Option<ThinVec<T>>>()`
 | ||||
| +//!
 | ||||
| +//! Properties of Vec that aren't preserved:
 | ||||
| +//! * `ThinVec<T>` can't ever be zero-cost roundtripped to a `Box<[T]>`, `String`, or `*mut T`
 | ||||
| +//! * `from_raw_parts` doesn't exist
 | ||||
| +//! * ThinVec currently doesn't bother to not-allocate for Zero Sized Types (e.g. `ThinVec<()>`),
 | ||||
| +//!   but it could be done if someone cared enough to implement it.
 | ||||
| +//!
 | ||||
| +//!
 | ||||
| +//!
 | ||||
| +//! # Gecko FFI
 | ||||
| +//!
 | ||||
| +//! If you enable the gecko-ffi feature, ThinVec will verbatim bridge with the nsTArray type in
 | ||||
| +//! Gecko (Firefox). That is, ThinVec and nsTArray have identical layouts *but not ABIs*, 
 | ||||
| +//! so nsTArrays/ThinVecs an be natively manipulated by C++ and Rust, and ownership can be 
 | ||||
| +//! transferred across the FFI boundary (**IF YOU ARE CAREFUL, SEE BELOW!!**).
 | ||||
| +//!
 | ||||
| +//! While this feature is handy, it is also inherently dangerous to use because Rust and C++ do not
 | ||||
| +//! know about eachother. Specifically, this can be an issue with non-POD types (types which
 | ||||
| +//! have destructors, move constructors, or are `!Copy`).
 | ||||
| +//!
 | ||||
| +//! ## Do Not Pass By Value
 | ||||
| +//!
 | ||||
| +//! The biggest thing to keep in mind is that **FFI functions cannot pass ThinVec/nsTArray 
 | ||||
| +//! by-value**. That is, these are busted APIs:
 | ||||
| +//!
 | ||||
| +//! ```rust,ignore
 | ||||
| +//! // BAD WRONG
 | ||||
| +//! extern fn process_data(data: ThinVec<u32>) { ... }
 | ||||
| +//! // BAD WRONG
 | ||||
| +//! extern fn get_data() -> ThinVec<u32> { ... }
 | ||||
| +//! ```
 | ||||
| +//!
 | ||||
| +//! You must instead pass by-reference:
 | ||||
| +//!
 | ||||
| +//! ```rust
 | ||||
| +//! # use thin_vec::*;
 | ||||
| +//! # use std::mem;
 | ||||
| +//!
 | ||||
| +//! // Read-only access, ok!
 | ||||
| +//! extern fn process_data(data: &ThinVec<u32>) {
 | ||||
| +//!     for val in data {
 | ||||
| +//!         println!("{}", val);
 | ||||
| +//!     }
 | ||||
| +//! }
 | ||||
| +//! 
 | ||||
| +//! // Replace with empty instance to take ownership, ok!
 | ||||
| +//! extern fn consume_data(data: &mut ThinVec<u32>) {
 | ||||
| +//!     let owned = mem::replace(data, ThinVec::new());
 | ||||
| +//!     mem::drop(owned);
 | ||||
| +//! }
 | ||||
| +//! 
 | ||||
| +//! // Mutate input, ok!
 | ||||
| +//! extern fn add_data(dataset: &mut ThinVec<u32>) {
 | ||||
| +//!     dataset.push(37);
 | ||||
| +//!     dataset.push(12);
 | ||||
| +//! }
 | ||||
| +//! 
 | ||||
| +//! // Return via out-param, usually ok!
 | ||||
| +//! //
 | ||||
| +//! // WARNING: output must be initialized! (Empty nsTArrays are free, so just do it!)
 | ||||
| +//! extern fn get_data(output: &mut ThinVec<u32>) {
 | ||||
| +//!     *output = thin_vec![1, 2, 3, 4, 5];
 | ||||
| +//! }
 | ||||
| +//! ```
 | ||||
| +//!
 | ||||
| +//! Ignorable Explanation For Those Who Really Want To Know Why:
 | ||||
| +//!
 | ||||
| +//! > The fundamental issue is that Rust and C++ can't currently communicate about destructors, and
 | ||||
| +//! > the semantics of C++ require destructors of function arguments to be run when the function
 | ||||
| +//! > returns. Whether the callee or caller is responsible for this is also platform-specific, so
 | ||||
| +//! > trying to hack around it manually would be messy. 
 | ||||
| +//! >
 | ||||
| +//! > Also a type having a destructor changes its C++ ABI, because that type must actually exist 
 | ||||
| +//! > in memory (unlike a trivial struct, which is often passed in registers). We don't currently
 | ||||
| +//! > have a way to communicate to Rust that this is happening, so even if we worked out the
 | ||||
| +//! > destructor issue with say, MaybeUninit, it would still be a non-starter without some RFCs
 | ||||
| +//! > to add explicit rustc support.
 | ||||
| +//! >
 | ||||
| +//! > Realistically, the best answer here is to have a "heavier" bindgen that can secretly
 | ||||
| +//! > generate FFI glue so we can pass things "by value" and have it generate by-reference code
 | ||||
| +//! > behind our back (like the cxx crate does). This would muddy up debugging/searchfox though.
 | ||||
| +//!
 | ||||
| +//! ## Types Should Be Trivially Relocatable
 | ||||
| +//!
 | ||||
| +//! Types in Rust are always trivially relocatable (unless suitably borrowed/[pinned][]/hidden).
 | ||||
| +//! This means all Rust types are legal to relocate with a bitwise copy, you cannot provide
 | ||||
| +//! copy or move constructors to execute when this happens, and the old location won't have its
 | ||||
| +//! destructor run. This will cause problems for types which have a significant location
 | ||||
| +//! (types that intrusively point into themselves or have their location registered with a service).
 | ||||
| +//!
 | ||||
| +//! While relocations are generally predictable if you're very careful, **you should avoid using
 | ||||
| +//! types with significant locations with Rust FFI**.
 | ||||
| +//!
 | ||||
| +//! Specifically, ThinVec will trivially relocate its contents whenever it needs to reallocate its
 | ||||
| +//! buffer to change its capacity. This is the default reallocation strategy for nsTArray, and is
 | ||||
| +//! suitable for the vast majority of types. Just be aware of this limitation!
 | ||||
| +//!
 | ||||
| +//! ## Auto Arrays Are Dangerous
 | ||||
| +//!
 | ||||
| +//! ThinVec has *some* support for handling auto arrays which store their buffer on the stack, 
 | ||||
| +//! but this isn't well tested.
 | ||||
| +//!
 | ||||
| +//! Regardless of how much support we provide, Rust won't be aware of the buffer's limited lifetime,
 | ||||
| +//! so standard auto array safety caveats apply about returning/storing them! ThinVec won't ever
 | ||||
| +//! produce an auto array on its own, so this is only an issue for transferring an nsTArray into
 | ||||
| +//! Rust.
 | ||||
| +//!
 | ||||
| +//! ## Other Issues
 | ||||
| +//!
 | ||||
| +//! Standard FFI caveats also apply: 
 | ||||
| +//!
 | ||||
| +//!  * Rust is more strict about POD types being initialized (use MaybeUninit if you must)
 | ||||
| +//!  * `ThinVec<T>` has no idea if the C++ version of `T` has move/copy/assign/delete overloads
 | ||||
| +//!  * `nsTArray<T>` has no idea if the Rust version of `T` has a Drop/Clone impl
 | ||||
| +//!  * C++ can do all sorts of unsound things that Rust can't catch
 | ||||
| +//!  * C++ and Rust don't agree on how zero-sized/empty types should be handled
 | ||||
| +//!
 | ||||
| +//! The gecko-ffi feature will not work if you aren't linking with code that has nsTArray
 | ||||
| +//! defined. Specifically, we must share the symbol for nsTArray's empty singleton. You will get
 | ||||
| +//! linking errors if that isn't defined.
 | ||||
| +//!
 | ||||
| +//! The gecko-ffi feature also limits ThinVec to the legacy behaviors of nsTArray. Most notably,
 | ||||
| +//! nsTArray has a maximum capacity of i32::MAX (~2.1 billion items). Probably not an issue.
 | ||||
| +//! Probably.
 | ||||
| +//!
 | ||||
| +//! [pinned]: https://doc.rust-lang.org/std/pin/index.html
 | ||||
|   | ||||
|  use std::{fmt, io, ptr, mem, slice}; | ||||
|  use std::collections::Bound; | ||||
|  use std::iter::FromIterator; | ||||
|  use std::slice::IterMut; | ||||
| -use std::ops::{Deref, DerefMut};
 | ||||
| +use std::ops::{Deref, DerefMut, RangeBounds};
 | ||||
|  use std::marker::PhantomData; | ||||
|  use std::alloc::*; | ||||
|  use std::cmp::*; | ||||
|  use std::hash::*; | ||||
|  use std::borrow::*; | ||||
| -use range::RangeArgument;
 | ||||
|  use std::ptr::NonNull; | ||||
|   | ||||
| -#[cfg(not(feature = "gecko-ffi"))]
 | ||||
| -type SizeType = usize;
 | ||||
| -#[cfg(feature = "gecko-ffi")]
 | ||||
| -type SizeType = u32;
 | ||||
| +use impl_details::*;
 | ||||
|   | ||||
| -#[cfg(feature = "gecko-ffi")]
 | ||||
| -const AUTO_MASK: u32 = 1 << 31;
 | ||||
| -#[cfg(feature = "gecko-ffi")]
 | ||||
| -const CAP_MASK: u32 = !AUTO_MASK;
 | ||||
| +// modules: a simple way to cfg a whole bunch of impl details at once
 | ||||
|   | ||||
|  #[cfg(not(feature = "gecko-ffi"))] | ||||
| -const MAX_CAP: usize = !0;
 | ||||
| -#[cfg(feature = "gecko-ffi")]
 | ||||
| -const MAX_CAP: usize = i32::max_value() as usize;
 | ||||
| +mod impl_details {
 | ||||
| +    pub type SizeType = usize;
 | ||||
| +    pub const MAX_CAP: usize = !0;
 | ||||
|   | ||||
| -#[cfg(not(feature = "gecko-ffi"))]
 | ||||
| -#[inline(always)]
 | ||||
| -fn assert_size(x: usize) -> SizeType { x }
 | ||||
| +    #[inline(always)]
 | ||||
| +    pub fn assert_size(x: usize) -> SizeType { x }
 | ||||
| +}
 | ||||
|   | ||||
|  #[cfg(feature = "gecko-ffi")] | ||||
| -#[inline]
 | ||||
| -fn assert_size(x: usize) -> SizeType {
 | ||||
| -    if x > MAX_CAP as usize {
 | ||||
| -        panic!("nsTArray size may not exceed the capacity of a 32-bit sized int");
 | ||||
| +mod impl_details {
 | ||||
| +    // Support for briding a gecko nsTArray verbatim into a ThinVec.
 | ||||
| +    //
 | ||||
| +    // ThinVec can't see copy/move/delete implementations
 | ||||
| +    // from C++
 | ||||
| +    //
 | ||||
| +    // The actual layout of an nsTArray is:
 | ||||
| +    //
 | ||||
| +    // ```cpp
 | ||||
| +    // struct {
 | ||||
| +    //   uint32_t mLength;
 | ||||
| +    //   uint32_t mCapacity: 31;
 | ||||
| +    //   uint32_t mIsAutoArray: 1;
 | ||||
| +    // }
 | ||||
| +    // ```
 | ||||
| +    //
 | ||||
| +    // Rust doesn't natively support bit-fields, so we manually mask
 | ||||
| +    // and shift the bit. When the "auto" bit is set, the header and buffer
 | ||||
| +    // are actually on the stack, meaning the ThinVec pointer-to-header
 | ||||
| +    // is essentially an "owned borrow", and therefore dangerous to handle.
 | ||||
| +    // There are no safety guards for this situation.
 | ||||
| +    //
 | ||||
| +    // On little-endian platforms, the auto bit will be the high-bit of
 | ||||
| +    // our capacity u32. On big-endian platforms, it will be the low bit.
 | ||||
| +    // Hence we need some platform-specific CFGs for the necessary masking/shifting.
 | ||||
| +    // 
 | ||||
| +    // ThinVec won't ever construct an auto array. They only happen when
 | ||||
| +    // bridging from C++. This means we don't need to ever set/preserve the bit.
 | ||||
| +    // We just need to be able to read and handle it if it happens to be there.
 | ||||
| +    //
 | ||||
| +    // Handling the auto bit mostly just means not freeing/reallocating the buffer.
 | ||||
| +
 | ||||
| +    pub type SizeType = u32;
 | ||||
| +
 | ||||
| +    pub const MAX_CAP: usize = i32::max_value() as usize;
 | ||||
| +
 | ||||
| +    // Little endian: the auto bit is the high bit, and the capacity is
 | ||||
| +    // verbatim. So we just need to mask off the high bit. Note that
 | ||||
| +    // this masking is unnecessary when packing, because assert_size
 | ||||
| +    // guards against the high bit being set.
 | ||||
| +    #[cfg(target_endian = "little")]
 | ||||
| +    pub fn pack_capacity(cap: SizeType) -> SizeType {
 | ||||
| +        cap as SizeType
 | ||||
| +    }
 | ||||
| +    #[cfg(target_endian = "little")]
 | ||||
| +    pub fn unpack_capacity(cap: SizeType) -> usize {
 | ||||
| +        (cap as usize) & !(1 << 31)
 | ||||
| +    }
 | ||||
| +    #[cfg(target_endian = "little")]
 | ||||
| +    pub fn is_auto(cap: SizeType) -> bool {
 | ||||
| +        (cap & (1 << 31)) != 0
 | ||||
| +    }
 | ||||
| +
 | ||||
| +    // Big endian: the auto bit is the low bit, and the capacity is
 | ||||
| +    // shifted up one bit. Masking out the auto bit is unnecessary,
 | ||||
| +    // as rust shifts always shift in 0's for unsigned integers.
 | ||||
| +    #[cfg(target_endian = "big")]
 | ||||
| +    pub fn pack_capacity(cap: SizeType) -> SizeType {
 | ||||
| +        (cap as SizeType) << 1
 | ||||
| +    }
 | ||||
| +    #[cfg(target_endian = "big")]
 | ||||
| +    pub fn unpack_capacity(cap: SizeType) -> usize {
 | ||||
| +        (cap >> 1) as usize
 | ||||
| +    }
 | ||||
| +    #[cfg(target_endian = "big")]
 | ||||
| +    pub fn is_auto(cap: SizeType) -> bool {
 | ||||
| +        (cap & 1) != 0
 | ||||
|      } | ||||
| -    x as SizeType
 | ||||
| +
 | ||||
| +    #[inline]
 | ||||
| +    pub fn assert_size(x: usize) -> SizeType {
 | ||||
| +        if x > MAX_CAP as usize {
 | ||||
| +            panic!("nsTArray size may not exceed the capacity of a 32-bit sized int");
 | ||||
| +        }
 | ||||
| +        x as SizeType
 | ||||
| +    }
 | ||||
| +
 | ||||
|  } | ||||
|   | ||||
| -/// The header of a ThinVec
 | ||||
| +/// The header of a ThinVec.
 | ||||
| +///
 | ||||
| +/// The _cap can be a bitfield, so use accessors to avoid trouble.
 | ||||
|  #[repr(C)] | ||||
|  struct Header { | ||||
|      _len: SizeType, | ||||
| @@ -53,38 +258,10 @@ impl Header {
 | ||||
|          self._len as usize | ||||
|      } | ||||
|   | ||||
| -    #[cfg(feature = "gecko-ffi")]
 | ||||
| -    fn cap(&self) -> usize {
 | ||||
| -        (self._cap & CAP_MASK) as usize
 | ||||
| -    }
 | ||||
| -
 | ||||
| -    #[cfg(not(feature = "gecko-ffi"))]
 | ||||
| -    fn cap(&self) -> usize {
 | ||||
| -        self._cap as usize
 | ||||
| -    }
 | ||||
| -
 | ||||
|      fn set_len(&mut self, len: usize) { | ||||
|          self._len = assert_size(len); | ||||
|      } | ||||
|   | ||||
| -    #[cfg(feature = "gecko-ffi")]
 | ||||
| -    fn set_cap(&mut self, cap: usize) {
 | ||||
| -        debug_assert!(cap & (CAP_MASK as usize) == cap);
 | ||||
| -        // FIXME: this is busted because it reads uninit memory
 | ||||
| -        // debug_assert!(!self.uses_stack_allocated_buffer());
 | ||||
| -        self._cap = assert_size(cap) & CAP_MASK;
 | ||||
| -    }
 | ||||
| -
 | ||||
| -    #[cfg(feature = "gecko-ffi")]
 | ||||
| -    fn uses_stack_allocated_buffer(&self) -> bool {
 | ||||
| -        self._cap & AUTO_MASK != 0
 | ||||
| -    }
 | ||||
| -
 | ||||
| -    #[cfg(not(feature = "gecko-ffi"))]
 | ||||
| -    fn set_cap(&mut self, cap: usize) {
 | ||||
| -        self._cap = assert_size(cap);
 | ||||
| -    }
 | ||||
| -
 | ||||
|      fn data<T>(&self) -> *mut T { | ||||
|          let header_size = mem::size_of::<Header>(); | ||||
|          let padding = padding::<T>(); | ||||
| @@ -102,6 +279,41 @@ impl Header {
 | ||||
|      } | ||||
|  } | ||||
|   | ||||
| +
 | ||||
| +#[cfg(feature = "gecko-ffi")]
 | ||||
| +impl Header {
 | ||||
| +    fn cap(&self) -> usize {
 | ||||
| +        unpack_capacity(self._cap)
 | ||||
| +    }
 | ||||
| +
 | ||||
| +    fn set_cap(&mut self, cap: usize) {
 | ||||
| +        // debug check that our packing is working
 | ||||
| +        debug_assert_eq!(unpack_capacity(pack_capacity(cap as SizeType)), cap);
 | ||||
| +        // FIXME: this assert is busted because it reads uninit memory
 | ||||
| +        // debug_assert!(!self.uses_stack_allocated_buffer());
 | ||||
| +
 | ||||
| +        // NOTE: this always stores a cleared auto bit, because set_cap
 | ||||
| +        // is only invoked by Rust, and Rust doesn't create auto arrays.
 | ||||
| +        self._cap = pack_capacity(assert_size(cap));
 | ||||
| +    }
 | ||||
| +
 | ||||
| +    fn uses_stack_allocated_buffer(&self) -> bool {
 | ||||
| +        is_auto(self._cap)
 | ||||
| +    }
 | ||||
| +}
 | ||||
| +
 | ||||
| +#[cfg(not(feature = "gecko-ffi"))]
 | ||||
| +impl Header {
 | ||||
| +    fn cap(&self) -> usize {
 | ||||
| +        self._cap as usize
 | ||||
| +    }
 | ||||
| +
 | ||||
| +    fn set_cap(&mut self, cap: usize) {
 | ||||
| +        self._cap = assert_size(cap);
 | ||||
| +    }
 | ||||
| +}
 | ||||
| +
 | ||||
| +
 | ||||
|  /// Singleton that all empty collections share. | ||||
|  /// Note: can't store non-zero ZSTs, we allocate in that case. We could | ||||
|  /// optimize everything to not do that (basically, make ptr == len and branch | ||||
| @@ -118,9 +330,7 @@ extern {
 | ||||
|   | ||||
|  // TODO: overflow checks everywhere | ||||
|   | ||||
| -// Utils
 | ||||
| -
 | ||||
| -fn oom() -> ! { std::process::abort() }
 | ||||
| +// Utils for computing layouts of allocations
 | ||||
|   | ||||
|  fn alloc_size<T>(cap: usize) -> usize { | ||||
|      // Compute "real" header size with pointer math | ||||
| @@ -165,9 +375,10 @@ fn layout<T>(cap: usize) -> Layout {
 | ||||
|  fn header_with_capacity<T>(cap: usize) -> NonNull<Header> { | ||||
|      debug_assert!(cap > 0); | ||||
|      unsafe { | ||||
| -        let header = alloc(layout::<T>(cap)) as *mut Header;
 | ||||
| +        let layout = layout::<T>(cap);
 | ||||
| +        let header = alloc(layout) as *mut Header;
 | ||||
|   | ||||
| -        if header.is_null() { oom() }
 | ||||
| +        if header.is_null() { handle_alloc_error(layout) }
 | ||||
|   | ||||
|          // "Infinite" capacity for zero-sized types: | ||||
|          (*header).set_cap(if mem::size_of::<T>() == 0 { MAX_CAP } else { cap }); | ||||
| @@ -179,28 +390,8 @@ fn header_with_capacity<T>(cap: usize) -
 | ||||
|   | ||||
|   | ||||
|   | ||||
| -/// ThinVec is exactly the same as Vec, except that it stores its `len` and `capacity` in the buffer
 | ||||
| -/// it allocates.
 | ||||
| -///
 | ||||
| -/// This makes the memory footprint of ThinVecs lower; notably in cases where space is reserved for
 | ||||
| -/// a non-existence ThinVec<T>. So `Vec<ThinVec<T>>` and `Option<ThinVec<T>>::None` will waste less
 | ||||
| -/// space. Being pointer-sized also means it can be passed/stored in registers.
 | ||||
| -///
 | ||||
| -/// Of course, any actually constructed ThinVec will theoretically have a bigger allocation, but
 | ||||
| -/// the fuzzy nature of allocators means that might not actually be the case.
 | ||||
| -///
 | ||||
| -/// Properties of Vec that are preserved:
 | ||||
| -/// * `ThinVec::new()` doesn't allocate (it points to a statically allocated singleton)
 | ||||
| -/// * reallocation can be done in place
 | ||||
| -/// * `size_of::<ThinVec<T>>()` == `size_of::<Option<ThinVec<T>>>()`
 | ||||
| -///   * NOTE: This is only possible when the `unstable` feature is used.
 | ||||
| -///
 | ||||
| -/// Properties of Vec that aren't preserved:
 | ||||
| -/// * `ThinVec<T>` can't ever be zero-cost roundtripped to a `Box<[T]>`, `String`, or `*mut T`
 | ||||
| -/// * `from_raw_parts` doesn't exist
 | ||||
| -/// * ThinVec currently doesn't bother to not-allocate for Zero Sized Types (e.g. `ThinVec<()>`),
 | ||||
| -///   but it could be done if someone cared enough to implement it.
 | ||||
| -#[cfg_attr(feature = "gecko-ffi", repr(C))]
 | ||||
| +/// See the crate's top level documentation for a description of this type.
 | ||||
| +#[repr(C)]
 | ||||
|  pub struct ThinVec<T> { | ||||
|      ptr: NonNull<Header>, | ||||
|      boo: PhantomData<T>, | ||||
| @@ -630,15 +821,15 @@ impl<T> ThinVec<T> {
 | ||||
|      } | ||||
|   | ||||
|      pub fn drain<R>(&mut self, range: R) -> Drain<T> | ||||
| -        where R: RangeArgument<usize>
 | ||||
| +        where R: RangeBounds<usize>
 | ||||
|      { | ||||
|          let len = self.len(); | ||||
| -        let start = match range.start() {
 | ||||
| +        let start = match range.start_bound() {
 | ||||
|              Bound::Included(&n) => n, | ||||
|              Bound::Excluded(&n) => n + 1, | ||||
|              Bound::Unbounded => 0, | ||||
|          }; | ||||
| -        let end = match range.end() {
 | ||||
| +        let end = match range.end_bound() {
 | ||||
|              Bound::Included(&n) => n + 1, | ||||
|              Bound::Excluded(&n) => n, | ||||
|              Bound::Unbounded => len, | ||||
| @@ -688,11 +879,30 @@ impl<T> ThinVec<T> {
 | ||||
|                  alloc_size::<T>(new_cap), | ||||
|              ) as *mut Header; | ||||
|   | ||||
| -            if ptr.is_null() { oom() }
 | ||||
| +            if ptr.is_null() { handle_alloc_error(layout::<T>(new_cap)) }
 | ||||
|              (*ptr).set_cap(new_cap); | ||||
|              self.ptr = NonNull::new_unchecked(ptr); | ||||
|          } else { | ||||
| -            self.ptr = header_with_capacity::<T>(new_cap);
 | ||||
| +            let mut new_header = header_with_capacity::<T>(new_cap);
 | ||||
| +
 | ||||
| +            // If we get here and have a non-zero len, then we must be handling
 | ||||
| +            // a gecko auto array, and we have items in a stack buffer. We shouldn't
 | ||||
| +            // free it, but we should memcopy the contents out of it and mark it as empty.
 | ||||
| +            //
 | ||||
| +            // T is assumed to be trivially relocatable, as this is ~required
 | ||||
| +            // for Rust compatibility anyway. Furthermore, we assume C++ won't try
 | ||||
| +            // to unconditionally destroy the contents of the stack allocated buffer
 | ||||
| +            // (i.e. it's obfuscated behind a union).
 | ||||
| +            //
 | ||||
| +            // In effect, we are partially reimplementing the auto array move constructor
 | ||||
| +            // by leaving behind a valid empty instance.
 | ||||
| +            let len = self.len();
 | ||||
| +            if cfg!(feature = "gecko-ffi") && len > 0 {
 | ||||
| +                new_header.as_mut().data::<T>().copy_from_nonoverlapping(self.data_raw(), len);
 | ||||
| +                self.set_len(0);
 | ||||
| +            }
 | ||||
| +            
 | ||||
| +            self.ptr = new_header;
 | ||||
|          } | ||||
|      } | ||||
|   | ||||
| @@ -1093,10 +1303,7 @@ mod tests {
 | ||||
|          use std::mem::size_of; | ||||
|          assert_eq!(size_of::<ThinVec<u8>>(), size_of::<&u8>()); | ||||
|   | ||||
| -        // We don't perform the null-pointer optimization on stable rust.
 | ||||
| -        if cfg!(feature = "unstable") {
 | ||||
| -            assert_eq!(size_of::<Option<ThinVec<u8>>>(), size_of::<&u8>());
 | ||||
| -        }
 | ||||
| +        assert_eq!(size_of::<Option<ThinVec<u8>>>(), size_of::<&u8>());
 | ||||
|      } | ||||
|   | ||||
|      #[test] | ||||
| @@ -1731,7 +1938,6 @@ mod std_tests {
 | ||||
|          assert_eq!(v, &[(), ()]); | ||||
|      } | ||||
|   | ||||
| -/* TODO: support inclusive ranges
 | ||||
|      #[test] | ||||
|      fn test_drain_inclusive_range() { | ||||
|          let mut v = thin_vec!['a', 'b', 'c', 'd', 'e']; | ||||
| @@ -1761,6 +1967,7 @@ mod std_tests {
 | ||||
|      } | ||||
|   | ||||
|      #[test] | ||||
| +    #[cfg(not(feature = "gecko-ffi"))]
 | ||||
|      fn test_drain_max_vec_size() { | ||||
|          let mut v = ThinVec::<()>::with_capacity(usize::max_value()); | ||||
|          unsafe { v.set_len(usize::max_value()); } | ||||
| @@ -1781,7 +1988,6 @@ mod std_tests {
 | ||||
|          let mut v = thin_vec![1, 2, 3, 4, 5]; | ||||
|          v.drain(5..=5); | ||||
|      } | ||||
| -*/
 | ||||
|   | ||||
|  /* TODO: implement splice? | ||||
|      #[test] | ||||
| @@ -2187,7 +2393,7 @@ mod std_tests {
 | ||||
|          assert!(v.capacity() >= 33) | ||||
|      } | ||||
|   | ||||
| -/* TODO: implement try_reserve 
 | ||||
| +/* TODO: implement try_reserve
 | ||||
|      #[test] | ||||
|      fn test_try_reserve() { | ||||
|   | ||||
| --- firefox-78.9.0/toolkit/components/cascade_bloom_filter/Cargo.toml.D87019-thin-vec-big-endian.diff	2021-03-15 16:52:42.000000000 +0100
 | ||||
| +++ firefox-78.9.0/toolkit/components/cascade_bloom_filter/Cargo.toml	2021-03-18 15:54:35.137670977 +0100
 | ||||
| @@ -8,5 +8,5 @@ nserror = { path = "../../../xpcom/rust/
 | ||||
|  nsstring = { path = "../../../xpcom/rust/nsstring" } | ||||
|  rental = "0.5.5" | ||||
|  rust_cascade = "0.6.0" | ||||
| -thin-vec = { version = "0.1.0", features = ["gecko-ffi"] }
 | ||||
| +thin-vec = { version = "0.2.1", features = ["gecko-ffi"] }
 | ||||
|  xpcom = { path = "../../../xpcom/rust/xpcom" } | ||||
| --- firefox-78.9.0/toolkit/components/extensions/storage/webext_storage_bridge/Cargo.toml.D87019-thin-vec-big-endian.diff	2021-03-15 16:52:42.000000000 +0100
 | ||||
| +++ firefox-78.9.0/toolkit/components/extensions/storage/webext_storage_bridge/Cargo.toml	2021-03-18 15:54:35.139670971 +0100
 | ||||
| @@ -13,7 +13,7 @@ moz_task = { path = "../../../../../xpco
 | ||||
|  nserror = { path = "../../../../../xpcom/rust/nserror" } | ||||
|  nsstring = { path = "../../../../../xpcom/rust/nsstring" } | ||||
|  once_cell = "1" | ||||
| -thin-vec = { version = "0.1.0", features = ["gecko-ffi"] }
 | ||||
| +thin-vec = { version = "0.2.1", features = ["gecko-ffi"] }
 | ||||
|  xpcom = { path = "../../../../../xpcom/rust/xpcom" } | ||||
|  serde = "1" | ||||
|  serde_json = "1" | ||||
| --- firefox-78.9.0/toolkit/components/kvstore/Cargo.toml.D87019-thin-vec-big-endian.diff	2021-03-15 16:52:42.000000000 +0100
 | ||||
| +++ firefox-78.9.0/toolkit/components/kvstore/Cargo.toml	2021-03-18 15:54:35.141670966 +0100
 | ||||
| @@ -18,7 +18,7 @@ rkv = "0.10.2"
 | ||||
|  storage_variant = { path = "../../../storage/variant" } | ||||
|  xpcom = { path = "../../../xpcom/rust/xpcom" } | ||||
|  tempfile = "3" | ||||
| -thin-vec = { version = "0.1.0", features = ["gecko-ffi"] }
 | ||||
| +thin-vec = { version = "0.2.1", features = ["gecko-ffi"] }
 | ||||
|   | ||||
|  # Get rid of failure's dependency on backtrace. Eventually | ||||
|  # backtrace will move into Rust core, but we don't need it here. | ||||
| --- firefox-78.9.0/toolkit/components/places/bookmark_sync/Cargo.toml.D87019-thin-vec-big-endian.diff	2021-03-15 16:52:42.000000000 +0100
 | ||||
| +++ firefox-78.9.0/toolkit/components/places/bookmark_sync/Cargo.toml	2021-03-18 15:54:35.142670963 +0100
 | ||||
| @@ -19,5 +19,5 @@ url = "2.0"
 | ||||
|  xpcom = { path = "../../../../xpcom/rust/xpcom" } | ||||
|   | ||||
|  [dependencies.thin-vec] | ||||
| -version = "0.1.0"
 | ||||
| +version = "0.2.1"
 | ||||
|  features = ["gecko-ffi"] | ||||
| --- firefox-78.9.0/tools/profiler/rust-helper/Cargo.toml.D87019-thin-vec-big-endian.diff	2021-03-15 16:52:42.000000000 +0100
 | ||||
| +++ firefox-78.9.0/tools/profiler/rust-helper/Cargo.toml	2021-03-18 15:54:35.143670960 +0100
 | ||||
| @@ -23,7 +23,7 @@ features = ["endian_fd", "elf32", "elf64
 | ||||
|  default-features = false | ||||
|   | ||||
|  [dependencies.thin-vec] | ||||
| -version = "0.1.0"
 | ||||
| +version = "0.2.1"
 | ||||
|  features = ["gecko-ffi"] | ||||
|   | ||||
|  [features] | ||||
| --- firefox-78.9.0/xpcom/rust/xpcom/Cargo.toml.D87019-thin-vec-big-endian.diff	2021-03-15 16:52:43.000000000 +0100
 | ||||
| +++ firefox-78.9.0/xpcom/rust/xpcom/Cargo.toml	2021-03-18 15:54:35.149670942 +0100
 | ||||
| @@ -9,4 +9,4 @@ nsstring = { path = "../nsstring" }
 | ||||
|  nserror = { path = "../nserror" } | ||||
|  threadbound = "0.1" | ||||
|  xpcom_macros = { path = "xpcom_macros" } | ||||
| -thin-vec = { version = "0.1.0", features = ["gecko-ffi"] }
 | ||||
| +thin-vec = { version = "0.2.1", features = ["gecko-ffi"] }
 | ||||
							
								
								
									
										5771
									
								
								SOURCES/D89554-autoconf1.diff
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5771
									
								
								SOURCES/D89554-autoconf1.diff
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										118
									
								
								SOURCES/D94538-autoconf2.diff
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										118
									
								
								SOURCES/D94538-autoconf2.diff
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,118 @@ | ||||
| diff -up firefox-78.8.0/python/mozboot/mozboot/archlinux.py.D94538-autoconf2.diff firefox-78.8.0/python/mozboot/mozboot/archlinux.py
 | ||||
| --- firefox-78.8.0/python/mozboot/mozboot/archlinux.py.D94538-autoconf2.diff	2021-02-25 13:53:04.963982705 +0100
 | ||||
| +++ firefox-78.8.0/python/mozboot/mozboot/archlinux.py	2021-02-25 13:53:25.713053151 +0100
 | ||||
| @@ -26,7 +26,6 @@ class ArchlinuxBootstrapper(
 | ||||
|      '''Archlinux experimental bootstrapper.''' | ||||
|   | ||||
|      SYSTEM_PACKAGES = [ | ||||
| -        'autoconf2.13',
 | ||||
|          'base-devel', | ||||
|          'nodejs', | ||||
|          'python2', | ||||
| diff -up firefox-78.8.0/python/mozboot/mozboot/centosfedora.py.D94538-autoconf2.diff firefox-78.8.0/python/mozboot/mozboot/centosfedora.py
 | ||||
| --- firefox-78.8.0/python/mozboot/mozboot/centosfedora.py.D94538-autoconf2.diff	2021-02-17 08:49:42.000000000 +0100
 | ||||
| +++ firefox-78.8.0/python/mozboot/mozboot/centosfedora.py	2021-02-25 13:53:04.963982705 +0100
 | ||||
| @@ -26,7 +26,6 @@ class CentOSFedoraBootstrapper(
 | ||||
|          # For CentOS 7, later versions of nodejs come from nodesource | ||||
|          # and include the npm package. | ||||
|          self.packages = [ | ||||
| -            'autoconf213',
 | ||||
|              'nodejs', | ||||
|              'which', | ||||
|          ] | ||||
| diff -up firefox-78.8.0/python/mozboot/mozboot/debian.py.D94538-autoconf2.diff firefox-78.8.0/python/mozboot/mozboot/debian.py
 | ||||
| --- firefox-78.8.0/python/mozboot/mozboot/debian.py.D94538-autoconf2.diff	2021-02-25 13:53:04.963982705 +0100
 | ||||
| +++ firefox-78.8.0/python/mozboot/mozboot/debian.py	2021-02-25 13:53:42.874111415 +0100
 | ||||
| @@ -32,7 +32,6 @@ class DebianBootstrapper(
 | ||||
|      # These are common packages for all Debian-derived distros (such as | ||||
|      # Ubuntu). | ||||
|      COMMON_PACKAGES = [ | ||||
| -        'autoconf2.13',
 | ||||
|          'build-essential', | ||||
|          'nodejs', | ||||
|          'python-setuptools', | ||||
| diff -up firefox-78.8.0/python/mozboot/mozboot/freebsd.py.D94538-autoconf2.diff firefox-78.8.0/python/mozboot/mozboot/freebsd.py
 | ||||
| --- firefox-78.8.0/python/mozboot/mozboot/freebsd.py.D94538-autoconf2.diff	2021-02-17 08:49:42.000000000 +0100
 | ||||
| +++ firefox-78.8.0/python/mozboot/mozboot/freebsd.py	2021-02-25 13:53:04.963982705 +0100
 | ||||
| @@ -15,7 +15,6 @@ class FreeBSDBootstrapper(BaseBootstrapp
 | ||||
|          self.flavor = flavor.lower() | ||||
|   | ||||
|          self.packages = [ | ||||
| -            'autoconf213',
 | ||||
|              'gmake', | ||||
|              'gtar', | ||||
|              'pkgconf', | ||||
| diff -up firefox-78.8.0/python/mozboot/mozboot/gentoo.py.D94538-autoconf2.diff firefox-78.8.0/python/mozboot/mozboot/gentoo.py
 | ||||
| --- firefox-78.8.0/python/mozboot/mozboot/gentoo.py.D94538-autoconf2.diff	2021-02-17 08:49:38.000000000 +0100
 | ||||
| +++ firefox-78.8.0/python/mozboot/mozboot/gentoo.py	2021-02-25 13:53:04.963982705 +0100
 | ||||
| @@ -36,7 +36,6 @@ class GentooBootstrapper(
 | ||||
|      def ensure_system_packages(self): | ||||
|          self.run_as_root(['emerge', '--noreplace', '--quiet', | ||||
|                            'app-arch/zip', | ||||
| -                          'sys-devel/autoconf:2.1'
 | ||||
|                            ]) | ||||
|   | ||||
|      def ensure_browser_packages(self, artifact_mode=False): | ||||
| diff -up firefox-78.8.0/python/mozboot/mozboot/openbsd.py.D94538-autoconf2.diff firefox-78.8.0/python/mozboot/mozboot/openbsd.py
 | ||||
| --- firefox-78.8.0/python/mozboot/mozboot/openbsd.py.D94538-autoconf2.diff	2021-02-17 08:49:15.000000000 +0100
 | ||||
| +++ firefox-78.8.0/python/mozboot/mozboot/openbsd.py	2021-02-25 13:53:04.964982709 +0100
 | ||||
| @@ -12,7 +12,6 @@ class OpenBSDBootstrapper(BaseBootstrapp
 | ||||
|          BaseBootstrapper.__init__(self, **kwargs) | ||||
|   | ||||
|          self.packages = [ | ||||
| -            'autoconf-2.13',
 | ||||
|              'gmake', | ||||
|              'gtar', | ||||
|              'rust', | ||||
| diff -up firefox-78.8.0/python/mozboot/mozboot/opensuse.py.D94538-autoconf2.diff firefox-78.8.0/python/mozboot/mozboot/opensuse.py
 | ||||
| --- firefox-78.8.0/python/mozboot/mozboot/opensuse.py.D94538-autoconf2.diff	2021-02-17 08:49:42.000000000 +0100
 | ||||
| +++ firefox-78.8.0/python/mozboot/mozboot/opensuse.py	2021-02-25 13:53:04.964982709 +0100
 | ||||
| @@ -13,7 +13,6 @@ class OpenSUSEBootstrapper(
 | ||||
|      '''openSUSE experimental bootstrapper.''' | ||||
|   | ||||
|      SYSTEM_PACKAGES = [ | ||||
| -        'autoconf213',
 | ||||
|          'nodejs', | ||||
|          'npm', | ||||
|          'which', | ||||
| diff -up firefox-78.8.0/python/mozboot/mozboot/osx.py.D94538-autoconf2.diff firefox-78.8.0/python/mozboot/mozboot/osx.py
 | ||||
| --- firefox-78.8.0/python/mozboot/mozboot/osx.py.D94538-autoconf2.diff	2021-02-25 13:53:04.964982709 +0100
 | ||||
| +++ firefox-78.8.0/python/mozboot/mozboot/osx.py	2021-02-25 13:54:07.162193882 +0100
 | ||||
| @@ -353,7 +353,6 @@ class OSXBootstrapper(BaseBootstrapper):
 | ||||
|          # least on 10.8) and because the build system wants a version | ||||
|          # newer than what Apple ships. | ||||
|          packages = [ | ||||
| -            'autoconf@2.13',
 | ||||
|              'git', | ||||
|              'gnu-tar', | ||||
|              'node', | ||||
| @@ -428,7 +427,6 @@ class OSXBootstrapper(BaseBootstrapper):
 | ||||
|              'python27', | ||||
|              'python36', | ||||
|              'py27-gnureadline', | ||||
| -            'autoconf213',
 | ||||
|              'gnutar', | ||||
|              'watchman', | ||||
|              'nodejs8' | ||||
| diff -up firefox-78.8.0/python/mozboot/mozboot/solus.py.D94538-autoconf2.diff firefox-78.8.0/python/mozboot/mozboot/solus.py
 | ||||
| --- firefox-78.8.0/python/mozboot/mozboot/solus.py.D94538-autoconf2.diff	2021-02-25 13:53:04.964982709 +0100
 | ||||
| +++ firefox-78.8.0/python/mozboot/mozboot/solus.py	2021-02-25 13:53:32.090074802 +0100
 | ||||
| @@ -23,7 +23,6 @@ class SolusBootstrapper(
 | ||||
|      '''Solus experimental bootstrapper.''' | ||||
|   | ||||
|      SYSTEM_PACKAGES = [ | ||||
| -        'autoconf213',
 | ||||
|          'nodejs', | ||||
|          'python', | ||||
|          'python3', | ||||
| diff -up firefox-78.8.0/python/mozboot/mozboot/windows.py.D94538-autoconf2.diff firefox-78.8.0/python/mozboot/mozboot/windows.py
 | ||||
| --- firefox-78.8.0/python/mozboot/mozboot/windows.py.D94538-autoconf2.diff	2021-02-17 08:49:34.000000000 +0100
 | ||||
| +++ firefox-78.8.0/python/mozboot/mozboot/windows.py	2021-02-25 13:53:04.978982756 +0100
 | ||||
| @@ -48,7 +48,6 @@ class WindowsBootstrapper(BaseBootstrapp
 | ||||
|          'patch', | ||||
|          'patchutils', | ||||
|          'diffutils', | ||||
| -        'autoconf2.13',
 | ||||
|          'tar', | ||||
|          'zip', | ||||
|          'unzip', | ||||
							
								
								
									
										13
									
								
								SOURCES/build-icu-make.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								SOURCES/build-icu-make.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,13 @@ | ||||
| diff -up firefox-68.8.0/intl/icu_sources_data.py.icu-makefile firefox-68.8.0/intl/icu_sources_data.py
 | ||||
| --- firefox-68.8.0/intl/icu_sources_data.py.icu-makefile	2020-05-11 17:00:03.642605718 +0200
 | ||||
| +++ firefox-68.8.0/intl/icu_sources_data.py	2020-05-11 17:00:37.774642749 +0200
 | ||||
| @@ -246,8 +246,7 @@ def update_data_file(topsrcdir):
 | ||||
|      if not try_run( | ||||
|              'icu-make', | ||||
|              ['make', | ||||
| -             '--jobs=%d' % multiprocessing.cpu_count(),
 | ||||
| -             '--output-sync'],
 | ||||
| +             '--jobs=1'],
 | ||||
|              cwd=objdir): | ||||
|          return False | ||||
|      print('Copying ICU data file...') | ||||
							
								
								
									
										12
									
								
								SOURCES/build-mozconfig-fix.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								SOURCES/build-mozconfig-fix.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,12 @@ | ||||
| diff -up mozilla-release-c61f5f5ead48c78a80c80db5c489bdc7cfaf8175/python/mozbuild/mozbuild/mozconfig.py.mozconfig-fix mozilla-release-c61f5f5ead48c78a80c80db5c489bdc7cfaf8175/python/mozbuild/mozbuild/mozconfig.py
 | ||||
| --- mozilla-release-c61f5f5ead48c78a80c80db5c489bdc7cfaf8175/python/mozbuild/mozbuild/mozconfig.py.mozconfig-fix	2018-03-13 17:22:19.018466884 +0100
 | ||||
| +++ mozilla-release-c61f5f5ead48c78a80c80db5c489bdc7cfaf8175/python/mozbuild/mozbuild/mozconfig.py	2018-03-13 17:23:57.379559640 +0100
 | ||||
| @@ -446,7 +446,7 @@ class MozconfigLoader(object):
 | ||||
|                              value = value[1:] | ||||
|   | ||||
|                          # Lines with a quote not ending in a quote are multi-line. | ||||
| -                        if has_quote and not value.endswith("'"):
 | ||||
| +                        if has_quote and not value.endswith(("'", ";")):
 | ||||
|                              in_variable = name | ||||
|                              current.append(value) | ||||
|                              continue | ||||
							
								
								
									
										12
									
								
								SOURCES/build-nss-version.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								SOURCES/build-nss-version.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,12 @@ | ||||
| diff -up firefox-68.3.0/old-configure.in.nss-version firefox-68.3.0/old-configure.in
 | ||||
| --- firefox-68.3.0/old-configure.in.nss-version	2019-11-27 19:48:01.045677621 +0100
 | ||||
| +++ firefox-68.3.0/old-configure.in	2019-11-27 19:59:52.856894047 +0100
 | ||||
| @@ -1537,7 +1537,7 @@ MOZ_ARG_WITH_BOOL(system-nss,
 | ||||
|      _USE_SYSTEM_NSS=1 ) | ||||
|   | ||||
|  if test -n "$_USE_SYSTEM_NSS"; then | ||||
| -    AM_PATH_NSS(3.44.4, [MOZ_SYSTEM_NSS=1], [AC_MSG_ERROR([you don't have NSS installed or your version is too old])])
 | ||||
| +    AM_PATH_NSS(3.44.0, [MOZ_SYSTEM_NSS=1], [AC_MSG_ERROR([you don't have NSS installed or your version is too old])])
 | ||||
|  fi | ||||
|   | ||||
|  NSS_CFLAGS="$NSS_CFLAGS -I${DIST}/include/nss" | ||||
							
								
								
									
										27
									
								
								SOURCES/build-ppc64le-inline.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								SOURCES/build-ppc64le-inline.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,27 @@ | ||||
| diff -up firefox-68.1.0/js/xpconnect/src/XPCWrappedNative.cpp.ppc64le-inline firefox-68.1.0/js/xpconnect/src/XPCWrappedNative.cpp
 | ||||
| --- firefox-68.1.0/js/xpconnect/src/XPCWrappedNative.cpp.ppc64le-inline	2019-08-26 18:52:28.000000000 +0200
 | ||||
| +++ firefox-68.1.0/js/xpconnect/src/XPCWrappedNative.cpp	2019-08-29 08:49:57.695687874 +0200
 | ||||
| @@ -1092,7 +1092,11 @@ class MOZ_STACK_CLASS CallMethodHelper f
 | ||||
|    MOZ_ALWAYS_INLINE bool GetOutParamSource(uint8_t paramIndex, | ||||
|                                             MutableHandleValue srcp) const; | ||||
|   | ||||
| +#if (__GNUC__ && __linux__ && __PPC64__ && _LITTLE_ENDIAN)
 | ||||
| +  bool GatherAndConvertResults();
 | ||||
| +#else
 | ||||
|    MOZ_ALWAYS_INLINE bool GatherAndConvertResults(); | ||||
| +#endif
 | ||||
|   | ||||
|    MOZ_ALWAYS_INLINE bool QueryInterfaceFastPath(); | ||||
|   | ||||
| @@ -1139,7 +1143,11 @@ class MOZ_STACK_CLASS CallMethodHelper f
 | ||||
|   | ||||
|    ~CallMethodHelper(); | ||||
|   | ||||
| +#if (__GNUC__ && __linux__ && __PPC64__ && _LITTLE_ENDIAN)
 | ||||
| +  bool Call();
 | ||||
| +#else
 | ||||
|    MOZ_ALWAYS_INLINE bool Call(); | ||||
| +#endif
 | ||||
|   | ||||
|    // Trace implementation so we can put our CallMethodHelper in a Rooted<T>. | ||||
|    void trace(JSTracer* aTrc); | ||||
							
								
								
									
										9
									
								
								SOURCES/distribution.ini
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								SOURCES/distribution.ini
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,9 @@ | ||||
| [Global] | ||||
| id=redhat | ||||
| version=1.0 | ||||
| about=Mozilla Firefox for Red Hat Enterprise Linux | ||||
| 
 | ||||
| [Preferences] | ||||
| app.distributor=redhat | ||||
| app.distributor.channel=redhat | ||||
| app.partner.fedora=redhat | ||||
							
								
								
									
										50
									
								
								SOURCES/firefox-debugedits-error.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								SOURCES/firefox-debugedits-error.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,50 @@ | ||||
| diff -up firefox-68.0/media/libyuv/libyuv/tools_libyuv/autoroller/unittests/testdata/DEPS.chromium.old firefox-68.0/media/libyuv/libyuv/tools_libyuv/autoroller/unittests/testdata/DEPS.chromium
 | ||||
| diff -up firefox-68.0/media/webrtc/trunk/Makefile.old firefox-68.0/media/webrtc/trunk/Makefile
 | ||||
| diff -up firefox-68.0/media/webrtc/trunk/webrtc/modules/audio_processing/utility/ooura_fft.cc.old firefox-68.0/media/webrtc/trunk/webrtc/modules/audio_processing/utility/ooura_fft.cc
 | ||||
| --- firefox-68.0/media/webrtc/trunk/webrtc/modules/audio_processing/utility/ooura_fft.cc.old	2019-06-12 08:17:02.673268442 +0200
 | ||||
| +++ firefox-68.0/media/webrtc/trunk/webrtc/modules/audio_processing/utility/ooura_fft.cc	2019-06-12 08:17:13.582328073 +0200
 | ||||
| @@ -21,7 +21,7 @@
 | ||||
|   *  be found in the AUTHORS file in the root of the source tree. | ||||
|   */ | ||||
|   | ||||
| -#include "modules/audio_processing//utility/ooura_fft.h"
 | ||||
| +#include "modules/audio_processing/utility/ooura_fft.h"
 | ||||
|   | ||||
|  #include <math.h> | ||||
|   | ||||
| diff -up firefox-68.0/media/webrtc/trunk/webrtc/modules/audio_processing/utility/ooura_fft_sse2.cc.old firefox-68.0/media/webrtc/trunk/webrtc/modules/audio_processing/utility/ooura_fft_sse2.cc
 | ||||
| --- firefox-68.0/media/webrtc/trunk/webrtc/modules/audio_processing/utility/ooura_fft_sse2.cc.old	2019-06-12 08:17:36.671454285 +0200
 | ||||
| +++ firefox-68.0/media/webrtc/trunk/webrtc/modules/audio_processing/utility/ooura_fft_sse2.cc	2019-06-12 08:17:46.989510679 +0200
 | ||||
| @@ -8,7 +8,7 @@
 | ||||
|   *  be found in the AUTHORS file in the root of the source tree. | ||||
|   */ | ||||
|   | ||||
| -#include "modules/audio_processing//utility/ooura_fft.h"
 | ||||
| +#include "modules/audio_processing/utility/ooura_fft.h"
 | ||||
|   | ||||
|  #include <emmintrin.h> | ||||
|   | ||||
| diff -up firefox-68.0/third_party/aom/aom_dsp/x86/masked_sad_intrin_avx2.c.old firefox-68.0/third_party/aom/aom_dsp/x86/masked_sad_intrin_avx2.c
 | ||||
| --- firefox-68.0/third_party/aom/aom_dsp/x86/masked_sad_intrin_avx2.c.old	2019-06-12 08:16:15.673011534 +0200
 | ||||
| +++ firefox-68.0/third_party/aom/aom_dsp/x86/masked_sad_intrin_avx2.c	2019-06-12 08:16:22.602049410 +0200
 | ||||
| @@ -17,7 +17,7 @@
 | ||||
|  #include "aom_dsp/blend.h" | ||||
|  #include "aom/aom_integer.h" | ||||
|  #include "aom_dsp/x86/synonyms.h" | ||||
| -#include "aom_dsp/x86//masked_sad_intrin_ssse3.h"
 | ||||
| +#include "aom_dsp/x86/masked_sad_intrin_ssse3.h"
 | ||||
|   | ||||
|  static INLINE unsigned int masked_sad32xh_avx2( | ||||
|      const uint8_t *src_ptr, int src_stride, const uint8_t *a_ptr, int a_stride, | ||||
| diff -up firefox-68.0/third_party/aom/aom_dsp/x86/masked_sad_intrin_ssse3.c.old firefox-68.0/third_party/aom/aom_dsp/x86/masked_sad_intrin_ssse3.c
 | ||||
| --- firefox-68.0/third_party/aom/aom_dsp/x86/masked_sad_intrin_ssse3.c.old	2019-06-12 08:16:35.404119384 +0200
 | ||||
| +++ firefox-68.0/third_party/aom/aom_dsp/x86/masked_sad_intrin_ssse3.c	2019-06-12 08:16:43.415163174 +0200
 | ||||
| @@ -19,7 +19,7 @@
 | ||||
|  #include "aom/aom_integer.h" | ||||
|  #include "aom_dsp/x86/synonyms.h" | ||||
|   | ||||
| -#include "aom_dsp/x86//masked_sad_intrin_ssse3.h"
 | ||||
| +#include "aom_dsp/x86/masked_sad_intrin_ssse3.h"
 | ||||
|   | ||||
|  // For width a multiple of 16 | ||||
|  static INLINE unsigned int masked_sad_ssse3(const uint8_t *src_ptr, | ||||
							
								
								
									
										13
									
								
								SOURCES/firefox-enable-addons.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								SOURCES/firefox-enable-addons.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,13 @@ | ||||
| diff -up firefox-55.0/browser/app/profile/firefox.js.addons firefox-55.0/browser/app/profile/firefox.js
 | ||||
| --- firefox-55.0/browser/app/profile/firefox.js.addons	2017-08-02 10:58:30.566363833 +0200
 | ||||
| +++ firefox-55.0/browser/app/profile/firefox.js	2017-08-02 10:59:15.377216959 +0200
 | ||||
| @@ -65,7 +65,8 @@ pref("extensions.systemAddon.update.url"
 | ||||
|   | ||||
|  // Disable add-ons that are not installed by the user in all scopes by default. | ||||
|  // See the SCOPE constants in AddonManager.jsm for values to use here. | ||||
| -pref("extensions.autoDisableScopes", 15);
 | ||||
| +pref("extensions.autoDisableScopes", 0);
 | ||||
| +pref("extensions.showMismatchUI", false);
 | ||||
|  // Scopes to scan for changes at startup. | ||||
|  pref("extensions.startupScanScopes", 0); | ||||
|   | ||||
							
								
								
									
										62
									
								
								SOURCES/firefox-glibc-dynstack.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								SOURCES/firefox-glibc-dynstack.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,62 @@ | ||||
| diff -up firefox-78.12.0/js/xpconnect/src/XPCJSContext.cpp.firefox-glibc-dynstack firefox-78.12.0/js/xpconnect/src/XPCJSContext.cpp
 | ||||
| --- firefox-78.12.0/js/xpconnect/src/XPCJSContext.cpp.firefox-glibc-dynstack	2021-07-06 21:50:42.000000000 +0200
 | ||||
| +++ firefox-78.12.0/js/xpconnect/src/XPCJSContext.cpp	2021-08-02 10:26:47.996760110 +0200
 | ||||
| @@ -81,14 +81,6 @@ using namespace xpc;
 | ||||
|  using namespace JS; | ||||
|  using mozilla::dom::AutoEntryScript; | ||||
|   | ||||
| -// The watchdog thread loop is pretty trivial, and should not require much stack
 | ||||
| -// space to do its job. So only give it 32KiB or the platform minimum.
 | ||||
| -#if !defined(PTHREAD_STACK_MIN)
 | ||||
| -#  define PTHREAD_STACK_MIN 0
 | ||||
| -#endif
 | ||||
| -static constexpr size_t kWatchdogStackSize =
 | ||||
| -    PTHREAD_STACK_MIN < 32 * 1024 ? 32 * 1024 : PTHREAD_STACK_MIN;
 | ||||
| -
 | ||||
|  static void WatchdogMain(void* arg); | ||||
|  class Watchdog; | ||||
|  class WatchdogManager; | ||||
| @@ -161,7 +153,7 @@ class Watchdog {
 | ||||
|        // watchdog, we need to join it on shutdown. | ||||
|        mThread = PR_CreateThread(PR_USER_THREAD, WatchdogMain, this, | ||||
|                                  PR_PRIORITY_NORMAL, PR_GLOBAL_THREAD, | ||||
| -                                PR_JOINABLE_THREAD, kWatchdogStackSize);
 | ||||
| +                                PR_JOINABLE_THREAD, 0);
 | ||||
|        if (!mThread) { | ||||
|          MOZ_CRASH("PR_CreateThread failed!"); | ||||
|        } | ||||
| diff -up firefox-78.12.0/security/sandbox/linux/launch/SandboxLaunch.cpp.firefox-glibc-dynstack firefox-78.12.0/security/sandbox/linux/launch/SandboxLaunch.cpp
 | ||||
| --- firefox-78.12.0/security/sandbox/linux/launch/SandboxLaunch.cpp.firefox-glibc-dynstack	2021-07-06 21:50:46.000000000 +0200
 | ||||
| +++ firefox-78.12.0/security/sandbox/linux/launch/SandboxLaunch.cpp	2021-08-02 10:28:48.832946590 +0200
 | ||||
| @@ -489,7 +489,8 @@ static int CloneCallee(void* aPtr) {
 | ||||
|  // we don't currently support sandboxing under valgrind. | ||||
|  MOZ_NEVER_INLINE MOZ_ASAN_BLACKLIST static pid_t DoClone(int aFlags, | ||||
|                                                           jmp_buf* aCtx) { | ||||
| -  uint8_t miniStack[PTHREAD_STACK_MIN];
 | ||||
| +  static constexpr size_t kStackAlignment = 16;
 | ||||
| +  uint8_t miniStack[4096] __attribute__((aligned(kStackAlignment)));
 | ||||
|  #ifdef __hppa__ | ||||
|    void* stackPtr = miniStack; | ||||
|  #else | ||||
| @@ -510,13 +511,19 @@ static pid_t ForkWithFlags(int aFlags) {
 | ||||
|                                 CLONE_CHILD_CLEARTID; | ||||
|    MOZ_RELEASE_ASSERT((aFlags & kBadFlags) == 0); | ||||
|   | ||||
| +  // Block signals due to small stack in DoClone.
 | ||||
| +  sigset_t oldSigs;
 | ||||
| +  BlockAllSignals(&oldSigs);
 | ||||
| +
 | ||||
| +  int ret = 0;
 | ||||
|    jmp_buf ctx; | ||||
|    if (setjmp(ctx) == 0) { | ||||
|      // In the parent and just called setjmp: | ||||
| -    return DoClone(aFlags | SIGCHLD, &ctx);
 | ||||
| +    ret = DoClone(aFlags | SIGCHLD, &ctx);
 | ||||
|    } | ||||
| +  RestoreSignals(&oldSigs);
 | ||||
|    // In the child and have longjmp'ed: | ||||
| -  return 0;
 | ||||
| +  return ret;
 | ||||
|  } | ||||
|   | ||||
|  static bool WriteStringToFile(const char* aPath, const char* aStr, | ||||
							
								
								
									
										27
									
								
								SOURCES/firefox-mozconfig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								SOURCES/firefox-mozconfig
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,27 @@ | ||||
| . $topsrcdir/browser/config/mozconfig | ||||
| 
 | ||||
| ac_add_options --enable-default-toolkit=cairo-gtk3 | ||||
| 
 | ||||
| ac_add_options --prefix="$PREFIX" | ||||
| ac_add_options --libdir="$LIBDIR" | ||||
| ac_add_options --with-system-zlib | ||||
| ac_add_options --disable-strip | ||||
| ac_add_options --disable-tests | ||||
| #ac_add_options --enable-libnotify | ||||
| ac_add_options --enable-necko-wifi | ||||
| ac_add_options --disable-updater | ||||
| ac_add_options --enable-chrome-format=omni | ||||
| ac_add_options --enable-pulseaudio | ||||
| ac_add_options --with-system-icu | ||||
| ac_add_options --with-mozilla-api-keyfile=../mozilla-api-key | ||||
| ac_add_options --with-google-location-service-api-keyfile=../google-api-key | ||||
| ac_add_options --with-google-safebrowsing-api-keyfile=../google-api-key | ||||
| ac_add_options --disable-av1 | ||||
| ac_add_options --allow-addon-sideload | ||||
| 
 | ||||
| export BUILD_OFFICIAL=1 | ||||
| export MOZILLA_OFFICIAL=1 | ||||
| export MOZ_TELEMETRY_REPORTING=1 | ||||
| mk_add_options BUILD_OFFICIAL=1 | ||||
| mk_add_options MOZILLA_OFFICIAL=1 | ||||
| mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/objdir | ||||
							
								
								
									
										19
									
								
								SOURCES/firefox-nss-addon-hack.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								SOURCES/firefox-nss-addon-hack.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,19 @@ | ||||
| diff -up firefox-84.0.2/security/certverifier/NSSCertDBTrustDomain.cpp.nss-hack firefox-84.0.2/security/certverifier/NSSCertDBTrustDomain.cpp
 | ||||
| --- firefox-84.0.2/security/certverifier/NSSCertDBTrustDomain.cpp.nss-hack      2021-01-11 12:12:02.585514543 +0100
 | ||||
| +++ firefox-84.0.2/security/certverifier/NSSCertDBTrustDomain.cpp       2021-01-11 12:47:50.345984582 +0100
 | ||||
| @@ -1619,6 +1619,15 @@ SECStatus InitializeNSS(const nsACString
 | ||||
|      return srv; | ||||
|    } | ||||
| 
 | ||||
| +  /* Sets the NSS_USE_ALG_IN_ANY_SIGNATURE bit.
 | ||||
| +   * does not change NSS_USE_ALG_IN_CERT_SIGNATURE,
 | ||||
| +   * so policy will still disable use of sha1 in
 | ||||
| +   * certificate related signature processing. */
 | ||||
| +  srv = NSS_SetAlgorithmPolicy(SEC_OID_SHA1, NSS_USE_ALG_IN_ANY_SIGNATURE, 0);
 | ||||
| +  if (srv != SECSuccess) {
 | ||||
| +    NS_WARNING("Unable to use SHA1 for Add-ons, expect broken/disabled Add-ons. See https://bugzilla.redhat.com/show_bug.cgi?id=1908018 for details.");
 | ||||
| +  }
 | ||||
| +
 | ||||
|    if (nssDbConfig == NSSDBConfig::ReadWrite) { | ||||
|      UniquePK11SlotInfo slot(PK11_GetInternalKeySlot()); | ||||
|      if (!slot) { | ||||
							
								
								
									
										846
									
								
								SOURCES/firefox-pipewire-0-3.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										846
									
								
								SOURCES/firefox-pipewire-0-3.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,846 @@ | ||||
| diff --git a/config/system-headers.mozbuild b/config/system-headers.mozbuild
 | ||||
| index 2081d0c683a4..641133bf1ea4 100644
 | ||||
| --- a/config/system-headers.mozbuild
 | ||||
| +++ b/config/system-headers.mozbuild
 | ||||
| @@ -314,6 +314,7 @@ system_headers = [
 | ||||
|      'Gestalt.h', | ||||
|      'getopt.h', | ||||
|      'gio/gio.h', | ||||
| +    'gio/gunixfdlist.h',
 | ||||
|      'glibconfig.h', | ||||
|      'glib.h', | ||||
|      'glib-object.h', | ||||
| @@ -607,6 +608,7 @@ system_headers = [
 | ||||
|      'Pgenerr.h', | ||||
|      'PGenErr.h', | ||||
|      'Ph.h', | ||||
| +    'pipewire/pipewire.h',
 | ||||
|      'pixman.h', | ||||
|      'pk11func.h', | ||||
|      'pk11pqg.h', | ||||
| diff --git a/media/webrtc/trunk/webrtc/modules/desktop_capture/BUILD.gn b/media/webrtc/trunk/webrtc/modules/desktop_capture/BUILD.gn
 | ||||
| index ba885217b3ba..201d3b755221 100644
 | ||||
| --- a/media/webrtc/trunk/webrtc/modules/desktop_capture/BUILD.gn
 | ||||
| +++ b/media/webrtc/trunk/webrtc/modules/desktop_capture/BUILD.gn
 | ||||
| @@ -158,7 +158,7 @@ if (rtc_include_tests) {
 | ||||
|  if (is_linux) { | ||||
|    if (rtc_use_pipewire) { | ||||
|      pkg_config("pipewire") { | ||||
| -      packages = [ "libpipewire-0.2" ]
 | ||||
| +      packages = [ "libpipewire-0.3" ]
 | ||||
|   | ||||
|        defines = [ "WEBRTC_USE_PIPEWIRE" ] | ||||
|      } | ||||
| diff --git a/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_generic_gn/moz.build b/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_generic_gn/moz.build
 | ||||
| index 90b40431c7e4..d844aa79d591 100644
 | ||||
| --- a/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_generic_gn/moz.build
 | ||||
| +++ b/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_generic_gn/moz.build
 | ||||
| @@ -194,6 +194,30 @@ if CONFIG["OS_TARGET"] == "Linux":
 | ||||
|          "/media/webrtc/trunk/webrtc/modules/desktop_capture/window_capturer_linux.cc" | ||||
|      ] | ||||
|   | ||||
| +# PipeWire specific files
 | ||||
| +if CONFIG["OS_TARGET"] == "Linux":
 | ||||
| +
 | ||||
| +    DEFINES["WEBRTC_USE_PIPEWIRE"] = "1"
 | ||||
| +
 | ||||
| +    OS_LIBS += [
 | ||||
| +        "rt",
 | ||||
| +        "pipewire-0.3",
 | ||||
| +        "glib-2.0",
 | ||||
| +        "gio-2.0",
 | ||||
| +        "gobject-2.0"
 | ||||
| +    ]
 | ||||
| +
 | ||||
| +    CXXFLAGS += CONFIG['TK_CFLAGS']
 | ||||
| +    CXXFLAGS += [ "-I/usr/include/pipewire-0.3" ]
 | ||||
| +    CXXFLAGS += [ "-I/usr/include/spa-0.2" ]
 | ||||
| +
 | ||||
| +    UNIFIED_SOURCES += [
 | ||||
| +        "/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.cc",
 | ||||
| +        "/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/screen_capturer_pipewire.cc",
 | ||||
| +        "/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/window_capturer_pipewire.cc"
 | ||||
| +    ]
 | ||||
| +
 | ||||
| +
 | ||||
|  if CONFIG["OS_TARGET"] == "NetBSD": | ||||
|   | ||||
|      DEFINES["USE_X11"] = "1" | ||||
| diff --git a/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_options.h b/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_options.h
 | ||||
| index 1eb8ead26efa..316468eed1fc 100644
 | ||||
| --- a/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_options.h
 | ||||
| +++ b/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_options.h
 | ||||
| @@ -141,7 +141,7 @@ class DesktopCaptureOptions {
 | ||||
|    bool disable_effects_ = true; | ||||
|    bool detect_updated_region_ = false; | ||||
|  #if defined(WEBRTC_USE_PIPEWIRE) | ||||
| -  bool allow_pipewire_ = false;
 | ||||
| +  bool allow_pipewire_ = true;
 | ||||
|  #endif | ||||
|  }; | ||||
|   | ||||
| diff --git a/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.cc b/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.cc
 | ||||
| index 379341c833de..76349f1fbd4d 100644
 | ||||
| --- a/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.cc
 | ||||
| +++ b/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.cc
 | ||||
| @@ -15,8 +15,11 @@
 | ||||
|   | ||||
|  #include <spa/param/format-utils.h> | ||||
|  #include <spa/param/props.h> | ||||
| -#include <spa/param/video/raw-utils.h>
 | ||||
| -#include <spa/support/type-map.h>
 | ||||
| +
 | ||||
| +#include <linux/dma-buf.h>
 | ||||
| +#include <sys/mman.h>
 | ||||
| +#include <sys/ioctl.h>
 | ||||
| +#include <sys/syscall.h>
 | ||||
|   | ||||
|  #include <memory> | ||||
|  #include <utility> | ||||
| @@ -36,31 +39,36 @@ const char kSessionInterfaceName[] = "org.freedesktop.portal.Session";
 | ||||
|  const char kRequestInterfaceName[] = "org.freedesktop.portal.Request"; | ||||
|  const char kScreenCastInterfaceName[] = "org.freedesktop.portal.ScreenCast"; | ||||
|   | ||||
| -// static
 | ||||
| -void BaseCapturerPipeWire::OnStateChanged(void* data,
 | ||||
| -                                          pw_remote_state old_state,
 | ||||
| -                                          pw_remote_state state,
 | ||||
| -                                          const char* error_message) {
 | ||||
| -  BaseCapturerPipeWire* that = static_cast<BaseCapturerPipeWire*>(data);
 | ||||
| -  RTC_DCHECK(that);
 | ||||
|   | ||||
| -  switch (state) {
 | ||||
| -    case PW_REMOTE_STATE_ERROR:
 | ||||
| -      RTC_LOG(LS_ERROR) << "PipeWire remote state error: " << error_message;
 | ||||
| -      break;
 | ||||
| -    case PW_REMOTE_STATE_CONNECTED:
 | ||||
| -      RTC_LOG(LS_INFO) << "PipeWire remote state: connected.";
 | ||||
| -      that->CreateReceivingStream();
 | ||||
| -      break;
 | ||||
| -    case PW_REMOTE_STATE_CONNECTING:
 | ||||
| -      RTC_LOG(LS_INFO) << "PipeWire remote state: connecting.";
 | ||||
| +// static
 | ||||
| +void BaseCapturerPipeWire::SyncDmaBuf(int fd, uint64_t start_or_end) {
 | ||||
| +  struct dma_buf_sync sync = { 0 };
 | ||||
| +
 | ||||
| +  sync.flags = start_or_end | DMA_BUF_SYNC_READ;
 | ||||
| +
 | ||||
| +  while(true) {
 | ||||
| +    int ret;
 | ||||
| +    ret = ioctl (fd, DMA_BUF_IOCTL_SYNC, &sync);
 | ||||
| +    if (ret == -1 && errno == EINTR) {
 | ||||
| +      continue;
 | ||||
| +    } else if (ret == -1) {
 | ||||
| +      RTC_LOG(LS_ERROR) << "Failed to synchronize DMA buffer: " << g_strerror(errno);
 | ||||
|        break; | ||||
| -    case PW_REMOTE_STATE_UNCONNECTED:
 | ||||
| -      RTC_LOG(LS_INFO) << "PipeWire remote state: unconnected.";
 | ||||
| +    } else {
 | ||||
|        break; | ||||
| +    }
 | ||||
|    } | ||||
|  } | ||||
|   | ||||
| +// static
 | ||||
| +void BaseCapturerPipeWire::OnCoreError(void *data,
 | ||||
| +                                       uint32_t id,
 | ||||
| +                                       int seq,
 | ||||
| +                                       int res,
 | ||||
| +                                       const char *message) {
 | ||||
| +  RTC_LOG(LS_ERROR) << "core error: " << message;
 | ||||
| +}
 | ||||
| +
 | ||||
|  // static | ||||
|  void BaseCapturerPipeWire::OnStreamStateChanged(void* data, | ||||
|                                                  pw_stream_state old_state, | ||||
| @@ -73,76 +81,54 @@ void BaseCapturerPipeWire::OnStreamStateChanged(void* data,
 | ||||
|      case PW_STREAM_STATE_ERROR: | ||||
|        RTC_LOG(LS_ERROR) << "PipeWire stream state error: " << error_message; | ||||
|        break; | ||||
| -    case PW_STREAM_STATE_CONFIGURE:
 | ||||
| -      pw_stream_set_active(that->pw_stream_, true);
 | ||||
| -      break;
 | ||||
| -    case PW_STREAM_STATE_UNCONNECTED:
 | ||||
| -    case PW_STREAM_STATE_CONNECTING:
 | ||||
| -    case PW_STREAM_STATE_READY:
 | ||||
|      case PW_STREAM_STATE_PAUSED: | ||||
|      case PW_STREAM_STATE_STREAMING: | ||||
| +    case PW_STREAM_STATE_UNCONNECTED:
 | ||||
| +    case PW_STREAM_STATE_CONNECTING:
 | ||||
|        break; | ||||
|    } | ||||
|  } | ||||
|   | ||||
|  // static | ||||
| -void BaseCapturerPipeWire::OnStreamFormatChanged(void* data,
 | ||||
| -                                                 const struct spa_pod* format) {
 | ||||
| +void BaseCapturerPipeWire::OnStreamParamChanged(void *data, uint32_t id,
 | ||||
| +                                                const struct spa_pod *format) {
 | ||||
|    BaseCapturerPipeWire* that = static_cast<BaseCapturerPipeWire*>(data); | ||||
|    RTC_DCHECK(that); | ||||
|   | ||||
| -  RTC_LOG(LS_INFO) << "PipeWire stream format changed.";
 | ||||
| +  RTC_LOG(LS_INFO) << "PipeWire stream param changed.";
 | ||||
|   | ||||
| -  if (!format) {
 | ||||
| -    pw_stream_finish_format(that->pw_stream_, /*res=*/0, /*params=*/nullptr,
 | ||||
| -                            /*n_params=*/0);
 | ||||
| +  if (!format || id != SPA_PARAM_Format) {
 | ||||
|      return; | ||||
|    } | ||||
|   | ||||
| -  that->spa_video_format_ = new spa_video_info_raw();
 | ||||
| -  spa_format_video_raw_parse(format, that->spa_video_format_,
 | ||||
| -                             &that->pw_type_->format_video);
 | ||||
| +  spa_format_video_raw_parse(format, &that->spa_video_format_);
 | ||||
|   | ||||
| -  auto width = that->spa_video_format_->size.width;
 | ||||
| -  auto height = that->spa_video_format_->size.height;
 | ||||
| +  auto width = that->spa_video_format_.size.width;
 | ||||
| +  auto height = that->spa_video_format_.size.height;
 | ||||
|    auto stride = SPA_ROUND_UP_N(width * kBytesPerPixel, 4); | ||||
|    auto size = height * stride; | ||||
|   | ||||
| +  that->desktop_size_ = DesktopSize(width, height);
 | ||||
| +
 | ||||
|    uint8_t buffer[1024] = {}; | ||||
|    auto builder = spa_pod_builder{buffer, sizeof(buffer)}; | ||||
|   | ||||
|    // Setup buffers and meta header for new format. | ||||
| -  const struct spa_pod* params[2];
 | ||||
| -  params[0] = reinterpret_cast<spa_pod*>(spa_pod_builder_object(
 | ||||
| -      &builder,
 | ||||
| -      // id to enumerate buffer requirements
 | ||||
| -      that->pw_core_type_->param.idBuffers,
 | ||||
| -      that->pw_core_type_->param_buffers.Buffers,
 | ||||
| -      // Size: specified as integer (i) and set to specified size
 | ||||
| -      ":", that->pw_core_type_->param_buffers.size, "i", size,
 | ||||
| -      // Stride: specified as integer (i) and set to specified stride
 | ||||
| -      ":", that->pw_core_type_->param_buffers.stride, "i", stride,
 | ||||
| -      // Buffers: specifies how many buffers we want to deal with, set as
 | ||||
| -      // integer (i) where preferred number is 8, then allowed number is defined
 | ||||
| -      // as range (r) from min and max values and it is undecided (u) to allow
 | ||||
| -      // negotiation
 | ||||
| -      ":", that->pw_core_type_->param_buffers.buffers, "iru", 8,
 | ||||
| -      SPA_POD_PROP_MIN_MAX(1, 32),
 | ||||
| -      // Align: memory alignment of the buffer, set as integer (i) to specified
 | ||||
| -      // value
 | ||||
| -      ":", that->pw_core_type_->param_buffers.align, "i", 16));
 | ||||
| -  params[1] = reinterpret_cast<spa_pod*>(spa_pod_builder_object(
 | ||||
| -      &builder,
 | ||||
| -      // id to enumerate supported metadata
 | ||||
| -      that->pw_core_type_->param.idMeta, that->pw_core_type_->param_meta.Meta,
 | ||||
| -      // Type: specified as id or enum (I)
 | ||||
| -      ":", that->pw_core_type_->param_meta.type, "I",
 | ||||
| -      that->pw_core_type_->meta.Header,
 | ||||
| -      // Size: size of the metadata, specified as integer (i)
 | ||||
| -      ":", that->pw_core_type_->param_meta.size, "i",
 | ||||
| -      sizeof(struct spa_meta_header)));
 | ||||
| -
 | ||||
| -  pw_stream_finish_format(that->pw_stream_, /*res=*/0, params, /*n_params=*/2);
 | ||||
| +  const struct spa_pod* params[3];
 | ||||
| +  params[0] = reinterpret_cast<spa_pod *>(spa_pod_builder_add_object(&builder,
 | ||||
| +              SPA_TYPE_OBJECT_ParamBuffers, SPA_PARAM_Buffers,
 | ||||
| +              SPA_PARAM_BUFFERS_size, SPA_POD_Int(size),
 | ||||
| +              SPA_PARAM_BUFFERS_stride, SPA_POD_Int(stride),
 | ||||
| +              SPA_PARAM_BUFFERS_buffers, SPA_POD_CHOICE_RANGE_Int(8, 1, 32)));
 | ||||
| +  params[1] = reinterpret_cast<spa_pod *>(spa_pod_builder_add_object(&builder,
 | ||||
| +              SPA_TYPE_OBJECT_ParamMeta, SPA_PARAM_Meta,
 | ||||
| +              SPA_PARAM_META_type, SPA_POD_Id(SPA_META_Header),
 | ||||
| +              SPA_PARAM_META_size, SPA_POD_Int(sizeof(struct spa_meta_header))));
 | ||||
| +  params[2] = reinterpret_cast<spa_pod *>(spa_pod_builder_add_object(&builder,
 | ||||
| +              SPA_TYPE_OBJECT_ParamMeta, SPA_PARAM_Meta,
 | ||||
| +              SPA_PARAM_META_type, SPA_POD_Id (SPA_META_VideoCrop),
 | ||||
| +              SPA_PARAM_META_size, SPA_POD_Int (sizeof(struct spa_meta_region))));
 | ||||
| +  pw_stream_update_params(that->pw_stream_, params, 3);
 | ||||
|  } | ||||
|   | ||||
|  // static | ||||
| @@ -150,15 +136,25 @@ void BaseCapturerPipeWire::OnStreamProcess(void* data) {
 | ||||
|    BaseCapturerPipeWire* that = static_cast<BaseCapturerPipeWire*>(data); | ||||
|    RTC_DCHECK(that); | ||||
|   | ||||
| -  pw_buffer* buf = nullptr;
 | ||||
| +  struct pw_buffer *next_buffer;
 | ||||
| +  struct pw_buffer *buffer = nullptr;
 | ||||
| +
 | ||||
| +  next_buffer = pw_stream_dequeue_buffer(that->pw_stream_);
 | ||||
| +  while (next_buffer) {
 | ||||
| +    buffer = next_buffer;
 | ||||
| +    next_buffer = pw_stream_dequeue_buffer(that->pw_stream_);
 | ||||
|   | ||||
| -  if (!(buf = pw_stream_dequeue_buffer(that->pw_stream_))) {
 | ||||
| +    if (next_buffer)
 | ||||
| +      pw_stream_queue_buffer (that->pw_stream_, buffer);
 | ||||
| +  }
 | ||||
| +
 | ||||
| +  if (!buffer) {
 | ||||
|      return; | ||||
|    } | ||||
|   | ||||
| -  that->HandleBuffer(buf);
 | ||||
| +  that->HandleBuffer(buffer);
 | ||||
|   | ||||
| -  pw_stream_queue_buffer(that->pw_stream_, buf);
 | ||||
| +  pw_stream_queue_buffer(that->pw_stream_, buffer);
 | ||||
|  } | ||||
|   | ||||
|  BaseCapturerPipeWire::BaseCapturerPipeWire(CaptureSourceType source_type) | ||||
| @@ -169,38 +165,22 @@ BaseCapturerPipeWire::~BaseCapturerPipeWire() {
 | ||||
|      pw_thread_loop_stop(pw_main_loop_); | ||||
|    } | ||||
|   | ||||
| -  if (pw_type_) {
 | ||||
| -    delete pw_type_;
 | ||||
| -  }
 | ||||
| -
 | ||||
| -  if (spa_video_format_) {
 | ||||
| -    delete spa_video_format_;
 | ||||
| -  }
 | ||||
| -
 | ||||
|    if (pw_stream_) { | ||||
|      pw_stream_destroy(pw_stream_); | ||||
|    } | ||||
|   | ||||
| -  if (pw_remote_) {
 | ||||
| -    pw_remote_destroy(pw_remote_);
 | ||||
| +  if (pw_core_) {
 | ||||
| +    pw_core_disconnect(pw_core_);
 | ||||
|    } | ||||
|   | ||||
| -  if (pw_core_) {
 | ||||
| -    pw_core_destroy(pw_core_);
 | ||||
| +  if (pw_context_) {
 | ||||
| +    pw_context_destroy(pw_context_);
 | ||||
|    } | ||||
|   | ||||
|    if (pw_main_loop_) { | ||||
|      pw_thread_loop_destroy(pw_main_loop_); | ||||
|    } | ||||
|   | ||||
| -  if (pw_loop_) {
 | ||||
| -    pw_loop_destroy(pw_loop_);
 | ||||
| -  }
 | ||||
| -
 | ||||
| -  if (current_frame_) {
 | ||||
| -    free(current_frame_);
 | ||||
| -  }
 | ||||
| -
 | ||||
|    if (start_request_signal_id_) { | ||||
|      g_dbus_connection_signal_unsubscribe(connection_, start_request_signal_id_); | ||||
|    } | ||||
| @@ -250,27 +230,35 @@ void BaseCapturerPipeWire::InitPortal() {
 | ||||
|  void BaseCapturerPipeWire::InitPipeWire() { | ||||
|    pw_init(/*argc=*/nullptr, /*argc=*/nullptr); | ||||
|   | ||||
| -  pw_loop_ = pw_loop_new(/*properties=*/nullptr);
 | ||||
| -  pw_main_loop_ = pw_thread_loop_new(pw_loop_, "pipewire-main-loop");
 | ||||
| -
 | ||||
| -  pw_core_ = pw_core_new(pw_loop_, /*properties=*/nullptr);
 | ||||
| -  pw_core_type_ = pw_core_get_type(pw_core_);
 | ||||
| -  pw_remote_ = pw_remote_new(pw_core_, nullptr, /*user_data_size=*/0);
 | ||||
| +  pw_main_loop_ = pw_thread_loop_new("pipewire-main-loop", nullptr);
 | ||||
| +  pw_context_ = pw_context_new(pw_thread_loop_get_loop(pw_main_loop_), nullptr, 0);
 | ||||
| +  if (!pw_context_) {
 | ||||
| +    RTC_LOG(LS_ERROR) << "Failed to create PipeWire context";
 | ||||
| +    return;
 | ||||
| +  }
 | ||||
|   | ||||
| -  InitPipeWireTypes();
 | ||||
| +  pw_core_ = pw_context_connect(pw_context_, nullptr, 0);
 | ||||
| +  if (!pw_core_) {
 | ||||
| +    RTC_LOG(LS_ERROR) << "Failed to connect PipeWire context";
 | ||||
| +    return;
 | ||||
| +  }
 | ||||
|   | ||||
|    // Initialize event handlers, remote end and stream-related. | ||||
| -  pw_remote_events_.version = PW_VERSION_REMOTE_EVENTS;
 | ||||
| -  pw_remote_events_.state_changed = &OnStateChanged;
 | ||||
| +  pw_core_events_.version = PW_VERSION_CORE_EVENTS;
 | ||||
| +  pw_core_events_.error = &OnCoreError;
 | ||||
|   | ||||
|    pw_stream_events_.version = PW_VERSION_STREAM_EVENTS; | ||||
|    pw_stream_events_.state_changed = &OnStreamStateChanged; | ||||
| -  pw_stream_events_.format_changed = &OnStreamFormatChanged;
 | ||||
| +  pw_stream_events_.param_changed = &OnStreamParamChanged;
 | ||||
|    pw_stream_events_.process = &OnStreamProcess; | ||||
|   | ||||
| -  pw_remote_add_listener(pw_remote_, &spa_remote_listener_, &pw_remote_events_,
 | ||||
| -                         this);
 | ||||
| -  pw_remote_connect_fd(pw_remote_, pw_fd_);
 | ||||
| +  pw_core_add_listener(pw_core_, &spa_core_listener_, &pw_core_events_, this);
 | ||||
| +
 | ||||
| +  pw_stream_ = CreateReceivingStream();
 | ||||
| +  if (!pw_stream_) {
 | ||||
| +    RTC_LOG(LS_ERROR) << "Failed to create PipeWire stream";
 | ||||
| +    return;
 | ||||
| +  }
 | ||||
|   | ||||
|    if (pw_thread_loop_start(pw_main_loop_) < 0) { | ||||
|      RTC_LOG(LS_ERROR) << "Failed to start main PipeWire loop"; | ||||
| @@ -278,81 +266,132 @@ void BaseCapturerPipeWire::InitPipeWire() {
 | ||||
|    } | ||||
|  } | ||||
|   | ||||
| -void BaseCapturerPipeWire::InitPipeWireTypes() {
 | ||||
| -  spa_type_map* map = pw_core_type_->map;
 | ||||
| -  pw_type_ = new PipeWireType();
 | ||||
| -
 | ||||
| -  spa_type_media_type_map(map, &pw_type_->media_type);
 | ||||
| -  spa_type_media_subtype_map(map, &pw_type_->media_subtype);
 | ||||
| -  spa_type_format_video_map(map, &pw_type_->format_video);
 | ||||
| -  spa_type_video_format_map(map, &pw_type_->video_format);
 | ||||
| -}
 | ||||
| -
 | ||||
| -void BaseCapturerPipeWire::CreateReceivingStream() {
 | ||||
| +pw_stream* BaseCapturerPipeWire::CreateReceivingStream() {
 | ||||
|    spa_rectangle pwMinScreenBounds = spa_rectangle{1, 1}; | ||||
| -  spa_rectangle pwScreenBounds =
 | ||||
| -      spa_rectangle{static_cast<uint32_t>(desktop_size_.width()),
 | ||||
| -                    static_cast<uint32_t>(desktop_size_.height())};
 | ||||
| +  spa_rectangle pwMaxScreenBounds = spa_rectangle{INT32_MAX, INT32_MAX};
 | ||||
|   | ||||
| -  spa_fraction pwFrameRateMin = spa_fraction{0, 1};
 | ||||
| -  spa_fraction pwFrameRateMax = spa_fraction{60, 1};
 | ||||
| +  auto stream = pw_stream_new(pw_core_, "webrtc-pipewire-stream", nullptr);
 | ||||
|   | ||||
| -  pw_properties* reuseProps = pw_properties_new("pipewire.client.reuse", "1",
 | ||||
| -                                                /*end of varargs*/ nullptr);
 | ||||
| -  pw_stream_ = pw_stream_new(pw_remote_, "webrtc-consume-stream", reuseProps);
 | ||||
| +  if (!stream) {
 | ||||
| +    RTC_LOG(LS_ERROR) << "Could not create receiving stream.";
 | ||||
| +    return nullptr;
 | ||||
| +  }
 | ||||
|   | ||||
|    uint8_t buffer[1024] = {}; | ||||
| -  const spa_pod* params[1];
 | ||||
| -  spa_pod_builder builder = spa_pod_builder{buffer, sizeof(buffer)};
 | ||||
| -  params[0] = reinterpret_cast<spa_pod*>(spa_pod_builder_object(
 | ||||
| -      &builder,
 | ||||
| -      // id to enumerate formats
 | ||||
| -      pw_core_type_->param.idEnumFormat, pw_core_type_->spa_format, "I",
 | ||||
| -      pw_type_->media_type.video, "I", pw_type_->media_subtype.raw,
 | ||||
| -      // Video format: specified as id or enum (I), preferred format is BGRx,
 | ||||
| -      // then allowed formats are enumerated (e) and the format is undecided (u)
 | ||||
| -      // to allow negotiation
 | ||||
| -      ":", pw_type_->format_video.format, "Ieu", pw_type_->video_format.BGRx,
 | ||||
| -      SPA_POD_PROP_ENUM(2, pw_type_->video_format.RGBx,
 | ||||
| -                        pw_type_->video_format.BGRx),
 | ||||
| -      // Video size: specified as rectangle (R), preferred size is specified as
 | ||||
| -      // first parameter, then allowed size is defined as range (r) from min and
 | ||||
| -      // max values and the format is undecided (u) to allow negotiation
 | ||||
| -      ":", pw_type_->format_video.size, "Rru", &pwScreenBounds, 2,
 | ||||
| -      &pwMinScreenBounds, &pwScreenBounds,
 | ||||
| -      // Frame rate: specified as fraction (F) and set to minimum frame rate
 | ||||
| -      // value
 | ||||
| -      ":", pw_type_->format_video.framerate, "F", &pwFrameRateMin,
 | ||||
| -      // Max frame rate: specified as fraction (F), preferred frame rate is set
 | ||||
| -      // to maximum value, then allowed frame rate is defined as range (r) from
 | ||||
| -      // min and max values and it is undecided (u) to allow negotiation
 | ||||
| -      ":", pw_type_->format_video.max_framerate, "Fru", &pwFrameRateMax, 2,
 | ||||
| -      &pwFrameRateMin, &pwFrameRateMax));
 | ||||
| -
 | ||||
| -  pw_stream_add_listener(pw_stream_, &spa_stream_listener_, &pw_stream_events_,
 | ||||
| -                         this);
 | ||||
| +  const spa_pod* params[2];
 | ||||
| +  spa_pod_builder builder = SPA_POD_BUILDER_INIT(buffer, sizeof (buffer));
 | ||||
| +
 | ||||
| +  params[0] = reinterpret_cast<spa_pod *>(spa_pod_builder_add_object(&builder,
 | ||||
| +              SPA_TYPE_OBJECT_Format, SPA_PARAM_EnumFormat,
 | ||||
| +              SPA_FORMAT_mediaType, SPA_POD_Id(SPA_MEDIA_TYPE_video),
 | ||||
| +              SPA_FORMAT_mediaSubtype, SPA_POD_Id(SPA_MEDIA_SUBTYPE_raw),
 | ||||
| +              SPA_FORMAT_VIDEO_format, SPA_POD_CHOICE_ENUM_Id(5, SPA_VIDEO_FORMAT_BGRx, SPA_VIDEO_FORMAT_RGBx, SPA_VIDEO_FORMAT_RGBA,
 | ||||
| +                                                                 SPA_VIDEO_FORMAT_BGRx, SPA_VIDEO_FORMAT_BGRA),
 | ||||
| +              SPA_FORMAT_VIDEO_size, SPA_POD_CHOICE_RANGE_Rectangle(&pwMinScreenBounds,
 | ||||
| +                                                                    &pwMinScreenBounds,
 | ||||
| +                                                                    &pwMaxScreenBounds),
 | ||||
| +              0));
 | ||||
| +  pw_stream_add_listener(stream, &spa_stream_listener_, &pw_stream_events_, this);
 | ||||
| +
 | ||||
|    pw_stream_flags flags = static_cast<pw_stream_flags>( | ||||
| -      PW_STREAM_FLAG_AUTOCONNECT | PW_STREAM_FLAG_INACTIVE |
 | ||||
| -      PW_STREAM_FLAG_MAP_BUFFERS);
 | ||||
| -  if (pw_stream_connect(pw_stream_, PW_DIRECTION_INPUT, /*port_path=*/nullptr,
 | ||||
| -                        flags, params,
 | ||||
| -                        /*n_params=*/1) != 0) {
 | ||||
| +      PW_STREAM_FLAG_AUTOCONNECT | PW_STREAM_FLAG_INACTIVE);
 | ||||
| +
 | ||||
| +  if (pw_stream_connect(stream, PW_DIRECTION_INPUT, pw_stream_node_id_, PW_STREAM_FLAG_AUTOCONNECT, params, 1) != 0) {
 | ||||
|      RTC_LOG(LS_ERROR) << "Could not connect receiving stream."; | ||||
|      portal_init_failed_ = true; | ||||
| -    return;
 | ||||
|    } | ||||
| +
 | ||||
| +  return stream;
 | ||||
|  } | ||||
|   | ||||
|  void BaseCapturerPipeWire::HandleBuffer(pw_buffer* buffer) { | ||||
| +  struct spa_meta_region* video_crop;
 | ||||
|    spa_buffer* spaBuffer = buffer->buffer; | ||||
| -  void* src = nullptr;
 | ||||
| +  uint8_t *map = nullptr;
 | ||||
| +  uint8_t* src = nullptr;
 | ||||
| +  uint8_t* dst = nullptr;
 | ||||
| +
 | ||||
| +  if (spaBuffer->datas[0].chunk->size == 0) {
 | ||||
| +    map = nullptr;
 | ||||
| +    src = nullptr;
 | ||||
| +  } else if (spaBuffer->datas[0].type == SPA_DATA_MemFd) {
 | ||||
| +    map = static_cast<uint8_t*>(mmap(
 | ||||
| +        nullptr, spaBuffer->datas[0].maxsize + spaBuffer->datas[0].mapoffset,
 | ||||
| +        PROT_READ, MAP_PRIVATE, spaBuffer->datas[0].fd, 0));
 | ||||
| +
 | ||||
| +    if (map == MAP_FAILED) {
 | ||||
| +      RTC_LOG(LS_ERROR) << "Failed to mmap the memory: " << std::strerror(errno);
 | ||||
| +      return;
 | ||||
| +    }
 | ||||
| +
 | ||||
| +    src = SPA_MEMBER(map, spaBuffer->datas[0].mapoffset, uint8_t);
 | ||||
| +  } else if (spaBuffer->datas[0].type == SPA_DATA_DmaBuf) {
 | ||||
| +    int fd;
 | ||||
| +    fd = spaBuffer->datas[0].fd;
 | ||||
|   | ||||
| -  if (!(src = spaBuffer->datas[0].data)) {
 | ||||
| +    map = static_cast<uint8_t*>(mmap(
 | ||||
| +        nullptr, spaBuffer->datas[0].maxsize + spaBuffer->datas[0].mapoffset,
 | ||||
| +        PROT_READ, MAP_PRIVATE, fd, 0));
 | ||||
| +
 | ||||
| +    if (map == MAP_FAILED) {
 | ||||
| +      RTC_LOG(LS_ERROR) << "Failed to mmap the memory: " << std::strerror(errno);
 | ||||
| +      return;
 | ||||
| +    }
 | ||||
| +
 | ||||
| +    SyncDmaBuf(fd, DMA_BUF_SYNC_START);
 | ||||
| +
 | ||||
| +    src = SPA_MEMBER(map, spaBuffer->datas[0].mapoffset, uint8_t);
 | ||||
| +  } else if (spaBuffer->datas[0].type == SPA_DATA_MemPtr) {
 | ||||
| +    map = nullptr;
 | ||||
| +    src = static_cast<uint8_t*>(spaBuffer->datas[0].data);
 | ||||
| +  } else {
 | ||||
|      return; | ||||
|    } | ||||
|   | ||||
| -  uint32_t maxSize = spaBuffer->datas[0].maxsize;
 | ||||
| -  int32_t srcStride = spaBuffer->datas[0].chunk->stride;
 | ||||
| +  if (!src) {
 | ||||
| +    return;
 | ||||
| +  }
 | ||||
| +
 | ||||
| +  DesktopSize prev_crop_size = DesktopSize(0, 0);
 | ||||
| +  if (video_crop_size_initialized_) {
 | ||||
| +    prev_crop_size = video_crop_size_;
 | ||||
| +  }  
 | ||||
| +
 | ||||
| +  if ((video_crop = static_cast<struct spa_meta_region*>(
 | ||||
| +           spa_buffer_find_meta_data(spaBuffer, SPA_META_VideoCrop, sizeof(*video_crop))))) {
 | ||||
| +    RTC_DCHECK(video_crop->region.size.width <= desktop_size_.width() &&
 | ||||
| +               video_crop->region.size.height <= desktop_size_.height());
 | ||||
| +    if ((video_crop->region.size.width != desktop_size_.width() ||
 | ||||
| +        video_crop->region.size.height != desktop_size_.height()) && video_crop->region.size.width && video_crop->region.size.height) {
 | ||||
| +      video_crop_size_ = DesktopSize(video_crop->region.size.width, video_crop->region.size.height);
 | ||||
| +      video_crop_size_initialized_ = true;
 | ||||
| +    } else {
 | ||||
| +      video_crop_size_initialized_ = false;
 | ||||
| +    }
 | ||||
| +  } else {
 | ||||
| +    video_crop_size_initialized_ = false;
 | ||||
| +  }
 | ||||
| +
 | ||||
| +  size_t frame_size;
 | ||||
| +  if (video_crop_size_initialized_) {
 | ||||
| +    frame_size =
 | ||||
| +        video_crop_size_.width() * video_crop_size_.height() * kBytesPerPixel;
 | ||||
| +  } else {
 | ||||
| +    frame_size =
 | ||||
| +        desktop_size_.width() * desktop_size_.height() * kBytesPerPixel;
 | ||||
| +  }
 | ||||
| +
 | ||||
| +  if (!current_frame_ ||
 | ||||
| +      (video_crop_size_initialized_ && !video_crop_size_.equals(prev_crop_size))) {
 | ||||
| +    current_frame_ = std::make_unique<uint8_t[]>(frame_size);
 | ||||
| +  }
 | ||||
| +  RTC_DCHECK(current_frame_ != nullptr);
 | ||||
| +
 | ||||
| +  const int32_t dstStride = video_crop_size_initialized_
 | ||||
| +                                ? video_crop_size_.width() * kBytesPerPixel
 | ||||
| +                                : desktop_size_.width() * kBytesPerPixel;
 | ||||
| +  const int32_t srcStride = spaBuffer->datas[0].chunk->stride;
 | ||||
| +
 | ||||
|    if (srcStride != (desktop_size_.width() * kBytesPerPixel)) { | ||||
|      RTC_LOG(LS_ERROR) << "Got buffer with stride different from screen stride: " | ||||
|                        << srcStride | ||||
| @@ -361,21 +400,40 @@ void BaseCapturerPipeWire::HandleBuffer(pw_buffer* buffer) {
 | ||||
|      return; | ||||
|    } | ||||
|   | ||||
| -  if (!current_frame_) {
 | ||||
| -    current_frame_ = static_cast<uint8_t*>(malloc(maxSize));
 | ||||
| +  dst = current_frame_.get();
 | ||||
| +
 | ||||
| +  // Adjust source content based on crop video position
 | ||||
| +  if (video_crop_size_initialized_ &&
 | ||||
| +      (video_crop->region.position.y + video_crop_size_.height() <= desktop_size_.height())) {
 | ||||
| +    for (int i = 0; i < video_crop->region.position.y; ++i) {
 | ||||
| +      src += srcStride;
 | ||||
| +    }
 | ||||
| +  }
 | ||||
| +  const int xOffset =
 | ||||
| +      video_crop_size_initialized_ && (video_crop->region.position.x + video_crop_size_.width() <=
 | ||||
| +                           desktop_size_.width())
 | ||||
| +          ? video_crop->region.position.x * kBytesPerPixel
 | ||||
| +          : 0;
 | ||||
| +  const int height = video_crop_size_initialized_ ? video_crop_size_.height() : desktop_size_.height();
 | ||||
| +  for (int i = 0; i < height; ++i) {
 | ||||
| +    // Adjust source content based on crop video position if needed
 | ||||
| +    src += xOffset;
 | ||||
| +    std::memcpy(dst, src, dstStride);
 | ||||
| +    // If both sides decided to go with the RGBx format we need to convert it to
 | ||||
| +    // BGRx to match color format expected by WebRTC.
 | ||||
| +    if (spa_video_format_.format == SPA_VIDEO_FORMAT_RGBx ||
 | ||||
| +        spa_video_format_.format == SPA_VIDEO_FORMAT_RGBA) {
 | ||||
| +      ConvertRGBxToBGRx(dst, dstStride);
 | ||||
| +    }
 | ||||
| +    src += srcStride - xOffset;
 | ||||
| +    dst += dstStride;
 | ||||
|    } | ||||
| -  RTC_DCHECK(current_frame_ != nullptr);
 | ||||
|   | ||||
| -  // If both sides decided to go with the RGBx format we need to convert it to
 | ||||
| -  // BGRx to match color format expected by WebRTC.
 | ||||
| -  if (spa_video_format_->format == pw_type_->video_format.RGBx) {
 | ||||
| -    uint8_t* tempFrame = static_cast<uint8_t*>(malloc(maxSize));
 | ||||
| -    std::memcpy(tempFrame, src, maxSize);
 | ||||
| -    ConvertRGBxToBGRx(tempFrame, maxSize);
 | ||||
| -    std::memcpy(current_frame_, tempFrame, maxSize);
 | ||||
| -    free(tempFrame);
 | ||||
| -  } else {
 | ||||
| -    std::memcpy(current_frame_, src, maxSize);
 | ||||
| +  if (map) {
 | ||||
| +    if (spaBuffer->datas[0].type == SPA_DATA_DmaBuf) {
 | ||||
| +      SyncDmaBuf(spaBuffer->datas[0].fd, DMA_BUF_SYNC_END);
 | ||||
| +    }
 | ||||
| +    munmap(map, spaBuffer->datas[0].maxsize + spaBuffer->datas[0].mapoffset);
 | ||||
|    } | ||||
|  } | ||||
|   | ||||
| @@ -725,10 +783,7 @@ void BaseCapturerPipeWire::OnStartRequestResponseSignal(
 | ||||
|        g_variant_get(variant, "(u@a{sv})", &stream_id, &options); | ||||
|        RTC_DCHECK(options != nullptr); | ||||
|   | ||||
| -      g_variant_lookup(options, "size", "(ii)", &width, &height);
 | ||||
| -
 | ||||
| -      that->desktop_size_.set(width, height);
 | ||||
| -
 | ||||
| +      that->pw_stream_node_id_ = stream_id;
 | ||||
|        g_variant_unref(options); | ||||
|        g_variant_unref(variant); | ||||
|      } | ||||
| @@ -813,10 +868,15 @@ void BaseCapturerPipeWire::CaptureFrame() {
 | ||||
|      return; | ||||
|    } | ||||
|   | ||||
| -  std::unique_ptr<DesktopFrame> result(new BasicDesktopFrame(desktop_size_));
 | ||||
| +  DesktopSize frame_size = desktop_size_;
 | ||||
| +  if (video_crop_size_initialized_) {
 | ||||
| +    frame_size = video_crop_size_;
 | ||||
| +  }
 | ||||
| +  
 | ||||
| +  std::unique_ptr<DesktopFrame> result(new BasicDesktopFrame(frame_size));
 | ||||
|    result->CopyPixelsFrom( | ||||
| -      current_frame_, (desktop_size_.width() * kBytesPerPixel),
 | ||||
| -      DesktopRect::MakeWH(desktop_size_.width(), desktop_size_.height()));
 | ||||
| +      current_frame_.get(), (frame_size.width() * kBytesPerPixel),
 | ||||
| +      DesktopRect::MakeWH(frame_size.width(), frame_size.height()));
 | ||||
|    if (!result) { | ||||
|      callback_->OnCaptureResult(Result::ERROR_TEMPORARY, nullptr); | ||||
|      return; | ||||
| @@ -837,4 +897,22 @@ bool BaseCapturerPipeWire::SelectSource(SourceId id) {
 | ||||
|    return true; | ||||
|  } | ||||
|   | ||||
| +// static
 | ||||
| +std::unique_ptr<DesktopCapturer>
 | ||||
| +BaseCapturerPipeWire::CreateRawScreenCapturer(
 | ||||
| +    const DesktopCaptureOptions& options) {
 | ||||
| +  std::unique_ptr<BaseCapturerPipeWire> capturer =
 | ||||
| +      std::make_unique<BaseCapturerPipeWire>(BaseCapturerPipeWire::CaptureSourceType::kAny);
 | ||||
| +  return std::move(capturer);}
 | ||||
| +
 | ||||
| +// static
 | ||||
| +std::unique_ptr<DesktopCapturer>
 | ||||
| +BaseCapturerPipeWire::CreateRawWindowCapturer(
 | ||||
| +    const DesktopCaptureOptions& options) {
 | ||||
| +
 | ||||
| +  std::unique_ptr<BaseCapturerPipeWire> capturer =
 | ||||
| +      std::make_unique<BaseCapturerPipeWire>(BaseCapturerPipeWire::CaptureSourceType::kAny);
 | ||||
| +  return std::move(capturer);
 | ||||
| +}
 | ||||
| +
 | ||||
|  }  // namespace webrtc | ||||
| diff --git a/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.h b/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.h
 | ||||
| index 56b101acbaa6..de54157d1a2a 100644
 | ||||
| --- a/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.h
 | ||||
| +++ b/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.h
 | ||||
| @@ -22,17 +22,13 @@
 | ||||
|   | ||||
|  namespace webrtc { | ||||
|   | ||||
| -class PipeWireType {
 | ||||
| - public:
 | ||||
| -  spa_type_media_type media_type;
 | ||||
| -  spa_type_media_subtype media_subtype;
 | ||||
| -  spa_type_format_video format_video;
 | ||||
| -  spa_type_video_format video_format;
 | ||||
| -};
 | ||||
| -
 | ||||
|  class BaseCapturerPipeWire : public DesktopCapturer { | ||||
|   public: | ||||
| -  enum CaptureSourceType { Screen = 1, Window };
 | ||||
| +  enum CaptureSourceType : uint32_t {
 | ||||
| +    kScreen = 0b01,
 | ||||
| +    kWindow = 0b10,
 | ||||
| +    kAny = 0b11
 | ||||
| +  };
 | ||||
|   | ||||
|    explicit BaseCapturerPipeWire(CaptureSourceType source_type); | ||||
|    ~BaseCapturerPipeWire() override; | ||||
| @@ -43,28 +39,32 @@ class BaseCapturerPipeWire : public DesktopCapturer {
 | ||||
|    bool GetSourceList(SourceList* sources) override; | ||||
|    bool SelectSource(SourceId id) override; | ||||
|   | ||||
| +  static std::unique_ptr<DesktopCapturer> CreateRawScreenCapturer(
 | ||||
| +      const DesktopCaptureOptions& options);
 | ||||
| +
 | ||||
| +  static std::unique_ptr<DesktopCapturer> CreateRawWindowCapturer(
 | ||||
| +      const DesktopCaptureOptions& options);
 | ||||
| +
 | ||||
|   private: | ||||
|    // PipeWire types --> | ||||
| +  pw_context* pw_context_ = nullptr;
 | ||||
|    pw_core* pw_core_ = nullptr; | ||||
| -  pw_type* pw_core_type_ = nullptr;
 | ||||
|    pw_stream* pw_stream_ = nullptr; | ||||
| -  pw_remote* pw_remote_ = nullptr;
 | ||||
| -  pw_loop* pw_loop_ = nullptr;
 | ||||
|    pw_thread_loop* pw_main_loop_ = nullptr; | ||||
| -  PipeWireType* pw_type_ = nullptr;
 | ||||
|   | ||||
| +  spa_hook spa_core_listener_ = {};
 | ||||
|    spa_hook spa_stream_listener_ = {}; | ||||
| -  spa_hook spa_remote_listener_ = {};
 | ||||
|   | ||||
| +  pw_core_events pw_core_events_ = {};
 | ||||
|    pw_stream_events pw_stream_events_ = {}; | ||||
| -  pw_remote_events pw_remote_events_ = {};
 | ||||
|   | ||||
| -  spa_video_info_raw* spa_video_format_ = nullptr;
 | ||||
| +  struct spa_video_info_raw spa_video_format_;
 | ||||
|   | ||||
| +  guint32 pw_stream_node_id_ = 0;
 | ||||
|    gint32 pw_fd_ = -1; | ||||
|   | ||||
|    CaptureSourceType capture_source_type_ = | ||||
| -      BaseCapturerPipeWire::CaptureSourceType::Screen;
 | ||||
| +      BaseCapturerPipeWire::CaptureSourceType::kAny;
 | ||||
|   | ||||
|    // <-- end of PipeWire types | ||||
|   | ||||
| @@ -78,33 +78,37 @@ class BaseCapturerPipeWire : public DesktopCapturer {
 | ||||
|    guint sources_request_signal_id_ = 0; | ||||
|    guint start_request_signal_id_ = 0; | ||||
|   | ||||
| +  bool video_crop_size_initialized_ = false;
 | ||||
| +  DesktopSize video_crop_size_;;
 | ||||
|    DesktopSize desktop_size_ = {}; | ||||
|    DesktopCaptureOptions options_ = {}; | ||||
|   | ||||
| -  uint8_t* current_frame_ = nullptr;
 | ||||
| +  std::unique_ptr<uint8_t[]> current_frame_;
 | ||||
|    Callback* callback_ = nullptr; | ||||
|   | ||||
|    bool portal_init_failed_ = false; | ||||
|   | ||||
|    void InitPortal(); | ||||
|    void InitPipeWire(); | ||||
| -  void InitPipeWireTypes();
 | ||||
|   | ||||
| -  void CreateReceivingStream();
 | ||||
| +  pw_stream* CreateReceivingStream();
 | ||||
|    void HandleBuffer(pw_buffer* buffer); | ||||
|   | ||||
|    void ConvertRGBxToBGRx(uint8_t* frame, uint32_t size); | ||||
|   | ||||
| -  static void OnStateChanged(void* data,
 | ||||
| -                             pw_remote_state old_state,
 | ||||
| -                             pw_remote_state state,
 | ||||
| -                             const char* error);
 | ||||
| +  static void SyncDmaBuf(int fd, uint64_t start_or_end);
 | ||||
| +  static void OnCoreError(void *data,
 | ||||
| +                          uint32_t id,
 | ||||
| +                          int seq,
 | ||||
| +                          int res,
 | ||||
| +                          const char *message);
 | ||||
| +  static void OnStreamParamChanged(void *data,
 | ||||
| +                                   uint32_t id,
 | ||||
| +                                   const struct spa_pod *format);
 | ||||
|    static void OnStreamStateChanged(void* data, | ||||
|                                     pw_stream_state old_state, | ||||
|                                     pw_stream_state state, | ||||
|                                     const char* error_message); | ||||
| -
 | ||||
| -  static void OnStreamFormatChanged(void* data, const struct spa_pod* format);
 | ||||
|    static void OnStreamProcess(void* data); | ||||
|    static void OnNewBuffer(void* data, uint32_t id); | ||||
|   | ||||
| diff --git a/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/screen_capturer_pipewire.cc b/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/screen_capturer_pipewire.cc
 | ||||
| index 26956fc67dc8..3813d697bb38 100644
 | ||||
| --- a/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/screen_capturer_pipewire.cc
 | ||||
| +++ b/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/screen_capturer_pipewire.cc
 | ||||
| @@ -15,7 +15,7 @@
 | ||||
|  namespace webrtc { | ||||
|   | ||||
|  ScreenCapturerPipeWire::ScreenCapturerPipeWire() | ||||
| -    : BaseCapturerPipeWire(BaseCapturerPipeWire::CaptureSourceType::Screen) {}
 | ||||
| +    : BaseCapturerPipeWire(BaseCapturerPipeWire::CaptureSourceType::kScreen) {}
 | ||||
|  ScreenCapturerPipeWire::~ScreenCapturerPipeWire() {} | ||||
|   | ||||
|  // static | ||||
| diff --git a/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/window_capturer_pipewire.cc b/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/window_capturer_pipewire.cc
 | ||||
| index 35436475cb4d..c43a1f1a0c4e 100644
 | ||||
| --- a/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/window_capturer_pipewire.cc
 | ||||
| +++ b/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/window_capturer_pipewire.cc
 | ||||
| @@ -15,7 +15,7 @@
 | ||||
|  namespace webrtc { | ||||
|   | ||||
|  WindowCapturerPipeWire::WindowCapturerPipeWire() | ||||
| -    : BaseCapturerPipeWire(BaseCapturerPipeWire::CaptureSourceType::Window) {}
 | ||||
| +    : BaseCapturerPipeWire(BaseCapturerPipeWire::CaptureSourceType::kWindow) {}
 | ||||
|  WindowCapturerPipeWire::~WindowCapturerPipeWire() {} | ||||
|   | ||||
|  // static | ||||
| diff --git a/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_linux.cc b/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_linux.cc
 | ||||
| index cf8a9dd0e0db..d27fab8d28d9 100644
 | ||||
| --- a/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_linux.cc
 | ||||
| +++ b/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_linux.cc
 | ||||
| @@ -26,7 +26,7 @@ std::unique_ptr<DesktopCapturer> DesktopCapturer::CreateRawScreenCapturer(
 | ||||
|      const DesktopCaptureOptions& options) { | ||||
|  #if defined(WEBRTC_USE_PIPEWIRE) | ||||
|    if (options.allow_pipewire() && DesktopCapturer::IsRunningUnderWayland()) { | ||||
| -    return ScreenCapturerPipeWire::CreateRawScreenCapturer(options);
 | ||||
| +    return BaseCapturerPipeWire::CreateRawScreenCapturer(options);
 | ||||
|    } | ||||
|  #endif  // defined(WEBRTC_USE_PIPEWIRE) | ||||
|   | ||||
| diff --git a/media/webrtc/trunk/webrtc/modules/desktop_capture/window_capturer_linux.cc b/media/webrtc/trunk/webrtc/modules/desktop_capture/window_capturer_linux.cc
 | ||||
| index 82359e50c2db..bb9724cf7cc2 100644
 | ||||
| --- a/media/webrtc/trunk/webrtc/modules/desktop_capture/window_capturer_linux.cc
 | ||||
| +++ b/media/webrtc/trunk/webrtc/modules/desktop_capture/window_capturer_linux.cc
 | ||||
| @@ -26,7 +26,7 @@ std::unique_ptr<DesktopCapturer> DesktopCapturer::CreateRawWindowCapturer(
 | ||||
|      const DesktopCaptureOptions& options) { | ||||
|  #if defined(WEBRTC_USE_PIPEWIRE) | ||||
|    if (options.allow_pipewire() && DesktopCapturer::IsRunningUnderWayland()) { | ||||
| -    return WindowCapturerPipeWire::CreateRawWindowCapturer(options);
 | ||||
| +    return BaseCapturerPipeWire::CreateRawWindowCapturer(options);
 | ||||
|    } | ||||
|  #endif  // defined(WEBRTC_USE_PIPEWIRE) | ||||
|   | ||||
							
								
								
									
										63
									
								
								SOURCES/firefox-pipewire.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								SOURCES/firefox-pipewire.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,63 @@ | ||||
| diff -up firefox-68.0/config/system-headers.mozbuild.firefox-pipewire firefox-68.0/config/system-headers.mozbuild
 | ||||
| --- firefox-68.0/config/system-headers.mozbuild.firefox-pipewire	2019-07-01 22:30:26.000000000 +0200
 | ||||
| +++ firefox-68.0/config/system-headers.mozbuild	2019-07-08 15:26:15.397161627 +0200
 | ||||
| @@ -314,6 +314,7 @@ system_headers = [
 | ||||
|      'Gestalt.h', | ||||
|      'getopt.h', | ||||
|      'gio/gio.h', | ||||
| +    'gio/gunixfdlist.h',
 | ||||
|      'glibconfig.h', | ||||
|      'glib.h', | ||||
|      'glib-object.h', | ||||
| @@ -607,6 +608,7 @@ system_headers = [
 | ||||
|      'Pgenerr.h', | ||||
|      'PGenErr.h', | ||||
|      'Ph.h', | ||||
| +    'pipewire/pipewire.h',
 | ||||
|      'pixman.h', | ||||
|      'pk11func.h', | ||||
|      'pk11pqg.h', | ||||
| diff -up firefox-68.0/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_generic_gn/moz.build.firefox-pipewire firefox-68.0/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_generic_gn/moz.build
 | ||||
| --- firefox-68.0/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_generic_gn/moz.build.firefox-pipewire	2019-07-01 22:30:33.000000000 +0200
 | ||||
| +++ firefox-68.0/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_generic_gn/moz.build	2019-07-08 15:26:15.397161627 +0200
 | ||||
| @@ -194,6 +194,28 @@ if CONFIG["OS_TARGET"] == "Linux":
 | ||||
|          "/media/webrtc/trunk/webrtc/modules/desktop_capture/window_capturer_linux.cc" | ||||
|      ] | ||||
|   | ||||
| +# PipeWire specific files
 | ||||
| +if CONFIG["OS_TARGET"] == "Linux":
 | ||||
| +
 | ||||
| +    DEFINES["WEBRTC_USE_PIPEWIRE"] = "1"
 | ||||
| +
 | ||||
| +    OS_LIBS += [
 | ||||
| +        "rt",
 | ||||
| +        "pipewire-0.2",
 | ||||
| +        "glib-2.0",
 | ||||
| +        "gio-2.0",
 | ||||
| +        "gobject-2.0"
 | ||||
| +    ]
 | ||||
| +
 | ||||
| +    CXXFLAGS += CONFIG['TK_CFLAGS']
 | ||||
| +
 | ||||
| +    UNIFIED_SOURCES += [
 | ||||
| +        "/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.cc",
 | ||||
| +        "/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/screen_capturer_pipewire.cc",
 | ||||
| +        "/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/window_capturer_pipewire.cc"
 | ||||
| +    ]
 | ||||
| +
 | ||||
| +
 | ||||
|  if CONFIG["OS_TARGET"] == "NetBSD": | ||||
|   | ||||
|      DEFINES["USE_X11"] = "1" | ||||
| diff -up firefox-68.0/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_options.h.firefox-pipewire firefox-68.0/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_options.h
 | ||||
| --- firefox-68.0/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_options.h.firefox-pipewire	2019-07-08 16:42:13.936254926 +0200
 | ||||
| +++ firefox-68.0/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_options.h	2019-07-08 16:42:17.509264974 +0200
 | ||||
| @@ -141,7 +141,7 @@ class DesktopCaptureOptions {
 | ||||
|    bool disable_effects_ = true; | ||||
|    bool detect_updated_region_ = false; | ||||
|  #if defined(WEBRTC_USE_PIPEWIRE) | ||||
| -  bool allow_pipewire_ = false;
 | ||||
| +  bool allow_pipewire_ = true;
 | ||||
|  #endif | ||||
|  }; | ||||
|   | ||||
							
								
								
									
										35
									
								
								SOURCES/firefox-redhat-default-prefs.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								SOURCES/firefox-redhat-default-prefs.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,35 @@ | ||||
| pref("app.update.auto",                     false); | ||||
| pref("app.update.enabled",                  false); | ||||
| pref("app.update.autoInstallEnabled",       false); | ||||
| pref("general.smoothScroll",                true); | ||||
| pref("intl.locale.matchOS",                 true); | ||||
| pref("toolkit.storage.synchronous",         0); | ||||
| pref("toolkit.networkmanager.disable",      false); | ||||
| pref("offline.autoDetect",                  true); | ||||
| pref("browser.backspace_action",            2); | ||||
| pref("browser.display.use_system_colors",   true); | ||||
| pref("browser.download.folderList",         1); | ||||
| pref("browser.link.open_external",          3); | ||||
| pref("browser.shell.checkDefaultBrowser",   false); | ||||
| pref("network.manage-offline-status",       true); | ||||
| pref("extensions.shownSelectionUI",         true); | ||||
| pref("ui.SpellCheckerUnderlineStyle",       1); | ||||
| pref("startup.homepage_override_url",       "http://www.redhat.com"); | ||||
| pref("startup.homepage_welcome_url",        "http://www.redhat.com"); | ||||
| pref("browser.startup.homepage",            "data:text/plain,browser.startup.homepage=file:///%PREFIX%/share/doc/HTML/index.html"); | ||||
| pref("geo.wifi.uri", "https://location.services.mozilla.com/v1/geolocate?key=%MOZILLA_API_KEY%"); | ||||
| pref("media.gmp-gmpopenh264.provider.enabled",false); | ||||
| pref("media.gmp-gmpopenh264.autoupdate",false); | ||||
| pref("media.gmp-gmpopenh264.enabled",false); | ||||
| pref("media.gmp-gmpopenh264.enabled",false); | ||||
| pref("plugins.notifyMissingFlash", false); | ||||
| /* See https://bugzilla.redhat.com/show_bug.cgi?id=1226489 */ | ||||
| pref("browser.display.use_system_colors", false); | ||||
| pref("layers.use-image-offscreen-surfaces", false); | ||||
| /* Allow sending credetials to all https:// sites */ | ||||
| pref("network.negotiate-auth.trusted-uris", "https://"); | ||||
| pref("security.use_sqldb", false); | ||||
| /* Use OS settings for UI language */ | ||||
| pref("intl.locale.requested", ""); | ||||
| /* See https://bugzilla.redhat.com/show_bug.cgi?id=1672424 */ | ||||
| pref("storage.nfs_filesystem", true); | ||||
							
								
								
									
										13
									
								
								SOURCES/firefox-rhel6-hugepage.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								SOURCES/firefox-rhel6-hugepage.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,13 @@ | ||||
| diff -up firefox-68.1.0/xpcom/threads/nsThread.cpp.old firefox-68.1.0/xpcom/threads/nsThread.cpp
 | ||||
| --- firefox-68.1.0/xpcom/threads/nsThread.cpp.old	2019-09-20 12:17:35.481661390 +0200
 | ||||
| +++ firefox-68.1.0/xpcom/threads/nsThread.cpp	2019-09-20 12:19:14.269180516 +0200
 | ||||
| @@ -556,7 +556,8 @@ void nsThread::InitCommon() {
 | ||||
|      // kernel report them as separate regions, even when they are adjacent to | ||||
|      // heap memory. This allows us to accurately track the actual memory | ||||
|      // consumption of our allocated stacks. | ||||
| -    madvise(mStackBase, stackSize, MADV_NOHUGEPAGE);
 | ||||
| +    // not supported on RHEL6
 | ||||
| +    // madvise(mStackBase, stackSize, MADV_NOHUGEPAGE);
 | ||||
|   | ||||
|      pthread_attr_destroy(&attr); | ||||
|  #elif defined(XP_WIN) | ||||
							
								
								
									
										13
									
								
								SOURCES/firefox-rhel6-nss-tls1.3.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								SOURCES/firefox-rhel6-nss-tls1.3.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,13 @@ | ||||
| diff -up firefox-68.2.0/security/manager/ssl/nsNSSComponent.cpp.old firefox-68.2.0/security/manager/ssl/nsNSSComponent.cpp
 | ||||
| --- firefox-68.2.0/security/manager/ssl/nsNSSComponent.cpp.old	2019-10-24 14:20:21.227037984 +0200
 | ||||
| +++ firefox-68.2.0/security/manager/ssl/nsNSSComponent.cpp	2019-10-24 14:45:52.769506967 +0200
 | ||||
| @@ -996,6 +996,9 @@ void nsNSSComponent::FillTLSVersionRange
 | ||||
|      return; | ||||
|    } | ||||
|   | ||||
| +  // Enable TLS 1.3 as our NSS supports it.
 | ||||
| +  supported.max = 0x304;
 | ||||
| +
 | ||||
|    // Clip the defaults by what NSS actually supports to enable | ||||
|    // working with a system NSS with different ranges. | ||||
|    rangeOut.min = std::max(rangeOut.min, supported.min); | ||||
							
								
								
									
										30
									
								
								SOURCES/firefox-symbolic.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								SOURCES/firefox-symbolic.svg
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,30 @@ | ||||
| <?xml version='1.0' encoding='UTF-8' standalone='no'?> | ||||
| <!-- Created with Inkscape (http://www.inkscape.org/) --> | ||||
| 
 | ||||
| <svg xmlns:cc='http://creativecommons.org/ns#' xmlns:dc='http://purl.org/dc/elements/1.1/' sodipodi:docname='firefox-symbolic.svg' height='16' id='svg7384' xmlns:inkscape='http://www.inkscape.org/namespaces/inkscape' xmlns:osb='http://www.openswatchbook.org/uri/2009/osb' xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:sodipodi='http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd' xmlns:svg='http://www.w3.org/2000/svg' version='1.1' inkscape:version='0.91 r13725' width='16' xmlns='http://www.w3.org/2000/svg'> | ||||
|   <metadata id='metadata90'> | ||||
|     <rdf:RDF> | ||||
|       <cc:Work rdf:about=''> | ||||
|         <dc:format>image/svg+xml</dc:format> | ||||
|         <dc:type rdf:resource='http://purl.org/dc/dcmitype/StillImage'/> | ||||
|         <dc:title>Gnome Symbolic Icon Theme</dc:title> | ||||
|       </cc:Work> | ||||
|     </rdf:RDF> | ||||
|   </metadata> | ||||
|   <sodipodi:namedview inkscape:bbox-paths='true' bordercolor='#666666' borderopacity='1' inkscape:current-layer='layer9' inkscape:cx='-10.975734' inkscape:cy='233.73843' gridtolerance='10' inkscape:guide-bbox='true' guidetolerance='10' id='namedview88' inkscape:object-nodes='false' inkscape:object-paths='false' objecttolerance='10' pagecolor='#555753' inkscape:pageopacity='1' inkscape:pageshadow='2' showborder='false' showgrid='false' showguides='true' inkscape:snap-bbox='true' inkscape:snap-bbox-midpoints='false' inkscape:snap-global='true' inkscape:snap-grids='true' inkscape:snap-nodes='true' inkscape:snap-others='false' inkscape:snap-to-guides='true' inkscape:window-height='1403' inkscape:window-maximized='1' inkscape:window-width='2560' inkscape:window-x='2560' inkscape:window-y='0' inkscape:zoom='1'> | ||||
|     <inkscape:grid empspacing='2' enabled='true' id='grid4866' originx='-222.00001' originy='-381.99852' snapvisiblegridlinesonly='true' spacingx='1px' spacingy='1px' type='xygrid' visible='true'/> | ||||
|   </sodipodi:namedview> | ||||
|   <title id='title9167'>Gnome Symbolic Icon Theme</title> | ||||
|   <defs id='defs7386'> | ||||
|     <linearGradient id='linearGradient7212' osb:paint='solid'> | ||||
|       <stop id='stop7214' offset='0' style='stop-color:#000000;stop-opacity:1;'/> | ||||
|     </linearGradient> | ||||
|   </defs> | ||||
|   <g inkscape:groupmode='layer' id='layer9' inkscape:label='apps' style='display:inline' transform='translate(-463.00021,164.99852)'> | ||||
|      | ||||
|     <path inkscape:connector-curvature='0' d='M 469.05437,-154.9679 Z' id='path17747' style='fill:none;stroke:#000000;stroke-width:0.99851286px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1'/> | ||||
|     <path inkscape:connector-curvature='0' d='M 469.08553,-154.9054 Z' id='path17749' style='fill:none;stroke:#000000;stroke-width:0.99851286px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1'/> | ||||
|     <path inkscape:connector-curvature='0' d='m 473.0627,-162.9375 c -0.41568,-0.0182 -0.62813,0.0274 -0.625,0.0312 0.006,0.008 1.72988,0.32697 2.03125,0.75 0,0 -0.71915,0.007 -1.4375,0.21875 -0.0325,0.01 2.64053,0.33122 3.1875,3.0625 0,0 -0.29354,-0.64386 -0.65625,-0.75 0.23852,0.74134 0.16466,2.17583 -0.0625,2.875 -0.0292,0.0899 -0.0525,-0.38762 -0.5,-0.59375 0.14332,1.04923 -0.006,2.6978 -0.71875,3.15625 -0.0555,0.0357 0.43942,-1.64894 0.0937,-1 -2.06368,3.2325 -4.50486,1.31102 -5.5,0.625 0.79871,0.19996 1.80035,0.0704 2.125,-0.15625 0.49572,-0.34615 0.79916,-0.59107 1.0625,-0.53125 0.26322,0.0601 0.42318,-0.22934 0.21875,-0.46875 -0.20466,-0.23989 -0.70268,-0.55471 -1.375,-0.375 -0.47415,0.12687 -1.04057,0.54268 -1.9375,0 -0.7652,-0.46319 -0.67076,-0.69942 -0.67076,-0.93907 0,-0.23977 0.21387,-0.59107 0.59375,-0.53125 0.0851,0.0134 0.15074,0.009 0.1875,0 0.18483,0.0422 0.35743,0.0964 0.53125,0.1875 0.008,-0.2241 -0.0292,-0.87345 -0.15625,-1.23012 0.0106,0.004 0.0289,0.011 0.0312,0 0.0384,-0.17687 1.05477,-0.18386 1.37388,-0.59643 0.20404,-0.26362 0.14073,-0.79683 0.14073,-0.79683 l -1,0 c -0.52354,0.002 -0.97244,-0.75086 -1.01451,-0.85669 0.11444,-0.62597 0.48612,-0.83952 1.01451,-1.14331 -0.39748,-0.003 -0.18871,0 -1,0 -0.52875,0 -0.84718,0.36158 -1.01451,0.54956 -0.70058,-0.16587 -1.38144,-0.25227 -1.86049,-0.0609 -0.22125,-0.22941 -0.39604,-0.80055 -0.42188,-1.48863 0,0 -1.20486,0.73864 -1.07812,2.55113 -0.002,0.14904 -0.0499,0.21348 -0.0625,0.3125 -0.13061,0.22845 -0.1553,0.40492 -0.125,0.375 -0.0656,0.13627 -0.15391,0.28402 -0.21875,0.46875 -0.0149,0.0362 -0.0495,0.0463 -0.0625,0.0937 -0.009,0.0322 0.002,0.0638 0,0.0937 -0.11512,0.36099 -0.21516,0.98244 -0.3125,1.54262 0,0 0.12424,-0.51425 0.3125,-0.88637 -0.15639,0.54353 -0.26211,1.54974 -0.1875,2.73012 0,0 0.015,-0.20429 0.0625,-0.5 0.0465,0.80102 0.25925,1.72737 0.84375,2.75 1.46152,2.5575 3.89248,3.68885 6.4375,3.46875 0.44516,-0.0296 0.89639,-0.10834 1.34375,-0.21875 5.92923,-1.46449 5.28125,-8.78118 5.28125,-8.78118 l -0.15625,1.09375 c 0,0 -0.24147,-1.99977 -0.53125,-2.75 -0.44412,-1.14957 -0.62372,-1.15791 -0.625,-1.15625 0.29743,0.77226 0.21875,1.1875 0.21875,1.1875 0,0 -0.51279,-1.43939 -1.90625,-1.90625 -0.82515,-0.27632 -1.45932,-0.38807 -1.875,-0.40625 z' id='path159-6' sodipodi:nodetypes='sccccccccccsccccscccccscccccccccccccccccccccccccccs' style='fill:#bebebe;fill-opacity:1;stroke:none'/> | ||||
|     <path inkscape:connector-curvature='0' d='m 470.87695,-164.01953 c -0.83043,0.0139 -1.67042,0.17659 -2.48047,0.5 l -0.46289,0.18359 c 0.66083,0.79767 1.84339,0.43951 1.84339,0.43951 2.50802,-0.52344 5.12427,0.6034 6.44177,2.89252 1.49591,2.59908 0.85463,5.89258 -1.50586,7.74219 -2.36049,1.84961 -5.71108,1.68349 -7.87695,-0.39062 -2.16588,-2.07412 -2.47623,-5.41522 -0.73047,-7.85352 l 0.29101,-0.40625 -0.81445,-0.58203 -0.29101,0.40625 c -2.03104,2.83673 -1.66628,6.74516 0.85351,9.1582 2.5198,2.41305 6.43934,2.60693 9.18555,0.45508 2.74621,-2.15185 3.49621,-6.00355 1.75586,-9.02734 -1.30527,-2.26785 -3.7177,-3.55935 -6.20899,-3.51758 z' id='path22109' sodipodi:nodetypes='ccccsssccccsssc' style='color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#bebebe;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate'/> | ||||
|   </g> | ||||
| </svg> | ||||
| After Width: | Height: | Size: 6.8 KiB | 
							
								
								
									
										141
									
								
								SOURCES/firefox.1
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										141
									
								
								SOURCES/firefox.1
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,141 @@ | ||||
| .TH FIREFOX 1 "November 30, 2017" firefox "Linux User's Manual" | ||||
| .SH NAME | ||||
| firefox \- a Web browser for X11 derived from the Mozilla browser | ||||
| 
 | ||||
| .SH SYNOPSIS | ||||
| .B firefox | ||||
| [\fIOPTIONS\fR ...] [\fIURL\fR] | ||||
| 
 | ||||
| .B firefox-bin | ||||
| [\fIOPTIONS\fR] [\fIURL\fR] | ||||
| 
 | ||||
| .SH DESCRIPTION | ||||
| \fBMozilla Firefox\fR is an open-source web browser, designed for | ||||
| standards compliance, performance and portability. | ||||
| 
 | ||||
| .SH USAGE | ||||
| \fBfirefox\fR is a simple shell script that will set up the | ||||
| environment for the actual executable, \fBfirefox-bin\fR. | ||||
| 
 | ||||
| .SH OPTIONS | ||||
| A summary of the options supported by \fBfirefox\fR is included below. | ||||
| 
 | ||||
| .SS "X11 options" | ||||
| .TP | ||||
| .BI \-\-display= DISPLAY | ||||
| X display to use | ||||
| .TP | ||||
| .B \--sync | ||||
| Make X calls synchronous | ||||
| .TP | ||||
| .B \-\-g-fatal-warnings | ||||
| Make all warnings fatal | ||||
| 
 | ||||
| .SS "Firefox options" | ||||
| .TP | ||||
| .B \-h, \-help | ||||
| Show summary of options. | ||||
| .TP | ||||
| .B \-v, \-version | ||||
| Print Firefox version. | ||||
| .TP | ||||
| \fB\-P\fR \fIprofile\fR | ||||
| Start with \fIprofile\fR. | ||||
| .TP | ||||
| \fB\-\-profile\fR \fIpath\fR | ||||
| Start with profile at \fIpath\fR. | ||||
| .TP | ||||
| \fB\-\-migration\fR | ||||
| Start with migration wizard. | ||||
| .TP | ||||
| .B \-\-ProfileManager | ||||
| Start with ProfileManager. | ||||
| .TP | ||||
| \fB\-\-no\-remote\fR | ||||
| Do not accept or send remote commands; implies \fB--new-instance\fR. | ||||
| .TP | ||||
| \fB\-\-new\-instance\fR | ||||
| Open new instance, not a new window in running instance. | ||||
| .TP | ||||
| \fB\-\-UILocale\fR \fIlocale\fR | ||||
| Start with \fIlocale\fR resources as UI Locale. | ||||
| .TP | ||||
| \fB\-\-save\-mode\fR | ||||
| Disables extensions and themes for this session. | ||||
| .TP | ||||
| \fB\-\-headless\fR | ||||
| Run without a GUI. | ||||
| .TP | ||||
| \fB\-\-marionette\fR | ||||
| Enable remote control server. | ||||
| .TP | ||||
| \fB\-\-browser\fR | ||||
| Open a browser window. | ||||
| .TP | ||||
| \fB\-\-new-window\fR \fIurl\fR | ||||
| Open \fIurl\fR in a new window. | ||||
| .TP | ||||
| \fB\-\-new-tab\fR \fIurl\fR | ||||
| Open \fIurl\fR in a new tab. | ||||
| .TP | ||||
| \fB\-\-private-window\fR \fIurl\fR | ||||
| Open \fIurl\fR in a new private window. | ||||
| .TP | ||||
| \fB\-\-preferences\fR | ||||
| Open Preferences dialog. | ||||
| .TP | ||||
| \fB\-\-screenshot\fR [\fIpath\fR] | ||||
| Save screenshot to \fIpath\fR or in working directory. | ||||
| .TP | ||||
| \fB\-\-window-size\fR \fIwidth\fR[,\fIheight\fR] | ||||
| Width and optionally height of screenshot. | ||||
| .TP | ||||
| \fB\-\-search\fR \fIterm\fR | ||||
| Search \fIterm\fR with your default search engine. | ||||
| .TP | ||||
| 
 | ||||
| 
 | ||||
| \fB\-\-jsconsole\fR | ||||
| Open the Browser Console. | ||||
| .TP | ||||
| \fB\-\-jsdebugger\fR | ||||
| Open the Browser Toolbox. | ||||
| .TP | ||||
| \fB\-\-wait-for-jsdebugger\fR | ||||
| Spin event loop until JS debugger connects.  Enables debugging (some) application startup code paths.  Only has an effect when \fI--jsdebugger\fR is also supplied. | ||||
| .TP | ||||
| \fB\-\-devtools\fR | ||||
| Open DevTools on initial load. | ||||
| .TP | ||||
| \fB\-\-start-debugger-server\fR [ws:][\fIport\fR|\fIpath\fR] | ||||
| Start the debugger server on a TCP port or Unix domain socket path. Defaults to TCP port 6000. Use WebSocket protocol if ws: prefix is specified. | ||||
| .TP | ||||
| \fB\-\-recording\fR \fIfile\fR | ||||
| Record drawing for a given URL. | ||||
| .TP | ||||
| \fB\-\-recording-output\fR \fIfile\fR | ||||
| Specify destination file for a drawing recording. | ||||
| .TP | ||||
| \fB\-\-setDefaultBrowser\fR | ||||
| Set this app as the default browser. | ||||
| 
 | ||||
| .SH FILES | ||||
| \fI/usr/bin/firefox\fR - shell script wrapping | ||||
| \fBfirefox\fR | ||||
| .br | ||||
| \fI/usr/lib64/firefox/firefox-bin\fR - \fBfirefox\fR | ||||
| executable | ||||
| 
 | ||||
| .SH VERSION | ||||
| 57.0 | ||||
| 
 | ||||
| .SH BUGS | ||||
| To report a bug, please visit \fIhttp://bugzilla.mozilla.org/\fR | ||||
| 
 | ||||
| .SH AUTHORS | ||||
| .TP | ||||
| .B The Mozilla Organization | ||||
| .I http://www.mozilla.org/about.html | ||||
| .TP | ||||
| .B Tobias Girstmair | ||||
| .I https://gir.st/ | ||||
							
								
								
									
										272
									
								
								SOURCES/firefox.desktop
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										272
									
								
								SOURCES/firefox.desktop
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,272 @@ | ||||
| [Desktop Entry] | ||||
| Version=1.0 | ||||
| Name=Firefox | ||||
| GenericName=Web Browser | ||||
| GenericName[ca]=Navegador web | ||||
| GenericName[cs]=Webový prohlížeč | ||||
| GenericName[es]=Navegador web | ||||
| GenericName[fa]=مرورگر اینترنتی | ||||
| GenericName[fi]=WWW-selain | ||||
| GenericName[fr]=Navigateur Web | ||||
| GenericName[hu]=Webböngésző | ||||
| GenericName[it]=Browser Web | ||||
| GenericName[ja]=ウェブ・ブラウザ | ||||
| GenericName[ko]=웹 브라우저 | ||||
| GenericName[nb]=Nettleser | ||||
| GenericName[nl]=Webbrowser | ||||
| GenericName[nn]=Nettlesar | ||||
| GenericName[no]=Nettleser | ||||
| GenericName[pl]=Przeglądarka WWW | ||||
| GenericName[pt]=Navegador Web | ||||
| GenericName[pt_BR]=Navegador Web | ||||
| GenericName[sk]=Internetový prehliadač | ||||
| GenericName[sv]=Webbläsare | ||||
| Comment=Browse the Web | ||||
| Comment[ca]=Navegueu per el web | ||||
| Comment[cs]=Prohlížení stránek World Wide Webu | ||||
| Comment[de]=Im Internet surfen | ||||
| Comment[es]=Navegue por la web | ||||
| Comment[fa]=صفحات شبکه جهانی اینترنت را مرور نمایید | ||||
| Comment[fi]=Selaa Internetin WWW-sivuja | ||||
| Comment[fr]=Navigue sur Internet | ||||
| Comment[hu]=A világháló böngészése | ||||
| Comment[it]=Esplora il web | ||||
| Comment[ja]=ウェブを閲覧します | ||||
| Comment[ko]=웹을 돌아 다닙니다 | ||||
| Comment[nb]=Surf på nettet | ||||
| Comment[nl]=Verken het internet | ||||
| Comment[nn]=Surf på nettet | ||||
| Comment[no]=Surf på nettet | ||||
| Comment[pl]=Przeglądanie stron WWW | ||||
| Comment[pt]=Navegue na Internet | ||||
| Comment[pt_BR]=Navegue na Internet | ||||
| Comment[sk]=Prehliadanie internetu | ||||
| Comment[sv]=Surfa på webben | ||||
| Exec=firefox %u | ||||
| Icon=firefox | ||||
| Terminal=false | ||||
| Type=Application | ||||
| MimeType=text/html;text/xml;application/xhtml+xml;application/vnd.mozilla.xul+xml;text/mml;x-scheme-handler/http;x-scheme-handler/https; | ||||
| StartupNotify=true | ||||
| Categories=Network;WebBrowser; | ||||
| Keywords=web;browser;internet; | ||||
| Actions=new-window;new-private-window; | ||||
| 
 | ||||
| [Desktop Action new-window] | ||||
| Name=Open a New Window | ||||
| Name[ach]=Dirica manyen | ||||
| Name[af]=Nuwe venster | ||||
| Name[an]=Nueva finestra | ||||
| Name[ar]=نافذة جديدة | ||||
| Name[as]=নতুন উইন্ডো | ||||
| Name[ast]=Ventana nueva | ||||
| Name[az]=Yeni Pəncərə | ||||
| Name[be]=Новае акно | ||||
| Name[bg]=Нов прозорец | ||||
| Name[bn-BD]=নতুন উইন্ডো (N) | ||||
| Name[bn-IN]=নতুন উইন্ডো | ||||
| Name[br]=Prenestr nevez | ||||
| Name[brx]=गोदान उइन्ड'(N) | ||||
| Name[bs]=Novi prozor | ||||
| Name[ca]=Finestra nova | ||||
| Name[cak]=K'ak'a' tzuwäch | ||||
| Name[cs]=Nové okno | ||||
| Name[cy]=Ffenestr Newydd | ||||
| Name[da]=Nyt vindue | ||||
| Name[de]=Neues Fenster | ||||
| Name[dsb]=Nowe wokno | ||||
| Name[el]=Νέο παράθυρο | ||||
| Name[en-GB]=New Window | ||||
| Name[en-US]=New Window | ||||
| Name[en-ZA]=New Window | ||||
| Name[eo]=Nova fenestro | ||||
| Name[es-AR]=Nueva ventana | ||||
| Name[es-CL]=Nueva ventana | ||||
| Name[es-ES]=Nueva ventana | ||||
| Name[es-MX]=Nueva ventana | ||||
| Name[et]=Uus aken | ||||
| Name[eu]=Leiho berria | ||||
| Name[fa]=پنجره جدید | ||||
| Name[ff]=Henorde Hesere | ||||
| Name[fi]=Uusi ikkuna | ||||
| Name[fr]=Nouvelle fenêtre | ||||
| Name[fy-NL]=Nij finster | ||||
| Name[ga-IE]=Fuinneog Nua | ||||
| Name[gd]=Uinneag ùr | ||||
| Name[gl]=Nova xanela | ||||
| Name[gn]=Ovetã pyahu | ||||
| Name[gu-IN]=નવી વિન્ડો | ||||
| Name[he]=חלון חדש | ||||
| Name[hi-IN]=नया विंडो | ||||
| Name[hr]=Novi prozor | ||||
| Name[hsb]=Nowe wokno | ||||
| Name[hu]=Új ablak | ||||
| Name[hy-AM]=Նոր Պատուհան | ||||
| Name[id]=Jendela Baru | ||||
| Name[is]=Nýr gluggi | ||||
| Name[it]=Nuova finestra | ||||
| Name[ja]=新しいウィンドウ | ||||
| Name[ja-JP-mac]=新規ウインドウ | ||||
| Name[ka]=ახალი ფანჯარა | ||||
| Name[kk]=Жаңа терезе | ||||
| Name[km]=បង្អួចថ្មី | ||||
| Name[kn]=ಹೊಸ ಕಿಟಕಿ | ||||
| Name[ko]=새 창 | ||||
| Name[kok]=नवें जनेल | ||||
| Name[ks]=نئئ وِنڈو | ||||
| Name[lij]=Neuvo barcon | ||||
| Name[lo]=ຫນ້າຕ່າງໃຫມ່ | ||||
| Name[lt]=Naujas langas | ||||
| Name[ltg]=Jauns lūgs | ||||
| Name[lv]=Jauns logs | ||||
| Name[mai]=नव विंडो | ||||
| Name[mk]=Нов прозорец | ||||
| Name[ml]=പുതിയ ജാലകം | ||||
| Name[mr]=नवीन पटल | ||||
| Name[ms]=Tetingkap Baru | ||||
| Name[my]=ဝင်းဒိုးအသစ် | ||||
| Name[nb-NO]=Nytt vindu | ||||
| Name[ne-NP]=नयाँ सञ्झ्याल | ||||
| Name[nl]=Nieuw venster | ||||
| Name[nn-NO]=Nytt vindauge | ||||
| Name[or]=ନୂତନ ୱିଣ୍ଡୋ | ||||
| Name[pa-IN]=ਨਵੀਂ ਵਿੰਡੋ | ||||
| Name[pl]=Nowe okno | ||||
| Name[pt-BR]=Nova janela | ||||
| Name[pt-PT]=Nova janela | ||||
| Name[rm]=Nova fanestra | ||||
| Name[ro]=Fereastră nouă | ||||
| Name[ru]=Новое окно | ||||
| Name[sat]=नावा विंडो (N) | ||||
| Name[si]=නව කවුළුවක් | ||||
| Name[sk]=Nové okno | ||||
| Name[sl]=Novo okno | ||||
| Name[son]=Zanfun taaga | ||||
| Name[sq]=Dritare e Re | ||||
| Name[sr]=Нови прозор | ||||
| Name[sv-SE]=Nytt fönster | ||||
| Name[ta]=புதிய சாளரம் | ||||
| Name[te]=కొత్త విండో | ||||
| Name[th]=หน้าต่างใหม่ | ||||
| Name[tr]=Yeni pencere | ||||
| Name[tsz]=Eraatarakua jimpani | ||||
| Name[uk]=Нове вікно | ||||
| Name[ur]=نیا دریچہ | ||||
| Name[uz]=Yangi oyna | ||||
| Name[vi]=Cửa sổ mới | ||||
| Name[wo]=Palanteer bu bees | ||||
| Name[xh]=Ifestile entsha | ||||
| Name[zh-CN]=新建窗口 | ||||
| Name[zh-TW]=開新視窗 | ||||
| 
 | ||||
| 
 | ||||
| Exec=firefox %u | ||||
| 
 | ||||
| [Desktop Action new-private-window] | ||||
| Name=Open a New Private Window | ||||
| Name[ach]=Dirica manyen me mung | ||||
| Name[af]=Nuwe privaatvenster | ||||
| Name[an]=Nueva finestra privada | ||||
| Name[ar]=نافذة خاصة جديدة | ||||
| Name[as]=নতুন ব্যক্তিগত উইন্ডো | ||||
| Name[ast]=Ventana privada nueva | ||||
| Name[az]=Yeni Məxfi Pəncərə | ||||
| Name[be]=Новае акно адасаблення | ||||
| Name[bg]=Нов прозорец за поверително сърфиране | ||||
| Name[bn-BD]=নতুন ব্যক্তিগত উইন্ডো | ||||
| Name[bn-IN]=নতুন ব্যক্তিগত উইন্ডো | ||||
| Name[br]=Prenestr merdeiñ prevez nevez | ||||
| Name[brx]=गोदान प्राइभेट उइन्ड' | ||||
| Name[bs]=Novi privatni prozor | ||||
| Name[ca]=Finestra privada nova | ||||
| Name[cak]=K'ak'a' ichinan tzuwäch | ||||
| Name[cs]=Nové anonymní okno | ||||
| Name[cy]=Ffenestr Breifat Newydd | ||||
| Name[da]=Nyt privat vindue | ||||
| Name[de]=Neues privates Fenster | ||||
| Name[dsb]=Nowe priwatne wokno | ||||
| Name[el]=Νέο παράθυρο ιδιωτικής περιήγησης | ||||
| Name[en-GB]=New Private Window | ||||
| Name[en-US]=New Private Window | ||||
| Name[en-ZA]=New Private Window | ||||
| Name[eo]=Nova privata fenestro | ||||
| Name[es-AR]=Nueva ventana privada | ||||
| Name[es-CL]=Nueva ventana privada | ||||
| Name[es-ES]=Nueva ventana privada | ||||
| Name[es-MX]=Nueva ventana privada | ||||
| Name[et]=Uus privaatne aken | ||||
| Name[eu]=Leiho pribatu berria | ||||
| Name[fa]=پنجره ناشناس جدید | ||||
| Name[ff]=Henorde Suturo Hesere | ||||
| Name[fi]=Uusi yksityinen ikkuna | ||||
| Name[fr]=Nouvelle fenêtre de navigation privée | ||||
| Name[fy-NL]=Nij priveefinster | ||||
| Name[ga-IE]=Fuinneog Nua Phríobháideach | ||||
| Name[gd]=Uinneag phrìobhaideach ùr | ||||
| Name[gl]=Nova xanela privada | ||||
| Name[gn]=Ovetã ñemi pyahu | ||||
| Name[gu-IN]=નવી ખાનગી વિન્ડો | ||||
| Name[he]=חלון פרטי חדש | ||||
| Name[hi-IN]=नयी निजी विंडो | ||||
| Name[hr]=Novi privatni prozor | ||||
| Name[hsb]=Nowe priwatne wokno | ||||
| Name[hu]=Új privát ablak | ||||
| Name[hy-AM]=Սկսել Գաղտնի դիտարկում | ||||
| Name[id]=Jendela Mode Pribadi Baru | ||||
| Name[is]=Nýr huliðsgluggi | ||||
| Name[it]=Nuova finestra anonima | ||||
| Name[ja]=新しいプライベートウィンドウ | ||||
| Name[ja-JP-mac]=新規プライベートウインドウ | ||||
| Name[ka]=ახალი პირადი ფანჯარა | ||||
| Name[kk]=Жаңа жекелік терезе | ||||
| Name[km]=បង្អួចឯកជនថ្មី | ||||
| Name[kn]=ಹೊಸ ಖಾಸಗಿ ಕಿಟಕಿ | ||||
| Name[ko]=새 사생활 보호 모드 | ||||
| Name[kok]=नवो खाजगी विंडो | ||||
| Name[ks]=نْو پرایوٹ وینڈو& | ||||
| Name[lij]=Neuvo barcon privou | ||||
| Name[lo]=ເປີດຫນ້າຕ່າງສວນຕົວຂື້ນມາໃຫມ່ | ||||
| Name[lt]=Naujas privataus naršymo langas | ||||
| Name[ltg]=Jauns privatais lūgs | ||||
| Name[lv]=Jauns privātais logs | ||||
| Name[mai]=नया निज विंडो (W) | ||||
| Name[mk]=Нов приватен прозорец | ||||
| Name[ml]=പുതിയ സ്വകാര്യ ജാലകം | ||||
| Name[mr]=नवीन वैयक्तिक पटल | ||||
| Name[ms]=Tetingkap Persendirian Baharu | ||||
| Name[my]=New Private Window | ||||
| Name[nb-NO]=Nytt privat vindu | ||||
| Name[ne-NP]=नयाँ निजी सञ्झ्याल | ||||
| Name[nl]=Nieuw privévenster | ||||
| Name[nn-NO]=Nytt privat vindauge | ||||
| Name[or]=ନୂତନ ବ୍ୟକ୍ତିଗତ ୱିଣ୍ଡୋ | ||||
| Name[pa-IN]=ਨਵੀਂ ਪ੍ਰਾਈਵੇਟ ਵਿੰਡੋ | ||||
| Name[pl]=Nowe okno prywatne | ||||
| Name[pt-BR]=Nova janela privativa | ||||
| Name[pt-PT]=Nova janela privada | ||||
| Name[rm]=Nova fanestra privata | ||||
| Name[ro]=Fereastră privată nouă | ||||
| Name[ru]=Новое приватное окно | ||||
| Name[sat]=नावा निजेराक् विंडो (W ) | ||||
| Name[si]=නව පුද්ගලික කවුළුව (W) | ||||
| Name[sk]=Nové okno v režime Súkromné prehliadanie | ||||
| Name[sl]=Novo zasebno okno | ||||
| Name[son]=Sutura zanfun taaga | ||||
| Name[sq]=Dritare e Re Private | ||||
| Name[sr]=Нови приватан прозор | ||||
| Name[sv-SE]=Nytt privat fönster | ||||
| Name[ta]=புதிய தனிப்பட்ட சாளரம் | ||||
| Name[te]=కొత్త ఆంతరంగిక విండో | ||||
| Name[th]=หน้าต่างส่วนตัวใหม่ | ||||
| Name[tr]=Yeni gizli pencere | ||||
| Name[tsz]=Juchiiti eraatarakua jimpani | ||||
| Name[uk]=Приватне вікно | ||||
| Name[ur]=نیا نجی دریچہ | ||||
| Name[uz]=Yangi maxfiy oyna | ||||
| Name[vi]=Cửa sổ riêng tư mới | ||||
| Name[wo]=Panlanteeru biir bu bees | ||||
| Name[xh]=Ifestile yangasese entsha | ||||
| Name[zh-CN]=新建隐私浏览窗口 | ||||
| Name[zh-TW]=新增隱私視窗 | ||||
| Exec=firefox --private-window %u | ||||
| 
 | ||||
							
								
								
									
										271
									
								
								SOURCES/firefox.sh.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										271
									
								
								SOURCES/firefox.sh.in
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,271 @@ | ||||
| #!/bin/bash | ||||
| # | ||||
| # The contents of this file are subject to the Netscape Public | ||||
| # License Version 1.1 (the "License"); you may not use this file | ||||
| # except in compliance with the License. You may obtain a copy of | ||||
| # the License at http://www.mozilla.org/NPL/ | ||||
| # | ||||
| # Software distributed under the License is distributed on an "AS | ||||
| # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or | ||||
| # implied. See the License for the specific language governing | ||||
| # rights and limitations under the License. | ||||
| # | ||||
| # The Original Code is mozilla.org code. | ||||
| # | ||||
| # The Initial Developer of the Original Code is Netscape | ||||
| # Communications Corporation.  Portions created by Netscape are | ||||
| # Copyright (C) 1998 Netscape Communications Corporation. All | ||||
| # Rights Reserved. | ||||
| # | ||||
| # Contributor(s): | ||||
| # | ||||
| 
 | ||||
| ## | ||||
| ## Usage: | ||||
| ## | ||||
| ## $ firefox | ||||
| ## | ||||
| ## This script is meant to run a mozilla program from the mozilla | ||||
| ## rpm installation. | ||||
| ## | ||||
| ## The script will setup all the environment voodoo needed to make | ||||
| ## mozilla work. | ||||
| 
 | ||||
| cmdname=`basename $0` | ||||
| 
 | ||||
| ## | ||||
| ## Variables | ||||
| ## | ||||
| MOZ_ARCH=$(uname -m) | ||||
| case $MOZ_ARCH in | ||||
| 	x86_64 | s390x | sparc64) | ||||
| 		MOZ_LIB_DIR="%PREFIX%/lib64" | ||||
| 		SECONDARY_LIB_DIR="%PREFIX%/lib" | ||||
| 		;; | ||||
| 	* ) | ||||
| 		MOZ_LIB_DIR="%PREFIX%/lib" | ||||
| 		SECONDARY_LIB_DIR="%PREFIX%/lib64" | ||||
| 		;; | ||||
| esac | ||||
| 
 | ||||
| MOZ_FIREFOX_FILE="firefox" | ||||
| 
 | ||||
| if [ ! -r $MOZ_LIB_DIR/firefox/$MOZ_FIREFOX_FILE ]; then | ||||
|     if [ ! -r $SECONDARY_LIB_DIR/firefox/$MOZ_FIREFOX_FILE ]; then | ||||
| 	echo "Error: $MOZ_LIB_DIR/firefox/$MOZ_FIREFOX_FILE not found" | ||||
| 	if [ -d $SECONDARY_LIB_DIR ]; then | ||||
| 	    echo "       $SECONDARY_LIB_DIR/firefox/$MOZ_FIREFOX_FILE not found" | ||||
| 	fi | ||||
| 	exit 1 | ||||
|     fi | ||||
|     MOZ_LIB_DIR="$SECONDARY_LIB_DIR" | ||||
| fi | ||||
| MOZ_DIST_BIN="$MOZ_LIB_DIR/firefox" | ||||
| MOZ_LANGPACKS_DIR="$MOZ_DIST_BIN/langpacks" | ||||
| MOZ_EXTENSIONS_PROFILE_DIR="$HOME/.mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}" | ||||
| MOZ_PROGRAM="$MOZ_DIST_BIN/$MOZ_FIREFOX_FILE" | ||||
| MOZ_LAUNCHER="$MOZ_DIST_BIN/run-mozilla.sh" | ||||
| 
 | ||||
| ## | ||||
| ## Set MOZ_GRE_CONF | ||||
| ## | ||||
| MOZ_GRE_CONF=/etc/gre.d/gre.conf | ||||
| if [ "$MOZ_LIB_DIR" == "/usr/lib64" ]; then | ||||
|   MOZ_GRE_CONF=/etc/gre.d/gre64.conf | ||||
| fi | ||||
| export MOZ_GRE_CONF | ||||
| 
 | ||||
| ## | ||||
| ## Set MOZILLA_FIVE_HOME | ||||
| ## | ||||
| MOZILLA_FIVE_HOME="$MOZ_DIST_BIN" | ||||
| 
 | ||||
| export MOZILLA_FIVE_HOME | ||||
| 
 | ||||
| ## | ||||
| ## Make sure that we set the plugin path | ||||
| ## | ||||
| MOZ_PLUGIN_DIR="plugins" | ||||
| 
 | ||||
| if [ "$MOZ_PLUGIN_PATH" ] | ||||
| then | ||||
|   MOZ_PLUGIN_PATH=$MOZ_PLUGIN_PATH:$MOZ_LIB_DIR/mozilla/$MOZ_PLUGIN_DIR:$MOZ_DIST_BIN/$MOZ_PLUGIN_DIR | ||||
| else | ||||
|   MOZ_PLUGIN_PATH=$MOZ_LIB_DIR/mozilla/$MOZ_PLUGIN_DIR:$MOZ_DIST_BIN/$MOZ_PLUGIN_DIR | ||||
| fi | ||||
| export MOZ_PLUGIN_PATH | ||||
| 
 | ||||
| ## | ||||
| ## Set MOZ_APP_LAUNCHER for gnome-session | ||||
| ## | ||||
| export MOZ_APP_LAUNCHER="%PREFIX%/bin/firefox" | ||||
| 
 | ||||
| ## | ||||
| ## Set FONTCONFIG_PATH for Xft/fontconfig | ||||
| ## | ||||
| FONTCONFIG_PATH="/etc/fonts:${MOZILLA_FIVE_HOME}/res/Xft" | ||||
| export FONTCONFIG_PATH | ||||
| 
 | ||||
| ## | ||||
| ## In order to better support certain scripts (such as Indic and some CJK | ||||
| ## scripts), Fedora builds its Firefox, with permission from the Mozilla | ||||
| ## Corporation, with the Pango system as its text renderer.  This change | ||||
| ## may negatively impact performance on some pages.  To disable the use of | ||||
| ## Pango, set MOZ_DISABLE_PANGO=1 in your environment before launching | ||||
| ## Firefox. | ||||
| ## | ||||
| # | ||||
| # MOZ_DISABLE_PANGO=1 | ||||
| # export MOZ_DISABLE_PANGO | ||||
| # | ||||
| 
 | ||||
| ## | ||||
| ## Disable the GNOME crash dialog, Moz has it's own | ||||
| ## | ||||
| GNOME_DISABLE_CRASH_DIALOG=1 | ||||
| export GNOME_DISABLE_CRASH_DIALOG | ||||
| 
 | ||||
| ## | ||||
| ## Disable the SLICE allocator (rhbz#1014858) | ||||
| ## | ||||
| export G_SLICE=always-malloc | ||||
| 
 | ||||
| ## | ||||
| ## Enable Xinput2 (mozbz#1207973) | ||||
| ## | ||||
| export MOZ_USE_XINPUT2=1 | ||||
| 
 | ||||
| # OK, here's where all the real work gets done | ||||
| 
 | ||||
| 
 | ||||
| ## | ||||
| ## To disable the use of Firefox localization, set MOZ_DISABLE_LANGPACKS=1 | ||||
| ## in your environment before launching Firefox. | ||||
| ## | ||||
| # | ||||
| # MOZ_DISABLE_LANGPACKS=1 | ||||
| # export MOZ_DISABLE_LANGPACKS | ||||
| # | ||||
| 
 | ||||
| ## | ||||
| ## Automatically installed langpacks are tracked by .fedora-langpack-install | ||||
| ## config file. | ||||
| ## | ||||
| FEDORA_LANGPACK_CONFIG="$MOZ_EXTENSIONS_PROFILE_DIR/.fedora-langpack-install" | ||||
| 
 | ||||
| MOZILLA_DOWN=0 | ||||
| if ! [ $MOZ_DISABLE_LANGPACKS ] || [ $MOZ_DISABLE_LANGPACKS -eq 0 ]; then | ||||
|     if [ -x $MOZ_DIST_BIN/$MOZ_FIREFOX_FILE ]; then | ||||
|         # Is firefox running? | ||||
|         pidof firefox > /dev/null 2>&1 | ||||
|         MOZILLA_DOWN=$? | ||||
|     fi | ||||
| fi | ||||
| 
 | ||||
| # Modify language pack configuration only when firefox is not running | ||||
| # and language packs are not disabled | ||||
| if [ $MOZILLA_DOWN -ne 0 ]; then | ||||
| 
 | ||||
|     # Clear already installed langpacks | ||||
|     mkdir -p $MOZ_EXTENSIONS_PROFILE_DIR | ||||
|     if [ -f $FEDORA_LANGPACK_CONFIG ]; then | ||||
|         rm `cat $FEDORA_LANGPACK_CONFIG` > /dev/null 2>&1 | ||||
|         rm $FEDORA_LANGPACK_CONFIG > /dev/null 2>&1 | ||||
|         # remove all empty langpacks dirs while they block installation of langpacks | ||||
|         rmdir $MOZ_EXTENSIONS_PROFILE_DIR/langpack* > /dev/null 2>&1 | ||||
|     fi | ||||
| 
 | ||||
|     # Get locale from system | ||||
|     CURRENT_LOCALE=$LC_ALL | ||||
|     CURRENT_LOCALE=${CURRENT_LOCALE:-$LC_MESSAGES} | ||||
|     CURRENT_LOCALE=${CURRENT_LOCALE:-$LANG} | ||||
| 
 | ||||
|     # Try with a local variant first, then without a local variant | ||||
|     SHORTMOZLOCALE=`echo $CURRENT_LOCALE | sed "s|_\([^.]*\).*||g"` | ||||
|     MOZLOCALE=`echo $CURRENT_LOCALE | sed "s|_\([^.]*\).*|-\1|g"` | ||||
| 
 | ||||
|     function create_langpack_link() { | ||||
|         local language=$* | ||||
|         local langpack=langpack-${language}@firefox.mozilla.org.xpi | ||||
|         if [ -f $MOZ_LANGPACKS_DIR/$langpack ]; then | ||||
|             rm -rf $MOZ_EXTENSIONS_PROFILE_DIR/$langpack | ||||
|             # If the target file is a symlink (the fallback langpack), | ||||
|             # install the original file instead of the fallback one | ||||
|             if [ -h $MOZ_LANGPACKS_DIR/$langpack ]; then | ||||
|                 langpack=`readlink $MOZ_LANGPACKS_DIR/$langpack` | ||||
|             fi | ||||
|             ln -s $MOZ_LANGPACKS_DIR/$langpack \ | ||||
|                   $MOZ_EXTENSIONS_PROFILE_DIR/$langpack | ||||
|             echo $MOZ_EXTENSIONS_PROFILE_DIR/$langpack > $FEDORA_LANGPACK_CONFIG | ||||
|             return 0 | ||||
|         fi | ||||
|         return 1 | ||||
|     } | ||||
| 
 | ||||
|     create_langpack_link $MOZLOCALE || create_langpack_link $SHORTMOZLOCALE || true | ||||
| fi | ||||
| 
 | ||||
| # BEAST fix (rhbz#1005611) | ||||
| NSS_SSL_CBC_RANDOM_IV=${NSS_SSL_CBC_RANDOM_IV-1} | ||||
| export NSS_SSL_CBC_RANDOM_IV | ||||
| 
 | ||||
| # Prepare command line arguments | ||||
| script_args="" | ||||
| pass_arg_count=0 | ||||
| while [ $# -gt $pass_arg_count ] | ||||
| do | ||||
|   case "$1" in | ||||
|     -g | --debug) | ||||
|       script_args="$script_args -g" | ||||
|       debugging=1 | ||||
|       shift | ||||
|       ;; | ||||
|     -d | --debugger) | ||||
|       if [ $# -gt 1 ]; then | ||||
|         script_args="$script_args -d $2" | ||||
|         shift 2 | ||||
|       else | ||||
|         shift | ||||
|       fi | ||||
|       ;; | ||||
|     *) | ||||
|       # Move the unrecognized argument to the end of the list. | ||||
|       arg="$1" | ||||
|       shift | ||||
|       set -- "$@" "$arg" | ||||
|       pass_arg_count=`expr $pass_arg_count + 1` | ||||
|       ;; | ||||
|   esac | ||||
| done | ||||
| 
 | ||||
| # Linux version specific environment variables | ||||
| %RHEL_ENV_VARS% | ||||
| 
 | ||||
| # Don't throw "old profile" dialog box. | ||||
| export MOZ_ALLOW_DOWNGRADE=1 | ||||
| 
 | ||||
| # Make sure at-spi-bus is running | ||||
| if ! dbus-send --session            \ | ||||
|      --dest=org.freedesktop.DBus    \ | ||||
|      --type=method_call             \ | ||||
|      --print-reply                  \ | ||||
|      /org/freedesktop/DBus          \ | ||||
|      org.freedesktop.DBus.ListNames \ | ||||
|      | grep org.a11y.Bus > /dev/null; then | ||||
|     if [ -f "$MOZ_LIB_DIR/firefox/bundled/libexec/at-spi-bus-launcher" ]; then | ||||
|         echo "Starting a11y dbus service..." | ||||
|         $MOZ_LIB_DIR/firefox/bundled/libexec/at-spi-bus-launcher & | ||||
|     else | ||||
|         echo "Running without a11y support!" | ||||
|     fi | ||||
| fi | ||||
| 
 | ||||
| # Run the browser | ||||
| debugging=0 | ||||
| if [ $debugging = 1 ] | ||||
| then | ||||
|   echo $MOZ_LAUNCHER $script_args $MOZ_PROGRAM "$@" | ||||
| fi | ||||
| 
 | ||||
| 
 | ||||
| exec $MOZ_LAUNCHER $script_args $MOZ_PROGRAM "$@" | ||||
							
								
								
									
										1
									
								
								SOURCES/google-api-key
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								SOURCES/google-api-key
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | ||||
| AIzaSyBPGXa4AYD4FC3HJK7LnIKxm4fDusVuuco | ||||
							
								
								
									
										54
									
								
								SOURCES/gtk3-private-3.22.26-1-files.inc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								SOURCES/gtk3-private-3.22.26-1-files.inc
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,54 @@ | ||||
| %dir %{gtk3_install_path}/bin | ||||
| %{gtk3_install_path}/bin/gdk-pixbuf-query-loaders-%{__isa_bits} | ||||
| %{gtk3_install_path}/bin/gdk-pixbuf-thumbnailer | ||||
| %{gtk3_install_path}/bin/gio-querymodules-%{__isa_bits} | ||||
| %{gtk3_install_path}/bin/glib-compile-schemas | ||||
| %{gtk3_install_path}/bin/gtk-query-immodules-3.0-%{__isa_bits} | ||||
| %{gtk3_install_path}/bin/gtk-update-icon-cache | ||||
| %{gtk3_install_path}/bin/fc-cache | ||||
| 
 | ||||
| %{gtk3_install_path}/etc | ||||
| 
 | ||||
| %dir %{gtk3_install_path}/%{_lib} | ||||
| %{gtk3_install_path}/%{_lib}/libatk-1.0.so.* | ||||
| %{gtk3_install_path}/%{_lib}/libatk-bridge-2.0.so.* | ||||
| %{gtk3_install_path}/%{_lib}/libatspi.so.* | ||||
| %{gtk3_install_path}/%{_lib}/libcairo.so.* | ||||
| %{gtk3_install_path}/%{_lib}/libcairo-gobject.so.* | ||||
| %{gtk3_install_path}/%{_lib}/libfontconfig.so.* | ||||
| %{gtk3_install_path}/%{_lib}/libfreetype.so.* | ||||
| %{gtk3_install_path}/%{_lib}/libgdk-3.so.* | ||||
| %{gtk3_install_path}/%{_lib}/libgdk_pixbuf-2.0.so.* | ||||
| %{gtk3_install_path}/%{_lib}/libgio-2.0.so.* | ||||
| %{gtk3_install_path}/%{_lib}/libglib-2.0.so.* | ||||
| %{gtk3_install_path}/%{_lib}/libgmodule-2.0.so.* | ||||
| %{gtk3_install_path}/%{_lib}/libgobject-2.0.so.* | ||||
| %{gtk3_install_path}/%{_lib}/libgthread-2.0.so.* | ||||
| %{gtk3_install_path}/%{_lib}/libgtk-3.so.* | ||||
| %{gtk3_install_path}/%{_lib}/libharfbuzz.so.* | ||||
| %{gtk3_install_path}/%{_lib}/libpango-1.0.so.* | ||||
| %{gtk3_install_path}/%{_lib}/libpangocairo-1.0.so.* | ||||
| %{gtk3_install_path}/%{_lib}/libpangoft2-1.0.so.* | ||||
| %{gtk3_install_path}/%{_lib}/libpcre.so.* | ||||
| %{gtk3_install_path}/%{_lib}/librsvg-2.so.* | ||||
| %dir %{gtk3_install_path}/%{_lib}/cairo | ||||
| %{gtk3_install_path}/%{_lib}/cairo/cairo-fdr.so.* | ||||
| %{gtk3_install_path}/%{_lib}/cairo/cairo-sphinx.so.* | ||||
| %{gtk3_install_path}/%{_lib}/cairo/libcairo-trace.so.* | ||||
| %{gtk3_install_path}/%{_lib}/gdk-pixbuf-2.0 | ||||
| %ghost %attr(644, root, root) %{gtk3_install_path}/%{_lib}/gdk-pixbuf-2.0/2.10.0/loaders.cache | ||||
| %{gtk3_install_path}/%{_lib}/gio | ||||
| %ghost %attr(644, root, root) %{gtk3_install_path}/%{_lib}/gio/modules/giomodule.cache | ||||
| %{gtk3_install_path}/%{_lib}/gtk-3.0 | ||||
| %ghost %attr(644, root, root) %{gtk3_install_path}/%{_lib}/gtk-3.0/3.0.0/immodules.cache | ||||
| 
 | ||||
| %{gtk3_install_path}/libexec | ||||
| 
 | ||||
| %{gtk3_install_path}/share | ||||
| %ghost %attr(644, root, root) %{gtk3_install_path}/share/icons/Adwaita/icon-theme.cache | ||||
| %ghost %attr(644, root, root) %{gtk3_install_path}/share/icons/hicolor/icon-theme.cache | ||||
| %ghost %attr(644, root, root) %{gtk3_install_path}/share/glib-2.0/schemas/gschemas.compiled | ||||
| 
 | ||||
| %{gtk3_install_path}/var | ||||
| %dir %{gtk3_install_path}/var/cache/fontconfig | ||||
| 
 | ||||
							
								
								
									
										23
									
								
								SOURCES/gtk3-private-3.22.26-1-post.inc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								SOURCES/gtk3-private-3.22.26-1-post.inc
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,23 @@ | ||||
| # adwaita-icon-theme
 | ||||
| touch --no-create %{gtk3_install_path}/share/icons/Adwaita &>/dev/null || : | ||||
| touch --no-create %{gtk3_install_path}/share/icons/hicolor &>/dev/null || : | ||||
| %{gtk3_install_path}/bin/gdk-pixbuf-query-loaders-%{__isa_bits} --update-cache || : | ||||
| 
 | ||||
| # glib2
 | ||||
| %{gtk3_install_path}/bin/gio-querymodules-%{__isa_bits} %{gtk3_install_path}/%{_lib}/gio/modules | ||||
| 
 | ||||
| # gtk3
 | ||||
| %{gtk3_install_path}/bin/gtk-query-immodules-3.0-%{__isa_bits} --update-cache | ||||
| %{gtk3_install_path}/bin/glib-compile-schemas %{gtk3_install_path}/share/glib-2.0/schemas &> /dev/null || : | ||||
| 
 | ||||
| # fontconfig
 | ||||
| umask 0022 | ||||
| 
 | ||||
| # Force regeneration of all fontconfig cache files
 | ||||
| # The check for existance is needed on dual-arch installs (the second
 | ||||
| #  copy of fontconfig might install the binary instead of the first)
 | ||||
| # The HOME setting is to avoid problems if HOME hasn't been reset
 | ||||
| # FIXME hardcoded version !
 | ||||
| if [ -x %{gtk3_install_path}/bin/fc-cache ] && %{gtk3_install_path}/bin/fc-cache --version 2>&1 | grep -q 2.10.95 ; then | ||||
|   HOME=/root %{gtk3_install_path}/bin/fc-cache -f | ||||
| fi | ||||
							
								
								
									
										3
									
								
								SOURCES/gtk3-private-3.22.26-1-posttrans.inc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								SOURCES/gtk3-private-3.22.26-1-posttrans.inc
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | ||||
| %{gtk3_install_path}/gtk-update-icon-cache %{gtk3_install_path}/share/icons/hicolor &>/dev/null || : | ||||
| # adwaita
 | ||||
| %{gtk3_install_path}/gtk-update-icon-cache %{gtk3_install_path}/share/icons/Adwaita &>/dev/null || : | ||||
							
								
								
									
										27
									
								
								SOURCES/gtk3-private-3.22.26-1-postun.inc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								SOURCES/gtk3-private-3.22.26-1-postun.inc
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,27 @@ | ||||
| # adwaita
 | ||||
| if [ $1 -eq 0 ] ; then | ||||
|     touch --no-create %{gtk3_install_path}/share/icons/Adwaita &>/dev/null | ||||
|     touch --no-create %{gtk3_install_path}/share/icons/hicolor &>/dev/null | ||||
|     %{gtk3_install_path}/bin/gtk-update-icon-cache %{gtk3_install_path}/share/icons/Adwaita &>/dev/null || : | ||||
|     %{gtk3_install_path}/bin/gtk-update-icon-cache %{gtk3_install_path}/share/icons/hicolor &>/dev/null || : | ||||
| fi | ||||
| 
 | ||||
| # gdk-pixbuf2
 | ||||
| if [ $1 -gt 0 ]; then | ||||
|   %{gtk3_install_path}/bin/gdk-pixbuf-query-loaders-%{__isa_bits} --update-cache || : | ||||
| fi | ||||
| 
 | ||||
| # glib2
 | ||||
| [ ! -x %{gtk3_install_path}/bin/gio-querymodules-%{__isa_bits} ] || \ | ||||
| %{gtk3_install_path}/bin/gio-querymodules-%{__isa_bits} %{gtk3_install_path}/%{_lib}/gio/modules | ||||
| 
 | ||||
| # gtk3
 | ||||
| if [ $1 -gt 0 ]; then | ||||
|   %{gtk3_install_path}/bin/gtk-query-immodules-3.0-%{__isa_bits} --update-cache | ||||
| fi | ||||
| 
 | ||||
| if [ $1 -eq 0 ] ; then | ||||
|     rm -rf %{gtk3_install_path}/var/cache/fontconfig/* &>/dev/null || : | ||||
| fi | ||||
| 
 | ||||
| %{gtk3_install_path}/bin/glib-compile-schemas %{gtk3_install_path}/share/glib-2.0/schemas &> /dev/null || : | ||||
							
								
								
									
										26
									
								
								SOURCES/gtk3-private-3.22.26-1-requires-provides-filter.inc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								SOURCES/gtk3-private-3.22.26-1-requires-provides-filter.inc
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,26 @@ | ||||
| %filter_provides_in %{gtk3_install_path}/%{_lib} | ||||
| %filter_requires_in %{gtk3_install_path}/%{_lib} | ||||
| 
 | ||||
| %filter_from_requires /libgdk-3.*/d | ||||
| %filter_from_requires /libatk-1.0.so.*/d | ||||
| %filter_from_requires /libatk-bridge-2.0.so.*/d | ||||
| %filter_from_requires /libatspi.so.*/d | ||||
| %filter_from_requires /libcairo.so.*/d | ||||
| %filter_from_requires /libcairo-gobject.so.*/d | ||||
| %filter_from_requires /libfontconfig.so.*/d | ||||
| %filter_from_requires /libfreetype.so.*/d | ||||
| %filter_from_requires /libgdk-3.so.*/d | ||||
| %filter_from_requires /libgdk_pixbuf-2.0.so.*/d | ||||
| %filter_from_requires /libgio-2.0.so.*/d | ||||
| %filter_from_requires /libglib-2.0.so.*/d | ||||
| %filter_from_requires /libgmodule-2.0.so.*/d | ||||
| %filter_from_requires /libgobject-2.0.so.*/d | ||||
| %filter_from_requires /libgthread-2.0.so.*/d | ||||
| %filter_from_requires /libgtk-3.so.*/d | ||||
| %filter_from_requires /libharfbuzz.so.*/d | ||||
| %filter_from_requires /libpango-1.0.so.*/d | ||||
| %filter_from_requires /libpangocairo-1.0.so.*/d | ||||
| %filter_from_requires /libpangoft2-1.0.so.*/d | ||||
| %filter_from_requires /libpcre.so.*/d | ||||
| 
 | ||||
| # Don't forget to call %%filter_setup from the consumer!
 | ||||
							
								
								
									
										34
									
								
								SOURCES/gtk3-private-3.22.26-1-setup-flags-env.inc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								SOURCES/gtk3-private-3.22.26-1-setup-flags-env.inc
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,34 @@ | ||||
| %if "%{name}" == "gtk3-private" | ||||
|     function prepend_buildroot_include_path_to_compiler_flags() { | ||||
|         export CFLAGS="-I%{_buildrootdir}%{gtk3_install_path}/$@ $CFLAGS" \ | ||||
|         export CXXFLAGS="-I%{_buildrootdir}%{gtk3_install_path}/$@ $CXXFLAGS" | ||||
|     } | ||||
|      | ||||
|     prepend_buildroot_include_path_to_compiler_flags include | ||||
|     prepend_buildroot_include_path_to_compiler_flags include/glib-2.0 | ||||
|     prepend_buildroot_include_path_to_compiler_flags include/glib-2.0 | ||||
|     prepend_buildroot_include_path_to_compiler_flags include/gio-unix-2.0 | ||||
|     prepend_buildroot_include_path_to_compiler_flags %{_lib}/glib-2.0/include | ||||
|     prepend_buildroot_include_path_to_compiler_flags include/freetype2 | ||||
|     prepend_buildroot_include_path_to_compiler_flags include/fontconfig | ||||
|     prepend_buildroot_include_path_to_compiler_flags include/harfbuzz | ||||
|     prepend_buildroot_include_path_to_compiler_flags include/gdk-pixbuf-2.0 | ||||
|     prepend_buildroot_include_path_to_compiler_flags include/atk-1.0 | ||||
|     prepend_buildroot_include_path_to_compiler_flags include/at-spi-2.0 | ||||
|     prepend_buildroot_include_path_to_compiler_flags include/at-spi2-atk/2.0 | ||||
|     prepend_buildroot_include_path_to_compiler_flags include/cairo | ||||
|     prepend_buildroot_include_path_to_compiler_flags include/pango-1.0 | ||||
|     prepend_buildroot_include_path_to_compiler_flags include/librsvg-2.0 | ||||
|     prepend_buildroot_include_path_to_compiler_flags include/cairo | ||||
|     prepend_buildroot_include_path_to_compiler_flags include/gtk-3.0 | ||||
|     prepend_buildroot_include_path_to_compiler_flags include/gtk-3.0/unix-print | ||||
|     prepend_buildroot_include_path_to_compiler_flags include/librsvg-2.0 | ||||
| %else | ||||
|     sed -i 's@%{gtk3_install_path}@%{_buildrootdir}%{gtk3_install_path}@g' %{_buildrootdir}%{gtk3_install_path}/%{_lib}/pkgconfig/*.pc | ||||
| %endif | ||||
| 
 | ||||
| export LDFLAGS="-L%{_buildrootdir}%{gtk3_install_path}/%{_lib} $LDFLAGS" | ||||
| export LDFLAGS="-Wl,-rpath,%{gtk3_install_path}/%{_lib} $LDFLAGS" | ||||
| export LDFLAGS="-Wl,-rpath-link,%{_buildrootdir}%{gtk3_install_path}/%{_lib} $LDFLAGS" | ||||
| 
 | ||||
| export PKG_CONFIG_PATH=%{_buildrootdir}%{gtk3_install_path}/%{_lib}/pkgconfig | ||||
							
								
								
									
										99
									
								
								SOURCES/mozilla-1170092.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										99
									
								
								SOURCES/mozilla-1170092.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,99 @@ | ||||
| diff -up firefox-78.0/extensions/pref/autoconfig/src/nsReadConfig.cpp.1170092 firefox-78.0/extensions/pref/autoconfig/src/nsReadConfig.cpp
 | ||||
| --- firefox-78.0/extensions/pref/autoconfig/src/nsReadConfig.cpp.1170092	2020-06-17 04:18:58.000000000 +0200
 | ||||
| +++ firefox-78.0/extensions/pref/autoconfig/src/nsReadConfig.cpp	2020-06-25 13:45:28.816999491 +0200
 | ||||
| @@ -244,8 +244,20 @@ nsresult nsReadConfig::openAndEvaluateJS
 | ||||
|      if (NS_FAILED(rv)) return rv; | ||||
|   | ||||
|      rv = NS_NewLocalFileInputStream(getter_AddRefs(inStr), jsFile); | ||||
| -    if (NS_FAILED(rv)) return rv;
 | ||||
| +    if (NS_FAILED(rv)) {
 | ||||
| +      // Look for cfg file in /etc/<application>/pref
 | ||||
| +      rv = NS_GetSpecialDirectory(NS_APP_PREFS_SYSTEM_CONFIG_DIR,
 | ||||
| +                                  getter_AddRefs(jsFile));
 | ||||
| +      NS_ENSURE_SUCCESS(rv, rv);
 | ||||
| +
 | ||||
| +      rv = jsFile->AppendNative(NS_LITERAL_CSTRING("pref"));
 | ||||
| +      NS_ENSURE_SUCCESS(rv, rv);
 | ||||
| +      rv = jsFile->AppendNative(nsDependentCString(aFileName));
 | ||||
| +      NS_ENSURE_SUCCESS(rv, rv);
 | ||||
|   | ||||
| +      rv = NS_NewLocalFileInputStream(getter_AddRefs(inStr), jsFile);
 | ||||
| +      NS_ENSURE_SUCCESS(rv, rv);
 | ||||
| +    }
 | ||||
|    } else { | ||||
|      nsAutoCString location("resource://gre/defaults/autoconfig/"); | ||||
|      location += aFileName; | ||||
| diff -up firefox-78.0/modules/libpref/Preferences.cpp.1170092 firefox-78.0/modules/libpref/Preferences.cpp
 | ||||
| --- firefox-78.0/modules/libpref/Preferences.cpp.1170092	2020-06-25 13:45:28.818999498 +0200
 | ||||
| +++ firefox-78.0/modules/libpref/Preferences.cpp	2020-06-25 13:48:45.996708102 +0200
 | ||||
| @@ -4499,6 +4499,8 @@ nsresult Preferences::InitInitialObjects
 | ||||
|    // | ||||
|    // Thus, in the omni.jar case, we always load app-specific default | ||||
|    // preferences from omni.jar, whether or not `$app == $gre`. | ||||
| +  // At very end load configuration from system config location:
 | ||||
| +  // - /etc/firefox/pref/*.js
 | ||||
|   | ||||
|    nsresult rv = NS_ERROR_FAILURE; | ||||
|    UniquePtr<nsZipFind> find; | ||||
| diff -up firefox-78.0/toolkit/xre/nsXREDirProvider.cpp.1170092 firefox-78.0/toolkit/xre/nsXREDirProvider.cpp
 | ||||
| --- firefox-78.0/toolkit/xre/nsXREDirProvider.cpp.1170092	2020-06-17 04:20:11.000000000 +0200
 | ||||
| +++ firefox-78.0/toolkit/xre/nsXREDirProvider.cpp	2020-06-25 13:48:28.613645633 +0200
 | ||||
| @@ -60,6 +60,7 @@
 | ||||
|  #endif | ||||
|  #ifdef XP_UNIX | ||||
|  #  include <ctype.h> | ||||
| +#  include "nsIXULAppInfo.h"
 | ||||
|  #endif | ||||
|  #ifdef XP_IOS | ||||
|  #  include "UIKitDirProvider.h" | ||||
| @@ -533,6 +534,21 @@ nsXREDirProvider::GetFile(const char* aP
 | ||||
|        } | ||||
|      } | ||||
|    } | ||||
| +
 | ||||
| +#if defined(XP_UNIX)
 | ||||
| +  if (!strcmp(aProperty, NS_APP_PREFS_SYSTEM_CONFIG_DIR)) {
 | ||||
| +    nsCString sysConfigDir = NS_LITERAL_CSTRING("/etc/");
 | ||||
| +    nsCOMPtr<nsIXULAppInfo> appInfo = do_GetService("@mozilla.org/xre/app-info;1");
 | ||||
| +    if (!appInfo)
 | ||||
| +      return NS_ERROR_NOT_AVAILABLE;
 | ||||
| +    nsCString appName;
 | ||||
| +    appInfo->GetName(appName);
 | ||||
| +    ToLowerCase(appName);
 | ||||
| +    sysConfigDir.Append(appName);
 | ||||
| +    return NS_NewNativeLocalFile(sysConfigDir, false, aFile);
 | ||||
| +  }
 | ||||
| +#endif
 | ||||
| +
 | ||||
|    if (NS_FAILED(rv) || !file) return NS_ERROR_FAILURE; | ||||
|   | ||||
|    if (ensureFilePermissions) { | ||||
| @@ -845,6 +861,17 @@ nsresult nsXREDirProvider::GetFilesInter
 | ||||
|   | ||||
|      LoadDirIntoArray(mXULAppDir, kAppendPrefDir, directories); | ||||
|   | ||||
| +    // Add /etc/<application>/pref/ directory if it exists
 | ||||
| +    nsCOMPtr<nsIFile> systemPrefDir;
 | ||||
| +    rv = NS_GetSpecialDirectory(NS_APP_PREFS_SYSTEM_CONFIG_DIR,
 | ||||
| +                                getter_AddRefs(systemPrefDir));
 | ||||
| +    if (NS_SUCCEEDED(rv)) {
 | ||||
| +      rv = systemPrefDir->AppendNative(NS_LITERAL_CSTRING("pref"));
 | ||||
| +      if (NS_SUCCEEDED(rv)) {
 | ||||
| +        directories.AppendObject(systemPrefDir);
 | ||||
| +    }
 | ||||
| +    }
 | ||||
| +
 | ||||
|      rv = NS_NewArrayEnumerator(aResult, directories, NS_GET_IID(nsIFile)); | ||||
|    } else if (!strcmp(aProperty, NS_APP_CHROME_DIR_LIST)) { | ||||
|      // NS_APP_CHROME_DIR_LIST is only used to get default (native) icons | ||||
| diff -up firefox-78.0/xpcom/io/nsAppDirectoryServiceDefs.h.1170092 firefox-78.0/xpcom/io/nsAppDirectoryServiceDefs.h
 | ||||
| --- firefox-78.0/xpcom/io/nsAppDirectoryServiceDefs.h.1170092	2020-06-17 04:20:17.000000000 +0200
 | ||||
| +++ firefox-78.0/xpcom/io/nsAppDirectoryServiceDefs.h	2020-06-25 13:45:28.819999502 +0200
 | ||||
| @@ -60,6 +60,7 @@
 | ||||
|  #define NS_APP_PREFS_DEFAULTS_DIR_LIST "PrefDL" | ||||
|  #define NS_APP_PREFS_OVERRIDE_DIR \ | ||||
|    "PrefDOverride"  // Directory for per-profile defaults | ||||
| +#define NS_APP_PREFS_SYSTEM_CONFIG_DIR          "PrefSysConf"   // Directory with system-wide configuration
 | ||||
|   | ||||
|  #define NS_APP_USER_PROFILE_50_DIR "ProfD" | ||||
|  #define NS_APP_USER_PROFILE_LOCAL_50_DIR "ProfLD" | ||||
							
								
								
									
										13
									
								
								SOURCES/mozilla-1196777.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								SOURCES/mozilla-1196777.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,13 @@ | ||||
| diff -up firefox-68.0/widget/gtk/nsWindow.cpp.1196777 firefox-68.0/widget/gtk/nsWindow.cpp
 | ||||
| --- firefox-68.0/widget/gtk/nsWindow.cpp.1196777	2019-05-21 11:29:55.833376744 +0200
 | ||||
| +++ firefox-68.0/widget/gtk/nsWindow.cpp	2019-05-21 12:15:35.446089316 +0200
 | ||||
| @@ -156,7 +156,8 @@ const gint kEvents =
 | ||||
|  #if GTK_CHECK_VERSION(3, 4, 0) | ||||
|      GDK_SMOOTH_SCROLL_MASK | GDK_TOUCH_MASK | | ||||
|  #endif | ||||
| -    GDK_SCROLL_MASK | GDK_POINTER_MOTION_MASK | GDK_PROPERTY_CHANGE_MASK;
 | ||||
| +    GDK_SCROLL_MASK | GDK_POINTER_MOTION_MASK | GDK_PROPERTY_CHANGE_MASK |
 | ||||
| +    GDK_FOCUS_CHANGE_MASK;
 | ||||
|   | ||||
|  #if !GTK_CHECK_VERSION(3, 22, 0) | ||||
|  typedef enum { | ||||
							
								
								
									
										12
									
								
								SOURCES/mozilla-1703636-slot-fail-workaround.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								SOURCES/mozilla-1703636-slot-fail-workaround.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,12 @@ | ||||
| diff -up firefox-78.9.0/security/certverifier/NSSCertDBTrustDomain.cpp.slot-fail firefox-78.9.0/security/certverifier/NSSCertDBTrustDomain.cpp
 | ||||
| --- firefox-78.9.0/security/certverifier/NSSCertDBTrustDomain.cpp.slot-fail	2021-04-08 08:02:13.879018493 +0200
 | ||||
| +++ firefox-78.9.0/security/certverifier/NSSCertDBTrustDomain.cpp	2021-04-08 08:05:56.713623197 +0200
 | ||||
| @@ -118,7 +118,7 @@ static Result FindRootsWithSubject(Uniqu
 | ||||
|      CERTCertificateList* rawResults = nullptr; | ||||
|      if (PK11_FindRawCertsWithSubject(rootsModule->slots[slotIndex], &subject, | ||||
|                                       &rawResults) != SECSuccess) { | ||||
| -      return Result::FATAL_ERROR_LIBRARY_FAILURE;
 | ||||
| +      continue;
 | ||||
|      } | ||||
|      // rawResults == nullptr means we didn't find any matching certificates | ||||
|      if (!rawResults) { | ||||
							
								
								
									
										1
									
								
								SOURCES/mozilla-api-key
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								SOURCES/mozilla-api-key
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | ||||
| 9008bb7e-1e22-4038-94fe-047dd48ccc0b | ||||
							
								
								
									
										12
									
								
								SOURCES/mozilla-bmo1005535.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								SOURCES/mozilla-bmo1005535.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,12 @@ | ||||
| diff -up firefox-78.0/gfx/skia/skia/src/gpu/GrColor.h.mozilla.bmo1005535 firefox-78.0/gfx/skia/skia/src/gpu/GrColor.h
 | ||||
| --- firefox-78.0/gfx/skia/skia/src/gpu/GrColor.h.mozilla.bmo1005535	2020-06-25 16:16:34.459083304 +0200
 | ||||
| +++ firefox-78.0/gfx/skia/skia/src/gpu/GrColor.h	2020-06-25 16:17:00.968174743 +0200
 | ||||
| @@ -64,7 +64,7 @@ static inline GrColor GrColorPackRGBA(un
 | ||||
|   *  Since premultiplied means that alpha >= color, we construct a color with | ||||
|   *  each component==255 and alpha == 0 to be "illegal" | ||||
|   */ | ||||
| -#define GrColor_ILLEGAL     (~(0xFF << GrColor_SHIFT_A))
 | ||||
| +#define GrColor_ILLEGAL     ((uint32_t)(~(0xFF << GrColor_SHIFT_A)))
 | ||||
|   | ||||
|  /** Normalizes and coverts an uint8_t to a float. [0, 255] -> [0.0, 1.0] */ | ||||
|  static inline float GrNormalizeByteToFloat(uint8_t value) { | ||||
							
								
								
									
										77
									
								
								SOURCES/mozilla-bmo1504834-part1.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								SOURCES/mozilla-bmo1504834-part1.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,77 @@ | ||||
| diff -up firefox-78.0/gfx/2d/DrawTargetSkia.cpp.mozilla-bmo1504834-part1 firefox-78.0/gfx/2d/DrawTargetSkia.cpp
 | ||||
| --- firefox-78.0/gfx/2d/DrawTargetSkia.cpp.mozilla-bmo1504834-part1	2020-06-17 04:18:58.000000000 +0200
 | ||||
| +++ firefox-78.0/gfx/2d/DrawTargetSkia.cpp	2020-06-25 16:52:29.824532769 +0200
 | ||||
| @@ -135,8 +135,7 @@ static IntRect CalculateSurfaceBounds(co
 | ||||
|    return surfaceBounds.Intersect(bounds); | ||||
|  } | ||||
|   | ||||
| -static const int kARGBAlphaOffset =
 | ||||
| -    SurfaceFormat::A8R8G8B8_UINT32 == SurfaceFormat::B8G8R8A8 ? 3 : 0;
 | ||||
| +static const int kARGBAlphaOffset = 0;  // Skia is always BGRA SurfaceFormat::A8R8G8B8_UINT32 == SurfaceFormat::B8G8R8A8 ? 3 : 0;
 | ||||
|   | ||||
|  static bool VerifyRGBXFormat(uint8_t* aData, const IntSize& aSize, | ||||
|                               const int32_t aStride, SurfaceFormat aFormat) { | ||||
| diff -up firefox-78.0/gfx/2d/Types.h.mozilla-bmo1504834-part1 firefox-78.0/gfx/2d/Types.h
 | ||||
| --- firefox-78.0/gfx/2d/Types.h.mozilla-bmo1504834-part1	2020-06-25 16:52:29.826532776 +0200
 | ||||
| +++ firefox-78.0/gfx/2d/Types.h	2020-06-25 16:55:02.942063616 +0200
 | ||||
| @@ -90,15 +90,8 @@ enum class SurfaceFormat : int8_t {
 | ||||
|  // The following values are endian-independent synonyms. The _UINT32 suffix | ||||
|  // indicates that the name reflects the layout when viewed as a uint32_t | ||||
|  // value. | ||||
| -#if MOZ_LITTLE_ENDIAN()
 | ||||
|    A8R8G8B8_UINT32 = B8G8R8A8,  // 0xAARRGGBB | ||||
|    X8R8G8B8_UINT32 = B8G8R8X8,  // 0x00RRGGBB | ||||
| -#elif MOZ_BIG_ENDIAN()
 | ||||
| -  A8R8G8B8_UINT32 = A8R8G8B8,  // 0xAARRGGBB
 | ||||
| -  X8R8G8B8_UINT32 = X8R8G8B8,  // 0x00RRGGBB
 | ||||
| -#else
 | ||||
| -#  error "bad endianness"
 | ||||
| -#endif
 | ||||
|   | ||||
|    // The following values are OS and endian-independent synonyms. | ||||
|    // | ||||
| diff -up firefox-78.0/gfx/skia/skia/third_party/skcms/skcms.cc.mozilla-bmo1504834-part1 firefox-78.0/gfx/skia/skia/third_party/skcms/skcms.cc
 | ||||
| --- firefox-78.0/gfx/skia/skia/third_party/skcms/skcms.cc.mozilla-bmo1504834-part1	2020-06-17 04:18:58.000000000 +0200
 | ||||
| +++ firefox-78.0/gfx/skia/skia/third_party/skcms/skcms.cc	2020-06-25 16:54:02.993855444 +0200
 | ||||
| @@ -30,6 +30,8 @@
 | ||||
|          #include <avx512fintrin.h> | ||||
|          #include <avx512dqintrin.h> | ||||
|      #endif | ||||
| +#else
 | ||||
| +    #define SKCMS_PORTABLE
 | ||||
|  #endif | ||||
|   | ||||
|  // sizeof(x) will return size_t, which is 32-bit on some machines and 64-bit on others. | ||||
| @@ -280,20 +282,28 @@ enum {
 | ||||
|  static uint16_t read_big_u16(const uint8_t* ptr) { | ||||
|      uint16_t be; | ||||
|      memcpy(&be, ptr, sizeof(be)); | ||||
| -#if defined(_MSC_VER)
 | ||||
| -    return _byteswap_ushort(be);
 | ||||
| +#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
 | ||||
| +    return be;
 | ||||
|  #else | ||||
| +    #if defined(_MSC_VER)
 | ||||
| +    return _byteswap_ushort(be);
 | ||||
| +    #else
 | ||||
|      return __builtin_bswap16(be); | ||||
| +    #endif
 | ||||
|  #endif | ||||
|  } | ||||
|   | ||||
|  static uint32_t read_big_u32(const uint8_t* ptr) { | ||||
|      uint32_t be; | ||||
|      memcpy(&be, ptr, sizeof(be)); | ||||
| -#if defined(_MSC_VER)
 | ||||
| -    return _byteswap_ulong(be);
 | ||||
| +#if __BYTE_ORDER == __ORDER_BIG_ENDIAN__
 | ||||
| +    return be;
 | ||||
|  #else | ||||
| +    #if defined(_MSC_VER)
 | ||||
| +    return _byteswap_ulong(be);
 | ||||
| +    #else
 | ||||
|      return __builtin_bswap32(be); | ||||
| +    #endif
 | ||||
|  #endif | ||||
|  } | ||||
|   | ||||
							
								
								
									
										88
									
								
								SOURCES/mozilla-bmo1504834-part2.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										88
									
								
								SOURCES/mozilla-bmo1504834-part2.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,88 @@ | ||||
| # HG changeset patch | ||||
| # Parent  36563351309ddbc6c29559ba50a41d005f925abb | ||||
| Skia does not support big endian. The places to fix are too numerous and upstream (skia, not Mozilla) | ||||
| has no interest in maintaining big endian. | ||||
| So here we try to swizzle the input for skia, so that skia always works on LE, and when it comes | ||||
| out again, we transform back to BE. | ||||
| 
 | ||||
| diff -r 36563351309d gfx/2d/ConvolutionFilter.cpp
 | ||||
| --- a/gfx/2d/ConvolutionFilter.cpp	Mon Sep 09 17:59:28 2019 +0200
 | ||||
| +++ b/gfx/2d/ConvolutionFilter.cpp	Tue Sep 10 08:25:13 2019 +0200
 | ||||
| @@ -35,9 +35,38 @@
 | ||||
|    return true; | ||||
|  } | ||||
|   | ||||
| +static void ByteSwapArray(uint8_t *u8Array, int32_t size) {
 | ||||
| +    uint32_t *array = reinterpret_cast<uint32_t*>(u8Array);
 | ||||
| +    for (int pxl = 0; pxl < size; ++pxl) {
 | ||||
| +        // Use an endian swap to move the bytes, i.e. BGRA -> ARGB.
 | ||||
| +        uint32_t rgba = array[pxl];
 | ||||
| +        array[pxl] = NativeEndian::swapToLittleEndian(rgba);
 | ||||
| +    }
 | ||||
| +}
 | ||||
| +
 | ||||
|  void ConvolutionFilter::ConvolveHorizontally(const uint8_t* aSrc, uint8_t* aDst, | ||||
|                                               bool aHasAlpha) { | ||||
| +#if MOZ_BIG_ENDIAN
 | ||||
| +    int outputSize = mFilter->numValues();
 | ||||
| +
 | ||||
| +    // Input size isn't handed in, so we have to calculate it quickly
 | ||||
| +    int inputSize = 0;
 | ||||
| +    for (int xx = 0; xx < outputSize; ++xx) {
 | ||||
| +        // Get the filter that determines the current output pixel.
 | ||||
| +        int filterOffset, filterLength;
 | ||||
| +        mFilter->FilterForValue(xx, &filterOffset, &filterLength);
 | ||||
| +        inputSize = std::max(inputSize, filterOffset + filterLength);
 | ||||
| +    }
 | ||||
| +
 | ||||
| +    ByteSwapArray((uint8_t*)aSrc, inputSize);
 | ||||
| +#endif
 | ||||
| +
 | ||||
|    SkOpts::convolve_horizontally(aSrc, *mFilter, aDst, aHasAlpha); | ||||
| +
 | ||||
| +#if MOZ_BIG_ENDIAN
 | ||||
| +    ByteSwapArray((uint8_t*)aSrc, inputSize);
 | ||||
| +    ByteSwapArray(aDst, outputSize);
 | ||||
| +#endif
 | ||||
|  } | ||||
|   | ||||
|  void ConvolutionFilter::ConvolveVertically(uint8_t* const* aSrc, uint8_t* aDst, | ||||
| @@ -49,8 +78,26 @@
 | ||||
|    int32_t filterLength; | ||||
|    auto filterValues = | ||||
|        mFilter->FilterForValue(aRowIndex, &filterOffset, &filterLength); | ||||
| +
 | ||||
| +#if MOZ_BIG_ENDIAN
 | ||||
| +  for (int filterY = 0; filterY < filterLength; filterY++) {
 | ||||
| +      // Skia only knows LE, so we have to swizzle the input
 | ||||
| +    ByteSwapArray(aSrc[filterY], aRowSize);
 | ||||
| +  }
 | ||||
| +#endif
 | ||||
| +
 | ||||
|    SkOpts::convolve_vertically(filterValues, filterLength, aSrc, aRowSize, aDst, | ||||
|                                aHasAlpha); | ||||
| +
 | ||||
| +#if MOZ_BIG_ENDIAN
 | ||||
| +  // After skia is finished, we swizzle back to BE, in case
 | ||||
| +  // the input is used again somewhere else
 | ||||
| +  for (int filterY = 0; filterY < filterLength; filterY++) {
 | ||||
| +    ByteSwapArray(aSrc[filterY], aRowSize);
 | ||||
| +  }
 | ||||
| +  // The destination array as well
 | ||||
| +  ByteSwapArray(aDst, aRowSize);
 | ||||
| +#endif
 | ||||
|  } | ||||
|   | ||||
|  /* ConvolutionFilter::ComputeResizeFactor is derived from Skia's | ||||
| diff -r 36563351309d gfx/skia/skia/include/core/SkPreConfig.h
 | ||||
| --- a/gfx/skia/skia/include/core/SkPreConfig.h	Mon Sep 09 17:59:28 2019 +0200
 | ||||
| +++ b/gfx/skia/skia/include/core/SkPreConfig.h	Tue Sep 10 08:25:13 2019 +0200
 | ||||
| @@ -73,7 +73,7 @@
 | ||||
|        defined(__ppc__) || defined(__hppa) || \ | ||||
|        defined(__PPC__) || defined(__PPC64__) || \ | ||||
|        defined(_MIPSEB) || defined(__ARMEB__) || \ | ||||
| -      defined(__s390__) || \
 | ||||
| +      defined(__s390__) || defined(__s390x__) || \
 | ||||
|        (defined(__sh__) && defined(__BIG_ENDIAN__)) || \ | ||||
|        (defined(__ia64) && defined(__BIG_ENDIAN__)) | ||||
|           #define SK_CPU_BENDIAN | ||||
							
								
								
									
										44
									
								
								SOURCES/mozilla-bmo1504834-part3.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								SOURCES/mozilla-bmo1504834-part3.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,44 @@ | ||||
| # HG changeset patch | ||||
| # Parent  aecb4600e5da17443b224c79eee178c1d8e155e3 | ||||
| For FF68, AntiAliasing of XULTexts seem to be broken on big endian (s390x). Text and icons of the sandwich-menu to the | ||||
| right of the address bar, as well as plugin-windows appears transparant, which usually means unreadable (white on white). | ||||
| 
 | ||||
| diff -r aecb4600e5da gfx/skia/skia/include/private/SkNx.h
 | ||||
| --- a/gfx/skia/skia/include/private/SkNx.h	Tue Aug 20 09:46:55 2019 +0200
 | ||||
| +++ b/gfx/skia/skia/include/private/SkNx.h	Mon Sep 09 10:04:06 2019 +0200
 | ||||
| @@ -238,7 +238,18 @@
 | ||||
|      AI SkNx operator*(const SkNx& y) const { return fVal * y.fVal; } | ||||
|      AI SkNx operator/(const SkNx& y) const { return fVal / y.fVal; } | ||||
|   | ||||
| +    // On Big endian the commented out variant doesn't work,
 | ||||
| +    // and honestly, I have no idea why it exists in the first place.
 | ||||
| +    // The reason its broken is, I think, that it defaults to the double-variant of ToBits()
 | ||||
| +    // which gets a 64-bit integer, and FromBits returns 32-bit,
 | ||||
| +    // cutting off the wrong half again.
 | ||||
| +    // Overall, I see no reason to have ToBits and FromBits at all (even for floats/doubles).
 | ||||
| +    // Still we are only "fixing" this for big endian and leave little endian alone (never touch a running system)
 | ||||
| +#ifdef SK_CPU_BENDIAN
 | ||||
| +    AI SkNx operator&(const SkNx& y) const { return fVal & y.fVal; }
 | ||||
| +#else
 | ||||
|      AI SkNx operator&(const SkNx& y) const { return FromBits(ToBits(fVal) & ToBits(y.fVal)); } | ||||
| +#endif
 | ||||
|      AI SkNx operator|(const SkNx& y) const { return FromBits(ToBits(fVal) | ToBits(y.fVal)); } | ||||
|      AI SkNx operator^(const SkNx& y) const { return FromBits(ToBits(fVal) ^ ToBits(y.fVal)); } | ||||
|   | ||||
| diff -r aecb4600e5da gfx/skia/skia/src/opts/SkBlitMask_opts.h
 | ||||
| --- a/gfx/skia/skia/src/opts/SkBlitMask_opts.h	Tue Aug 20 09:46:55 2019 +0200
 | ||||
| +++ b/gfx/skia/skia/src/opts/SkBlitMask_opts.h	Mon Sep 09 10:04:06 2019 +0200
 | ||||
| @@ -203,7 +203,13 @@
 | ||||
|              //   ~~~> | ||||
|              // a = 1*aa + d(1-1*aa) = aa + d(1-aa) | ||||
|              // c = 0*aa + d(1-1*aa) =      d(1-aa) | ||||
| +
 | ||||
| +            // For big endian we have to swap the alpha-mask from 0,0,0,255 to 255,0,0,0
 | ||||
| +#ifdef SK_CPU_BENDIAN
 | ||||
| +            return Sk4px(Sk16b(aa) & Sk16b(255,0,0,0, 255,0,0,0, 255,0,0,0, 255,0,0,0))
 | ||||
| +#else
 | ||||
|              return Sk4px(Sk16b(aa) & Sk16b(0,0,0,255, 0,0,0,255, 0,0,0,255, 0,0,0,255)) | ||||
| +#endif
 | ||||
|                   + d.approxMulDiv255(aa.inv()); | ||||
|          }; | ||||
|          while (h --> 0) { | ||||
							
								
								
									
										30
									
								
								SOURCES/mozilla-bmo1504834-part4.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								SOURCES/mozilla-bmo1504834-part4.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,30 @@ | ||||
| # HG changeset patch | ||||
| # Parent  46ea866ca3acb8bb5e1709ceb799b9c94f591dec | ||||
| Problem description: Tab-titles that are too long to fit into a tab get faded out. | ||||
|                      On big endian this is broken and instead of fading out, the  | ||||
|                      tab gets white and the font transparent, leading to an unreadable | ||||
|                      tab-title | ||||
| Solution: This is not a real solution, but a hack. The real solution would have been | ||||
|           to byte-swap the correct buffer, but I could not find it. | ||||
|           So the next best thing is to deactivate the fading-effect. Now all tab-titles | ||||
|           are readable, albeit not as pretty to look at as they could be.  | ||||
| Side-effects: I have not yet found an unwanted side-effect. | ||||
| 
 | ||||
| diff -r 46ea866ca3ac -r 6ef20eee3f8f gfx/2d/DrawTargetSkia.cpp
 | ||||
| --- a/gfx/2d/DrawTargetSkia.cpp	Tue Oct 22 12:27:22 2019 +0200
 | ||||
| +++ b/gfx/2d/DrawTargetSkia.cpp	Thu Oct 31 09:11:56 2019 +0100
 | ||||
| @@ -1861,6 +1861,14 @@
 | ||||
|        SkCanvas::kPreserveLCDText_SaveLayerFlag | | ||||
|            (aCopyBackground ? SkCanvas::kInitWithPrevious_SaveLayerFlag : 0)); | ||||
|   | ||||
| +#if MOZ_BIG_ENDIAN
 | ||||
| +  // Pushing a layer where an aMask is defined produces wrong output.
 | ||||
| +  // We _should_ endian swap the data, but I couldn't find a workable way to do so
 | ||||
| +  // Therefore I deactivate those layers in the meantime.
 | ||||
| +  // The result is: Tab-titles that are longer than the available space should be faded out.
 | ||||
| +  //                The fading doesn't work, so we deactivate the fading-effect here.
 | ||||
| +  if (!aMask)
 | ||||
| +#endif
 | ||||
|    mCanvas->saveLayer(saveRec); | ||||
|   | ||||
|    SetPermitSubpixelAA(aOpaque); | ||||
							
								
								
									
										22
									
								
								SOURCES/mozilla-bmo1554971.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								SOURCES/mozilla-bmo1554971.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,22 @@ | ||||
| # HG changeset patch | ||||
| # Parent  a25cebecb02d5460b8ad757fe9cb4a9c8d1d7658 | ||||
| Eliminate startup error message: | ||||
| JavaScript error: , line 0: Error: Type error for platformInfo value (Error processing arch: Invalid enumeration value "s390x") for runtime.getPlatformInfo. | ||||
| 
 | ||||
| Reported here: https://bugzilla.mozilla.org/show_bug.cgi?id=1554971 | ||||
| 
 | ||||
| Uncertain if this is causing real problems or not. Also uncertain if the fix actually fixes anything. | ||||
| No response from upstream yet. | ||||
| 
 | ||||
| diff -r a25cebecb02d -r 378b81b00e73 toolkit/components/extensions/schemas/runtime.json
 | ||||
| --- a/toolkit/components/extensions/schemas/runtime.json	Fri Jul 05 12:42:44 2019 +0200
 | ||||
| +++ b/toolkit/components/extensions/schemas/runtime.json	Fri Jul 19 13:19:30 2019 +0200
 | ||||
| @@ -64,7 +64,7 @@
 | ||||
|        { | ||||
|          "id": "PlatformArch", | ||||
|          "type": "string", | ||||
| -        "enum": ["arm", "x86-32", "x86-64"],
 | ||||
| +        "enum": ["arm", "x86-32", "x86-64", "s390x", "aarch64", "ppc64le"],
 | ||||
|          "allowedContexts": ["content", "devtools"], | ||||
|          "description": "The machine's processor architecture." | ||||
|        }, | ||||
							
								
								
									
										28
									
								
								SOURCES/mozilla-bmo1602730.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								SOURCES/mozilla-bmo1602730.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,28 @@ | ||||
| diff -r 6ef20eee3f8f gfx/layers/basic/BasicCompositor.cpp
 | ||||
| --- a/gfx/layers/basic/BasicCompositor.cpp	Thu Oct 31 09:11:56 2019 +0100
 | ||||
| +++ b/gfx/layers/basic/BasicCompositor.cpp	Wed Dec 11 16:16:09 2019 +0100
 | ||||
| @@ -693,9 +693,13 @@
 | ||||
|   | ||||
|    RefPtr<SourceSurface> sourceMask; | ||||
|    Matrix maskTransform; | ||||
| +  // Setting an alpha-mask here breaks the URL-bar on big endian (s390x)
 | ||||
| +  // if the typed URL is too long for the textbox (automatic scrolling needed)
 | ||||
| +#if MOZ_LITTLE_ENDIAN
 | ||||
|    if (aTransform.Is2D()) { | ||||
|      SetupMask(aEffectChain, dest, offset, sourceMask, maskTransform); | ||||
|    } | ||||
| +#endif
 | ||||
|   | ||||
|    CompositionOp blendMode = CompositionOp::OP_OVER; | ||||
|    if (Effect* effect = | ||||
| diff -r 6ef20eee3f8f gfx/layers/composite/CompositableHost.cpp
 | ||||
| --- a/gfx/layers/composite/CompositableHost.cpp	Thu Oct 31 09:11:56 2019 +0100
 | ||||
| +++ b/gfx/layers/composite/CompositableHost.cpp	Wed Dec 11 16:16:09 2019 +0100
 | ||||
| @@ -91,6 +91,7 @@
 | ||||
|    } | ||||
|    MOZ_ASSERT(source); | ||||
|   | ||||
| +  // Alternatively: Comment out these lines where the alpha-mask is set
 | ||||
|    RefPtr<EffectMask> effect = | ||||
|        new EffectMask(source, source->GetSize(), aTransform); | ||||
|    aEffects.mSecondaryEffects[EffectTypes::MASK] = effect; | ||||
							
								
								
									
										86
									
								
								SOURCES/mozilla-bmo1626236.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								SOURCES/mozilla-bmo1626236.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,86 @@ | ||||
| # HG changeset patch | ||||
| # User msirringhaus@suse.de | ||||
| # Date 1582805876 -3600 | ||||
| #      Thu Feb 27 13:17:56 2020 +0100 | ||||
| # Node ID cc3d09abea31068e57f1ab918782f9f86fc6a158 | ||||
| # Parent  9cd90914846f667f18babc491a74c164ae5d6e9f | ||||
| imported patch decoder_workaround.patch | ||||
| 
 | ||||
| diff -r 9cd90914846f image/decoders/nsGIFDecoder2.cpp
 | ||||
| --- a/image/decoders/nsGIFDecoder2.cpp	Thu Feb 27 12:57:14 2020 +0100
 | ||||
| +++ b/image/decoders/nsGIFDecoder2.cpp	Fri Mar 27 13:06:18 2020 +0100
 | ||||
| @@ -422,6 +422,9 @@
 | ||||
|    MOZ_ASSERT(mSwizzleFn); | ||||
|    uint8_t* data = reinterpret_cast<uint8_t*>(aColormap); | ||||
|    mSwizzleFn(data, data, aColors); | ||||
| +#if MOZ_BIG_ENDIAN()
 | ||||
| +  SwizzleRow(SurfaceFormat::A8R8G8B8, SurfaceFormat::B8G8R8A8)(data, data, aColors);
 | ||||
| +#endif
 | ||||
|  } | ||||
|   | ||||
|  LexerResult nsGIFDecoder2::DoDecode(SourceBufferIterator& aIterator, | ||||
| diff -r 9cd90914846f image/decoders/nsJPEGDecoder.cpp
 | ||||
| --- a/image/decoders/nsJPEGDecoder.cpp	Thu Feb 27 12:57:14 2020 +0100
 | ||||
| +++ b/image/decoders/nsJPEGDecoder.cpp	Fri Mar 27 13:06:18 2020 +0100
 | ||||
| @@ -263,6 +263,9 @@
 | ||||
|          case JCS_YCbCr: | ||||
|            // By default, we will output directly to BGRA. If we need to apply | ||||
|            // special color transforms, this may change. | ||||
| +#if MOZ_BIG_ENDIAN()
 | ||||
| +          mInfo.out_color_space = MOZ_JCS_EXT_NATIVE_ENDIAN_XRGB;
 | ||||
| +#else
 | ||||
|            switch (SurfaceFormat::OS_RGBX) { | ||||
|              case SurfaceFormat::B8G8R8X8: | ||||
|                mInfo.out_color_space = JCS_EXT_BGRX; | ||||
| @@ -277,6 +280,7 @@
 | ||||
|                mState = JPEG_ERROR; | ||||
|                return Transition::TerminateFailure(); | ||||
|            } | ||||
| +#endif
 | ||||
|            break; | ||||
|          case JCS_CMYK: | ||||
|          case JCS_YCCK: | ||||
| diff -r 9cd90914846f image/decoders/nsPNGDecoder.cpp
 | ||||
| --- a/image/decoders/nsPNGDecoder.cpp	Thu Feb 27 12:57:14 2020 +0100
 | ||||
| +++ b/image/decoders/nsPNGDecoder.cpp	Fri Mar 27 13:06:18 2020 +0100
 | ||||
| @@ -361,7 +361,7 @@
 | ||||
|                                     IResumable* aOnResume) { | ||||
|    MOZ_ASSERT(!HasError(), "Shouldn't call DoDecode after error!"); | ||||
|   | ||||
| -  return mLexer.Lex(aIterator, aOnResume,
 | ||||
| +  LexerResult res = mLexer.Lex(aIterator, aOnResume,
 | ||||
|                      [=](State aState, const char* aData, size_t aLength) { | ||||
|                        switch (aState) { | ||||
|                          case State::PNG_DATA: | ||||
| @@ -371,6 +371,14 @@
 | ||||
|                        } | ||||
|                        MOZ_CRASH("Unknown State"); | ||||
|                      }); | ||||
| +
 | ||||
| +#if MOZ_BIG_ENDIAN()
 | ||||
| +  if(res.is<TerminalState>() && res.as<TerminalState>() == TerminalState::SUCCESS) {
 | ||||
| +      NativeEndian::swapToLittleEndianInPlace<uint32_t>((uint32_t*)(mImageData), mImageDataLength / 4);
 | ||||
| +  }
 | ||||
| +#endif
 | ||||
| +
 | ||||
| +  return res;
 | ||||
|  } | ||||
|   | ||||
|  LexerTransition<nsPNGDecoder::State> nsPNGDecoder::ReadPNGData( | ||||
| diff -r 9cd90914846f image/decoders/nsWebPDecoder.cpp
 | ||||
| --- a/image/decoders/nsWebPDecoder.cpp	Thu Feb 27 12:57:14 2020 +0100
 | ||||
| +++ b/image/decoders/nsWebPDecoder.cpp	Fri Mar 27 13:06:18 2020 +0100
 | ||||
| @@ -237,7 +237,12 @@
 | ||||
|    // WebP doesn't guarantee that the alpha generated matches the hint in the | ||||
|    // header, so we always need to claim the input is BGRA. If the output is | ||||
|    // BGRX, swizzling will mask off the alpha channel. | ||||
| +#if MOZ_BIG_ENDIAN()
 | ||||
| +  mBuffer.colorspace = MODE_ARGB;
 | ||||
| +  SurfaceFormat inFormat = mFormat;
 | ||||
| +#else
 | ||||
|    SurfaceFormat inFormat = SurfaceFormat::OS_RGBA; | ||||
| +#endif
 | ||||
|   | ||||
|    SurfacePipeFlags pipeFlags = SurfacePipeFlags(); | ||||
|    if (mFormat == SurfaceFormat::OS_RGBA && | ||||
| 
 | ||||
							
								
								
									
										23
									
								
								SOURCES/mozilla-bmo849632.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								SOURCES/mozilla-bmo849632.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,23 @@ | ||||
| Problem:  webGL sites are displayed in the wrong color (usually blue-ish) | ||||
| Solution: Problem is with skia once again. Output of webgl seems endian-correct, but skia only | ||||
|           knows how to deal with little endian. | ||||
|           So we swizzle the output of webgl after reading it from readpixels() | ||||
| Note:     This does not fix all webGL sites, but is a step in the right direction | ||||
| diff -r 6b017d3e9733 gfx/gl/GLContext.h
 | ||||
| --- a/gfx/gl/GLContext.h    Mon Sep 09 10:04:05 2019 +0200
 | ||||
| +++ b/gfx/gl/GLContext.h    Wed Nov 13 17:13:04 2019 +0100
 | ||||
| @@ -1551,6 +1551,13 @@
 | ||||
|      BEFORE_GL_CALL; | ||||
|      mSymbols.fReadPixels(x, y, width, height, format, type, pixels); | ||||
|      OnSyncCall(); | ||||
| +#if MOZ_BIG_ENDIAN
 | ||||
| +    uint8_t* itr = (uint8_t*)pixels;
 | ||||
| +    for (GLsizei i = 0; i < width * height; i++) {
 | ||||
| +      NativeEndian::swapToLittleEndianInPlace((uint32_t*)itr, 1);
 | ||||
| +      itr += 4;
 | ||||
| +    }
 | ||||
| +#endif
 | ||||
|      AFTER_GL_CALL; | ||||
|      mHeavyGLCallsSinceLastFlush = true; | ||||
|    } | ||||
| 
 | ||||
							
								
								
									
										30
									
								
								SOURCES/mozilla-bmo998749.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								SOURCES/mozilla-bmo998749.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,30 @@ | ||||
| # HG changeset patch | ||||
| # User msirringhaus@suse.de | ||||
| # Date 1583738770 -3600 | ||||
| #      Mon Mar 09 08:26:10 2020 +0100 | ||||
| # Node ID 34676feac1a542e409e22acf5b98735f8313b1ce | ||||
| # Parent  506857dace0a08d1c9685e3ac264646590b3e27f | ||||
| [mq]: mozilla-bmo998749.patch | ||||
| 
 | ||||
| diff -r 506857dace0a -r 34676feac1a5 gfx/2d/FilterProcessing.h
 | ||||
| --- a/gfx/2d/FilterProcessing.h	Fri Feb 28 12:31:51 2020 +0100
 | ||||
| +++ b/gfx/2d/FilterProcessing.h	Mon Mar 09 08:26:10 2020 +0100
 | ||||
| @@ -13,10 +13,17 @@
 | ||||
|  namespace mozilla { | ||||
|  namespace gfx { | ||||
|   | ||||
| +#if MOZ_BIG_ENDIAN()
 | ||||
| +const ptrdiff_t B8G8R8A8_COMPONENT_BYTEOFFSET_B = 3;
 | ||||
| +const ptrdiff_t B8G8R8A8_COMPONENT_BYTEOFFSET_G = 2;
 | ||||
| +const ptrdiff_t B8G8R8A8_COMPONENT_BYTEOFFSET_R = 1;
 | ||||
| +const ptrdiff_t B8G8R8A8_COMPONENT_BYTEOFFSET_A = 0;
 | ||||
| +#else
 | ||||
|  const ptrdiff_t B8G8R8A8_COMPONENT_BYTEOFFSET_B = 0; | ||||
|  const ptrdiff_t B8G8R8A8_COMPONENT_BYTEOFFSET_G = 1; | ||||
|  const ptrdiff_t B8G8R8A8_COMPONENT_BYTEOFFSET_R = 2; | ||||
|  const ptrdiff_t B8G8R8A8_COMPONENT_BYTEOFFSET_A = 3; | ||||
| +#endif
 | ||||
|   | ||||
|  class FilterProcessing { | ||||
|   public: | ||||
| 
 | ||||
							
								
								
									
										36
									
								
								SOURCES/mozilla-s390-context.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								SOURCES/mozilla-s390-context.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,36 @@ | ||||
| # HG changeset patch | ||||
| # User msirringhaus@suse.de | ||||
| # Date 1558452408 -7200 | ||||
| #      Tue May 21 17:26:48 2019 +0200 | ||||
| # Node ID 602e92722e765a3c238d3b96b26c0c8063b5eeb4 | ||||
| # Parent  a3cc550d25e3a04d906f516928cbcbe50efd585e | ||||
| [mq]: mozilla-s390-context.patch | ||||
| 
 | ||||
| diff -r a3cc550d25e3 -r 602e92722e76 js/src/wasm/WasmSignalHandlers.cpp
 | ||||
| --- a/js/src/wasm/WasmSignalHandlers.cpp	Tue May 21 17:22:06 2019 +0200
 | ||||
| +++ b/js/src/wasm/WasmSignalHandlers.cpp	Tue May 21 17:26:48 2019 +0200
 | ||||
| @@ -154,6 +154,10 @@
 | ||||
|  #    define R01_sig(p) ((p)->uc_mcontext.gp_regs[1]) | ||||
|  #    define R32_sig(p) ((p)->uc_mcontext.gp_regs[32]) | ||||
|  #  endif | ||||
| +#  if defined(__linux__) && defined(__s390x__)
 | ||||
| +#    define GR_sig(p,x) ((p)->uc_mcontext.gregs[x])
 | ||||
| +#    define PSWa_sig(p) ((p)->uc_mcontext.psw.addr)
 | ||||
| +#  endif
 | ||||
|  #elif defined(__NetBSD__) | ||||
|  #  define EIP_sig(p) ((p)->uc_mcontext.__gregs[_REG_EIP]) | ||||
|  #  define EBP_sig(p) ((p)->uc_mcontext.__gregs[_REG_EBP]) | ||||
| @@ -385,8 +389,13 @@
 | ||||
|  #  define PC_sig(p) R32_sig(p) | ||||
|  #  define SP_sig(p) R01_sig(p) | ||||
|  #  define FP_sig(p) R01_sig(p) | ||||
| +#elif defined(__s390x__)
 | ||||
| +# define PC_sig(p) PSWa_sig(p)
 | ||||
| +# define SP_sig(p) GR_sig(p, 15)
 | ||||
| +# define FP_sig(p) GR_sig(p, 11)
 | ||||
|  #endif | ||||
|   | ||||
| +
 | ||||
|  static void SetContextPC(CONTEXT* context, uint8_t* pc) { | ||||
|  #ifdef PC_sig | ||||
|    *reinterpret_cast<uint8_t**>(&PC_sig(context)) = pc; | ||||
							
								
								
									
										52
									
								
								SOURCES/mozilla-s390x-skia-gradient.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								SOURCES/mozilla-s390x-skia-gradient.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,52 @@ | ||||
| # HG changeset patch | ||||
| # Parent  acf59ea86dd1d878b43920832093f082dcfc61c0 | ||||
| 
 | ||||
| diff -r acf59ea86dd1 gfx/skia/skia/src/shaders/gradients/Sk4fLinearGradient.cpp
 | ||||
| --- a/gfx/skia/skia/src/shaders/gradients/Sk4fLinearGradient.cpp	Mon Mar 09 08:26:10 2020 +0100
 | ||||
| +++ b/gfx/skia/skia/src/shaders/gradients/Sk4fLinearGradient.cpp	Fri Mar 27 13:30:28 2020 +0100
 | ||||
| @@ -7,7 +7,7 @@
 | ||||
|   | ||||
|  #include "include/core/SkPaint.h" | ||||
|  #include "src/shaders/gradients/Sk4fLinearGradient.h" | ||||
| -
 | ||||
| +#include "src/core/SkEndian.h"
 | ||||
|  #include <cmath> | ||||
|  #include <utility> | ||||
|   | ||||
| @@ -28,6 +28,9 @@
 | ||||
|   | ||||
|      while (n >= 4) { | ||||
|          DstTraits<premul>::store4x(c0, c1, c2, c3, dst, bias0, bias1); | ||||
| +#ifdef SK_CPU_BENDIAN
 | ||||
| +        SkEndianSwap32s(dst, 4);
 | ||||
| +#endif
 | ||||
|          dst += 4; | ||||
|   | ||||
|          c0 = c0 + dc4; | ||||
| @@ -37,12 +40,23 @@
 | ||||
|          n -= 4; | ||||
|      } | ||||
|      if (n & 2) { | ||||
| -        DstTraits<premul>::store(c0, dst++, bias0);
 | ||||
| -        DstTraits<premul>::store(c1, dst++, bias1);
 | ||||
| +        DstTraits<premul>::store(c0, dst, bias0);
 | ||||
| +#ifdef SK_CPU_BENDIAN
 | ||||
| +        *dst = SkEndianSwap32(*dst);
 | ||||
| +#endif
 | ||||
| +        ++dst;
 | ||||
| +        DstTraits<premul>::store(c1, dst, bias1);
 | ||||
| +#ifdef SK_CPU_BENDIAN
 | ||||
| +        *dst = SkEndianSwap32(*dst);
 | ||||
| +#endif
 | ||||
| +        ++dst;
 | ||||
|          c0 = c0 + dc2; | ||||
|      } | ||||
|      if (n & 1) { | ||||
|          DstTraits<premul>::store(c0, dst, bias0); | ||||
| +#ifdef SK_CPU_BENDIAN
 | ||||
| +        *dst = SkEndianSwap32(*dst);
 | ||||
| +#endif
 | ||||
|      } | ||||
|  } | ||||
|   | ||||
| 
 | ||||
							
								
								
									
										3
									
								
								SOURCES/node-stdout-nonblocking-wrapper
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										3
									
								
								SOURCES/node-stdout-nonblocking-wrapper
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,3 @@ | ||||
| #!/bin/sh | ||||
| #exec /usr/bin/node "$@" 2>&1 | cat - | ||||
| exec $MOZ_NODEJS "$@" 2>&1 | cat - | ||||
							
								
								
									
										7
									
								
								SOURCES/nss-setup-flags-env.inc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								SOURCES/nss-setup-flags-env.inc
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,7 @@ | ||||
| sed -i 's@%{gtk3_install_path}@%{_buildrootdir}%{gtk3_install_path}@g' %{_buildrootdir}%{gtk3_install_path}/%{_lib}/pkgconfig/nss*.pc | ||||
| 
 | ||||
| export LDFLAGS="-L%{_buildrootdir}%{gtk3_install_path}/%{_lib} $LDFLAGS" | ||||
| export LDFLAGS="-Wl,-rpath,%{gtk3_install_path}/%{_lib} $LDFLAGS" | ||||
| export LDFLAGS="-Wl,-rpath-link,%{_buildrootdir}%{gtk3_install_path}/%{_lib} $LDFLAGS" | ||||
| export PKG_CONFIG_PATH=%{_buildrootdir}%{gtk3_install_path}/%{_lib}/pkgconfig | ||||
| export PATH="{_buildrootdir}%{gtk3_install_path}/bin:$PATH" | ||||
							
								
								
									
										23
									
								
								SOURCES/process-official-tarball
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										23
									
								
								SOURCES/process-official-tarball
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,23 @@ | ||||
| #!/bin/sh | ||||
| 
 | ||||
| rm -rf ./process-tarball-dir | ||||
| mkdir ./process-tarball-dir | ||||
| tar -xJf $1 --directory process-tarball-dir | ||||
| 
 | ||||
| rm -vf ./process-tarball-dir/*/testing/web-platform/tests/conformance-checkers/html-rdfa/0030-isvalid.html | ||||
| rm -vf ./process-tarball-dir/*/testing/web-platform/tests/conformance-checkers/html-rdfa/0008-isvalid.html | ||||
| rm -vf ./process-tarball-dir/*/testing/web-platform/tests/conformance-checkers/html-rdfalite/0030-isvalid.html | ||||
| rm -vf ./process-tarball-dir/*/testing/web-platform/tests/css/css-ui/support/cursors/woolly-64.svg | ||||
| rm -vf ./process-tarball-dir/*/testing/web-platform/tests/css/css-ui/support/cursors/woolly.svg | ||||
| rm -vf ./process-tarball-dir/*/testing/web-platform/tests/conformance-checkers/html-rdfa/0230-novalid.html | ||||
| rm -vf ./process-tarball-dir/*/testing/web-platform/tests/conformance-checkers/html-rdfa/0231-isvalid.html | ||||
| rm -vf ./process-tarball-dir/*/layout/inspector/tests/chrome/test_fontVariationsAPI.css | ||||
| 
 | ||||
| processed_tarball=${1/source/processed-source} | ||||
| 
 | ||||
| cd ./process-tarball-dir | ||||
| tar -cf - ./* | xz -9 -T 0 -f > $processed_tarball | ||||
| mv $processed_tarball .. | ||||
| cd .. | ||||
| 
 | ||||
| rm -rf ./process-tarball-dir | ||||
							
								
								
									
										57
									
								
								SOURCES/python-2.7-gcc8-fix.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								SOURCES/python-2.7-gcc8-fix.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,57 @@ | ||||
| commit 0b91f8a668201fc58fa732b8acc496caedfdbae0 | ||||
| Author: Florian Weimer <fw@deneb.enyo.de> | ||||
| Date:   Sun Apr 29 12:18:33 2018 -0700 | ||||
| 
 | ||||
|     Indicate that _PyGC_Head is only 8-byte aligned. (closes bpo-33374) | ||||
| 
 | ||||
|     By spec, the "long double" in _PyGC_Head requires the union to always be 16-byte | ||||
|     aligned. However, obmalloc only yields 8-byte alignment. Compilers including GCC | ||||
|     8 are starting to use alignment information to do store-merging. So, the "long | ||||
|     double" needs to be changed to a simple "double" as was long ago done in Python | ||||
|     3 by e348c8d154cf6342c79d627ebfe89dfe9de23817. For 2.7, we need to add some | ||||
|     dummy padding to make sure _PyGC_Head stays the same size. | ||||
| 
 | ||||
| diff --git a/Include/objimpl.h b/Include/objimpl.h
 | ||||
| index 5f28683329..cbf6bc3f87 100644
 | ||||
| --- Python-2.7.13/Include/objimpl.h
 | ||||
| +++ Python-2.7.13/Include/objimpl.h
 | ||||
| @@ -248,6 +248,20 @@ PyAPI_FUNC(PyVarObject *) _PyObject_GC_Resize(PyVarObject *, Py_ssize_t);
 | ||||
|  /* for source compatibility with 2.2 */ | ||||
|  #define _PyObject_GC_Del PyObject_GC_Del | ||||
| 
 | ||||
| +/*
 | ||||
| + * Former over-aligned definition of PyGC_Head, used to compute the size of the
 | ||||
| + * padding for the new version below.
 | ||||
| + */
 | ||||
| +union _gc_head;
 | ||||
| +union _gc_head_old {
 | ||||
| +    struct {
 | ||||
| +        union _gc_head_old *gc_next;
 | ||||
| +        union _gc_head_old *gc_prev;
 | ||||
| +        Py_ssize_t gc_refs;
 | ||||
| +    } gc;
 | ||||
| +    long double dummy;
 | ||||
| +};
 | ||||
| +
 | ||||
|  /* GC information is stored BEFORE the object structure. */ | ||||
|  typedef union _gc_head { | ||||
|      struct { | ||||
| @@ -255,7 +269,8 @@ typedef union _gc_head {
 | ||||
|          union _gc_head *gc_prev; | ||||
|          Py_ssize_t gc_refs; | ||||
|      } gc; | ||||
| -    long double dummy;  /* force worst-case alignment */
 | ||||
| +    double dummy; /* Force at least 8-byte alignment. */
 | ||||
| +    char dummy_padding[sizeof(union _gc_head_old)];
 | ||||
|  } PyGC_Head; | ||||
| 
 | ||||
|  extern PyGC_Head *_PyGC_generation0; | ||||
| diff --git a/Misc/NEWS.d/next/Core and Builtins/2018-04-29-12-07-00.bpo-33374.-xegL6.rst b/Misc/NEWS.d/next/Core and Builtins/2018-04-29-12-07-00.bpo-33374.-xegL6.rst
 | ||||
| new file mode 100644 | ||||
| index 0000000000..9ec1a605c8
 | ||||
| --- /dev/null
 | ||||
| +++ Python-2.7.13/Misc/NEWS.d/next/Core and Builtins/2018-04-29-12-07-00.bpo-33374.-xegL6.rst
 | ||||
| @@ -0,0 +1,3 @@
 | ||||
| +Tweak the definition of PyGC_Head, so compilers do not believe it is always
 | ||||
| +16-byte aligned on x86. This prevents crashes with more aggressive
 | ||||
| +optimizations present in GCC 8.
 | ||||
							
								
								
									
										17
									
								
								SOURCES/python-2.7.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								SOURCES/python-2.7.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,17 @@ | ||||
| diff -up Python-2.7.13/configure.build Python-2.7.13/configure
 | ||||
| --- Python-2.7.13/configure.build	2019-06-04 13:32:12.772134075 +0200
 | ||||
| +++ Python-2.7.13/configure	2019-06-04 13:32:26.140144601 +0200
 | ||||
| @@ -6018,11 +6018,11 @@ then
 | ||||
|  		# debug builds. | ||||
|  		OPT="-g -O0 -Wall $STRICT_PROTO" | ||||
|  	    else | ||||
| -		OPT="-g $WRAP -O3 -Wall $STRICT_PROTO"
 | ||||
| +		OPT="-g $WRAP -O2 -Wall $STRICT_PROTO"
 | ||||
|  	    fi | ||||
|  	    ;; | ||||
|  	*) | ||||
| -	    OPT="-O3 -Wall $STRICT_PROTO"
 | ||||
| +	    OPT="-O2 -Wall $STRICT_PROTO"
 | ||||
|  	    ;; | ||||
|  	esac | ||||
|  	case $ac_sys_system in | ||||
							
								
								
									
										12
									
								
								SOURCES/python-encode.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								SOURCES/python-encode.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,12 @@ | ||||
| diff -up firefox-68.0/python/mozbuild/mozbuild/controller/building.py.old firefox-68.0/python/mozbuild/mozbuild/controller/building.py
 | ||||
| --- firefox-68.0/python/mozbuild/mozbuild/controller/building.py.old	2019-05-29 10:46:55.403262995 +0200
 | ||||
| +++ firefox-68.0/python/mozbuild/mozbuild/controller/building.py	2019-05-29 10:47:42.691176970 +0200
 | ||||
| @@ -571,7 +571,7 @@ class TerminalLoggingHandler(logging.Han
 | ||||
|              if self.footer: | ||||
|                  self.footer.clear() | ||||
|   | ||||
| -            self.fh.write(msg)
 | ||||
| +            self.fh.write(msg.encode("utf-8"))
 | ||||
|              self.fh.write('\n') | ||||
|   | ||||
|              if self.footer: | ||||
							
								
								
									
										12
									
								
								SOURCES/python-missing-utimensat.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								SOURCES/python-missing-utimensat.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,12 @@ | ||||
| diff -up python3/Python-3.6.8/configure.old python3/Python-3.6.8/configure
 | ||||
| --- Python-3.6.8/configure.old	2019-10-01 12:56:35.074551835 +0200
 | ||||
| +++ Python-3.6.8/configure	2019-10-01 12:56:44.240517798 +0200
 | ||||
| @@ -11438,7 +11438,7 @@ for ac_func in alarm accept4 setitimer g
 | ||||
|   sigaction sigaltstack siginterrupt sigpending sigrelse \ | ||||
|   sigtimedwait sigwait sigwaitinfo snprintf strftime strlcpy symlinkat sync \ | ||||
|   sysconf tcgetpgrp tcsetpgrp tempnam timegm times tmpfile tmpnam tmpnam_r \ | ||||
| - truncate uname unlinkat unsetenv utimensat utimes waitid waitpid wait3 wait4 \
 | ||||
| + truncate uname unlinkat unsetenv utimes waitid waitpid wait3 wait4 \
 | ||||
|   wcscoll wcsftime wcsxfrm wmemcmp writev _getpty | ||||
|  do : | ||||
|    as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` | ||||
							
								
								
									
										12
									
								
								SOURCES/rhbz-1173156.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								SOURCES/rhbz-1173156.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,12 @@ | ||||
| diff -up firefox-60.5.0/extensions/auth/nsAuthSambaNTLM.cpp.rhbz-1173156 firefox-60.5.0/extensions/auth/nsAuthSambaNTLM.cpp
 | ||||
| --- firefox-60.5.0/extensions/auth/nsAuthSambaNTLM.cpp.rhbz-1173156	2019-01-22 10:36:09.284069020 +0100
 | ||||
| +++ firefox-60.5.0/extensions/auth/nsAuthSambaNTLM.cpp	2019-01-22 10:37:12.669757744 +0100
 | ||||
| @@ -161,7 +161,7 @@ nsresult nsAuthSambaNTLM::SpawnNTLMAuthH
 | ||||
|    const char* username = PR_GetEnv("USER"); | ||||
|    if (!username) return NS_ERROR_FAILURE; | ||||
|   | ||||
| -  const char* const args[] = {"ntlm_auth",
 | ||||
| +  const char* const args[] = {"/usr/bin/ntlm_auth",
 | ||||
|                                "--helper-protocol", | ||||
|                                "ntlmssp-client-1", | ||||
|                                "--use-cached-creds", | ||||
							
								
								
									
										36
									
								
								SOURCES/rhbz-1821418.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								SOURCES/rhbz-1821418.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,36 @@ | ||||
| diff -up firefox-78.0/xpcom/base/AvailableMemoryTracker.cpp.rhbz-1821418 firefox-78.0/xpcom/base/AvailableMemoryTracker.cpp
 | ||||
| --- firefox-78.0/xpcom/base/AvailableMemoryTracker.cpp.rhbz-1821418	2020-06-17 04:20:44.000000000 +0200
 | ||||
| +++ firefox-78.0/xpcom/base/AvailableMemoryTracker.cpp	2020-06-25 14:50:46.369798294 +0200
 | ||||
| @@ -157,8 +157,12 @@ bool nsAvailableMemoryWatcher::IsVirtual
 | ||||
|   | ||||
|  /* static */ | ||||
|  bool nsAvailableMemoryWatcher::IsCommitSpaceLow(const MEMORYSTATUSEX& aStat) { | ||||
| -  if ((kLowCommitSpaceThreshold != 0) &&
 | ||||
| -      (aStat.ullAvailPageFile < kLowCommitSpaceThreshold)) {
 | ||||
| +  const char* threshold = getenv("MOZ_GC_THRESHOLD");
 | ||||
| +  if (threshold) {
 | ||||
| +    kLowCommitSpaceThreshold = atoi(threshold);
 | ||||
| +  }
 | ||||
| +
 | ||||
| +  if ((kLowCommitSpaceThreshold == 0) || (aStat.ullAvailPageFile < kLowCommitSpaceThreshold)) {
 | ||||
|      sNumLowCommitSpaceEvents++; | ||||
|      CrashReporter::AnnotateCrashReport( | ||||
|          CrashReporter::Annotation::LowCommitSpaceEvents, | ||||
| @@ -210,12 +214,15 @@ void nsAvailableMemoryWatcher::AdjustPol
 | ||||
|  // polling interval accordingly. | ||||
|  NS_IMETHODIMP | ||||
|  nsAvailableMemoryWatcher::Notify(nsITimer* aTimer) { | ||||
| +  const char* threshold = getenv("MOZ_GC_THRESHOLD");
 | ||||
| +  bool forceLowMem = (threshold && atoi(threshold) == 0);
 | ||||
| +
 | ||||
|    MEMORYSTATUSEX stat; | ||||
|    stat.dwLength = sizeof(stat); | ||||
|    bool success = GlobalMemoryStatusEx(&stat); | ||||
|   | ||||
| -  if (success) {
 | ||||
| -    bool lowMemory = IsVirtualMemoryLow(stat) || IsCommitSpaceLow(stat);
 | ||||
| +  if (success || forceLowMemory) {
 | ||||
| +    bool lowMemory = IsVirtualMemoryLow(stat) || IsCommitSpaceLow(stat || forceLowMem);
 | ||||
|   | ||||
|      if (lowMemory) { | ||||
|        SendMemoryPressureEvent(); | ||||
							
								
								
									
										1988
									
								
								SPECS/firefox.spec
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1988
									
								
								SPECS/firefox.spec
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Loading…
	
		Reference in New Issue
	
	Block a user