aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCem Keylan <cem@ckyln.com>2020-01-07 00:39:26 +0300
committerCem Keylan <cem@ckyln.com>2020-01-07 00:39:26 +0300
commit085382a0776d6dd7997d45838a8a91245f539446 (patch)
tree6fd712709ff4acc9e68c47c54ccf39c1afc23ce1
parent18b0162b841b71108dc69ae9dbe3dbbc2a38b6ee (diff)
downloadrepository-085382a0776d6dd7997d45838a8a91245f539446.tar.gz
firefox: add patches and post-install
-rw-r--r--extra/firefox/patches/firefox-72-no-accessibility.patch13
-rw-r--r--extra/firefox/patches/firefox-72-no-dbus.patch424
-rwxr-xr-xextra/firefox/post-install14
-rw-r--r--extra/firefox/version2
4 files changed, 452 insertions, 1 deletions
diff --git a/extra/firefox/patches/firefox-72-no-accessibility.patch b/extra/firefox/patches/firefox-72-no-accessibility.patch
new file mode 100644
index 00000000..16f7b6f1
--- /dev/null
+++ b/extra/firefox/patches/firefox-72-no-accessibility.patch
@@ -0,0 +1,13 @@
+diff --git a/accessible/ipc/extension/other/moz.build b/accessible/ipc/extension/other/moz.build
+index 635bb24fff..983dc974d7 100644
+--- a/accessible/ipc/extension/other/moz.build
++++ b/accessible/ipc/extension/other/moz.build
+@@ -9,7 +9,7 @@
+
+ IPDL_SOURCES += ['PDocAccessiblePlatformExt.ipdl']
+
+-if CONFIG['ACCESSIBILITY']:
++if 1:
+ EXPORTS.mozilla.a11y += [
+ 'DocAccessiblePlatformExtChild.h',
+ 'DocAccessiblePlatformExtParent.h',
diff --git a/extra/firefox/patches/firefox-72-no-dbus.patch b/extra/firefox/patches/firefox-72-no-dbus.patch
new file mode 100644
index 00000000..7e209a92
--- /dev/null
+++ b/extra/firefox/patches/firefox-72-no-dbus.patch
@@ -0,0 +1,424 @@
+diff --git a/Cargo.lock b/Cargo.lock
+index 7bc5171d3c..5d319728bb 100644
+--- a/Cargo.lock
++++ b/Cargo.lock
+@@ -82,24 +82,11 @@ dependencies = [
+ "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ ]
+
+-[[package]]
+-name = "audio_thread_priority"
+-version = "0.20.2"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-dependencies = [
+- "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
+- "dbus 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)",
+- "libc 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)",
+- "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
+- "mach 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
+- "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
+-]
+
+ [[package]]
+ name = "audioipc"
+ version = "0.2.4"
+ dependencies = [
+- "audio_thread_priority 0.20.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bincode 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cc 1.0.47 (registry+https://github.com/rust-lang/crates.io-index)",
+@@ -127,7 +114,6 @@ dependencies = [
+ name = "audioipc-client"
+ version = "0.4.0"
+ dependencies = [
+- "audio_thread_priority 0.20.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "audioipc 0.2.4",
+ "cubeb-backend 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)",
+@@ -140,7 +126,6 @@ dependencies = [
+ name = "audioipc-server"
+ version = "0.2.3"
+ dependencies = [
+- "audio_thread_priority 0.20.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "audioipc 0.2.4",
+ "cubeb-core 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "error-chain 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
+@@ -905,14 +890,6 @@ dependencies = [
+ "syn 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ ]
+
+-[[package]]
+-name = "dbus"
+-version = "0.6.4"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-dependencies = [
+- "libc 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)",
+- "libdbus-sys 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
+-]
+
+ [[package]]
+ name = "deflate"
+@@ -1433,7 +1410,6 @@ dependencies = [
+ name = "gkrust-shared"
+ version = "0.1.0"
+ dependencies = [
+- "audio_thread_priority 0.20.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "audioipc-client 0.4.0",
+ "audioipc-server 0.2.3",
+ "authenticator 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
+@@ -1797,13 +1773,6 @@ name = "libc"
+ version = "0.2.59"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+
+-[[package]]
+-name = "libdbus-sys"
+-version = "0.1.5"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-dependencies = [
+- "pkg-config 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
+-]
+
+ [[package]]
+ name = "libloading"
+@@ -4561,7 +4530,6 @@ dependencies = [
+ "checksum atomic 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "c210c1f4db048cda477b652d170572d84c9640695835f17663595d3bd543fc28"
+ "checksum atomic_refcell 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fb2dcb6e6d35f20276943cc04bb98e538b348d525a04ac79c10021561d202f21"
+ "checksum atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "9a7d5b8723950951411ee34d271d99dddcc2035a16ab25310ea2c8cfd4369652"
+-"checksum audio_thread_priority 0.20.2 (registry+https://github.com/rust-lang/crates.io-index)" = "197b2d259505d11c92d266e1784f01cc935eb764d2f54e16aedf4e5085197871"
+ "checksum authenticator 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "ec149e5d5d4caa2c9ead53a8ce1ea9c4204c388c65bf3b96c2d1dc0fcf4aeb66"
+ "checksum autocfg 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "b671c8fb71b457dd4ae18c4ba1e59aa81793daacc361d82fcd410cef0d491875"
+ "checksum backtrace 0.3.38 (registry+https://github.com/rust-lang/crates.io-index)" = "690a62be8920ccf773ee00ef0968649b0e724cda8bd5b12286302b4ae955fdf5"
+@@ -4631,7 +4599,6 @@ dependencies = [
+ "checksum darling 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3fe629a532efad5526454efb0700f86d5ad7ff001acb37e431c8bf017a432a8e"
+ "checksum darling_core 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ee54512bec54b41cf2337a22ddfadb53c7d4c738494dc2a186d7b037ad683b85"
+ "checksum darling_macro 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0cd3e432e52c0810b72898296a69d66b1d78d1517dff6cde7a130557a55a62c1"
+-"checksum dbus 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b9e1b39f3f6aa3d4a1522c4f0f9f1e9e9167bd93740a8690874caa7cf8ce47d7"
+ "checksum deflate 0.7.19 (registry+https://github.com/rust-lang/crates.io-index)" = "8a6abb26e16e8d419b5c78662aa9f82857c2386a073da266840e474d5055ec86"
+ "checksum derive_more 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3f57d78cf3bd45270dad4e70c21ec77a960b36c7a841ff9db76aaa775a8fb871"
+ "checksum devd-rs 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0d009f166c0d9e9f9909dc751630b3a6411ab7f85a153d32d01deb364ffe52a7"
+@@ -4701,7 +4668,6 @@ dependencies = [
+ "checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+ "checksum lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b294d6fa9ee409a054354afc4352b0b9ef7ca222c69b8812cbea9e7d2bf3783f"
+ "checksum libc 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)" = "3262021842bf00fe07dbd6cf34ff25c99d7a7ebef8deea84db72be3ea3bb0aff"
+-"checksum libdbus-sys 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "18cb88963258d00f4962205dbb5933d82780d9962c8c8a064b651d2ad7189210"
+ "checksum libloading 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "fd38073de8f7965d0c17d30546d4bb6da311ab428d1c7a3fc71dff7f9d4979b9"
+ "checksum libloading 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9c3ad660d7cb8c5822cd83d10897b0f1f1526792737a179e73896152f85b88c2"
+ "checksum libudev 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ea626d3bdf40a1c5aee3bcd4f40826970cae8d80a8fec934c82a63840094dcfe"
+diff --git a/dom/ipc/ContentChild.cpp b/dom/ipc/ContentChild.cpp
+index bb539324ec..516fd0dd1c 100644
+--- a/dom/ipc/ContentChild.cpp
++++ b/dom/ipc/ContentChild.cpp
+@@ -111,9 +111,7 @@
+ #include "nsIStringBundle.h"
+ #include "nsIWorkerDebuggerManager.h"
+ #include "Geolocation.h"
+-#include "audio_thread_priority.h"
+ #include "nsIConsoleService.h"
+-#include "audio_thread_priority.h"
+
+ #if !defined(XP_WIN)
+ # include "mozilla/Omnijar.h"
+@@ -1795,9 +1793,6 @@ mozilla::ipc::IPCResult ContentChild::RecvSetProcessSandbox(
+ } else {
+ // Pre-start audio before sandboxing; see bug 1443612.
+ if (StaticPrefs::media_cubeb_sandbox()) {
+- if (atp_set_real_time_limit(0, 48000)) {
+- NS_WARNING("could not set real-time limit at process startup");
+- }
+ InstallSoftRealTimeLimitHandler();
+ } else {
+ Unused << CubebUtils::GetCubebContext();
+diff --git a/dom/media/GraphRunner.cpp b/dom/media/GraphRunner.cpp
+index 76ff3680ca..150c010be9 100644
+--- a/dom/media/GraphRunner.cpp
++++ b/dom/media/GraphRunner.cpp
+@@ -13,7 +13,6 @@
+ #include "nsISupportsImpl.h"
+ #include "prthread.h"
+ #include "Tracing.h"
+-#include "audio_thread_priority.h"
+
+ namespace mozilla {
+
+@@ -92,8 +91,6 @@ bool GraphRunner::OneIteration(GraphTime aStateEnd) {
+ }
+
+ NS_IMETHODIMP GraphRunner::Run() {
+- atp_handle* handle =
+- atp_promote_current_thread_to_real_time(0, mGraph->GraphRate());
+
+ MonitorAutoLock lock(mMonitor);
+ while (true) {
+@@ -110,9 +107,6 @@ NS_IMETHODIMP GraphRunner::Run() {
+ mMonitor.Notify();
+ }
+
+- if (handle) {
+- atp_demote_current_thread_from_real_time(handle);
+- }
+
+ dom::WorkletThread::DeleteCycleCollectedJSContext();
+
+diff --git a/dom/media/UnderrunHandlerLinux.cpp b/dom/media/UnderrunHandlerLinux.cpp
+index af5c84538e..23bf97a31f 100644
+--- a/dom/media/UnderrunHandlerLinux.cpp
++++ b/dom/media/UnderrunHandlerLinux.cpp
+@@ -9,7 +9,6 @@
+
+ #include <mozilla/Sprintf.h>
+ #include <mozilla/Atomics.h>
+-#include "audio_thread_priority.h"
+
+ namespace mozilla {
+
+@@ -57,20 +56,6 @@ void InstallSoftRealTimeLimitHandler() {
+ }
+
+ void DemoteThreadFromRealTime() {
+- atp_thread_info* info = atp_get_current_thread_info();
+- if (!info) {
+- NS_WARNING("Could not get current thread info when demoting thread.");
+- return;
+- }
+- int rv = atp_demote_thread_from_real_time(info);
+- if (rv) {
+- NS_WARNING("Could not demote thread from real-time.");
+- return;
+- }
+- rv = atp_free_thread_info(info);
+- if (rv) {
+- NS_WARNING("Could not free atp_thread_info struct");
+- }
+ gRealtimeLimitReached = false;
+ }
+
+diff --git a/dom/media/moz.build b/dom/media/moz.build
+index 972a961a81..eca9083298 100644
+--- a/dom/media/moz.build
++++ b/dom/media/moz.build
+@@ -101,7 +101,6 @@ XPIDL_SOURCES += [
+ XPIDL_MODULE = 'dom_media'
+
+ EXPORTS += [
+- '../../third_party/rust/audio_thread_priority/audio_thread_priority.h',
+ 'ADTSDecoder.h',
+ 'ADTSDemuxer.h',
+ 'AsyncLogger.h',
+diff --git a/media/audioipc/audioipc/Cargo.toml b/media/audioipc/audioipc/Cargo.toml
+index 286e16789b..c34775cea1 100644
+--- a/media/audioipc/audioipc/Cargo.toml
++++ b/media/audioipc/audioipc/Cargo.toml
+@@ -19,7 +19,6 @@ serde = "1.*.*"
+ serde_derive = "1.*.*"
+ tokio = "0.1"
+ tokio-io = "0.1"
+-audio_thread_priority = "0.20.2"
+
+ [target.'cfg(unix)'.dependencies]
+ iovec = "0.1"
+diff --git a/media/audioipc/audioipc/src/messages.rs b/media/audioipc/audioipc/src/messages.rs
+index 793e5f7a00..1f72f968ce 100644
+--- a/media/audioipc/audioipc/src/messages.rs
++++ b/media/audioipc/audioipc/src/messages.rs
+@@ -5,8 +5,6 @@
+
+ use crate::PlatformHandle;
+ use crate::PlatformHandleType;
+-#[cfg(target_os = "linux")]
+-use audio_thread_priority::RtPriorityThreadInfo;
+ use cubeb::{self, ffi};
+ use std::ffi::{CStr, CString};
+ use std::os::raw::{c_char, c_int, c_uint};
+@@ -210,8 +208,6 @@ pub enum ServerMessage {
+ StreamGetCurrentDevice(usize),
+ StreamRegisterDeviceChangeCallback(usize, bool),
+
+- #[cfg(target_os = "linux")]
+- PromoteThreadToRealTime([u8; std::mem::size_of::<RtPriorityThreadInfo>()]),
+ }
+
+ // Server -> Client messages.
+@@ -241,8 +237,6 @@ pub enum ClientMessage {
+ StreamCurrentDevice(Device),
+ StreamRegisterDeviceChangeCallback,
+
+- #[cfg(target_os = "linux")]
+- ThreadPromoted,
+
+ Error(c_int),
+ }
+diff --git a/media/audioipc/client/Cargo.toml b/media/audioipc/client/Cargo.toml
+index 866cde7e98..eaf9a62cc7 100644
+--- a/media/audioipc/client/Cargo.toml
++++ b/media/audioipc/client/Cargo.toml
+@@ -9,7 +9,6 @@ description = "Cubeb Backend for talking to remote cubeb server."
+ edition = "2018"
+
+ [dependencies]
+-audio_thread_priority = "0.20.2"
+ audioipc = { path="../audioipc" }
+ cubeb-backend = "0.6.0"
+ futures = { version="0.1.18", default-features=false, features=["use_std"] }
+diff --git a/media/audioipc/client/src/context.rs b/media/audioipc/client/src/context.rs
+index 7e912ea65d..b6dddc76aa 100644
+--- a/media/audioipc/client/src/context.rs
++++ b/media/audioipc/client/src/context.rs
+@@ -6,10 +6,6 @@
+ use crate::stream;
+ use crate::{assert_not_in_callback, run_in_callback};
+ use crate::{ClientStream, AUDIOIPC_INIT_PARAMS};
+-#[cfg(target_os = "linux")]
+-use audio_thread_priority::get_current_thread_info;
+-#[cfg(not(target_os = "linux"))]
+-use audio_thread_priority::promote_current_thread_to_real_time;
+ use audioipc::codec::LengthDelimitedCodec;
+ use audioipc::frame::{framed, Framed};
+ use audioipc::platformhandle_passing::{framed_with_platformhandles, FramedWithPlatformHandles};
+@@ -77,31 +73,6 @@ impl ClientContext {
+ }
+ }
+
+-#[cfg(target_os = "linux")]
+-fn promote_thread(rpc: &rpc::ClientProxy<ServerMessage, ClientMessage>) {
+- match get_current_thread_info() {
+- Ok(info) => {
+- let bytes = info.serialize();
+- // Don't wait for the response, this is on the callback thread, which must not block.
+- rpc.call(ServerMessage::PromoteThreadToRealTime(bytes));
+- }
+- Err(_) => {
+- warn!("Could not remotely promote thread to RT.");
+- }
+- }
+-}
+-
+-#[cfg(not(target_os = "linux"))]
+-fn promote_thread(_rpc: &rpc::ClientProxy<ServerMessage, ClientMessage>) {
+- match promote_current_thread_to_real_time(0, 48000) {
+- Ok(_) => {
+- info!("Audio thread promoted to real-time.");
+- }
+- Err(_) => {
+- warn!("Could not promote thread to real-time.");
+- }
+- }
+-}
+
+ fn register_thread(callback: Option<extern "C" fn(*const ::std::os::raw::c_char)>) {
+ if let Some(func) = callback {
+@@ -111,13 +82,6 @@ fn register_thread(callback: Option<extern "C" fn(*const ::std::os::raw::c_char)
+ }
+ }
+
+-fn promote_and_register_thread(
+- rpc: &rpc::ClientProxy<ServerMessage, ClientMessage>,
+- callback: Option<extern "C" fn(*const ::std::os::raw::c_char)>,
+-) {
+- promote_thread(rpc);
+- register_thread(callback);
+-}
+
+ #[derive(Default)]
+ struct DeviceCollectionCallback {
+@@ -226,7 +190,6 @@ impl ContextOps for ClientContext {
+ let thread_create_callback = params.thread_create_callback;
+ let cpu_pool = futures_cpupool::Builder::new()
+ .name_prefix("AudioIPC")
+- .after_start(move || promote_and_register_thread(&rpc2, thread_create_callback))
+ .pool_size(params.pool_size)
+ .stack_size(params.stack_size)
+ .create();
+diff --git a/media/audioipc/server/Cargo.toml b/media/audioipc/server/Cargo.toml
+index 341b041e65..3363f143c7 100644
+--- a/media/audioipc/server/Cargo.toml
++++ b/media/audioipc/server/Cargo.toml
+@@ -9,7 +9,6 @@ description = "Remote cubeb server"
+ edition = "2018"
+
+ [dependencies]
+-audio_thread_priority = "0.20.2"
+ audioipc = { path = "../audioipc" }
+ cubeb-core = "0.6.0"
+ futures = "0.1.18"
+diff --git a/media/audioipc/server/src/lib.rs b/media/audioipc/server/src/lib.rs
+index 9463c102ac..18b09e5433 100644
+--- a/media/audioipc/server/src/lib.rs
++++ b/media/audioipc/server/src/lib.rs
+@@ -9,7 +9,6 @@ extern crate error_chain;
+ #[macro_use]
+ extern crate log;
+
+-use audio_thread_priority::promote_current_thread_to_real_time;
+ use audioipc::core;
+ use audioipc::platformhandle_passing::framed_with_platformhandles;
+ use audioipc::rpc;
+@@ -63,12 +62,6 @@ fn run() -> Result<ServerWrapper> {
+ trace!("Starting up cubeb audio server event loop thread...");
+
+ let callback_thread = core::spawn_thread("AudioIPC Callback RPC", || {
+- match promote_current_thread_to_real_time(0, 48000) {
+- Ok(_) => {}
+- Err(_) => {
+- debug!("Failed to promote audio callback thread to real-time.");
+- }
+- }
+ trace!("Starting up cubeb audio callback event loop thread...");
+ Ok(())
+ })
+diff --git a/media/audioipc/server/src/server.rs b/media/audioipc/server/src/server.rs
+index a458fb1953..d7fc4b6036 100644
+--- a/media/audioipc/server/src/server.rs
++++ b/media/audioipc/server/src/server.rs
+@@ -3,8 +3,6 @@
+ // This program is made available under an ISC-style license. See the
+ // accompanying file LICENSE for details
+
+-#[cfg(target_os = "linux")]
+-use audio_thread_priority::{promote_thread_to_real_time, RtPriorityThreadInfo};
+ use audioipc;
+ use audioipc::codec::LengthDelimitedCodec;
+ use audioipc::frame::{framed, Framed};
+@@ -523,19 +521,6 @@ impl CubebServer {
+ )
+ .unwrap_or_else(error),
+
+- #[cfg(target_os = "linux")]
+- ServerMessage::PromoteThreadToRealTime(thread_info) => {
+- let info = RtPriorityThreadInfo::deserialize(thread_info);
+- match promote_thread_to_real_time(info, 0, 48000) {
+- Ok(_) => {
+- info!("Promotion of content process thread to real-time OK");
+- }
+- Err(_) => {
+- warn!("Promotion of content process thread to real-time error");
+- }
+- }
+- ClientMessage::ThreadPromoted
+- }
+ };
+
+ trace!("process_msg: req={:?}, resp={:?}", msg, resp);
+diff --git a/toolkit/library/rust/shared/Cargo.toml b/toolkit/library/rust/shared/Cargo.toml
+index 2f44f58e38..88504eb4b6 100644
+--- a/toolkit/library/rust/shared/Cargo.toml
++++ b/toolkit/library/rust/shared/Cargo.toml
+@@ -39,7 +39,6 @@ bitsdownload = { path = "../../../components/bitsdownload", optional = true }
+ storage = { path = "../../../../storage/rust" }
+ bookmark_sync = { path = "../../../components/places/bookmark_sync", optional = true }
+ shift_or_euc_c = "0.1.0"
+-audio_thread_priority = "0.20.2"
+ mdns_service = { path="../../../../media/mtransport/mdns_service", optional = true }
+ neqo_glue = { path = "../../../../netwerk/socket/neqo_glue" }
+ rlbox_lucet_sandbox = { version = "0.1.0", optional = true }
+diff --git a/toolkit/library/rust/shared/lib.rs b/toolkit/library/rust/shared/lib.rs
+index 31af24e6f5..2ea3e00edb 100644
+--- a/toolkit/library/rust/shared/lib.rs
++++ b/toolkit/library/rust/shared/lib.rs
+@@ -49,7 +49,6 @@ extern crate shift_or_euc_c;
+ #[cfg(feature = "fogotype")]
+ extern crate fog;
+
+-extern crate audio_thread_priority;
+
+ #[cfg(feature = "webrtc")]
+ extern crate mdns_service;
diff --git a/extra/firefox/post-install b/extra/firefox/post-install
new file mode 100755
index 00000000..99de9d2b
--- /dev/null
+++ b/extra/firefox/post-install
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+cat <<EOF
+
+NOTE: Install the 'firefox-privacy' package to
+ enable extra privacy restrictions.
+
+NOTE: This includes more telemetry removals,
+ hardened settings, no phoning-home etc.
+
+-> kiss b firefox-privacy
+-> kiss i firefox-privacy
+
+EOF
diff --git a/extra/firefox/version b/extra/firefox/version
index 843381ec..1fce892c 100644
--- a/extra/firefox/version
+++ b/extra/firefox/version
@@ -1 +1 @@
-72.0 1
+72.0 2