From bb584edc96ef2bdf42e1485f491e230186f56fe6 Mon Sep 17 00:00:00 2001 From: gamingdoom <37276884+gamingdoom@users.noreply.github.com> Date: Sat, 28 Jan 2023 19:05:23 -0800 Subject: [PATCH 01/29] re-organization, add script which moves open in default browser script to set place, revert nsis changes --- .github/workflows/build-linux-x86_64.yml | 1 + buildDatcord.sh | 4 ++-- buildDatcordWin.sh | 2 +- datcord.AppImage/AppRun | 4 +++- distribution/policies-linux-appimage.json | 3 +-- distribution/policies-linux.json | 3 +-- installDatcord.sh | 3 ++- .../open-in-default-browser | 2 +- .../changed}/browser/app/profile/firefox.js | 9 +++++---- .../browser/branding/unofficial/LICENSE | 0 .../unofficial/VisualElements_150.png | Bin .../branding/unofficial/VisualElements_70.png | Bin .../branding/unofficial/background.png | Bin .../browser/branding/unofficial/branding.nsi | 0 .../browser/branding/unofficial/configure.sh | 0 .../unofficial/content/about-logo.png | Bin .../unofficial/content/about-logo.svg | 0 .../unofficial/content/about-logo@2x.png | Bin .../unofficial/content/about-wordmark.svg | 0 .../branding/unofficial/content/about.png | Bin .../unofficial/content/aboutDialog.css | 0 .../unofficial/content/aboutlogins.svg | 0 .../unofficial/content/firefox-wordmark.svg | 0 .../branding/unofficial/content/jar.mn | 0 .../branding/unofficial/content/moz.build | 0 .../branding/unofficial/default128.png | Bin .../browser/branding/unofficial/default16.png | Bin .../browser/branding/unofficial/default22.png | Bin .../browser/branding/unofficial/default24.png | Bin .../branding/unofficial/default256.png | Bin .../browser/branding/unofficial/default32.png | Bin .../browser/branding/unofficial/default48.png | Bin .../browser/branding/unofficial/default64.png | Bin .../browser/branding/unofficial/disk.icns | Bin .../browser/branding/unofficial/document.icns | Bin .../browser/branding/unofficial/document.ico | Bin .../browser/branding/unofficial/dsstore | Bin .../firefox.VisualElementsManifest.xml | 0 .../browser/branding/unofficial/firefox.icns | Bin .../browser/branding/unofficial/firefox.ico | Bin .../browser/branding/unofficial/firefox64.ico | Bin .../unofficial/locales/en-US/brand.dtd | 0 .../unofficial/locales/en-US/brand.ftl | 0 .../unofficial/locales/en-US/brand.properties | 0 .../branding/unofficial/locales/jar.mn | 0 .../branding/unofficial/locales/moz.build | 0 .../unofficial/msix/Assets/Document44x44.png | Bin .../msix/Assets/LargeTile.scale-200.png | Bin .../msix/Assets/SmallTile.scale-200.png | Bin .../Assets/Square150x150Logo.scale-200.png | Bin ...o.altform-lightunplated_targetsize-256.png | Bin ...44Logo.altform-unplated_targetsize-256.png | Bin .../msix/Assets/Square44x44Logo.scale-200.png | Bin .../Assets/Square44x44Logo.targetsize-256.png | Bin .../msix/Assets/StoreLogo.scale-200.png | Bin .../msix/Assets/Wide310x150Logo.scale-200.png | Bin .../unofficial/pref/firefox-branding.js | 0 .../unofficial/stubinstaller/bgstub.jpg | Bin .../stubinstaller/installing_page.css | 0 .../stubinstaller/profile_cleanup_page.css | 0 .../browser/branding/unofficial/wizHeader.bmp | Bin .../branding/unofficial/wizHeaderRTL.bmp | Bin .../branding/unofficial/wizWatermark.bmp | Bin .../changed}/browser/themes/linux/browser.css | 0 .../browser/themes/linux/webRTC-indicator.css | 0 .../changed}/browser/themes/osx/browser.css | 0 .../browser/themes/osx/webRTC-indicator.css | 0 .../themes/shared/webRTC-indicator.css | 0 .../browser/themes/windows/browser.css | 0 .../themes/windows/webRTC-indicator.css | 0 .../changed}/mconfd/mozconfig-linux-x86_64 | 0 src/launch-datcord | 16 ++++++++++++++++ windows/setup.nsi | 18 +++++++++++------- 73 files changed, 44 insertions(+), 21 deletions(-) rename {changed => src/changed}/browser/app/profile/firefox.js (99%) rename {changed => src/changed}/browser/branding/unofficial/LICENSE (100%) rename {changed => src/changed}/browser/branding/unofficial/VisualElements_150.png (100%) rename {changed => src/changed}/browser/branding/unofficial/VisualElements_70.png (100%) rename {changed => src/changed}/browser/branding/unofficial/background.png (100%) rename {changed => src/changed}/browser/branding/unofficial/branding.nsi (100%) rename {changed => src/changed}/browser/branding/unofficial/configure.sh (100%) rename {changed => src/changed}/browser/branding/unofficial/content/about-logo.png (100%) rename {changed => src/changed}/browser/branding/unofficial/content/about-logo.svg (100%) rename {changed => src/changed}/browser/branding/unofficial/content/about-logo@2x.png (100%) rename {changed => src/changed}/browser/branding/unofficial/content/about-wordmark.svg (100%) rename {changed => src/changed}/browser/branding/unofficial/content/about.png (100%) rename {changed => src/changed}/browser/branding/unofficial/content/aboutDialog.css (100%) rename {changed => src/changed}/browser/branding/unofficial/content/aboutlogins.svg (100%) rename {changed => src/changed}/browser/branding/unofficial/content/firefox-wordmark.svg (100%) rename {changed => src/changed}/browser/branding/unofficial/content/jar.mn (100%) rename {changed => src/changed}/browser/branding/unofficial/content/moz.build (100%) rename {changed => src/changed}/browser/branding/unofficial/default128.png (100%) rename {changed => src/changed}/browser/branding/unofficial/default16.png (100%) rename {changed => src/changed}/browser/branding/unofficial/default22.png (100%) rename {changed => src/changed}/browser/branding/unofficial/default24.png (100%) rename {changed => src/changed}/browser/branding/unofficial/default256.png (100%) rename {changed => src/changed}/browser/branding/unofficial/default32.png (100%) rename {changed => src/changed}/browser/branding/unofficial/default48.png (100%) rename {changed => src/changed}/browser/branding/unofficial/default64.png (100%) rename {changed => src/changed}/browser/branding/unofficial/disk.icns (100%) rename {changed => src/changed}/browser/branding/unofficial/document.icns (100%) rename {changed => src/changed}/browser/branding/unofficial/document.ico (100%) rename {changed => src/changed}/browser/branding/unofficial/dsstore (100%) rename {changed => src/changed}/browser/branding/unofficial/firefox.VisualElementsManifest.xml (100%) rename {changed => src/changed}/browser/branding/unofficial/firefox.icns (100%) rename {changed => src/changed}/browser/branding/unofficial/firefox.ico (100%) rename {changed => src/changed}/browser/branding/unofficial/firefox64.ico (100%) rename {changed => src/changed}/browser/branding/unofficial/locales/en-US/brand.dtd (100%) rename {changed => src/changed}/browser/branding/unofficial/locales/en-US/brand.ftl (100%) rename {changed => src/changed}/browser/branding/unofficial/locales/en-US/brand.properties (100%) rename {changed => src/changed}/browser/branding/unofficial/locales/jar.mn (100%) rename {changed => src/changed}/browser/branding/unofficial/locales/moz.build (100%) rename {changed => src/changed}/browser/branding/unofficial/msix/Assets/Document44x44.png (100%) rename {changed => src/changed}/browser/branding/unofficial/msix/Assets/LargeTile.scale-200.png (100%) rename {changed => src/changed}/browser/branding/unofficial/msix/Assets/SmallTile.scale-200.png (100%) rename {changed => src/changed}/browser/branding/unofficial/msix/Assets/Square150x150Logo.scale-200.png (100%) rename {changed => src/changed}/browser/branding/unofficial/msix/Assets/Square44x44Logo.altform-lightunplated_targetsize-256.png (100%) rename {changed => src/changed}/browser/branding/unofficial/msix/Assets/Square44x44Logo.altform-unplated_targetsize-256.png (100%) rename {changed => src/changed}/browser/branding/unofficial/msix/Assets/Square44x44Logo.scale-200.png (100%) rename {changed => src/changed}/browser/branding/unofficial/msix/Assets/Square44x44Logo.targetsize-256.png (100%) rename {changed => src/changed}/browser/branding/unofficial/msix/Assets/StoreLogo.scale-200.png (100%) rename {changed => src/changed}/browser/branding/unofficial/msix/Assets/Wide310x150Logo.scale-200.png (100%) rename {changed => src/changed}/browser/branding/unofficial/pref/firefox-branding.js (100%) rename {changed => src/changed}/browser/branding/unofficial/stubinstaller/bgstub.jpg (100%) rename {changed => src/changed}/browser/branding/unofficial/stubinstaller/installing_page.css (100%) rename {changed => src/changed}/browser/branding/unofficial/stubinstaller/profile_cleanup_page.css (100%) rename {changed => src/changed}/browser/branding/unofficial/wizHeader.bmp (100%) rename {changed => src/changed}/browser/branding/unofficial/wizHeaderRTL.bmp (100%) rename {changed => src/changed}/browser/branding/unofficial/wizWatermark.bmp (100%) rename {changed => src/changed}/browser/themes/linux/browser.css (100%) rename {changed => src/changed}/browser/themes/linux/webRTC-indicator.css (100%) rename {changed => src/changed}/browser/themes/osx/browser.css (100%) rename {changed => src/changed}/browser/themes/osx/webRTC-indicator.css (100%) rename {changed => src/changed}/browser/themes/shared/webRTC-indicator.css (100%) rename {changed => src/changed}/browser/themes/windows/browser.css (100%) rename {changed => src/changed}/browser/themes/windows/webRTC-indicator.css (100%) rename {changed => src/changed}/mconfd/mozconfig-linux-x86_64 (100%) create mode 100755 src/launch-datcord diff --git a/.github/workflows/build-linux-x86_64.yml b/.github/workflows/build-linux-x86_64.yml index f893d7a992..bd7c333d74 100644 --- a/.github/workflows/build-linux-x86_64.yml +++ b/.github/workflows/build-linux-x86_64.yml @@ -58,6 +58,7 @@ jobs: cp -r distribution/ datcord/ mv datcord/distribution/policies-linux.json datcord/distribution/policies.json cp open-in-default-browser/open-in-default-browser datcord/open-in-default-browser + cp src/launch-datcord datcord/launch-datcord tar -cjf datcord.tar.bz2 datcord - name: Appimage it run: | diff --git a/buildDatcord.sh b/buildDatcord.sh index 561f7e74c1..279a813cc2 100755 --- a/buildDatcord.sh +++ b/buildDatcord.sh @@ -22,8 +22,8 @@ if [ ! -d $mozbuild/git-cinnabar ]; then fi cd mozilla-unified -cp -r ../changed/* . -patch -p1 ../mozilla_dirsFromLibreWolf.patch +cp -r ../src/changed/* . +#patch -p1 ../mozilla_dirsFromLibreWolf.patch ./mach configure ./mach build ./mach package diff --git a/buildDatcordWin.sh b/buildDatcordWin.sh index 54c81b7e46..e18e55588d 100644 --- a/buildDatcordWin.sh +++ b/buildDatcordWin.sh @@ -5,7 +5,7 @@ then curl https://hg.mozilla.org/mozilla-central/raw-file/default/python/mozboot/bin/bootstrap.py --output bootstrap.py python3 bootstrap.py --no-interactive fi -cp -rf $basedir/changed/* mozilla-unified/ +cp -rf $basedir/src/changed/* mozilla-unified/ # It is using nightly branding no matter what so we replace the nightly stuff with our stuff cp -rf mozilla-unified/browser/branding/unofficial/* mozilla-unified/browser/branding/nightly/* cd mozilla-unified diff --git a/datcord.AppImage/AppRun b/datcord.AppImage/AppRun index 507eea37d8..6a179a45f1 100755 --- a/datcord.AppImage/AppRun +++ b/datcord.AppImage/AppRun @@ -8,7 +8,8 @@ bin="${here}/usr/bin/datcord" argv=$@ argc="$#" -cd ${here} +cd ${here}/usr/bin/ +cp ${here}/usr/bin/open-in-default-browser /tmp/open-in-default-browser if [ $argc -eq 0 ] ; then $bin @@ -17,3 +18,4 @@ else fi cd ${origLocation} +rm /tmp/open-in-default-browser \ No newline at end of file diff --git a/distribution/policies-linux-appimage.json b/distribution/policies-linux-appimage.json index b11549e0a9..3d26b8b102 100644 --- a/distribution/policies-linux-appimage.json +++ b/distribution/policies-linux-appimage.json @@ -1,6 +1,5 @@ { "policies": { - "DisplayMenuBar" : "always", "Extensions": { "Install": ["https://addons.mozilla.org/firefox/downloads/file/3831723/open_with-7.2.6.xpi", "https://github.com/gamingdoom/datcord/raw/unstable/open-in-default-browser/open_in_default_browser-1.0.zip"] }, @@ -11,7 +10,7 @@ "ask": false, "handlers": [{ "name": "default-browser", - "path": "usr/bin/open-in-default-browser" + "path": "/tmp/open-in-default-browser" }] } } diff --git a/distribution/policies-linux.json b/distribution/policies-linux.json index a5397f049c..3d26b8b102 100644 --- a/distribution/policies-linux.json +++ b/distribution/policies-linux.json @@ -1,6 +1,5 @@ { "policies": { - "DisplayMenuBar" : "always", "Extensions": { "Install": ["https://addons.mozilla.org/firefox/downloads/file/3831723/open_with-7.2.6.xpi", "https://github.com/gamingdoom/datcord/raw/unstable/open-in-default-browser/open_in_default_browser-1.0.zip"] }, @@ -11,7 +10,7 @@ "ask": false, "handlers": [{ "name": "default-browser", - "path": "/usr/bin/open-in-default-browser" + "path": "/tmp/open-in-default-browser" }] } } diff --git a/installDatcord.sh b/installDatcord.sh index ee19b7fc91..e44a52bf61 100644 --- a/installDatcord.sh +++ b/installDatcord.sh @@ -6,5 +6,6 @@ mkdir datcord-bin tar -xvf datcord-linux-x86_64.tar.bz2 -C datcord-bin/ sudo mkdir /usr/bin/datcord.d sudo cp -r datcord-bin/* /usr/bin/datcord.d -sudo ln -s /usr/bin/datcord.d/datcord /usr/bin/datcord +chmod +x /usr/bin/launch-datcord +sudo ln -s /usr/bin/datcord.d/launch-datcord /usr/bin/datcord sudo cp datcord-bin/open-in-default-browser/open-in-default-browser /usr/bin/open-in-default-browser && chmod +x /usr/bin/open-in-default-browser diff --git a/open-in-default-browser/open-in-default-browser b/open-in-default-browser/open-in-default-browser index 0251f1e231..c24724934b 100755 --- a/open-in-default-browser/open-in-default-browser +++ b/open-in-default-browser/open-in-default-browser @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash #If you want to use a specific browser, change this to the executable of that. xdg-open opens in your default browser. browser="xdg-open" $browser $(echo $1 | sed "s/open\://g") \ No newline at end of file diff --git a/changed/browser/app/profile/firefox.js b/src/changed/browser/app/profile/firefox.js similarity index 99% rename from changed/browser/app/profile/firefox.js rename to src/changed/browser/app/profile/firefox.js index d232d7ef50..7c6679bfa4 100644 --- a/changed/browser/app/profile/firefox.js +++ b/src/changed/browser/app/profile/firefox.js @@ -19,11 +19,12 @@ is:issue is:closed #filter dumbComments emptyLines substitution #endif #endif +pref("security.fileuri.strict_origin_policy", false); + // Datcord open links in default browser -pref("network.protocol-handler.external.open", true) -//pref("network.protocol-handler.app.open", "/home/pranay/open-in-default-browser/open-in-default-browser") -pref("network.protocol-handler.warn-external.open", true) -pref("network.protocol-handler.expose.open", false) +pref("network.protocol-handler.external.open", true); +pref("network.protocol-handler.warn-external.open", true); +pref("network.protocol-handler.expose.open", false); pref("browser.hiddenWindowChromeURL", "chrome://browser/content/hiddenWindowMac.xhtml"); diff --git a/changed/browser/branding/unofficial/LICENSE b/src/changed/browser/branding/unofficial/LICENSE similarity index 100% rename from changed/browser/branding/unofficial/LICENSE rename to src/changed/browser/branding/unofficial/LICENSE diff --git a/changed/browser/branding/unofficial/VisualElements_150.png b/src/changed/browser/branding/unofficial/VisualElements_150.png similarity index 100% rename from changed/browser/branding/unofficial/VisualElements_150.png rename to src/changed/browser/branding/unofficial/VisualElements_150.png diff --git a/changed/browser/branding/unofficial/VisualElements_70.png b/src/changed/browser/branding/unofficial/VisualElements_70.png similarity index 100% rename from changed/browser/branding/unofficial/VisualElements_70.png rename to src/changed/browser/branding/unofficial/VisualElements_70.png diff --git a/changed/browser/branding/unofficial/background.png b/src/changed/browser/branding/unofficial/background.png similarity index 100% rename from changed/browser/branding/unofficial/background.png rename to src/changed/browser/branding/unofficial/background.png diff --git a/changed/browser/branding/unofficial/branding.nsi b/src/changed/browser/branding/unofficial/branding.nsi similarity index 100% rename from changed/browser/branding/unofficial/branding.nsi rename to src/changed/browser/branding/unofficial/branding.nsi diff --git a/changed/browser/branding/unofficial/configure.sh b/src/changed/browser/branding/unofficial/configure.sh similarity index 100% rename from changed/browser/branding/unofficial/configure.sh rename to src/changed/browser/branding/unofficial/configure.sh diff --git a/changed/browser/branding/unofficial/content/about-logo.png b/src/changed/browser/branding/unofficial/content/about-logo.png similarity index 100% rename from changed/browser/branding/unofficial/content/about-logo.png rename to src/changed/browser/branding/unofficial/content/about-logo.png diff --git a/changed/browser/branding/unofficial/content/about-logo.svg b/src/changed/browser/branding/unofficial/content/about-logo.svg similarity index 100% rename from changed/browser/branding/unofficial/content/about-logo.svg rename to src/changed/browser/branding/unofficial/content/about-logo.svg diff --git a/changed/browser/branding/unofficial/content/about-logo@2x.png b/src/changed/browser/branding/unofficial/content/about-logo@2x.png similarity index 100% rename from changed/browser/branding/unofficial/content/about-logo@2x.png rename to src/changed/browser/branding/unofficial/content/about-logo@2x.png diff --git a/changed/browser/branding/unofficial/content/about-wordmark.svg b/src/changed/browser/branding/unofficial/content/about-wordmark.svg similarity index 100% rename from changed/browser/branding/unofficial/content/about-wordmark.svg rename to src/changed/browser/branding/unofficial/content/about-wordmark.svg diff --git a/changed/browser/branding/unofficial/content/about.png b/src/changed/browser/branding/unofficial/content/about.png similarity index 100% rename from changed/browser/branding/unofficial/content/about.png rename to src/changed/browser/branding/unofficial/content/about.png diff --git a/changed/browser/branding/unofficial/content/aboutDialog.css b/src/changed/browser/branding/unofficial/content/aboutDialog.css similarity index 100% rename from changed/browser/branding/unofficial/content/aboutDialog.css rename to src/changed/browser/branding/unofficial/content/aboutDialog.css diff --git a/changed/browser/branding/unofficial/content/aboutlogins.svg b/src/changed/browser/branding/unofficial/content/aboutlogins.svg similarity index 100% rename from changed/browser/branding/unofficial/content/aboutlogins.svg rename to src/changed/browser/branding/unofficial/content/aboutlogins.svg diff --git a/changed/browser/branding/unofficial/content/firefox-wordmark.svg b/src/changed/browser/branding/unofficial/content/firefox-wordmark.svg similarity index 100% rename from changed/browser/branding/unofficial/content/firefox-wordmark.svg rename to src/changed/browser/branding/unofficial/content/firefox-wordmark.svg diff --git a/changed/browser/branding/unofficial/content/jar.mn b/src/changed/browser/branding/unofficial/content/jar.mn similarity index 100% rename from changed/browser/branding/unofficial/content/jar.mn rename to src/changed/browser/branding/unofficial/content/jar.mn diff --git a/changed/browser/branding/unofficial/content/moz.build b/src/changed/browser/branding/unofficial/content/moz.build similarity index 100% rename from changed/browser/branding/unofficial/content/moz.build rename to src/changed/browser/branding/unofficial/content/moz.build diff --git a/changed/browser/branding/unofficial/default128.png b/src/changed/browser/branding/unofficial/default128.png similarity index 100% rename from changed/browser/branding/unofficial/default128.png rename to src/changed/browser/branding/unofficial/default128.png diff --git a/changed/browser/branding/unofficial/default16.png b/src/changed/browser/branding/unofficial/default16.png similarity index 100% rename from changed/browser/branding/unofficial/default16.png rename to src/changed/browser/branding/unofficial/default16.png diff --git a/changed/browser/branding/unofficial/default22.png b/src/changed/browser/branding/unofficial/default22.png similarity index 100% rename from changed/browser/branding/unofficial/default22.png rename to src/changed/browser/branding/unofficial/default22.png diff --git a/changed/browser/branding/unofficial/default24.png b/src/changed/browser/branding/unofficial/default24.png similarity index 100% rename from changed/browser/branding/unofficial/default24.png rename to src/changed/browser/branding/unofficial/default24.png diff --git a/changed/browser/branding/unofficial/default256.png b/src/changed/browser/branding/unofficial/default256.png similarity index 100% rename from changed/browser/branding/unofficial/default256.png rename to src/changed/browser/branding/unofficial/default256.png diff --git a/changed/browser/branding/unofficial/default32.png b/src/changed/browser/branding/unofficial/default32.png similarity index 100% rename from changed/browser/branding/unofficial/default32.png rename to src/changed/browser/branding/unofficial/default32.png diff --git a/changed/browser/branding/unofficial/default48.png b/src/changed/browser/branding/unofficial/default48.png similarity index 100% rename from changed/browser/branding/unofficial/default48.png rename to src/changed/browser/branding/unofficial/default48.png diff --git a/changed/browser/branding/unofficial/default64.png b/src/changed/browser/branding/unofficial/default64.png similarity index 100% rename from changed/browser/branding/unofficial/default64.png rename to src/changed/browser/branding/unofficial/default64.png diff --git a/changed/browser/branding/unofficial/disk.icns b/src/changed/browser/branding/unofficial/disk.icns similarity index 100% rename from changed/browser/branding/unofficial/disk.icns rename to src/changed/browser/branding/unofficial/disk.icns diff --git a/changed/browser/branding/unofficial/document.icns b/src/changed/browser/branding/unofficial/document.icns similarity index 100% rename from changed/browser/branding/unofficial/document.icns rename to src/changed/browser/branding/unofficial/document.icns diff --git a/changed/browser/branding/unofficial/document.ico b/src/changed/browser/branding/unofficial/document.ico similarity index 100% rename from changed/browser/branding/unofficial/document.ico rename to src/changed/browser/branding/unofficial/document.ico diff --git a/changed/browser/branding/unofficial/dsstore b/src/changed/browser/branding/unofficial/dsstore similarity index 100% rename from changed/browser/branding/unofficial/dsstore rename to src/changed/browser/branding/unofficial/dsstore diff --git a/changed/browser/branding/unofficial/firefox.VisualElementsManifest.xml b/src/changed/browser/branding/unofficial/firefox.VisualElementsManifest.xml similarity index 100% rename from changed/browser/branding/unofficial/firefox.VisualElementsManifest.xml rename to src/changed/browser/branding/unofficial/firefox.VisualElementsManifest.xml diff --git a/changed/browser/branding/unofficial/firefox.icns b/src/changed/browser/branding/unofficial/firefox.icns similarity index 100% rename from changed/browser/branding/unofficial/firefox.icns rename to src/changed/browser/branding/unofficial/firefox.icns diff --git a/changed/browser/branding/unofficial/firefox.ico b/src/changed/browser/branding/unofficial/firefox.ico similarity index 100% rename from changed/browser/branding/unofficial/firefox.ico rename to src/changed/browser/branding/unofficial/firefox.ico diff --git a/changed/browser/branding/unofficial/firefox64.ico b/src/changed/browser/branding/unofficial/firefox64.ico similarity index 100% rename from changed/browser/branding/unofficial/firefox64.ico rename to src/changed/browser/branding/unofficial/firefox64.ico diff --git a/changed/browser/branding/unofficial/locales/en-US/brand.dtd b/src/changed/browser/branding/unofficial/locales/en-US/brand.dtd similarity index 100% rename from changed/browser/branding/unofficial/locales/en-US/brand.dtd rename to src/changed/browser/branding/unofficial/locales/en-US/brand.dtd diff --git a/changed/browser/branding/unofficial/locales/en-US/brand.ftl b/src/changed/browser/branding/unofficial/locales/en-US/brand.ftl similarity index 100% rename from changed/browser/branding/unofficial/locales/en-US/brand.ftl rename to src/changed/browser/branding/unofficial/locales/en-US/brand.ftl diff --git a/changed/browser/branding/unofficial/locales/en-US/brand.properties b/src/changed/browser/branding/unofficial/locales/en-US/brand.properties similarity index 100% rename from changed/browser/branding/unofficial/locales/en-US/brand.properties rename to src/changed/browser/branding/unofficial/locales/en-US/brand.properties diff --git a/changed/browser/branding/unofficial/locales/jar.mn b/src/changed/browser/branding/unofficial/locales/jar.mn similarity index 100% rename from changed/browser/branding/unofficial/locales/jar.mn rename to src/changed/browser/branding/unofficial/locales/jar.mn diff --git a/changed/browser/branding/unofficial/locales/moz.build b/src/changed/browser/branding/unofficial/locales/moz.build similarity index 100% rename from changed/browser/branding/unofficial/locales/moz.build rename to src/changed/browser/branding/unofficial/locales/moz.build diff --git a/changed/browser/branding/unofficial/msix/Assets/Document44x44.png b/src/changed/browser/branding/unofficial/msix/Assets/Document44x44.png similarity index 100% rename from changed/browser/branding/unofficial/msix/Assets/Document44x44.png rename to src/changed/browser/branding/unofficial/msix/Assets/Document44x44.png diff --git a/changed/browser/branding/unofficial/msix/Assets/LargeTile.scale-200.png b/src/changed/browser/branding/unofficial/msix/Assets/LargeTile.scale-200.png similarity index 100% rename from changed/browser/branding/unofficial/msix/Assets/LargeTile.scale-200.png rename to src/changed/browser/branding/unofficial/msix/Assets/LargeTile.scale-200.png diff --git a/changed/browser/branding/unofficial/msix/Assets/SmallTile.scale-200.png b/src/changed/browser/branding/unofficial/msix/Assets/SmallTile.scale-200.png similarity index 100% rename from changed/browser/branding/unofficial/msix/Assets/SmallTile.scale-200.png rename to src/changed/browser/branding/unofficial/msix/Assets/SmallTile.scale-200.png diff --git a/changed/browser/branding/unofficial/msix/Assets/Square150x150Logo.scale-200.png b/src/changed/browser/branding/unofficial/msix/Assets/Square150x150Logo.scale-200.png similarity index 100% rename from changed/browser/branding/unofficial/msix/Assets/Square150x150Logo.scale-200.png rename to src/changed/browser/branding/unofficial/msix/Assets/Square150x150Logo.scale-200.png diff --git a/changed/browser/branding/unofficial/msix/Assets/Square44x44Logo.altform-lightunplated_targetsize-256.png b/src/changed/browser/branding/unofficial/msix/Assets/Square44x44Logo.altform-lightunplated_targetsize-256.png similarity index 100% rename from changed/browser/branding/unofficial/msix/Assets/Square44x44Logo.altform-lightunplated_targetsize-256.png rename to src/changed/browser/branding/unofficial/msix/Assets/Square44x44Logo.altform-lightunplated_targetsize-256.png diff --git a/changed/browser/branding/unofficial/msix/Assets/Square44x44Logo.altform-unplated_targetsize-256.png b/src/changed/browser/branding/unofficial/msix/Assets/Square44x44Logo.altform-unplated_targetsize-256.png similarity index 100% rename from changed/browser/branding/unofficial/msix/Assets/Square44x44Logo.altform-unplated_targetsize-256.png rename to src/changed/browser/branding/unofficial/msix/Assets/Square44x44Logo.altform-unplated_targetsize-256.png diff --git a/changed/browser/branding/unofficial/msix/Assets/Square44x44Logo.scale-200.png b/src/changed/browser/branding/unofficial/msix/Assets/Square44x44Logo.scale-200.png similarity index 100% rename from changed/browser/branding/unofficial/msix/Assets/Square44x44Logo.scale-200.png rename to src/changed/browser/branding/unofficial/msix/Assets/Square44x44Logo.scale-200.png diff --git a/changed/browser/branding/unofficial/msix/Assets/Square44x44Logo.targetsize-256.png b/src/changed/browser/branding/unofficial/msix/Assets/Square44x44Logo.targetsize-256.png similarity index 100% rename from changed/browser/branding/unofficial/msix/Assets/Square44x44Logo.targetsize-256.png rename to src/changed/browser/branding/unofficial/msix/Assets/Square44x44Logo.targetsize-256.png diff --git a/changed/browser/branding/unofficial/msix/Assets/StoreLogo.scale-200.png b/src/changed/browser/branding/unofficial/msix/Assets/StoreLogo.scale-200.png similarity index 100% rename from changed/browser/branding/unofficial/msix/Assets/StoreLogo.scale-200.png rename to src/changed/browser/branding/unofficial/msix/Assets/StoreLogo.scale-200.png diff --git a/changed/browser/branding/unofficial/msix/Assets/Wide310x150Logo.scale-200.png b/src/changed/browser/branding/unofficial/msix/Assets/Wide310x150Logo.scale-200.png similarity index 100% rename from changed/browser/branding/unofficial/msix/Assets/Wide310x150Logo.scale-200.png rename to src/changed/browser/branding/unofficial/msix/Assets/Wide310x150Logo.scale-200.png diff --git a/changed/browser/branding/unofficial/pref/firefox-branding.js b/src/changed/browser/branding/unofficial/pref/firefox-branding.js similarity index 100% rename from changed/browser/branding/unofficial/pref/firefox-branding.js rename to src/changed/browser/branding/unofficial/pref/firefox-branding.js diff --git a/changed/browser/branding/unofficial/stubinstaller/bgstub.jpg b/src/changed/browser/branding/unofficial/stubinstaller/bgstub.jpg similarity index 100% rename from changed/browser/branding/unofficial/stubinstaller/bgstub.jpg rename to src/changed/browser/branding/unofficial/stubinstaller/bgstub.jpg diff --git a/changed/browser/branding/unofficial/stubinstaller/installing_page.css b/src/changed/browser/branding/unofficial/stubinstaller/installing_page.css similarity index 100% rename from changed/browser/branding/unofficial/stubinstaller/installing_page.css rename to src/changed/browser/branding/unofficial/stubinstaller/installing_page.css diff --git a/changed/browser/branding/unofficial/stubinstaller/profile_cleanup_page.css b/src/changed/browser/branding/unofficial/stubinstaller/profile_cleanup_page.css similarity index 100% rename from changed/browser/branding/unofficial/stubinstaller/profile_cleanup_page.css rename to src/changed/browser/branding/unofficial/stubinstaller/profile_cleanup_page.css diff --git a/changed/browser/branding/unofficial/wizHeader.bmp b/src/changed/browser/branding/unofficial/wizHeader.bmp similarity index 100% rename from changed/browser/branding/unofficial/wizHeader.bmp rename to src/changed/browser/branding/unofficial/wizHeader.bmp diff --git a/changed/browser/branding/unofficial/wizHeaderRTL.bmp b/src/changed/browser/branding/unofficial/wizHeaderRTL.bmp similarity index 100% rename from changed/browser/branding/unofficial/wizHeaderRTL.bmp rename to src/changed/browser/branding/unofficial/wizHeaderRTL.bmp diff --git a/changed/browser/branding/unofficial/wizWatermark.bmp b/src/changed/browser/branding/unofficial/wizWatermark.bmp similarity index 100% rename from changed/browser/branding/unofficial/wizWatermark.bmp rename to src/changed/browser/branding/unofficial/wizWatermark.bmp diff --git a/changed/browser/themes/linux/browser.css b/src/changed/browser/themes/linux/browser.css similarity index 100% rename from changed/browser/themes/linux/browser.css rename to src/changed/browser/themes/linux/browser.css diff --git a/changed/browser/themes/linux/webRTC-indicator.css b/src/changed/browser/themes/linux/webRTC-indicator.css similarity index 100% rename from changed/browser/themes/linux/webRTC-indicator.css rename to src/changed/browser/themes/linux/webRTC-indicator.css diff --git a/changed/browser/themes/osx/browser.css b/src/changed/browser/themes/osx/browser.css similarity index 100% rename from changed/browser/themes/osx/browser.css rename to src/changed/browser/themes/osx/browser.css diff --git a/changed/browser/themes/osx/webRTC-indicator.css b/src/changed/browser/themes/osx/webRTC-indicator.css similarity index 100% rename from changed/browser/themes/osx/webRTC-indicator.css rename to src/changed/browser/themes/osx/webRTC-indicator.css diff --git a/changed/browser/themes/shared/webRTC-indicator.css b/src/changed/browser/themes/shared/webRTC-indicator.css similarity index 100% rename from changed/browser/themes/shared/webRTC-indicator.css rename to src/changed/browser/themes/shared/webRTC-indicator.css diff --git a/changed/browser/themes/windows/browser.css b/src/changed/browser/themes/windows/browser.css similarity index 100% rename from changed/browser/themes/windows/browser.css rename to src/changed/browser/themes/windows/browser.css diff --git a/changed/browser/themes/windows/webRTC-indicator.css b/src/changed/browser/themes/windows/webRTC-indicator.css similarity index 100% rename from changed/browser/themes/windows/webRTC-indicator.css rename to src/changed/browser/themes/windows/webRTC-indicator.css diff --git a/changed/mconfd/mozconfig-linux-x86_64 b/src/changed/mconfd/mozconfig-linux-x86_64 similarity index 100% rename from changed/mconfd/mozconfig-linux-x86_64 rename to src/changed/mconfd/mozconfig-linux-x86_64 diff --git a/src/launch-datcord b/src/launch-datcord new file mode 100755 index 0000000000..87a2ee5a86 --- /dev/null +++ b/src/launch-datcord @@ -0,0 +1,16 @@ +#!/usr/bin/env bash + +# Find the directory of this script. https://stackoverflow.com/questions/59895/how-do-i-get-the-directory-where-a-bash-script-is-located-from-within-the-script +SOURCE=${BASH_SOURCE[0]} +while [ -L "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink + DIR=$( cd -P "$( dirname "$SOURCE" )" >/dev/null 2>&1 && pwd ) + SOURCE=$(readlink "$SOURCE") + [[ $SOURCE != /* ]] && SOURCE=$DIR/$SOURCE # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located +done +DIR=$( cd -P "$( dirname "$SOURCE" )" >/dev/null 2>&1 && pwd ) + +cp $DIR/open-in-default-browser /tmp/open-in-default-browser + +$DIR/datcord $1 + +rm /tmp/open-in-default-browser \ No newline at end of file diff --git a/windows/setup.nsi b/windows/setup.nsi index b3fffb2c88..201f54412f 100644 --- a/windows/setup.nsi +++ b/windows/setup.nsi @@ -41,7 +41,8 @@ Click Next to continue." Section # Make sure Datcord is closed before the installation - ${nsProcess::_FindProcess} "${EXECUTABLE}" $R0 + nsProcess::_FindProcess "${EXECUTABLE}" + Pop $R0 ${If} $R0 = 0 IfSilent 0 +4 DetailPrint "${APPNAME} is still running, aborting because of silent install." @@ -55,14 +56,16 @@ break: Abort continue: DetailPrint "Closing ${APPNAME} gracefully..." - ${nsProcess::_CloseProcess} "${EXECUTABLE}" $R0 + nsProcess::_CloseProcess "${EXECUTABLE}" + Pop $R0 Sleep 2000 - ${nsProcess::_FindProcess} "${EXECUTABLE}" $R0 + nsProcess::_FindProcess "${EXECUTABLE}" + Pop $R0 ${If} $R0 = 0 DetailPrint "Failed to close ${APPNAME}, killing it..." - ${nsProcess::_KillProcess} "${EXECUTABLE}" + nsProcess::_KillProcess "${EXECUTABLE}" Sleep 2000 - ${nsProcess::_FindProcess} "${EXECUTABLE}" + nsProcess::_FindProcess "${EXECUTABLE}" Pop $R0 ${EndIf} ${EndIf} @@ -106,7 +109,8 @@ SectionEnd section "Uninstall" # Kill Datcord if it is still running - ${nsProcess::_FindProcess} "${EXECUTABLE}" $R0 + nsProcess::_FindProcess "${EXECUTABLE}" + Pop $R0 ${If} $R0 = 0 DetailPrint "${APPNAME} is still running, killing it..." nsProcess::_KillProcess "${EXECUTABLE}" @@ -125,4 +129,4 @@ section "Uninstall" # Remove uninstaller information from the registry DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" -sectionEnd +sectionEnd \ No newline at end of file From 019b24b944a28f175ca91822cdaaef22b28f3feb Mon Sep 17 00:00:00 2001 From: gamingdoom <37276884+gamingdoom@users.noreply.github.com> Date: Sat, 28 Jan 2023 20:45:38 -0800 Subject: [PATCH 02/29] force titlebar --- buildDatcord.sh | 2 +- distribution/policies-linux-appimage.json | 1 + distribution/policies-linux.json | 1 + distribution/policies-windows.json | 2 +- src/changed/browser/app/profile/firefox.js | 289 +- .../browser/app/profile/firefox.js.bak | 2768 +++++++++++++++++ src/changed/browser/themes/linux/browser.css | 872 +++--- 7 files changed, 3362 insertions(+), 573 deletions(-) create mode 100644 src/changed/browser/app/profile/firefox.js.bak diff --git a/buildDatcord.sh b/buildDatcord.sh index 279a813cc2..475b5b03ef 100755 --- a/buildDatcord.sh +++ b/buildDatcord.sh @@ -23,7 +23,7 @@ fi cd mozilla-unified cp -r ../src/changed/* . -#patch -p1 ../mozilla_dirsFromLibreWolf.patch +patch -p1 ../mozilla_dirsFromLibreWolf.patch ./mach configure ./mach build ./mach package diff --git a/distribution/policies-linux-appimage.json b/distribution/policies-linux-appimage.json index 3d26b8b102..43f72197a3 100644 --- a/distribution/policies-linux-appimage.json +++ b/distribution/policies-linux-appimage.json @@ -1,5 +1,6 @@ { "policies": { + "DisplayMenuBar" : "never", "Extensions": { "Install": ["https://addons.mozilla.org/firefox/downloads/file/3831723/open_with-7.2.6.xpi", "https://github.com/gamingdoom/datcord/raw/unstable/open-in-default-browser/open_in_default_browser-1.0.zip"] }, diff --git a/distribution/policies-linux.json b/distribution/policies-linux.json index 3d26b8b102..43f72197a3 100644 --- a/distribution/policies-linux.json +++ b/distribution/policies-linux.json @@ -1,5 +1,6 @@ { "policies": { + "DisplayMenuBar" : "never", "Extensions": { "Install": ["https://addons.mozilla.org/firefox/downloads/file/3831723/open_with-7.2.6.xpi", "https://github.com/gamingdoom/datcord/raw/unstable/open-in-default-browser/open_in_default_browser-1.0.zip"] }, diff --git a/distribution/policies-windows.json b/distribution/policies-windows.json index 922ff5a121..e8a794c02c 100644 --- a/distribution/policies-windows.json +++ b/distribution/policies-windows.json @@ -1,6 +1,6 @@ { "policies": { - "DisplayMenuBar" : "always", + "DisplayMenuBar" : "never", "Extensions": { "Install": ["https://addons.mozilla.org/firefox/downloads/file/3831723/open_with-7.2.6.xpi", "https://github.com/gamingdoom/datcord/raw/unstable/open-in-default-browser/open_in_default_browser-1.0.zip"] }, diff --git a/src/changed/browser/app/profile/firefox.js b/src/changed/browser/app/profile/firefox.js index 7c6679bfa4..9fe06aa01b 100644 --- a/src/changed/browser/app/profile/firefox.js +++ b/src/changed/browser/app/profile/firefox.js @@ -1,4 +1,4 @@ -is:issue is:closed #filter dumbComments emptyLines substitution +#filter dumbComments emptyLines substitution // -*- indent-tabs-mode: nil; js-indent-level: 2 -*- // This Source Code Form is subject to the terms of the Mozilla Public @@ -19,12 +19,7 @@ is:issue is:closed #filter dumbComments emptyLines substitution #endif #endif -pref("security.fileuri.strict_origin_policy", false); - -// Datcord open links in default browser -pref("network.protocol-handler.external.open", true); -pref("network.protocol-handler.warn-external.open", true); -pref("network.protocol-handler.expose.open", false); +// Datcord stuff at bottom pref("browser.hiddenWindowChromeURL", "chrome://browser/content/hiddenWindowMac.xhtml"); @@ -74,12 +69,9 @@ pref("extensions.webextensions.remote", true); // Require signed add-ons by default pref("extensions.langpacks.signatures.required", true); -pref("xpinstall.signatures.required", false); +pref("xpinstall.signatures.required", true); pref("xpinstall.signatures.devInfoURL", "https://wiki.mozilla.org/Addons/Extension_Signing"); -// Enable extensionStorage storage actor by default -pref("devtools.storage.extensionStorage.enabled", true); - // Dictionary download preference pref("browser.dictionaries.download.url", "https://addons.mozilla.org/%LOCALE%/firefox/language-tools/"); @@ -151,7 +143,7 @@ pref("app.update.notifyDuringDownload", false); // default value to migrate to the new location that this data is now stored // (which is in a file in the update directory). Because of this, this pref // should no longer be used directly. Instead, getAppUpdateAutoEnabled and -// getAppUpdateAutoEnabled from UpdateUtils.jsm should be used. +// getAppUpdateAutoEnabled from UpdateUtils.sys.mjs should be used. #ifndef XP_WIN pref("app.update.auto", true); #endif @@ -228,7 +220,7 @@ pref("lightweightThemes.getMoreURL", "https://addons.mozilla.org/%LOCALE%/firefo #endif // UI tour experience. -pref("browser.uitour.enabled", false); +pref("browser.uitour.enabled", true); pref("browser.uitour.loglevel", "Error"); pref("browser.uitour.requireSecure", true); pref("browser.uitour.themeOrigin", "https://addons.mozilla.org/%LOCALE%/firefox/themes/"); @@ -272,7 +264,7 @@ pref("browser.touchmode.auto", true); pref("browser.compactmode.show", false); // At startup, check if we're the default browser and prompt user if not. -pref("browser.shell.checkDefaultBrowser", false); +pref("browser.shell.checkDefaultBrowser", true); pref("browser.shell.shortcutFavicons",true); pref("browser.shell.mostRecentDateSetAsDefault", ""); pref("browser.shell.skipDefaultBrowserCheckOnFirstRun", true); @@ -281,10 +273,10 @@ pref("browser.shell.defaultBrowserCheckCount", 0); #if defined(XP_WIN) // Attempt to set the default browser on Windows 10 using the UserChoice registry keys, // before falling back to launching the modern Settings dialog. -pref("browser.shell.setDefaultBrowserUserChoice", false); +pref("browser.shell.setDefaultBrowserUserChoice", true); // When setting the default browser on Windows 10 using the UserChoice // registry keys, also try to set Firefox as the default PDF handler. -pref("browser.shell.setDefaultPDFHandler", false); +pref("browser.shell.setDefaultPDFHandler", true); // When setting Firefox as the default PDF handler (subject to conditions // above), only set Firefox as the default PDF handler when the existing handler // is a known browser, and not when existing handler is another PDF handler such @@ -296,7 +288,7 @@ pref("browser.shell.setDefaultPDFHandler.onlyReplaceBrowsers", true); // 0 = blank, 1 = home (browser.startup.homepage), 2 = last visited page, 3 = resume previous browser session // The behavior of option 3 is detailed at: http://wiki.mozilla.org/Session_Restore pref("browser.startup.page", 1); -pref("browser.startup.homepage", "https://discord.com/app"); +pref("browser.startup.homepage", "about:home"); #ifdef NIGHTLY_BUILD pref("browser.startup.homepage.abouthome_cache.enabled", true); #else @@ -305,7 +297,7 @@ pref("browser.startup.homepage.abouthome_cache.enabled", false); pref("browser.startup.homepage.abouthome_cache.loglevel", "Warn"); // Whether we should skip the homepage when opening the first-run page -pref("browser.startup.firstrunSkipsHomepage", false); +pref("browser.startup.firstrunSkipsHomepage", true); // Whether we should show the session-restore infobar on startup pref("browser.startup.couldRestoreSession.count", 0); @@ -326,7 +318,7 @@ pref("browser.startup.preXulSkeletonUI", true); #endif // Show an upgrade dialog on major upgrades. -pref("browser.startup.upgradeDialog.enabled", false); +pref("browser.startup.upgradeDialog.enabled", true); // Don't create the hidden window during startup on // platforms that don't always need it (Win/Linux). @@ -334,7 +326,7 @@ pref("toolkit.lazyHiddenWindow", true); pref("browser.chrome.site_icons", true); // browser.warnOnQuit == false will override all other possible prompts when quitting or restarting -pref("browser.warnOnQuit", false); +pref("browser.warnOnQuit", true); // Whether to warn when quitting when using the shortcut key. #if defined(XP_WIN) @@ -354,6 +346,13 @@ pref("browser.overlink-delay", 80); pref("browser.theme.colorway-closet", true); +// Whether expired built-in colorways themes that are active or retained +// should be allowed to check for updates and be updated to an AMO hosted +// theme with the same id (as part of preparing to remove from mozilla-central +// all the expired built-in colorways themes, after existing users have been +// migrated to colorways themes hosted on AMO). +pref("browser.theme.colorway-migration", false); + // Whether using `ctrl` when hitting return/enter in the URL bar // (or clicking 'go') should prefix 'www.' and suffix // browser.fixup.alternate.suffix to the URL bar value prior to @@ -393,13 +392,13 @@ pref("browser.urlbar.maxHistoricalSearchSuggestions", 2); // The default behavior for the urlbar can be configured to use any combination // of the match filters with each additional filter adding more results (union). -pref("browser.urlbar.suggest.bookmark", false); -pref("browser.urlbar.suggest.history", false); -pref("browser.urlbar.suggest.openpage", false); -pref("browser.urlbar.suggest.remotetab", false); -pref("browser.urlbar.suggest.searches", false); -pref("browser.urlbar.suggest.topsites", false); -pref("browser.urlbar.suggest.engines", false); +pref("browser.urlbar.suggest.bookmark", true); +pref("browser.urlbar.suggest.history", true); +pref("browser.urlbar.suggest.openpage", true); +pref("browser.urlbar.suggest.remotetab", true); +pref("browser.urlbar.suggest.searches", true); +pref("browser.urlbar.suggest.topsites", true); +pref("browser.urlbar.suggest.engines", true); pref("browser.urlbar.suggest.calculator", false); #if defined(EARLY_BETA_OR_EARLIER) @@ -408,9 +407,16 @@ pref("browser.urlbar.suggest.calculator", false); pref("browser.urlbar.suggest.quickactions", true); pref("browser.urlbar.shortcuts.quickactions", true); pref("browser.urlbar.quickactions.showPrefs", true); - pref("browser.urlbar.quickactions.showInZeroPrefix", true); + pref("browser.urlbar.quickactions.showInZeroPrefix", false); #endif +// Feature gate pref for weather suggestions in the urlbar. +pref("browser.urlbar.weather.featureGate", false); + +// If `browser.urlbar.weather.featureGate` is true, this controls whether +// weather suggestions are turned on. +pref("browser.urlbar.suggest.weather", true); + // When `browser.urlbar.bestMatch.enabled` is true, this controls whether best // match results are shown in the urlbar. This pref is exposed to the user in // the UI, and it's sticky so that its user-branch value persists regardless of @@ -498,14 +504,26 @@ pref("browser.urlbar.switchTabs.adoptIntoActiveWindow", false); // should be opened in new tabs by default. pref("browser.urlbar.openintab", false); +// Enable three-dot options button and menu for eligible results. +pref("browser.urlbar.resultMenu", false); + // If true, we show tail suggestions when available. pref("browser.urlbar.richSuggestions.tail", true); // If true, top sites may include sponsored ones. pref("browser.urlbar.sponsoredTopSites", false); -// If true, show the search term in the URL bar for the users default engine. -pref("browser.urlbar.showSearchTerms", false); +// Global toggle for whether the show search terms feature +// can be used at all, and enabled/disabled by the user. +#if defined(EARLY_BETA_OR_EARLIER) +pref("browser.urlbar.showSearchTerms.featureGate", true); +#else +pref("browser.urlbar.showSearchTerms.featureGate", false); +#endif + +// If true, show the search term in the Urlbar while on +// a default search engine results page. +pref("browser.urlbar.showSearchTerms.enabled", true); // Controls the empty search behavior in Search Mode: // 0 - Show nothing @@ -521,6 +539,9 @@ pref("browser.urlbar.shortcuts.history", true); pref("browser.urlbar.eventTelemetry.enabled", false); +// Whether search engagement telemetry should be recorded. +pref("browser.urlbar.searchEngagementTelemetry.enabled", false); + // When we send events to Urlbar extensions, we wait this amount of time in // milliseconds for them to respond before timing out. pref("browser.urlbar.extension.timeout", 400); @@ -563,6 +584,9 @@ pref("browser.urlbar.bestMatch.enabled", false); // Nimbus variable `bestMatchBlockingEnabled`. pref("browser.urlbar.bestMatch.blockingEnabled", false); +// Enable site specific search result. +pref("browser.urlbar.contextualSearch.enabled", false); + pref("browser.altClickSave", false); // Enable logging downloads operations to the Console. @@ -579,10 +603,6 @@ pref("browser.download.folderList", 1); pref("browser.download.manager.addToRecentDocs", true); pref("browser.download.manager.resumeOnWakeDelay", 10000); -// This allows disabling the animated notifications shown by -// the Downloads Indicator when a download starts or completes. -pref("browser.download.animateNotifications", true); - // This records whether or not the panel has been shown at least once. pref("browser.download.panel.shown", false); @@ -650,7 +670,7 @@ pref("browser.search.separatePrivateDefault.ui.enabled", false); pref("browser.search.separatePrivateDefault.ui.banner.max", 0); // Enables the display of the Mozilla VPN banner in private browsing windows -pref("browser.privatebrowsing.vpnpromourl", ""); +pref("browser.privatebrowsing.vpnpromourl", "https://vpn.mozilla.org/?utm_source=firefox-browser&utm_medium=firefox-%CHANNEL%-browser&utm_campaign=private-browsing-vpn-link"); // Enables the new private browsing indicator. pref("browser.privatebrowsing.enable-new-indicator", true); @@ -679,8 +699,8 @@ pref("permissions.manager.defaultsUrl", "resource://app/defaults/permissions"); // Set default fallback values for site permissions we want // the user to be able to globally change. -pref("permissions.default.camera", 1); -pref("permissions.default.microphone", 1); +pref("permissions.default.camera", 0); +pref("permissions.default.microphone", 0); pref("permissions.default.geo", 0); pref("permissions.default.xr", 0); pref("permissions.default.desktop-notification", 0); @@ -689,11 +709,11 @@ pref("permissions.default.shortcuts", 0); pref("permissions.desktop-notification.postPrompt.enabled", true); pref("permissions.desktop-notification.notNow.enabled", false); -pref("permissions.fullscreen.allowed", true); +pref("permissions.fullscreen.allowed", false); // handle links targeting new windows // 1=current window/tab, 2=new window, 3=new tab in most recent window -pref("browser.link.open_newwindow", 1); +pref("browser.link.open_newwindow", 3); // handle external links (i.e. links opened from a different application) // default: use browser.link.open_newwindow @@ -951,8 +971,6 @@ pref("browser.gesture.twist.end", "cmd_gestureRotateEnd"); pref("browser.gesture.tap", ""); #endif -pref("browser.history_swipe_animation.disabled", false); - // 0: Nothing happens // 1: Scrolling contents // 2: Go back or go forward, in your history @@ -965,16 +983,7 @@ pref("browser.history_swipe_animation.disabled", false); // scrolling to shift+wheel. pref("mousewheel.with_shift.action", 1); pref("mousewheel.with_alt.action", 2); - // On MacOS X, control+wheel is typically handled by system and we don't - // receive the event. So, command key which is the main modifier key for - // acceleration is the best modifier for zoom-in/out. However, we should keep - // the control key setting for backward compatibility. - pref("mousewheel.with_meta.action", 3); // command key on Mac - // Disable control-/meta-modified horizontal wheel events, since those are - // used on Mac as part of modified swipe gestures (e.g. Left swipe+Cmd is - // "go back" in a new tab). - pref("mousewheel.with_control.action.override_x", 0); - pref("mousewheel.with_meta.action.override_x", 0); + pref("mousewheel.with_control.action", 1); #else // On the other platforms (non-macOS), user may use legacy mouse which // supports only vertical wheel but want to scroll horizontally. For such @@ -984,9 +993,8 @@ pref("browser.history_swipe_animation.disabled", false); // is better for consistency with macOS users. pref("mousewheel.with_shift.action", 4); pref("mousewheel.with_alt.action", 2); - pref("mousewheel.with_meta.action", 1); // win key on Win, Super/Hyper on Linux #endif -pref("mousewheel.with_control.action",3); + pref("mousewheel.with_win.action", 1); pref("browser.xul.error_pages.expert_bad_cert", false); @@ -1090,9 +1098,9 @@ pref("browser.sessionstore.resuming_after_os_restart", false); // Minimal interval between two save operations in milliseconds (while the user is idle). pref("browser.sessionstore.interval.idle", 3600000); // 1h -// Time (ms) before we assume that the user is idle and that we don't need to +// Time (seconds) before we assume that the user is idle and that we don't need to // collect/save the session quite as often. -pref("browser.sessionstore.idleDelay", 180000); // 3 minutes +pref("browser.sessionstore.idleDelay", 180); // 3 minutes // on which sites to save text data, POSTDATA and cookies // 0 = everywhere, 1 = unencrypted sites, 2 = nowhere @@ -1141,6 +1149,9 @@ pref("accessibility.blockautorefresh", false); // Whether history is enabled or not. pref("places.history.enabled", true); +// The default Places log level. +pref("places.loglevel", "Error"); + // Whether or not diacritics must match in history text searches. pref("places.search.matchDiacritics", false); @@ -1254,13 +1265,6 @@ pref("browser.bookmarks.editDialog.delayedApply.enabled", false); // See - security/sandbox/win/src/sandboxbroker/sandboxBroker.cpp // SetSecurityLevelForContentProcess() for what the different settings mean. pref("security.sandbox.content.level", 6); - - // This controls the strength of the Windows GPU process sandbox. Changes - // will require restart. - // For information on what the level number means, see - // SetSecurityLevelForGPUProcess() in - // security/sandbox/win/src/sandboxbroker/sandboxBroker.cpp - pref("security.sandbox.gpu.level", 0); #endif #if defined(XP_MACOSX) && defined(MOZ_SANDBOX) @@ -1548,9 +1552,9 @@ pref("browser.newtabpage.activity-stream.fxaccounts.endpoint", "https://accounts pref("browser.newtabpage.activity-stream.improvesearch.topSiteSearchShortcuts", true); // ASRouter provider configuration -pref("browser.newtabpage.activity-stream.asrouter.providers.cfr", "{\"id\":\"cfr\",\"enabled\":true,\"type\":\"remote-settings\",\"bucket\":\"cfr\",\"updateCycleInMs\":3600000}"); -pref("browser.newtabpage.activity-stream.asrouter.providers.whats-new-panel", "{\"id\":\"whats-new-panel\",\"enabled\":true,\"type\":\"remote-settings\",\"bucket\":\"whats-new-panel\",\"updateCycleInMs\":3600000}"); -pref("browser.newtabpage.activity-stream.asrouter.providers.message-groups", "{\"id\":\"message-groups\",\"enabled\":true,\"type\":\"remote-settings\",\"bucket\":\"message-groups\",\"updateCycleInMs\":3600000}"); +pref("browser.newtabpage.activity-stream.asrouter.providers.cfr", "{\"id\":\"cfr\",\"enabled\":true,\"type\":\"remote-settings\",\"collection\":\"cfr\",\"updateCycleInMs\":3600000}"); +pref("browser.newtabpage.activity-stream.asrouter.providers.whats-new-panel", "{\"id\":\"whats-new-panel\",\"enabled\":true,\"type\":\"remote-settings\",\"collection\":\"whats-new-panel\",\"updateCycleInMs\":3600000}"); +pref("browser.newtabpage.activity-stream.asrouter.providers.message-groups", "{\"id\":\"message-groups\",\"enabled\":true,\"type\":\"remote-settings\",\"collection\":\"message-groups\",\"updateCycleInMs\":3600000}"); // This url, if changed, MUST continue to point to an https url. Pulling arbitrary content to inject into // this page over http opens us up to a man-in-the-middle attack that we'd rather not face. If you are a downstream // repackager of this code using an alternate snippet url, please keep your users safe @@ -1596,6 +1600,8 @@ pref("browser.newtabpage.activity-stream.discoverystream.sponsored-collections.e // Changes the spoc content. pref("browser.newtabpage.activity-stream.discoverystream.spocAdTypes", ""); pref("browser.newtabpage.activity-stream.discoverystream.spocZoneIds", ""); +pref("browser.newtabpage.activity-stream.discoverystream.spocTopsitesAdTypes", ""); +pref("browser.newtabpage.activity-stream.discoverystream.spocTopsitesZoneIds", ""); pref("browser.newtabpage.activity-stream.discoverystream.spocSiteId", ""); pref("browser.newtabpage.activity-stream.discoverystream.sendToPocket.enabled", false); @@ -1651,18 +1657,24 @@ pref("browser.aboutwelcome.screens", ""); pref("browser.aboutwelcome.skipFocus", true); // Used to enable template for MR 2022 Onboarding pref("browser.aboutwelcome.templateMR", true); +// Used to enable window modal onboarding +pref("browser.aboutwelcome.showModal", false); // The pref that controls if the What's New panel is enabled. pref("browser.messaging-system.whatsNewPanel.enabled", true); // Experiment Manager -// See Console.jsm LOG_LEVELS for all possible values +// See Console.sys.mjs LOG_LEVELS for all possible values pref("messaging-system.log", "warn"); pref("messaging-system.rsexperimentloader.enabled", true); pref("messaging-system.rsexperimentloader.collection_id", "nimbus-desktop-experiments"); pref("nimbus.debug", false); pref("nimbus.validation.enabled", true); +// Nimbus QA prefs. Used to monitor pref-setting test experiments. +pref("nimbus.qa.pref-1", "default"); +pref("nimbus.qa.pref-2", "default"); + // Enable the DOM fullscreen API. pref("full-screen-api.enabled", true); @@ -1794,9 +1806,6 @@ pref("media.gmp.trial-create.enabled", true); pref("media.gmp-gmpopenh264.visible", true); pref("media.gmp-gmpopenh264.enabled", true); -// Set Firefox to block autoplay, asking for permission by default. -pref("media.autoplay.default", 1); // 0=Allowed, 1=Blocked, 5=All Blocked - // Block WebAudio from playing automatically. pref("media.autoplay.block-webaudio", true); @@ -1818,6 +1827,8 @@ pref("browser.translation.engine", "Google"); pref("toolkit.telemetry.archive.enabled", true); // Enables sending the shutdown ping when Firefox shuts down. pref("toolkit.telemetry.shutdownPingSender.enabled", true); +// Enables using the `pingsender` background task. +pref("toolkit.telemetry.shutdownPingSender.backgroundtask.enabled", false); // Enables sending the shutdown ping using the pingsender from the first session. pref("toolkit.telemetry.shutdownPingSender.enabledFirstSession", false); // Enables sending a duplicate of the first shutdown ping from the first session. @@ -1839,16 +1850,6 @@ pref("media.gmp-provider.enabled", true); // Enable Dynamic First-Party Isolation by default. pref("network.cookie.cookieBehavior", 5 /* BEHAVIOR_REJECT_TRACKER_AND_PARTITION_FOREIGN */); -// Whether to show the section in preferences which allows users to opt-in to -// Total Cookie Protection (dFPI) in standard mode. -pref("privacy.restrict3rdpartystorage.rollout.preferences.TCPToggleInStandard", false); - -// Target URL for the learn more link of the TCP in standard mode rollout section. -pref("privacy.restrict3rdpartystorage.rollout.preferences.learnMoreURLSuffix", "total-cookie-protection"); - -// Target URL for the learn more link of the TCP in standard mode section. -pref("privacy.restrict3rdpartystorage.preferences.learnMoreURLSuffix", "total-cookie-protection"); - // Enable Dynamic First-Party Isolation in the private browsing mode. pref("network.cookie.cookieBehavior.pbmode", 5 /* BEHAVIOR_REJECT_TRACKER_AND_PARTITION_FOREIGN */); @@ -1888,9 +1889,12 @@ pref("browser.contentblocking.reject-and-isolate-cookies.preferences.ui.enabled" // Social Tracking Protection: // "stp": social tracking protection enabled // "-stp": social tracking protection disabled -// Level 2 Tracking list: +// Level 2 Tracking list in normal windows: // "lvl2": Level 2 tracking list enabled // "-lvl2": Level 2 tracking list disabled +// Level 2 Tracking list in private windows: +// "lvl2PBM": Level 2 tracking list enabled +// "-lvl2PBM": Level 2 tracking list disabled // Restrict relaxing default referrer policy: // "rp": Restrict relaxing default referrer policy enabled // "-rp": Restrict relaxing default referrer policy disabled @@ -1921,7 +1925,7 @@ pref("browser.contentblocking.reject-and-isolate-cookies.preferences.ui.enabled" // "cookieBehaviorPBM4": cookie behaviour BEHAVIOR_REJECT_TRACKER // "cookieBehaviorPBM5": cookie behaviour BEHAVIOR_REJECT_TRACKER_AND_PARTITION_FOREIGN // One value from each section must be included in the browser.contentblocking.features.strict pref. -pref("browser.contentblocking.features.strict", "tp,tpPrivate,cookieBehavior5,cookieBehaviorPBM5,cm,fp,stp,lvl2,rp,rpTop,ocsp,qps,qpsPBM"); +pref("browser.contentblocking.features.strict", "tp,tpPrivate,cookieBehavior5,cookieBehaviorPBM5,cm,fp,stp,lvl2,lvl2PBM,rp,rpTop,ocsp,qps,qpsPBM"); // Hide the "Change Block List" link for trackers/tracking content in the custom // Content Blocking/ETP panel. By default, it will not be visible. There is also @@ -1948,7 +1952,7 @@ pref("browser.contentblocking.report.show_mobile_app", true); pref("browser.send_to_device_locales", "de,en-GB,en-US,es-AR,es-CL,es-ES,es-MX,fr,id,pl,pt-BR,ru,zh-TW"); // Avoid advertising in certain regions. Comma separated string of two letter ISO 3166-1 country codes. -// We're currently blocking all of Ukraine (ua), but would prefer to block just Crimea (ua-43). Currently, the Mozilla Location Service APIs used by Region.jsm only exposes the country, not the subdivision. +// We're currently blocking all of Ukraine (ua), but would prefer to block just Crimea (ua-43). Currently, the Mozilla Location Service APIs used by Region.sys.mjs only exposes the country, not the subdivision. pref("browser.vpn_promo.disallowed_regions", "ae,by,cn,cu,iq,ir,kp,om,ru,sd,sy,tm,tr,ua"); // Default to enabling VPN promo messages to be shown when specified and allowed @@ -2082,6 +2086,10 @@ pref("extensions.experiments.enabled", false); pref("dom.ipc.processPriorityManager.enabled", true); #endif +#if defined(XP_WIN) + pref("dom.ipc.processPriorityManager.backgroundUsesEcoQoS", true); +#endif + // Don't limit how many nodes we care about on desktop: pref("reader.parse-node-limit", 0); @@ -2135,9 +2143,12 @@ pref("browser.migrate.chromium-edge-beta.enabled", true); pref("browser.migrate.edge.enabled", true); pref("browser.migrate.firefox.enabled", true); pref("browser.migrate.ie.enabled", true); +pref("browser.migrate.opera.enabled", true); +pref("browser.migrate.opera-gx.enabled", true); pref("browser.migrate.safari.enabled", true); +pref("browser.migrate.vivaldi.enabled", true); -pref("browser.migrate.showBookmarksToolbarAfterMigration", true); +pref("browser.migrate.content-modal.enabled", false); pref("extensions.pocket.api", "api.getpocket.com"); pref("extensions.pocket.enabled", true); @@ -2162,8 +2173,17 @@ pref("signon.management.page.fileImport.enabled", false); #ifdef NIGHTLY_BUILD pref("signon.management.page.os-auth.enabled", true); + +// "not available" - feature is not available (will be removed after QA). +// "available" - user can see feature offer. +// "offered" - we have offered feature to user and they have not yet made a decision. +// "enabled" - user opted in to the feature. +// "disabled" - user opted out of the feature. +// will be enabled after QA round +pref("signon.firefoxRelay.feature", "not available"); #else pref("signon.management.page.os-auth.enabled", false); +pref("signon.firefoxRelay.feature", "not available"); #endif pref("signon.management.page.breach-alerts.enabled", true); pref("signon.management.page.vulnerable-passwords.enabled", true); @@ -2184,8 +2204,8 @@ pref("signon.suggestImportCount", 3); pref("print.use_simplify_page", true); // Space separated list of URLS that are allowed to send objects (instead of -// only strings) through webchannels. This list is duplicated in mobile/android/app/mobile.js -pref("webchannel.allowObject.urlWhitelist", "https://content.cdn.mozilla.net https://support.mozilla.org https://install.mozilla.org"); +// only strings) through webchannels. Bug 1275612 tracks removing this pref and capability. +pref("webchannel.allowObject.urlWhitelist", "https://content.cdn.mozilla.net https://install.mozilla.org"); // Whether or not the browser should scan for unsubmitted // crash reports, and then show a notification for submitting @@ -2329,10 +2349,6 @@ pref("devtools.toolbox.tabsOrder", ""); // always visible pref("devtools.toolbox.alwaysOnTop", true); -// The fission pref for enabling the "Multiprocess Browser Toolbox", which will -// make it possible to debug anything in Firefox (See Bug 1570639 for more information). -pref("devtools.browsertoolbox.fission", true); - // When the Multiprocess Browser Toolbox is enabled, you can configure the scope of it: // - "everything" will enable debugging absolutely everything in the browser // All processes, all documents, all workers, all add-ons. @@ -2520,8 +2536,8 @@ pref("devtools.storage.enabled", true); // Enable the Style Editor. pref("devtools.styleeditor.enabled", true); pref("devtools.styleeditor.autocompletion-enabled", true); -pref("devtools.styleeditor.showMediaSidebar", true); -pref("devtools.styleeditor.mediaSidebarWidth", 238); +pref("devtools.styleeditor.showAtRulesSidebar", true); +pref("devtools.styleeditor.atRulesSidebarWidth", 238); pref("devtools.styleeditor.navSidebarWidth", 245); pref("devtools.styleeditor.transitions", true); @@ -2600,9 +2616,6 @@ pref("devtools.webconsole.input.editorOnboarding", true); // Enable message grouping in the console, true by default pref("devtools.webconsole.groupWarningMessages", true); -// Saved state of the Display content messages checkbox in the browser console. -pref("devtools.browserconsole.contentMessages", false); - // Enable network monitoring the browser toolbox console/browser console. pref("devtools.browserconsole.enableNetworkMonitoring", false); @@ -2725,27 +2738,10 @@ pref("svg.context-properties.content.allowed-domains", "profile.accounts.firefox pref("extensions.translations.disabled", true); #endif -// A set of scores for rating the relevancy of snapshots. The suffixes after the -// last decimal are prefixed by `_score` and reference the functions called in -// SnapshotScorer. -pref("browser.snapshots.score.Visit", 1); -pref("browser.snapshots.score.CurrentSession", 1); -pref("browser.snapshots.score.IsUserPersisted", 1); -pref("browser.snapshots.score.IsUserRemoved", -10); - -// A set of weights for the snapshot recommendation sources. The suffixes after -// the last decimal map to the keys of `Snapshots.recommendationSources`. -pref("browser.snapshots.source.CommonReferrer", 3); -pref("browser.snapshots.source.Overlapping", 3); -pref("browser.snapshots.source.TimeOfDay", 3); - -// Other preferences affecting snapshots scoring. -pref("browser.snapshots.relevancy.timeOfDayIntervalSeconds", 3600); - -// Expiration days for snapshots. -pref("browser.places.snapshots.expiration.days", 210); -// For user managed snapshots we use more than a year, to support yearly tasks. -pref("browser.places.snapshots.expiration.userManaged.days", 420); +// Turn on interaction measurements in Nightly only +#ifdef NIGHTLY_BUILD + pref("browser.places.interactions.enabled", true); +#endif // If the user has seen the Firefox View feature tour this value reflects // the id of the last screen they saw and whether they completed the tour @@ -2755,16 +2751,69 @@ pref("browser.firefox-view.view-count", 0); // If the user has seen the pdf.js feature tour this value reflects the tour // message id, the id of the last screen they saw, and whether they completed the tour -pref("browser.pdfjs.feature-tour", "{\"message\":\"PDF_JS_FEATURE_TOUR\",\"screen\":\"\",\"complete\":false}"); +pref("browser.pdfjs.feature-tour", "{\"screen\":\"\",\"complete\":false}"); // Enables cookie banner handling in Nightly in Private Browsing Mode. See // StaticPrefList.yaml for a description of the prefs. #ifdef NIGHTLY_BUILD pref("cookiebanners.service.mode.privateBrowsing", 1); - pref("cookiebanners.bannerClicking.enabled", true); #endif -// We only want to enable this pref for Desktop nightlies. -#ifdef NIGHTLY_BUILD - pref("dom.sitepermsaddon-provider.enabled", true); +// Enables the cookie banner desktop UI. +pref("cookiebanners.ui.desktop.enabled", false); + +// Parameters for the swipe-to-navigation icon. +// +// `navigation-icon-{start|end}-position` is the start or the end position of +// the icon movement in response to the user's swipe gesture. `0` means the icon +// positions at the left edge of the browser window. For example on Mac, when +// the user started swipe gesture left to right, the icon appears at a point +// where left side 20px of the icon is outside of the browser window's view. +// +// `navigation-icon-{min|max}-radius` is the minimum or the maximum radius of +// the icon's outer circle size in response to the user's swipe gesture. `-1` +// means that the circle radius never changes. +#ifdef XP_MACOSX + pref("browser.swipe.navigation-icon-start-position", -20); + pref("browser.swipe.navigation-icon-end-position", 0); + pref("browser.swipe.navigation-icon-min-radius", -1); + pref("browser.swipe.navigation-icon-max-radius", -1); +#else + pref("browser.swipe.navigation-icon-start-position", -40); + pref("browser.swipe.navigation-icon-end-position", 60); + pref("browser.swipe.navigation-icon-min-radius", 12); + pref("browser.swipe.navigation-icon-max-radius", 20); #endif + +// Datcord open links in default browser +pref("network.protocol-handler.external.open", true); +pref("network.protocol-handler.warn-external.open", true); +pref("network.protocol-handler.expose.open", false); + +// Other Datcord Settings +pref("permissions.default.camera", 1); +pref("permissions.default.microphone", 1); + +pref("browser.link.open_newwindow", 1); +pref("browser.warnOnQuit", false); +pref("browser.uitour.enabled", false); +pref("browser.privatebrowsing.vpnpromourl", ""); +pref("browser.tabs.inTitlebar", 0); + +pref("browser.startup.upgradeDialog.enabled", false); +pref("browser.startup.firstrunSkipsHomepage", false); +pref("browser.startup.homepage", "https://discord.com/app"); + +pref("browser.shell.setDefaultPDFHandler", false); +pref("browser.shell.setDefaultBrowserUserChoice", false); +pref("browser.shell.checkDefaultBrowser", false); + +pref("browser.urlbar.suggest.bookmark", false); +pref("browser.urlbar.suggest.history", false); +pref("browser.urlbar.suggest.openpage", false); +pref("browser.urlbar.suggest.remotetab", false); +pref("browser.urlbar.suggest.searches", false); +pref("browser.urlbar.suggest.topsites", false); +pref("browser.urlbar.suggest.engines", false); + +pref("xpinstall.signatures.required", false); diff --git a/src/changed/browser/app/profile/firefox.js.bak b/src/changed/browser/app/profile/firefox.js.bak new file mode 100644 index 0000000000..07a6679e7f --- /dev/null +++ b/src/changed/browser/app/profile/firefox.js.bak @@ -0,0 +1,2768 @@ +is:issue is:closed #filter dumbComments emptyLines substitution + +// -*- indent-tabs-mode: nil; js-indent-level: 2 -*- +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +// Non-static prefs that are specific to desktop Firefox belong in this file +// (unless there is a compelling and documented reason for them to belong in +// another file). +// +// Please indent all prefs defined within #ifdef/#ifndef conditions. This +// improves readability, particular for conditional blocks that exceed a single +// screen. + +#ifdef XP_UNIX + #ifndef XP_MACOSX + #define UNIX_BUT_NOT_MAC + #endif +#endif + +// Datcord open links in default browser +pref("network.protocol-handler.external.open", true); +pref("network.protocol-handler.warn-external.open", true); +pref("network.protocol-handler.expose.open", false); + +pref("browser.hiddenWindowChromeURL", "chrome://browser/content/hiddenWindowMac.xhtml"); + +// Enables some extra Extension System Logging (can reduce performance) +pref("extensions.logging.enabled", false); + +// Disables strict compatibility, making addons compatible-by-default. +pref("extensions.strictCompatibility", false); + +// Temporary preference to forcibly make themes more safe with Australis even if +// extensions.checkCompatibility=false has been set. +pref("extensions.checkCompatibility.temporaryThemeOverride_minAppVersion", "29.0a1"); + +pref("extensions.webextOptionalPermissionPrompts", true); +// If enabled, install origin permission verification happens after addons are downloaded. +pref("extensions.postDownloadThirdPartyPrompt", true); + +// Preferences for AMO integration +pref("extensions.getAddons.cache.enabled", true); +pref("extensions.getAddons.get.url", "https://services.addons.mozilla.org/api/v4/addons/search/?guid=%IDS%&lang=%LOCALE%"); +pref("extensions.getAddons.search.browseURL", "https://addons.mozilla.org/%LOCALE%/firefox/search?q=%TERMS%&platform=%OS%&appver=%VERSION%"); +pref("extensions.getAddons.link.url", "https://addons.mozilla.org/%LOCALE%/firefox/"); +pref("extensions.getAddons.langpacks.url", "https://services.addons.mozilla.org/api/v4/addons/language-tools/?app=firefox&type=language&appversion=%VERSION%"); +pref("extensions.getAddons.discovery.api_url", "https://services.addons.mozilla.org/api/v4/discovery/?lang=%LOCALE%&edition=%DISTRIBUTION%"); + +// The URL for the privacy policy related to recommended extensions. +pref("extensions.recommendations.privacyPolicyUrl", "https://www.mozilla.org/privacy/firefox/?utm_source=firefox-browser&utm_medium=firefox-browser&utm_content=privacy-policy-link#addons"); +// The URL for Firefox Color, recommended on the theme page in about:addons. +pref("extensions.recommendations.themeRecommendationUrl", "https://color.firefox.com/?utm_source=firefox-browser&utm_medium=firefox-browser&utm_content=theme-footer-link"); + +pref("extensions.update.autoUpdateDefault", true); + +// Check AUS for system add-on updates. +pref("extensions.systemAddon.update.url", "https://aus5.mozilla.org/update/3/SystemAddons/%VERSION%/%BUILD_ID%/%BUILD_TARGET%/%LOCALE%/%CHANNEL%/%OS_VERSION%/%DISTRIBUTION%/%DISTRIBUTION_VERSION%/update.xml"); +pref("extensions.systemAddon.update.enabled", true); + +// 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); +// Scopes to scan for changes at startup. +pref("extensions.startupScanScopes", 0); + +pref("extensions.geckoProfiler.acceptedExtensionIds", "geckoprofiler@mozilla.com,quantum-foxfooding@mozilla.com,raptor@mozilla.org"); + + +pref("extensions.webextensions.remote", true); + +// Require signed add-ons by default +pref("extensions.langpacks.signatures.required", true); +pref("xpinstall.signatures.required", false); +pref("xpinstall.signatures.devInfoURL", "https://wiki.mozilla.org/Addons/Extension_Signing"); + +// Enable extensionStorage storage actor by default +pref("devtools.storage.extensionStorage.enabled", true); + +// Dictionary download preference +pref("browser.dictionaries.download.url", "https://addons.mozilla.org/%LOCALE%/firefox/language-tools/"); + +// At startup, should we check to see if the installation +// date is older than some threshold +pref("app.update.checkInstallTime", true); + +// The number of days a binary is permitted to be old without checking is defined in +// firefox-branding.js (app.update.checkInstallTime.days) + +// The minimum delay in seconds for the timer to fire between the notification +// of each consumer of the timer manager. +// minimum=30 seconds, default=120 seconds, and maximum=300 seconds +pref("app.update.timerMinimumDelay", 120); + +// The minimum delay in milliseconds for the first firing after startup of the timer +// to notify consumers of the timer manager. +// minimum=10 seconds, default=30 seconds, and maximum=120 seconds +pref("app.update.timerFirstInterval", 30000); + +// App-specific update preferences + +// The interval to check for updates (app.update.interval) is defined in +// firefox-branding.js + +// Enables some extra Application Update Logging (can reduce performance) +pref("app.update.log", false); +// Causes Application Update Logging to be sent to a file in the profile +// directory. This preference is automatically disabled on application start to +// prevent it from being left on accidentally. Turning this pref on enables +// logging, even if app.update.log is false. +pref("app.update.log.file", false); + +// The number of general background check failures to allow before notifying the +// user of the failure. User initiated update checks always notify the user of +// the failure. +pref("app.update.backgroundMaxErrors", 10); + +// Ids of the links to the "What's new" update documentation +pref("app.update.link.updateAvailableWhatsNew", "update-available-whats-new"); +pref("app.update.link.updateManualWhatsNew", "update-manual-whats-new"); + +// How many times we should let downloads fail before prompting the user to +// download a fresh installer. +pref("app.update.download.promptMaxAttempts", 2); + +// How many times we should let an elevation prompt fail before prompting the user to +// download a fresh installer. +pref("app.update.elevation.promptMaxAttempts", 2); + +#ifdef NIGHTLY_BUILD + // Whether to delay popup notifications when an update is available and + // suppress them when an update is installed and waiting for user to restart. + // If set to true, these notifications will immediately be shown as banners in + // the app menu and as badges on the app menu button. Update available + // notifications will not create popup prompts until a week has passed without + // the user installing the update. Update restart notifications will not + // create popup prompts at all. This doesn't affect update notifications + // triggered by errors/failures or manual install prompts. + pref("app.update.suppressPrompts", false); +#endif + +// If set to true, a message will be displayed in the hamburger menu while +// an update is being downloaded. +pref("app.update.notifyDuringDownload", false); + +// If set to true, the Update Service will automatically download updates if the +// user can apply updates. This pref is no longer used on Windows, except as the +// default value to migrate to the new location that this data is now stored +// (which is in a file in the update directory). Because of this, this pref +// should no longer be used directly. Instead, getAppUpdateAutoEnabled and +// getAppUpdateAutoEnabled from UpdateUtils.jsm should be used. +#ifndef XP_WIN + pref("app.update.auto", true); +#endif + +// If set to true, the Update Service will apply updates in the background +// when it finishes downloading them. +pref("app.update.staging.enabled", true); + +// Update service URL: +// app.update.url was removed in Bug 1568994 +// app.update.url.manual is in branding section +// app.update.url.details is in branding section + +// app.update.badgeWaitTime is in branding section +// app.update.interval is in branding section +// app.update.promptWaitTime is in branding section + +// Whether or not to attempt using the service for updates. +#ifdef MOZ_MAINTENANCE_SERVICE + pref("app.update.service.enabled", true); +#endif + +#ifdef MOZ_BITS_DOWNLOAD + // If set to true, the Update Service will attempt to use Windows BITS to + // download updates and will fallback to downloading internally if that fails. + pref("app.update.BITS.enabled", true); +#endif + +pref("app.update.langpack.enabled", true); + +#if defined(MOZ_UPDATE_AGENT) + pref("app.update.background.loglevel", "error"); + pref("app.update.background.timeoutSec", 600); + // By default, check for updates when the browser is not running every 7 hours. + pref("app.update.background.interval", 25200); + // By default, snapshot Firefox Messaging System targeting for use by the + // background update task every 30 minutes. + pref("app.update.background.messaging.targeting.snapshot.intervalSec", 1800); +#endif + +#ifdef XP_MACOSX + // If set to true, Firefox will automatically restart if it is left running + // with no browser windows open. + pref("app.update.noWindowAutoRestart.enabled", true); + // How long to wait after all browser windows are closed before restarting, + // in milliseconds. 5 min = 300000 ms + pref("app.update.noWindowAutoRestart.delayMs", 300000); +#endif + +#if defined(MOZ_BACKGROUNDTASKS) + // The amount of time, in seconds, before background tasks time out and exit. + // Tasks can override this default (10 minutes). + pref("toolkit.backgroundtasks.defaultTimeoutSec", 600); +#endif + +// Symmetric (can be overridden by individual extensions) update preferences. +// e.g. +// extensions.{GUID}.update.enabled +// extensions.{GUID}.update.url +// .. etc .. +// +pref("extensions.update.enabled", true); +pref("extensions.update.url", "https://versioncheck.addons.mozilla.org/update/VersionCheck.php?reqVersion=%REQ_VERSION%&id=%ITEM_ID%&version=%ITEM_VERSION%&maxAppVersion=%ITEM_MAXAPPVERSION%&status=%ITEM_STATUS%&appID=%APP_ID%&appVersion=%APP_VERSION%&appOS=%APP_OS%&appABI=%APP_ABI%&locale=%APP_LOCALE%¤tAppVersion=%CURRENT_APP_VERSION%&updateType=%UPDATE_TYPE%&compatMode=%COMPATIBILITY_MODE%"); +pref("extensions.update.background.url", "https://versioncheck-bg.addons.mozilla.org/update/VersionCheck.php?reqVersion=%REQ_VERSION%&id=%ITEM_ID%&version=%ITEM_VERSION%&maxAppVersion=%ITEM_MAXAPPVERSION%&status=%ITEM_STATUS%&appID=%APP_ID%&appVersion=%APP_VERSION%&appOS=%APP_OS%&appABI=%APP_ABI%&locale=%APP_LOCALE%¤tAppVersion=%CURRENT_APP_VERSION%&updateType=%UPDATE_TYPE%&compatMode=%COMPATIBILITY_MODE%"); +pref("extensions.update.interval", 86400); // Check for updates to Extensions and + // Themes every day + +pref("lightweightThemes.getMoreURL", "https://addons.mozilla.org/%LOCALE%/firefox/themes"); + +#if defined(MOZ_WIDEVINE_EME) + pref("browser.eme.ui.enabled", true); +#else + pref("browser.eme.ui.enabled", false); +#endif + +// UI tour experience. +pref("browser.uitour.enabled", false); +pref("browser.uitour.loglevel", "Error"); +pref("browser.uitour.requireSecure", true); +pref("browser.uitour.themeOrigin", "https://addons.mozilla.org/%LOCALE%/firefox/themes/"); +pref("browser.uitour.url", "https://www.mozilla.org/%LOCALE%/firefox/%VERSION%/tour/"); +// How long to show a Hearbeat survey (two hours, in seconds) +pref("browser.uitour.surveyDuration", 7200); + +pref("keyword.enabled", true); + +// Fixup whitelists, the urlbar won't try to search for these words, but will +// instead consider them valid TLDs. Don't check these directly, use +// Services.uriFixup.isDomainKnown() instead. +pref("browser.fixup.domainwhitelist.localhost", true); +// https://tools.ietf.org/html/rfc2606 +pref("browser.fixup.domainsuffixwhitelist.test", true); +pref("browser.fixup.domainsuffixwhitelist.example", true); +pref("browser.fixup.domainsuffixwhitelist.invalid", true); +pref("browser.fixup.domainsuffixwhitelist.localhost", true); +// https://tools.ietf.org/html/draft-wkumari-dnsop-internal-00 +pref("browser.fixup.domainsuffixwhitelist.internal", true); +// https://tools.ietf.org/html/rfc6762 +pref("browser.fixup.domainsuffixwhitelist.local", true); + +// Whether to always go through the DNS server before sending a single word +// search string, that may contain a valid host, to a search engine. +pref("browser.fixup.dns_first_for_single_words", false); + +#ifdef UNIX_BUT_NOT_MAC + pref("general.autoScroll", false); +#else + pref("general.autoScroll", true); +#endif + +// UI density of the browser chrome. This mostly affects toolbarbutton +// and urlbar spacing. The possible values are 0=normal, 1=compact, 2=touch. +pref("browser.uidensity", 0); +// Whether Firefox will automatically override the uidensity to "touch" +// while the user is in a touch environment (such as Windows tablet mode). +pref("browser.touchmode.auto", true); +// Whether Firefox will show the Compact Mode UIDensity option. +pref("browser.compactmode.show", false); + +// At startup, check if we're the default browser and prompt user if not. +pref("browser.shell.checkDefaultBrowser", false); +pref("browser.shell.shortcutFavicons",true); +pref("browser.shell.mostRecentDateSetAsDefault", ""); +pref("browser.shell.skipDefaultBrowserCheckOnFirstRun", true); +pref("browser.shell.didSkipDefaultBrowserCheckOnFirstRun", false); +pref("browser.shell.defaultBrowserCheckCount", 0); +#if defined(XP_WIN) +// Attempt to set the default browser on Windows 10 using the UserChoice registry keys, +// before falling back to launching the modern Settings dialog. +pref("browser.shell.setDefaultBrowserUserChoice", false); +// When setting the default browser on Windows 10 using the UserChoice +// registry keys, also try to set Firefox as the default PDF handler. +pref("browser.shell.setDefaultPDFHandler", false); +// When setting Firefox as the default PDF handler (subject to conditions +// above), only set Firefox as the default PDF handler when the existing handler +// is a known browser, and not when existing handler is another PDF handler such +// as Acrobat Reader or Nitro PDF. +pref("browser.shell.setDefaultPDFHandler.onlyReplaceBrowsers", true); +#endif + + +// 0 = blank, 1 = home (browser.startup.homepage), 2 = last visited page, 3 = resume previous browser session +// The behavior of option 3 is detailed at: http://wiki.mozilla.org/Session_Restore +pref("browser.startup.page", 1); +pref("browser.startup.homepage", "https://discord.com/app"); +#ifdef NIGHTLY_BUILD +pref("browser.startup.homepage.abouthome_cache.enabled", true); +#else +pref("browser.startup.homepage.abouthome_cache.enabled", false); +#endif +pref("browser.startup.homepage.abouthome_cache.loglevel", "Warn"); + +// Whether we should skip the homepage when opening the first-run page +pref("browser.startup.firstrunSkipsHomepage", false); + +// Whether we should show the session-restore infobar on startup +pref("browser.startup.couldRestoreSession.count", 0); + +// Show an about:blank window as early as possible for quick startup feedback. +// Held to nightly on Linux due to bug 1450626. +// Disabled on Mac because the bouncing dock icon already provides feedback. +#if defined(XP_WIN) || defined(MOZ_WIDGET_GTK) && defined(NIGHTLY_BUILD) + pref("browser.startup.blankWindow", true); +#else + pref("browser.startup.blankWindow", false); +#endif + +// Show a skeleton UI window prior to loading libxul. Only visible for windows +// users as it is not implemented anywhere else. +#if defined(XP_WIN) +pref("browser.startup.preXulSkeletonUI", true); +#endif + +// Show an upgrade dialog on major upgrades. +pref("browser.startup.upgradeDialog.enabled", false); + +// Don't create the hidden window during startup on +// platforms that don't always need it (Win/Linux). +pref("toolkit.lazyHiddenWindow", true); + +pref("browser.chrome.site_icons", true); +// browser.warnOnQuit == false will override all other possible prompts when quitting or restarting +pref("browser.warnOnQuit", false); + +// Whether to warn when quitting when using the shortcut key. +#if defined(XP_WIN) + pref("browser.warnOnQuitShortcut", false); +#else + pref("browser.warnOnQuitShortcut", true); +#endif + +// TODO bug 1702563: Renable fullscreen autohide by default on macOS. +#ifdef XP_MACOSX + pref("browser.fullscreen.autohide", false); +#else + pref("browser.fullscreen.autohide", true); +#endif + +pref("browser.overlink-delay", 80); + +pref("browser.theme.colorway-closet", true); + +// Whether using `ctrl` when hitting return/enter in the URL bar +// (or clicking 'go') should prefix 'www.' and suffix +// browser.fixup.alternate.suffix to the URL bar value prior to +// navigating. +pref("browser.urlbar.ctrlCanonizesURLs", true); + +// Whether we announce to screen readers when tab-to-search results are +// inserted. +pref("browser.urlbar.accessibility.tabToSearch.announceResults", true); + +// Control autoFill behavior +pref("browser.urlbar.autoFill", true); + +// Whether enabling adaptive history autofill. +pref("browser.urlbar.autoFill.adaptiveHistory.enabled", false); + +// Minimum char length of the user's search string to enable adaptive history +// autofill. +pref("browser.urlbar.autoFill.adaptiveHistory.minCharsThreshold", 0); + +// Whether to warm up network connections for autofill or search results. +pref("browser.urlbar.speculativeConnect.enabled", true); + +// Whether bookmarklets should be filtered out of Address Bar matches. +// This is enabled for security reasons, when true it is still possible to +// search for bookmarklets typing "javascript: " followed by the actual query. +pref("browser.urlbar.filter.javascript", true); + +// Enable a certain level of urlbar logging to the Browser Console. See Log.jsm. +pref("browser.urlbar.loglevel", "Error"); + +// the maximum number of results to show in autocomplete when doing richResults +pref("browser.urlbar.maxRichResults", 10); + +// The maximum number of historical search results to show. +pref("browser.urlbar.maxHistoricalSearchSuggestions", 2); + +// The default behavior for the urlbar can be configured to use any combination +// of the match filters with each additional filter adding more results (union). +pref("browser.urlbar.suggest.bookmark", false); +pref("browser.urlbar.suggest.history", false); +pref("browser.urlbar.suggest.openpage", false); +pref("browser.urlbar.suggest.remotetab", false); +pref("browser.urlbar.suggest.searches", false); +pref("browser.urlbar.suggest.topsites", false); +pref("browser.urlbar.suggest.engines", false); +pref("browser.urlbar.suggest.calculator", false); + +#if defined(EARLY_BETA_OR_EARLIER) + // Enable QuickActions and its urlbar search mode button. + pref("browser.urlbar.quickactions.enabled", true); + pref("browser.urlbar.suggest.quickactions", true); + pref("browser.urlbar.shortcuts.quickactions", true); + pref("browser.urlbar.quickactions.showPrefs", true); + pref("browser.urlbar.quickactions.showInZeroPrefix", true); +#endif + +// When `browser.urlbar.bestMatch.enabled` is true, this controls whether best +// match results are shown in the urlbar. This pref is exposed to the user in +// the UI, and it's sticky so that its user-branch value persists regardless of +// whatever Firefox Suggest experiments or rollouts the user is enrolled in over +// time. +pref("browser.urlbar.suggest.bestmatch", true, sticky); + +// Whether non-sponsored quick suggest results are shown in the urlbar. This +// pref is exposed to the user in the UI, and it's sticky so that its +// user-branch value persists regardless of whatever Firefox Suggest scenarios, +// with their various default-branch values, the user is enrolled in over time. +pref("browser.urlbar.suggest.quicksuggest.nonsponsored", false, sticky); + +// Whether sponsored quick suggest results are shown in the urlbar. This pref is +// exposed to the user in the UI, and it's sticky so that its user-branch value +// persists regardless of whatever Firefox Suggest scenarios, with their various +// default-branch values, the user is enrolled in over time. +pref("browser.urlbar.suggest.quicksuggest.sponsored", false, sticky); + +// Whether data collection is enabled for quick suggest results in the urlbar. +// This pref is exposed to the user in the UI, and it's sticky so that its +// user-branch value persists regardless of whatever Firefox Suggest scenarios, +// with their various default-branch values, the user is enrolled in over time. +pref("browser.urlbar.quicksuggest.dataCollection.enabled", false, sticky); + +// Whether the quick suggest feature in the urlbar is enabled. +pref("browser.urlbar.quicksuggest.enabled", false); + +// Whether to show the QuickSuggest onboarding dialog. +pref("browser.urlbar.quicksuggest.shouldShowOnboardingDialog", true); + +// Show QuickSuggest onboarding dialog on the nth browser restarts. +pref("browser.urlbar.quicksuggest.showOnboardingDialogAfterNRestarts", 0); + +// The indexes of the sponsored and non-sponsored quick suggest results within +// the general results group. +pref("browser.urlbar.quicksuggest.sponsoredIndex", -1); +pref("browser.urlbar.quicksuggest.nonSponsoredIndex", -1); + +// Whether Remote Settings is enabled as a quick suggest source. +pref("browser.urlbar.quicksuggest.remoteSettings.enabled", true); + +// Whether quick suggest results can be shown in position specified in the +// suggestions. +pref("browser.urlbar.quicksuggest.allowPositionInSuggestions", true); + +// Whether non-sponsored quick suggest results are subject to impression +// frequency caps. +pref("browser.urlbar.quicksuggest.impressionCaps.nonSponsoredEnabled", false); + +// Whether sponsored quick suggest results are subject to impression frequency +// caps. +pref("browser.urlbar.quicksuggest.impressionCaps.sponsoredEnabled", false); + +// Whether the usual non-best-match quick suggest results can be blocked. This +// pref is a fallback for the Nimbus variable `quickSuggestBlockingEnabled`. +pref("browser.urlbar.quicksuggest.blockingEnabled", false); + +// Whether unit conversion is enabled. +#ifdef NIGHTLY_BUILD +pref("browser.urlbar.unitConversion.enabled", true); +#else +pref("browser.urlbar.unitConversion.enabled", false); +#endif + +// Whether to show search suggestions before general results like history and +// bookmarks. +pref("browser.urlbar.showSearchSuggestionsFirst", true); + +// As a user privacy measure, don't fetch search suggestions if a pasted string +// is longer than this. +pref("browser.urlbar.maxCharsForSearchSuggestions", 100); + +pref("browser.urlbar.trimURLs", true); + +// If changed to true, copying the entire URL from the location bar will put the +// human readable (percent-decoded) URL on the clipboard. +pref("browser.urlbar.decodeURLsOnCopy", false); + +// Whether or not to move tabs into the active window when using the "Switch to +// Tab" feature of the awesomebar. +pref("browser.urlbar.switchTabs.adoptIntoActiveWindow", false); + +// Whether addresses and search results typed into the address bar +// should be opened in new tabs by default. +pref("browser.urlbar.openintab", false); + +// If true, we show tail suggestions when available. +pref("browser.urlbar.richSuggestions.tail", true); + +// If true, top sites may include sponsored ones. +pref("browser.urlbar.sponsoredTopSites", false); + +// If true, show the search term in the URL bar for the users default engine. +pref("browser.urlbar.showSearchTerms", false); + +// Controls the empty search behavior in Search Mode: +// 0 - Show nothing +// 1 - Show search history +// 2 - Show search and browsing history +pref("browser.urlbar.update2.emptySearchBehavior", 0); + +// Whether the urlbar displays one-offs to filter searches to history, +// bookmarks, or tabs. +pref("browser.urlbar.shortcuts.bookmarks", true); +pref("browser.urlbar.shortcuts.tabs", true); +pref("browser.urlbar.shortcuts.history", true); + +pref("browser.urlbar.eventTelemetry.enabled", false); + +// When we send events to Urlbar extensions, we wait this amount of time in +// milliseconds for them to respond before timing out. +pref("browser.urlbar.extension.timeout", 400); + +// Controls when to DNS resolve single word search strings, after they were +// searched for. If the string is resolved as a valid host, show a +// "Did you mean to go to 'host'" prompt. +// 0 - never resolve; 1 - use heuristics (default); 2 - always resolve +pref("browser.urlbar.dnsResolveSingleWordsAfterSearch", 0); + +// Whether the results panel should be kept open during IME composition. +// The default value is false because some IME open a picker panel, and we end +// up with two panels on top of each other. Since for now we can't detect that +// we leave this choice to the user, hopefully in the future this can be flipped +// for everyone. +pref("browser.urlbar.keepPanelOpenDuringImeComposition", false); + +// Whether Firefox Suggest group labels are shown in the urlbar view. +pref("browser.urlbar.groupLabels.enabled", true); + +// Whether Merino is enabled as a quick suggest source in the urlbar. +pref("browser.urlbar.merino.enabled", true); + +// The Merino endpoint URL, not including parameters. +pref("browser.urlbar.merino.endpointURL", "https://merino.services.mozilla.com/api/v1/suggest"); + +// Timeout for Merino fetches (ms). +pref("browser.urlbar.merino.timeoutMs", 200); + +// Comma-separated list of providers to request from Merino +pref("browser.urlbar.merino.providers", ""); + +// Comma-separated list of client variants to send to Merino +pref("browser.urlbar.merino.clientVariants", ""); + +// Whether the best match feature in the urlbar is enabled. +pref("browser.urlbar.bestMatch.enabled", false); + +// Whether best match results can be blocked. This pref is a fallback for the +// Nimbus variable `bestMatchBlockingEnabled`. +pref("browser.urlbar.bestMatch.blockingEnabled", false); + +pref("browser.altClickSave", false); + +// Enable logging downloads operations to the Console. +pref("browser.download.loglevel", "Error"); + +// Number of milliseconds to wait for the http headers (and thus +// the Content-Disposition filename) before giving up and falling back to +// picking a filename without that info in hand so that the user sees some +// feedback from their action. +pref("browser.download.saveLinkAsFilenameTimeout", 4000); + +pref("browser.download.useDownloadDir", true); +pref("browser.download.folderList", 1); +pref("browser.download.manager.addToRecentDocs", true); +pref("browser.download.manager.resumeOnWakeDelay", 10000); + +// This allows disabling the animated notifications shown by +// the Downloads Indicator when a download starts or completes. +pref("browser.download.animateNotifications", true); + +// This records whether or not the panel has been shown at least once. +pref("browser.download.panel.shown", false); + +// This records whether or not to show the 'Open in system viewer' context menu item when appropriate +pref("browser.download.openInSystemViewerContextMenuItem", true); + +// This records whether or not to show the 'Always open...' context menu item when appropriate +pref("browser.download.alwaysOpenInSystemViewerContextMenuItem", true); + +// Open downloaded file types internally for the given types. +// This is a comma-separated list, the empty string ("") means no types are +// viewable internally. +pref("browser.download.viewableInternally.enabledTypes", "xml,svg,webp,avif,jxl"); + + +// This controls whether the button is automatically shown/hidden depending +// on whether there are downloads to show. +pref("browser.download.autohideButton", true); + +// Controls whether to open the downloads panel every time a download begins. +// The first download ever run in a new profile will still open the panel. +pref("browser.download.alwaysOpenPanel", true); + +// Determines the behavior of the "Delete" item in the downloads context menu. +// Valid values are 0, 1, and 2. +// 0 - Don't remove the download from session list or history. +// 1 - Remove the download from session list, but not history. +// 2 - Remove the download from both session list and history. +pref("browser.download.clearHistoryOnDelete", 0); + +#ifndef XP_MACOSX + pref("browser.helperApps.deleteTempFileOnExit", true); +#endif + +// This controls the visibility of the radio button in the +// Unknown Content Type (Helper App) dialog that will open +// the content in the browser for PDF and for other +// Viewable Internally types +// (see browser.download.viewableInternally.enabledTypes) +pref("browser.helperApps.showOpenOptionForPdfJS", true); +pref("browser.helperApps.showOpenOptionForViewableInternally", true); + +// search engine removal URL +pref("browser.search.searchEngineRemoval", "https://support.mozilla.org/1/firefox/%VERSION%/%OS%/%LOCALE%/search-engine-removal"); + +// search engines URL +pref("browser.search.searchEnginesURL", "https://addons.mozilla.org/%LOCALE%/firefox/search-engines/"); + +// search bar results always open in a new tab +pref("browser.search.openintab", false); + +// context menu searches open in the foreground +pref("browser.search.context.loadInBackground", false); + +// comma separated list of of engines to hide in the search panel. +pref("browser.search.hiddenOneOffs", ""); + +// Mirrors whether the search-container widget is in the navigation toolbar. +pref("browser.search.widget.inNavBar", false); + +// Enables display of the options for the user using a separate default search +// engine in private browsing mode. +pref("browser.search.separatePrivateDefault.ui.enabled", false); +// The maximum amount of times the private default banner is shown. +pref("browser.search.separatePrivateDefault.ui.banner.max", 0); + +// Enables the display of the Mozilla VPN banner in private browsing windows +pref("browser.privatebrowsing.vpnpromourl", ""); + +// Enables the new private browsing indicator. +pref("browser.privatebrowsing.enable-new-indicator", true); + +// Enables the new about:privatebrowsing logo. +pref("browser.privatebrowsing.enable-new-logo", true); + +// Whether the user has opted-in to recommended settings for data features. +pref("browser.dataFeatureRecommendations.enabled", false); + +// Temporary pref to control whether or not Private Browsing windows show up +// as separate icons in the Windows taskbar. +pref("browser.privateWindowSeparation.enabled", true); + +// Use dark theme variant for PBM windows. This is only supported if the theme +// sets darkTheme data. +pref("browser.theme.dark-private-windows", true); + +// Controls visibility of the privacy segmentation preferences section. +pref("browser.privacySegmentation.preferences.show", false); + +pref("browser.sessionhistory.max_entries", 50); + +// Built-in default permissions. +pref("permissions.manager.defaultsUrl", "resource://app/defaults/permissions"); + +// Set default fallback values for site permissions we want +// the user to be able to globally change. +pref("permissions.default.camera", 1); +pref("permissions.default.microphone", 1); +pref("permissions.default.geo", 0); +pref("permissions.default.xr", 0); +pref("permissions.default.desktop-notification", 0); +pref("permissions.default.shortcuts", 0); + +pref("permissions.desktop-notification.postPrompt.enabled", true); +pref("permissions.desktop-notification.notNow.enabled", false); + +pref("permissions.fullscreen.allowed", true); + +// handle links targeting new windows +// 1=current window/tab, 2=new window, 3=new tab in most recent window +pref("browser.link.open_newwindow", 1); + +// handle external links (i.e. links opened from a different application) +// default: use browser.link.open_newwindow +// 1-3: see browser.link.open_newwindow for interpretation +pref("browser.link.open_newwindow.override.external", -1); + +// 0: no restrictions - divert everything +// 1: don't divert window.open at all +// 2: don't divert window.open with features +pref("browser.link.open_newwindow.restriction", 2); + +// If true, this pref causes windows opened by window.open to be forced into new +// tabs (rather than potentially opening separate windows, depending on +// window.open arguments) when the browser is in fullscreen mode. +// We set this differently on Mac because the fullscreen implementation there is +// different. +#ifdef XP_MACOSX + pref("browser.link.open_newwindow.disabled_in_fullscreen", true); +#else + pref("browser.link.open_newwindow.disabled_in_fullscreen", false); +#endif + +// Tabbed browser +pref("browser.tabs.closeTabByDblclick", false); +pref("browser.tabs.closeWindowWithLastTab", true); +pref("browser.tabs.allowTabDetach", true); +// Open related links to a tab, e.g., link in current tab, at next to the +// current tab if |insertRelatedAfterCurrent| is true. Otherwise, always +// append new tab to the end. +pref("browser.tabs.insertRelatedAfterCurrent", true); +// Open all links, e.g., bookmarks, history items at next to current tab +// if |insertAfterCurrent| is true. Otherwise, append new tab to the end +// for non-related links. Note that if this is set to true, it will trump +// the value of browser.tabs.insertRelatedAfterCurrent. +pref("browser.tabs.insertAfterCurrent", false); +pref("browser.tabs.warnOnClose", false); +pref("browser.tabs.warnOnCloseOtherTabs", true); +pref("browser.tabs.warnOnOpen", true); +pref("browser.tabs.maxOpenBeforeWarn", 15); +pref("browser.tabs.loadInBackground", true); +pref("browser.tabs.opentabfor.middleclick", true); +pref("browser.tabs.loadDivertedInBackground", false); +pref("browser.tabs.loadBookmarksInBackground", false); +pref("browser.tabs.loadBookmarksInTabs", false); +pref("browser.tabs.tabClipWidth", 140); +pref("browser.tabs.tabMinWidth", 76); +// Users running in any of the following language codes will have the +// secondary text on tabs hidden due to size constraints and readability +// of the text at small font sizes. +pref("browser.tabs.secondaryTextUnsupportedLocales", "ar,bn,bo,ckb,fa,gu,he,hi,ja,km,kn,ko,lo,mr,my,ne,pa,si,ta,te,th,ur,zh"); + +//Control the visibility of Tab Manager Menu. +pref("browser.tabs.tabmanager.enabled", true); + +// When tabs opened by links in other tabs via a combination of +// browser.link.open_newwindow being set to 3 and target="_blank" etc are +// closed: +// true return to the tab that opened this tab (its owner) +// false return to the adjacent tab (old default) +pref("browser.tabs.selectOwnerOnClose", true); + +// This should match Chromium's audio indicator delay. +pref("browser.tabs.delayHidingAudioPlayingIconMS", 3000); + +// Pref to control whether we use a separate privileged content process +// for about: pages. This pref name did not age well: we will have multiple +// types of privileged content processes, each with different privileges. +// types of privleged content processes, each with different privleges. +pref("browser.tabs.remote.separatePrivilegedContentProcess", true); + +#if defined(NIGHTLY_BUILD) && !defined(MOZ_ASAN) + // This pref will cause assertions when a remoteType triggers a process switch + // to a new remoteType it should not be able to trigger. + pref("browser.tabs.remote.enforceRemoteTypeRestrictions", true); +#endif + +// Pref to control whether we use a separate privileged content process +// for certain mozilla webpages (which are listed in the pref +// browser.tabs.remote.separatedMozillaDomains). +pref("browser.tabs.remote.separatePrivilegedMozillaWebContentProcess", true); + +#ifdef NIGHTLY_BUILD +pref("browser.tabs.tooltipsShowPidAndActiveness", true); +#else +pref("browser.tabs.tooltipsShowPidAndActiveness", false); +#endif + +pref("browser.tabs.firefox-view", true); +pref("browser.tabs.firefox-view.logLevel", "Warn"); +pref("browser.tabs.firefox-view.notify-for-tabs", false); + +// allow_eval_* is enabled on Firefox Desktop only at this +// point in time +pref("security.allow_eval_with_system_principal", false); +pref("security.allow_eval_in_parent_process", false); + +pref("security.allow_parent_unrestricted_js_loads", false); + +// Unload tabs when available memory is running low +#if defined(XP_MACOSX) || defined(XP_WIN) + pref("browser.tabs.unloadOnLowMemory", true); +#else + pref("browser.tabs.unloadOnLowMemory", false); +#endif + +// Tab Unloader does not unload tabs whose last inactive period is longer than +// this value (in milliseconds). +pref("browser.tabs.min_inactive_duration_before_unload", 600000); + +#if defined(XP_MACOSX) + // During low memory periods, poll with this frequency (milliseconds) + // until memory is no longer low. Changes to the pref take effect immediately. + // Browser restart not required. Chosen to be consistent with the windows + // implementation, but otherwise the 10s value is arbitrary. + pref("browser.lowMemoryPollingIntervalMS", 10000); + + // Pref to control the reponse taken on macOS when the OS is under memory + // pressure. Changes to the pref take effect immediately. Browser restart not + // required. The pref value is a bitmask: + // 0x0: No response (other than recording for telemetry, crash reporting) + // 0x1: Use the tab unloading feature to reduce memory use. Requires that + // the above "browser.tabs.unloadOnLowMemory" pref be set to true for tab + // unloading to occur. + // 0x2: Issue the internal "memory-pressure" notification to reduce memory use + // 0x3: Both 0x1 and 0x2. + #if defined(NIGHTLY_BUILD) + pref("browser.lowMemoryResponseMask", 3); + #else + pref("browser.lowMemoryResponseMask", 0); + #endif + + // Controls which macOS memory-pressure level triggers the browser low memory + // response. Changes to the pref take effect immediately. Browser restart not + // required. By default, use the "critical" level as that occurs after "warn" + // and we only want to trigger the low memory reponse when necessary. + // The macOS system memory-pressure level is either none, "warn", or + // "critical". The OS notifies the browser when the level changes. A false + // value for the pref indicates the low memory response should occur when + // reaching the "critical" level. A true value indicates the response should + // occur when reaching the "warn" level. + pref("browser.lowMemoryResponseOnWarn", false); +#endif + +pref("browser.ctrlTab.sortByRecentlyUsed", false); + +// By default, do not export HTML at shutdown. +// If true, at shutdown the bookmarks in your menu and toolbar will +// be exported as HTML to the bookmarks.html file. +pref("browser.bookmarks.autoExportHTML", false); + +// The maximum number of daily bookmark backups to +// keep in {PROFILEDIR}/bookmarkbackups. Special values: +// -1: unlimited +// 0: no backups created (and deletes all existing backups) +pref("browser.bookmarks.max_backups", 15); + +// Whether menu should close after Ctrl-click, middle-click, etc. +pref("browser.bookmarks.openInTabClosesMenu", true); + +// Where new bookmarks go by default. +// Use PlacesUIUtils.defaultParentGuid to read this; do NOT read the pref +// directly. +// The value is one of: +// - a bookmarks guid +// - "toolbar", "menu" or "unfiled" for those folders. +// If we use the pref but the value isn't any of these, we'll fall back to +// the bookmarks toolbar as a default. +pref("browser.bookmarks.defaultLocation", "toolbar"); + +// Scripts & Windows prefs +pref("dom.disable_open_during_load", true); + +// allow JS to move and resize existing windows +pref("dom.disable_window_move_resize", false); +// prevent JS from monkeying with window focus, etc +pref("dom.disable_window_flip", true); + +// popups.policy 1=allow,2=reject +pref("privacy.popups.policy", 1); +pref("privacy.popups.usecustom", true); +pref("privacy.popups.showBrowserMessage", true); + +pref("privacy.item.cookies", false); + +pref("privacy.clearOnShutdown.history", true); +pref("privacy.clearOnShutdown.formdata", true); +pref("privacy.clearOnShutdown.downloads", true); +pref("privacy.clearOnShutdown.cookies", true); +pref("privacy.clearOnShutdown.cache", true); +pref("privacy.clearOnShutdown.sessions", true); +pref("privacy.clearOnShutdown.offlineApps", false); +pref("privacy.clearOnShutdown.siteSettings", false); +pref("privacy.clearOnShutdown.openWindows", false); + +pref("privacy.cpd.history", true); +pref("privacy.cpd.formdata", true); +pref("privacy.cpd.passwords", false); +pref("privacy.cpd.downloads", true); +pref("privacy.cpd.cookies", true); +pref("privacy.cpd.cache", true); +pref("privacy.cpd.sessions", true); +pref("privacy.cpd.offlineApps", false); +pref("privacy.cpd.siteSettings", false); +pref("privacy.cpd.openWindows", false); + +pref("privacy.history.custom", false); + +// What default should we use for the time span in the sanitizer: +// 0 - Clear everything +// 1 - Last Hour +// 2 - Last 2 Hours +// 3 - Last 4 Hours +// 4 - Today +// 5 - Last 5 minutes +// 6 - Last 24 hours +pref("privacy.sanitize.timeSpan", 1); + +pref("privacy.sanitize.migrateFx3Prefs", false); + +pref("privacy.panicButton.enabled", true); + +// Time until temporary permissions expire, in ms +pref("privacy.temporary_permission_expire_time_ms", 3600000); + +pref("network.proxy.share_proxy_settings", false); // use the same proxy settings for all protocols + +// simple gestures support +pref("browser.gesture.swipe.left", "Browser:BackOrBackDuplicate"); +pref("browser.gesture.swipe.right", "Browser:ForwardOrForwardDuplicate"); +pref("browser.gesture.swipe.up", "cmd_scrollTop"); +pref("browser.gesture.swipe.down", "cmd_scrollBottom"); +pref("browser.gesture.pinch.latched", false); +pref("browser.gesture.pinch.threshold", 25); +#if defined(XP_WIN) || defined(MOZ_WIDGET_GTK) + // Enabled for touch input display zoom. + pref("browser.gesture.pinch.out", "cmd_fullZoomEnlarge"); + pref("browser.gesture.pinch.in", "cmd_fullZoomReduce"); + pref("browser.gesture.pinch.out.shift", "cmd_fullZoomReset"); + pref("browser.gesture.pinch.in.shift", "cmd_fullZoomReset"); +#else + // Disabled by default due to issues with track pad input. + pref("browser.gesture.pinch.out", ""); + pref("browser.gesture.pinch.in", ""); + pref("browser.gesture.pinch.out.shift", ""); + pref("browser.gesture.pinch.in.shift", ""); +#endif +pref("browser.gesture.twist.latched", false); +pref("browser.gesture.twist.threshold", 0); +pref("browser.gesture.twist.right", "cmd_gestureRotateRight"); +pref("browser.gesture.twist.left", "cmd_gestureRotateLeft"); +pref("browser.gesture.twist.end", "cmd_gestureRotateEnd"); +#if defined(XP_WIN) || defined(MOZ_WIDGET_GTK) + pref("browser.gesture.tap", "cmd_fullZoomReset"); +#else + pref("browser.gesture.tap", ""); +#endif + +pref("browser.history_swipe_animation.disabled", false); + +// 0: Nothing happens +// 1: Scrolling contents +// 2: Go back or go forward, in your history +// 3: Zoom in or out (reflowing zoom). +// 4: Treat vertical wheel as horizontal scroll +// 5: Zoom in or out (pinch zoom). +#ifdef XP_MACOSX + // On macOS, if the wheel has one axis only, shift+wheel comes through as a + // horizontal scroll event. Thus, we can't assign anything other than normal + // scrolling to shift+wheel. + pref("mousewheel.with_shift.action", 1); + pref("mousewheel.with_alt.action", 2); + // On MacOS X, control+wheel is typically handled by system and we don't + // receive the event. So, command key which is the main modifier key for + // acceleration is the best modifier for zoom-in/out. However, we should keep + // the control key setting for backward compatibility. + pref("mousewheel.with_meta.action", 3); // command key on Mac + // Disable control-/meta-modified horizontal wheel events, since those are + // used on Mac as part of modified swipe gestures (e.g. Left swipe+Cmd is + // "go back" in a new tab). + pref("mousewheel.with_control.action.override_x", 0); + pref("mousewheel.with_meta.action.override_x", 0); +#else + // On the other platforms (non-macOS), user may use legacy mouse which + // supports only vertical wheel but want to scroll horizontally. For such + // users, we should provide horizontal scroll with shift+wheel (same as + // Chrome). However, shift+wheel was used for navigating history. For users + // who want to keep using this feature, let's enable it with alt+wheel. This + // is better for consistency with macOS users. + pref("mousewheel.with_shift.action", 4); + pref("mousewheel.with_alt.action", 2); + pref("mousewheel.with_meta.action", 1); // win key on Win, Super/Hyper on Linux +#endif +pref("mousewheel.with_control.action",3); +pref("mousewheel.with_win.action", 1); + +pref("browser.xul.error_pages.expert_bad_cert", false); +pref("browser.xul.error_pages.show_safe_browsing_details_on_load", false); + +// Enable captive portal detection. +pref("network.captive-portal-service.enabled", true); + +// If true, network link events will change the value of navigator.onLine +pref("network.manage-offline-status", true); + +// We want to make sure mail URLs are handled externally... +pref("network.protocol-handler.external.mailto", true); // for mail +pref("network.protocol-handler.external.news", true); // for news +pref("network.protocol-handler.external.snews", true); // for secure news +pref("network.protocol-handler.external.nntp", true); // also news +#ifdef XP_WIN + pref("network.protocol-handler.external.ms-windows-store", true); +#endif + +// ...without warning dialogs +pref("network.protocol-handler.warn-external.mailto", false); +pref("network.protocol-handler.warn-external.news", false); +pref("network.protocol-handler.warn-external.snews", false); +pref("network.protocol-handler.warn-external.nntp", false); +#ifdef XP_WIN + pref("network.protocol-handler.warn-external.ms-windows-store", false); +#endif + +// By default, all protocol handlers are exposed. This means that +// the browser will respond to openURL commands for all URL types. +// It will also try to open link clicks inside the browser before +// failing over to the system handlers. +pref("network.protocol-handler.expose-all", true); +pref("network.protocol-handler.expose.mailto", false); +pref("network.protocol-handler.expose.news", false); +pref("network.protocol-handler.expose.snews", false); +pref("network.protocol-handler.expose.nntp", false); + +pref("accessibility.typeaheadfind", false); +pref("accessibility.typeaheadfind.timeout", 5000); +pref("accessibility.typeaheadfind.linksonly", false); +pref("accessibility.typeaheadfind.flashBar", 1); + +pref("plugins.testmode", false); + +// Should plugins that are hidden show the infobar UI? +pref("plugins.show_infobar", false); + +#if defined(_ARM64_) && defined(XP_WIN) + pref("plugin.default.state", 0); +#else + pref("plugin.default.state", 1); +#endif + +// Prefer HTML5 video over Flash content, and don't +// load plugin instances with no src declared. +// These prefs are documented in details on all.js. +// With the "follow-ctp" setting, this will only +// apply to users that have plugin.state.flash = 1. +pref("plugins.favorfallback.mode", "follow-ctp"); +pref("plugins.favorfallback.rules", "nosrc,video"); + +// Toggling Search bar on and off in about:preferences +pref("browser.preferences.search", true); +#if defined(NIGHTLY_BUILD) +pref("browser.preferences.experimental", true); +#else +pref("browser.preferences.experimental", false); +#endif +pref("browser.preferences.moreFromMozilla", true); +pref("browser.preferences.experimental.hidden", false); +pref("browser.preferences.defaultPerformanceSettings.enabled", true); + +pref("browser.proton.toolbar.version", 0); + +// Backspace and Shift+Backspace behavior +// 0 goes Back/Forward +// 1 act like PgUp/PgDown +// 2 and other values, nothing +pref("browser.backspace_action", 2); + +pref("intl.regional_prefs.use_os_locales", false); + +// this will automatically enable inline spellchecking (if it is available) for +// editable elements in HTML +// 0 = spellcheck nothing +// 1 = check multi-line controls [default] +// 2 = check multi/single line controls +pref("layout.spellcheckDefault", 1); + +pref("browser.send_pings", false); + +pref("browser.geolocation.warning.infoURL", "https://www.mozilla.org/%LOCALE%/firefox/geolocation/"); +pref("browser.xr.warning.infoURL", "https://www.mozilla.org/%LOCALE%/firefox/xr/"); + +pref("browser.sessionstore.resume_from_crash", true); +pref("browser.sessionstore.resume_session_once", false); +pref("browser.sessionstore.resuming_after_os_restart", false); + +// Minimal interval between two save operations in milliseconds (while the user is idle). +pref("browser.sessionstore.interval.idle", 3600000); // 1h + +// Time (ms) before we assume that the user is idle and that we don't need to +// collect/save the session quite as often. +pref("browser.sessionstore.idleDelay", 180000); // 3 minutes + +// on which sites to save text data, POSTDATA and cookies +// 0 = everywhere, 1 = unencrypted sites, 2 = nowhere +pref("browser.sessionstore.privacy_level", 0); +// how many tabs can be reopened (per window) +pref("browser.sessionstore.max_tabs_undo", 25); +// how many windows can be reopened (per session) - on non-OS X platforms this +// pref may be ignored when dealing with pop-up windows to ensure proper startup +pref("browser.sessionstore.max_windows_undo", 3); +// number of crashes that can occur before the about:sessionrestore page is displayed +// (this pref has no effect if more than 6 hours have passed since the last crash) +pref("browser.sessionstore.max_resumed_crashes", 1); +// number of back button session history entries to restore (-1 = all of them) +pref("browser.sessionstore.max_serialize_back", 10); +// number of forward button session history entries to restore (-1 = all of them) +pref("browser.sessionstore.max_serialize_forward", -1); +// restore_on_demand overrides MAX_CONCURRENT_TAB_RESTORES (sessionstore constant) +// and restore_hidden_tabs. When true, tabs will not be restored until they are +// focused (also applies to tabs that aren't visible). When false, the values +// for MAX_CONCURRENT_TAB_RESTORES and restore_hidden_tabs are respected. +// Selected tabs are always restored regardless of this pref. +pref("browser.sessionstore.restore_on_demand", true); +// Whether to automatically restore hidden tabs (i.e., tabs in other tab groups) or not +pref("browser.sessionstore.restore_hidden_tabs", false); +// If restore_on_demand is set, pinned tabs are restored on startup by default. +// When set to true, this pref overrides that behavior, and pinned tabs will only +// be restored when they are focused. +pref("browser.sessionstore.restore_pinned_tabs_on_demand", false); +// The version at which we performed the latest upgrade backup +pref("browser.sessionstore.upgradeBackup.latestBuildID", ""); +// How many upgrade backups should be kept +pref("browser.sessionstore.upgradeBackup.maxUpgradeBackups", 3); +// End-users should not run sessionstore in debug mode +pref("browser.sessionstore.debug", false); +// Forget closed windows/tabs after two weeks +pref("browser.sessionstore.cleanup.forget_closed_after", 1209600000); +// Platform collects session storage data for session store +pref("browser.sessionstore.collect_session_storage", true); + +// Don't quit the browser when Ctrl + Q is pressed. +pref("browser.quitShortcut.disabled", false); + +// allow META refresh by default +pref("accessibility.blockautorefresh", false); + +// Whether history is enabled or not. +pref("places.history.enabled", true); + +// Whether or not diacritics must match in history text searches. +pref("places.search.matchDiacritics", false); + +// the (maximum) number of the recent visits to sample +// when calculating frecency +pref("places.frecency.numVisits", 10); + +// buckets (in days) for frecency calculation +pref("places.frecency.firstBucketCutoff", 4); +pref("places.frecency.secondBucketCutoff", 14); +pref("places.frecency.thirdBucketCutoff", 31); +pref("places.frecency.fourthBucketCutoff", 90); + +// weights for buckets for frecency calculations +pref("places.frecency.firstBucketWeight", 100); +pref("places.frecency.secondBucketWeight", 70); +pref("places.frecency.thirdBucketWeight", 50); +pref("places.frecency.fourthBucketWeight", 30); +pref("places.frecency.defaultBucketWeight", 10); + +// bonus (in percent) for visit transition types for frecency calculations +pref("places.frecency.embedVisitBonus", 0); +pref("places.frecency.framedLinkVisitBonus", 0); +pref("places.frecency.linkVisitBonus", 100); +pref("places.frecency.typedVisitBonus", 2000); +// The bookmarks bonus is always added on top of any other bonus, including +// the redirect source and the typed ones. +pref("places.frecency.bookmarkVisitBonus", 75); +// The redirect source bonus overwrites any transition bonus. +// 0 would hide these pages, instead we want them low ranked. Thus we use +// linkVisitBonus - bookmarkVisitBonus, so that a bookmarked source is in par +// with a common link. +pref("places.frecency.redirectSourceVisitBonus", 25); +pref("places.frecency.downloadVisitBonus", 0); +// The perm/temp redirects here relate to redirect targets, not sources. +pref("places.frecency.permRedirectVisitBonus", 50); +pref("places.frecency.tempRedirectVisitBonus", 40); +pref("places.frecency.reloadVisitBonus", 0); +pref("places.frecency.defaultVisitBonus", 0); + +// bonus (in percent) for place types for frecency calculations +pref("places.frecency.unvisitedBookmarkBonus", 140); +pref("places.frecency.unvisitedTypedBonus", 200); + +// Clear data by base domain (including partitioned storage) when the user +// selects "Forget About This Site". +pref("places.forgetThisSite.clearByBaseDomain", true); + +// Whether to warm up network connections for places: menus and places: toolbar. +pref("browser.places.speculativeConnect.enabled", true); + +// Controls behavior of the "Add Exception" dialog launched from SSL error pages +// 0 - don't pre-populate anything +// 1 - pre-populate site URL, but don't fetch certificate +// 2 - pre-populate site URL and pre-fetch certificate +pref("browser.ssl_override_behavior", 2); + +// if true, use full page zoom instead of text zoom +pref("browser.zoom.full", true); + +// Whether or not to save and restore zoom levels on a per-site basis. +pref("browser.zoom.siteSpecific", true); + +// Whether or not to update background tabs to the current zoom level. +pref("browser.zoom.updateBackgroundTabs", true); + +// The breakpad report server to link to in about:crashes +pref("breakpad.reportURL", "https://crash-stats.mozilla.org/report/index/"); + +// URL for "Learn More" for DataCollection +pref("toolkit.datacollection.infoURL", + "https://www.mozilla.org/legal/privacy/firefox.html"); + +// URL for "Learn More" for Crash Reporter +pref("toolkit.crashreporter.infoURL", + "https://www.mozilla.org/legal/privacy/firefox.html#crash-reporter"); + +// base URL for web-based support pages +pref("app.support.baseURL", "https://support.mozilla.org/1/firefox/%VERSION%/%OS%/%LOCALE%/"); + +// base url for web-based feedback pages +pref("app.feedback.baseURL", "https://ideas.mozilla.org/"); + +// Name of alternate about: page for certificate errors (when undefined, defaults to about:neterror) +pref("security.alternate_certificate_error_page", "certerror"); + +pref("security.certerrors.recordEventTelemetry", true); +pref("security.certerrors.permanentOverride", true); +pref("security.certerrors.mitm.priming.enabled", true); +pref("security.certerrors.mitm.priming.endpoint", "https://mitmdetection.services.mozilla.com/"); +pref("security.certerrors.mitm.auto_enable_enterprise_roots", true); + +// Whether the bookmark panel should be shown when bookmarking a page. +pref("browser.bookmarks.editDialog.showForNewBookmarks", true); + +// Don't try to alter this pref, it'll be reset the next time you use the +// bookmarking dialog +pref("browser.bookmarks.editDialog.firstEditField", "namePicker"); + +// The number of recently selected folders in the edit bookmarks dialog. +pref("browser.bookmarks.editDialog.maxRecentFolders", 7); + +// By default the Edit Bookmark dialog is instant-apply. This feature pref will allow to +// just save on Accept, once the project is complete. +pref("browser.bookmarks.editDialog.delayedApply.enabled", false); + +#if defined(XP_WIN) && defined(MOZ_SANDBOX) + // This controls the strength of the Windows content process sandbox for + // testing purposes. This will require a restart. + // On windows these levels are: + // See - security/sandbox/win/src/sandboxbroker/sandboxBroker.cpp + // SetSecurityLevelForContentProcess() for what the different settings mean. + pref("security.sandbox.content.level", 6); + + // This controls the strength of the Windows GPU process sandbox. Changes + // will require restart. + // For information on what the level number means, see + // SetSecurityLevelForGPUProcess() in + // security/sandbox/win/src/sandboxbroker/sandboxBroker.cpp + pref("security.sandbox.gpu.level", 0); +#endif + +#if defined(XP_MACOSX) && defined(MOZ_SANDBOX) + // This pref is discussed in bug 1083344, the naming is inspired from its + // Windows counterpart, but on Mac it's an integer which means: + // 0 -> "no sandbox" (nightly only) + // 1 -> "preliminary content sandboxing enabled: write access to + // home directory is prevented" + // 2 -> "preliminary content sandboxing enabled with profile protection: + // write access to home directory is prevented, read and write access + // to ~/Library and profile directories are prevented (excluding + // $PROFILE/{extensions,chrome})" + // 3 -> "no global read/write access, read access permitted to + // $PROFILE/{extensions,chrome}" + // This setting is read when the content process is started. On Mac the + // content process is killed when all windows are closed, so a change will + // take effect when the 1st window is opened. + pref("security.sandbox.content.level", 3); + + // Disconnect content processes from the window server. Depends on + // out-of-process WebGL and non-native theming. i.e., both in-process WebGL + // and native theming depend on content processes having a connection to the + // window server. Window server disconnection is automatically disabled (and + // this pref overridden) if OOP WebGL is disabled. OOP WebGL is disabled + // for some tests. + pref("security.sandbox.content.mac.disconnect-windowserver", true); +#endif + +#if defined(XP_LINUX) && defined(MOZ_SANDBOX) + // This pref is introduced as part of bug 742434, the naming is inspired from + // its Windows/Mac counterpart, but on Linux it's an integer which means: + // 0 -> "no sandbox" + // 1 -> "content sandbox using seccomp-bpf when available" + ipc restrictions + // 2 -> "seccomp-bpf + write file broker" + // 3 -> "seccomp-bpf + read/write file brokering" + // 4 -> all of the above + network/socket restrictions + chroot + // + // The purpose of this setting is to allow Linux users or distros to disable + // the sandbox while we fix their problems, or to allow running Firefox with + // exotic configurations we can't reasonably support out of the box. + // + pref("security.sandbox.content.level", 4); + // Introduced as part of bug 1608558. Linux is currently the only platform + // that uses a sandbox level for the socket process. There are currently + // only 2 levels: + // 0 -> "no sandbox" + // 1 -> "sandboxed, allows socket operations and reading necessary certs" + pref("security.sandbox.socket.process.level", 1); + pref("security.sandbox.content.write_path_whitelist", ""); + pref("security.sandbox.content.read_path_whitelist", ""); + pref("security.sandbox.content.syscall_whitelist", ""); +#endif + +#if defined(XP_OPENBSD) && defined(MOZ_SANDBOX) + pref("security.sandbox.content.level", 1); +#endif + +#if defined(MOZ_SANDBOX) + // ID (a UUID when set by gecko) that is used to form the name of a + // sandbox-writable temporary directory to be used by content processes + // when a temporary writable file is required in a level 1 sandbox. + pref("security.sandbox.content.tempDirSuffix", ""); + pref("security.sandbox.plugin.tempDirSuffix", ""); + + // This pref determines if messages relevant to sandbox violations are + // logged. + #if defined(XP_WIN) || defined(XP_MACOSX) + pref("security.sandbox.logging.enabled", false); + #endif +#endif + +// This pref governs whether we attempt to work around problems caused by +// plugins using OS calls to manipulate the cursor while running out-of- +// process. These workarounds all involve intercepting (hooking) certain +// OS calls in the plugin process, then arranging to make certain OS calls +// in the browser process. Eventually plugins will be required to use the +// NPAPI to manipulate the cursor, and these workarounds will be removed. +// See bug 621117. +#ifdef XP_MACOSX + pref("dom.ipc.plugins.nativeCursorSupport", true); +#endif + +#ifdef XP_WIN + pref("browser.taskbar.previews.enable", false); + pref("browser.taskbar.previews.max", 20); + pref("browser.taskbar.previews.cachetime", 5); + pref("browser.taskbar.lists.enabled", true); + pref("browser.taskbar.lists.frequent.enabled", true); + pref("browser.taskbar.lists.recent.enabled", false); + pref("browser.taskbar.lists.maxListItemCount", 7); + pref("browser.taskbar.lists.tasks.enabled", true); + pref("browser.taskbar.lists.refreshInSeconds", 120); +#endif + +// Preferences to be synced by default. +// Preferences with the prefix `services.sync.prefs.sync-seen.` should have +// a value of `false`, and means the value of the pref will be synced as soon +// as a value for the pref is "seen", even if it is the default, and should be +// used for prefs we sync but which have different values on different channels, +// platforms or distributions. +pref("services.sync.prefs.sync.accessibility.blockautorefresh", true); +pref("services.sync.prefs.sync.accessibility.browsewithcaret", true); +pref("services.sync.prefs.sync.accessibility.typeaheadfind", true); +pref("services.sync.prefs.sync.accessibility.typeaheadfind.linksonly", true); +pref("services.sync.prefs.sync.addons.ignoreUserEnabledChanges", true); +pref("services.sync.prefs.sync.app.shield.optoutstudies.enabled", true); +// The addons prefs related to repository verification are intentionally +// not synced for security reasons. If a system is compromised, a user +// could weaken the pref locally, install an add-on from an untrusted +// source, and this would propagate automatically to other, +// uncompromised Sync-connected devices. +pref("services.sync.prefs.sync.browser.contentblocking.category", true); +pref("services.sync.prefs.sync.browser.contentblocking.features.strict", true); +pref("services.sync.prefs.sync.browser.crashReports.unsubmittedCheck.autoSubmit2", true); +pref("services.sync.prefs.sync.browser.ctrlTab.sortByRecentlyUsed", true); +pref("services.sync.prefs.sync.browser.discovery.enabled", true); +pref("services.sync.prefs.sync.browser.download.useDownloadDir", true); +pref("services.sync.prefs.sync.browser.firefox-view.feature-tour", true); +pref("services.sync.prefs.sync.browser.formfill.enable", true); +pref("services.sync.prefs.sync.browser.link.open_newwindow", true); +pref("services.sync.prefs.sync.browser.menu.showViewImageInfo", true); +pref("services.sync.prefs.sync.browser.newtabpage.activity-stream.asrouter.userprefs.cfr.addons", true); +pref("services.sync.prefs.sync.browser.newtabpage.activity-stream.asrouter.userprefs.cfr.features", true); +pref("services.sync.prefs.sync.browser.newtabpage.activity-stream.showSearch", true); +pref("services.sync.prefs.sync.browser.newtabpage.activity-stream.showSponsored", true); +pref("services.sync.prefs.sync.browser.newtabpage.activity-stream.showSponsoredTopSites", true); +pref("services.sync.prefs.sync.browser.newtabpage.activity-stream.feeds.topsites", true); +pref("services.sync.prefs.sync.browser.newtabpage.activity-stream.topSitesRows", true); +pref("services.sync.prefs.sync.browser.newtabpage.activity-stream.feeds.snippets", true); +pref("services.sync.prefs.sync.browser.newtabpage.activity-stream.feeds.section.topstories", true); +pref("services.sync.prefs.sync.browser.newtabpage.activity-stream.section.topstories.rows", true); +pref("services.sync.prefs.sync.browser.newtabpage.activity-stream.feeds.section.highlights", true); +// Some linux distributions disable all highlights by default. +pref("services.sync.prefs.sync-seen.browser.newtabpage.activity-stream.section.highlights", false); +pref("services.sync.prefs.sync.browser.newtabpage.activity-stream.section.highlights.includeVisited", true); +pref("services.sync.prefs.sync.browser.newtabpage.activity-stream.section.highlights.includeBookmarks", true); +pref("services.sync.prefs.sync.browser.newtabpage.activity-stream.section.highlights.includeDownloads", true); +pref("services.sync.prefs.sync.browser.newtabpage.activity-stream.section.highlights.includePocket", true); +// Some linux distributions disable just pocket by default. +pref("services.sync.prefs.sync-seen.browser.newtabpage.activity-stream.section.highlights.includePocket", false); +pref("services.sync.prefs.sync.browser.newtabpage.activity-stream.section.highlights.rows", true); +pref("services.sync.prefs.sync.browser.newtabpage.enabled", true); +pref("services.sync.prefs.sync.browser.newtabpage.pinned", true); +pref("services.sync.prefs.sync.browser.offline-apps.notify", true); +pref("services.sync.prefs.sync.browser.pdfjs.feature-tour", true); +pref("services.sync.prefs.sync.browser.safebrowsing.downloads.enabled", true); +pref("services.sync.prefs.sync.browser.safebrowsing.downloads.remote.block_potentially_unwanted", true); +pref("services.sync.prefs.sync.browser.safebrowsing.malware.enabled", true); +pref("services.sync.prefs.sync.browser.safebrowsing.phishing.enabled", true); +pref("services.sync.prefs.sync.browser.search.update", true); +pref("services.sync.prefs.sync.browser.search.widget.inNavBar", true); +pref("services.sync.prefs.sync.browser.startup.homepage", true); +pref("services.sync.prefs.sync.browser.startup.page", true); +pref("services.sync.prefs.sync.browser.tabs.loadInBackground", true); +pref("services.sync.prefs.sync.browser.tabs.warnOnClose", true); +pref("services.sync.prefs.sync.browser.tabs.warnOnOpen", true); +pref("services.sync.prefs.sync.browser.taskbar.previews.enable", true); +pref("services.sync.prefs.sync.browser.urlbar.maxRichResults", true); +pref("services.sync.prefs.sync.browser.urlbar.showSearchSuggestionsFirst", true); +pref("services.sync.prefs.sync.browser.urlbar.suggest.bookmark", true); +pref("services.sync.prefs.sync.browser.urlbar.suggest.history", true); +pref("services.sync.prefs.sync.browser.urlbar.suggest.openpage", true); +pref("services.sync.prefs.sync.browser.urlbar.suggest.searches", true); +pref("services.sync.prefs.sync.browser.urlbar.suggest.topsites", true); +pref("services.sync.prefs.sync.browser.urlbar.suggest.engines", true); +pref("services.sync.prefs.sync.dom.disable_open_during_load", true); +pref("services.sync.prefs.sync.dom.disable_window_flip", true); +pref("services.sync.prefs.sync.dom.disable_window_move_resize", true); +pref("services.sync.prefs.sync.dom.event.contextmenu.enabled", true); +pref("services.sync.prefs.sync.dom.security.https_only_mode", true); +pref("services.sync.prefs.sync.dom.security.https_only_mode_ever_enabled", true); +pref("services.sync.prefs.sync.dom.security.https_only_mode_ever_enabled_pbm", true); +pref("services.sync.prefs.sync.dom.security.https_only_mode_pbm", true); +pref("services.sync.prefs.sync.extensions.update.enabled", true); +pref("services.sync.prefs.sync.extensions.activeThemeID", true); +pref("services.sync.prefs.sync.general.autoScroll", true); +// general.autoScroll has a different default on Linux vs elsewhere. +pref("services.sync.prefs.sync-seen.general.autoScroll", false); +pref("services.sync.prefs.sync.general.smoothScroll", true); +pref("services.sync.prefs.sync.intl.accept_languages", true); +pref("services.sync.prefs.sync.intl.regional_prefs.use_os_locales", true); +pref("services.sync.prefs.sync.layout.spellcheckDefault", true); +pref("services.sync.prefs.sync.media.autoplay.default", true); +pref("services.sync.prefs.sync.media.eme.enabled", true); +// Some linux distributions disable eme by default. +pref("services.sync.prefs.sync-seen.media.eme.enabled", false); +pref("services.sync.prefs.sync.media.videocontrols.picture-in-picture.video-toggle.enabled", true); +pref("services.sync.prefs.sync.network.cookie.cookieBehavior", true); +pref("services.sync.prefs.sync.network.cookie.thirdparty.sessionOnly", true); +pref("services.sync.prefs.sync.permissions.default.image", true); +pref("services.sync.prefs.sync.pref.downloads.disable_button.edit_actions", true); +pref("services.sync.prefs.sync.pref.privacy.disable_button.cookie_exceptions", true); +pref("services.sync.prefs.sync.privacy.clearOnShutdown.cache", true); +pref("services.sync.prefs.sync.privacy.clearOnShutdown.cookies", true); +pref("services.sync.prefs.sync.privacy.clearOnShutdown.downloads", true); +pref("services.sync.prefs.sync.privacy.clearOnShutdown.formdata", true); +pref("services.sync.prefs.sync.privacy.clearOnShutdown.history", true); +pref("services.sync.prefs.sync.privacy.clearOnShutdown.offlineApps", true); +pref("services.sync.prefs.sync.privacy.clearOnShutdown.sessions", true); +pref("services.sync.prefs.sync.privacy.clearOnShutdown.siteSettings", true); +pref("services.sync.prefs.sync.privacy.donottrackheader.enabled", true); +pref("services.sync.prefs.sync.privacy.sanitize.sanitizeOnShutdown", true); +pref("services.sync.prefs.sync.privacy.trackingprotection.enabled", true); +pref("services.sync.prefs.sync.privacy.trackingprotection.cryptomining.enabled", true); +pref("services.sync.prefs.sync.privacy.trackingprotection.fingerprinting.enabled", true); +pref("services.sync.prefs.sync.privacy.trackingprotection.pbmode.enabled", true); +// We do not sync `privacy.resistFingerprinting` by default as it's an undocumented, +// not-recommended footgun - see bug 1763278 for more. +pref("services.sync.prefs.sync.privacy.reduceTimerPrecision", true); +pref("services.sync.prefs.sync.privacy.resistFingerprinting.reduceTimerPrecision.microseconds", true); +pref("services.sync.prefs.sync.privacy.resistFingerprinting.reduceTimerPrecision.jitter", true); +pref("services.sync.prefs.sync.privacy.userContext.enabled", true); +pref("services.sync.prefs.sync.privacy.userContext.newTabContainerOnLeftClick.enabled", true); +pref("services.sync.prefs.sync.security.default_personal_cert", true); +pref("services.sync.prefs.sync.services.sync.syncedTabs.showRemoteIcons", true); +pref("services.sync.prefs.sync.signon.autofillForms", true); +pref("services.sync.prefs.sync.signon.generation.enabled", true); +pref("services.sync.prefs.sync.signon.management.page.breach-alerts.enabled", true); +pref("services.sync.prefs.sync.signon.rememberSignons", true); +pref("services.sync.prefs.sync.spellchecker.dictionary", true); +pref("services.sync.prefs.sync.ui.osk.enabled", true); + +// A preference which, if false, means sync will only apply incoming preference +// changes if there's already a local services.sync.prefs.sync.* control pref. +// If true, all incoming preferences will be applied and the local "control +// pref" updated accordingly. +pref("services.sync.prefs.dangerously_allow_arbitrary", false); + +// A preference that controls whether we should show the icon for a remote tab. +// This pref has no UI but exists because some people may be concerned that +// fetching these icons to show remote tabs may leak information about that +// user's tabs and bookmarks. Note this pref is also synced. +pref("services.sync.syncedTabs.showRemoteIcons", true); + +// A preference (in milliseconds) controlling if we sync after a tab change and +// how long to delay before we schedule the sync +// Anything <= 0 means disabled +pref("services.sync.syncedTabs.syncDelayAfterTabChange", 5000); + +// Whether the character encoding menu is under the main Firefox button. This +// preference is a string so that localizers can alter it. +pref("browser.menu.showCharacterEncoding", "chrome://browser/locale/browser.properties"); + +// Whether prompts should be content modal (1) tab modal (2) or window modal(3) by default +// This is a fallback value for when prompt callers do not specify a modalType. +pref("prompts.defaultModalType", 3); + +pref("browser.topsites.useRemoteSetting", true); +// Fetch sponsored Top Sites from Mozilla Tiles Service (Contile) +pref("browser.topsites.contile.enabled", true); +pref("browser.topsites.contile.endpoint", "https://contile.services.mozilla.com/v1/tiles"); + +// The base URL for the Quick Suggest anonymizing proxy. To make a request to +// the proxy, include a campaign ID in the path. +pref("browser.partnerlink.attributionURL", "https://topsites.services.mozilla.com/cid/"); +pref("browser.partnerlink.campaign.topsites", "amzn_2020_a1"); + +// Whether to show tab level system prompts opened via nsIPrompt(Service) as +// SubDialogs in the TabDialogBox (true) or as TabModalPrompt in the +// TabModalPromptBox (false). +pref("prompts.tabChromePromptSubDialog", true); + +// Whether to show the dialogs opened at the content level, such as +// alert() or prompt(), using a SubDialogManager in the TabDialogBox. +pref("prompts.contentPromptSubDialog", true); + +// Whether to show window-modal dialogs opened for browser windows +// in a SubDialog inside their parent, instead of an OS level window. +pref("prompts.windowPromptSubDialog", true); + +// Activates preloading of the new tab url. +pref("browser.newtab.preload", true); + +pref("browser.newtabpage.activity-stream.newNewtabExperience.colors", "#0090ED,#FF4F5F,#2AC3A2,#FF7139,#A172FF,#FFA437,#FF2A8A"); + +// Activity Stream prefs that control to which page to redirect +#ifndef RELEASE_OR_BETA + pref("browser.newtabpage.activity-stream.debug", false); +#endif + +// The remote FxA root content URL for the Activity Stream firstrun page. +pref("browser.newtabpage.activity-stream.fxaccounts.endpoint", "https://accounts.firefox.com/"); + +// The pref that controls if the search shortcuts experiment is on +pref("browser.newtabpage.activity-stream.improvesearch.topSiteSearchShortcuts", true); + +// ASRouter provider configuration +pref("browser.newtabpage.activity-stream.asrouter.providers.cfr", "{\"id\":\"cfr\",\"enabled\":true,\"type\":\"remote-settings\",\"bucket\":\"cfr\",\"updateCycleInMs\":3600000}"); +pref("browser.newtabpage.activity-stream.asrouter.providers.whats-new-panel", "{\"id\":\"whats-new-panel\",\"enabled\":true,\"type\":\"remote-settings\",\"bucket\":\"whats-new-panel\",\"updateCycleInMs\":3600000}"); +pref("browser.newtabpage.activity-stream.asrouter.providers.message-groups", "{\"id\":\"message-groups\",\"enabled\":true,\"type\":\"remote-settings\",\"bucket\":\"message-groups\",\"updateCycleInMs\":3600000}"); +// This url, if changed, MUST continue to point to an https url. Pulling arbitrary content to inject into +// this page over http opens us up to a man-in-the-middle attack that we'd rather not face. If you are a downstream +// repackager of this code using an alternate snippet url, please keep your users safe +pref("browser.newtabpage.activity-stream.asrouter.providers.snippets", "{\"id\":\"snippets\",\"enabled\":false,\"type\":\"remote\",\"url\":\"https://snippets.cdn.mozilla.net/%STARTPAGE_VERSION%/%NAME%/%VERSION%/%APPBUILDID%/%BUILD_TARGET%/%LOCALE%/%CHANNEL%/%OS_VERSION%/%DISTRIBUTION%/%DISTRIBUTION_VERSION%/\",\"updateCycleInMs\":14400000}"); +pref("browser.newtabpage.activity-stream.asrouter.providers.messaging-experiments", "{\"id\":\"messaging-experiments\",\"enabled\":true,\"type\":\"remote-experiments\",\"updateCycleInMs\":3600000}"); + +// ASRouter user prefs +pref("browser.newtabpage.activity-stream.asrouter.userprefs.cfr.addons", true); +pref("browser.newtabpage.activity-stream.asrouter.userprefs.cfr.features", true); + +// The pref that controls if ASRouter uses the remote fluent files. +// It's enabled by default, but could be disabled to force ASRouter to use the local files. +pref("browser.newtabpage.activity-stream.asrouter.useRemoteL10n", true); + +// These prefs control if Discovery Stream is enabled. +pref("browser.newtabpage.activity-stream.discoverystream.enabled", true); +pref("browser.newtabpage.activity-stream.discoverystream.hardcoded-basic-layout", false); +pref("browser.newtabpage.activity-stream.discoverystream.hybridLayout.enabled", false); +pref("browser.newtabpage.activity-stream.discoverystream.hideCardBackground.enabled", false); +pref("browser.newtabpage.activity-stream.discoverystream.fourCardLayout.enabled", false); +pref("browser.newtabpage.activity-stream.discoverystream.newFooterSection.enabled", false); +pref("browser.newtabpage.activity-stream.discoverystream.saveToPocketCard.enabled", false); +pref("browser.newtabpage.activity-stream.discoverystream.saveToPocketCardRegions", ""); +pref("browser.newtabpage.activity-stream.discoverystream.hideDescriptions.enabled", false); +pref("browser.newtabpage.activity-stream.discoverystream.hideDescriptionsRegions", ""); +pref("browser.newtabpage.activity-stream.discoverystream.compactGrid.enabled", false); +pref("browser.newtabpage.activity-stream.discoverystream.compactImages.enabled", false); +pref("browser.newtabpage.activity-stream.discoverystream.imageGradient.enabled", false); +pref("browser.newtabpage.activity-stream.discoverystream.titleLines", 3); +pref("browser.newtabpage.activity-stream.discoverystream.descLines", 3); +pref("browser.newtabpage.activity-stream.discoverystream.readTime.enabled", true); +pref("browser.newtabpage.activity-stream.discoverystream.newSponsoredLabel.enabled", false); +pref("browser.newtabpage.activity-stream.discoverystream.essentialReadsHeader.enabled", false); +pref("browser.newtabpage.activity-stream.discoverystream.recentSaves.enabled", false); +pref("browser.newtabpage.activity-stream.discoverystream.editorsPicksHeader.enabled", false); +pref("browser.newtabpage.activity-stream.discoverystream.spoc-positions", "1,5,7,11,18,20"); +pref("browser.newtabpage.activity-stream.discoverystream.widget-positions", ""); + +pref("browser.newtabpage.activity-stream.discoverystream.spocs-endpoint", ""); +pref("browser.newtabpage.activity-stream.discoverystream.spocs-endpoint-query", ""); +pref("browser.newtabpage.activity-stream.discoverystream.sponsored-collections.enabled", false); + +// Changes the spoc content. +pref("browser.newtabpage.activity-stream.discoverystream.spocAdTypes", ""); +pref("browser.newtabpage.activity-stream.discoverystream.spocZoneIds", ""); +pref("browser.newtabpage.activity-stream.discoverystream.spocSiteId", ""); + +pref("browser.newtabpage.activity-stream.discoverystream.sendToPocket.enabled", false); + +// List of regions that do not get stories, regardless of locale-list-config. +pref("browser.newtabpage.activity-stream.discoverystream.region-stories-block", "FR"); +// List of locales that get stories, regardless of region-stories-config. +#ifdef NIGHTLY_BUILD + pref("browser.newtabpage.activity-stream.discoverystream.locale-list-config", "en-US,en-CA,en-GB"); +#else + pref("browser.newtabpage.activity-stream.discoverystream.locale-list-config", ""); +#endif +// List of regions that get stories by default. +pref("browser.newtabpage.activity-stream.discoverystream.region-stories-config", "US,DE,CA,GB,IE,CH,AT,BE,IN"); + +// List of regions that get spocs by default. +pref("browser.newtabpage.activity-stream.discoverystream.region-spocs-config", "US,CA,DE,GB"); +// List of regions that don't get the 7 row layout. +pref("browser.newtabpage.activity-stream.discoverystream.region-basic-config", ""); + +// Allows Pocket story collections to be dismissed. +pref("browser.newtabpage.activity-stream.discoverystream.isCollectionDismissible", true); +pref("browser.newtabpage.activity-stream.discoverystream.personalization.enabled", true); +// Configurable keys used by personalization. +pref("browser.newtabpage.activity-stream.discoverystream.personalization.modelKeys", "nb_model_arts_and_entertainment, nb_model_autos_and_vehicles, nb_model_beauty_and_fitness, nb_model_blogging_resources_and_services, nb_model_books_and_literature, nb_model_business_and_industrial, nb_model_computers_and_electronics, nb_model_finance, nb_model_food_and_drink, nb_model_games, nb_model_health, nb_model_hobbies_and_leisure, nb_model_home_and_garden, nb_model_internet_and_telecom, nb_model_jobs_and_education, nb_model_law_and_government, nb_model_online_communities, nb_model_people_and_society, nb_model_pets_and_animals, nb_model_real_estate, nb_model_reference, nb_model_science, nb_model_shopping, nb_model_sports, nb_model_travel"); +// System pref to allow Pocket stories personalization to be turned on/off. +pref("browser.newtabpage.activity-stream.discoverystream.recs.personalized", false); +// System pref to allow Pocket sponsored content personalization to be turned on/off. +pref("browser.newtabpage.activity-stream.discoverystream.spocs.personalized", true); + +// User pref to show stories on newtab (feeds.system.topstories has to be set to true as well) +pref("browser.newtabpage.activity-stream.feeds.section.topstories", true); + +// The pref controls if search hand-off is enabled for Activity Stream. +pref("browser.newtabpage.activity-stream.improvesearch.handoffToAwesomebar", true); + +pref("browser.newtabpage.activity-stream.logowordmark.alwaysVisible", true); + +// URLs from the user's history that contain this search param will be hidden +// from the top sites. The value is a string with one of the following forms: +// - "" (empty) - Disable this feature +// - "key" - Search param named "key" with any or no value +// - "key=" - Search param named "key" with no value +// - "key=value" - Search param named "key" with value "value" +pref("browser.newtabpage.activity-stream.hideTopSitesWithSearchParam", "mfadid=adm"); + +// Used to display triplet cards on newtab +pref("trailhead.firstrun.newtab.triplets", ""); +// Separate about welcome +pref("browser.aboutwelcome.enabled", true); +// Used to set multistage welcome UX +pref("browser.aboutwelcome.screens", ""); +pref("browser.aboutwelcome.skipFocus", true); +// Used to enable template for MR 2022 Onboarding +pref("browser.aboutwelcome.templateMR", true); + +// The pref that controls if the What's New panel is enabled. +pref("browser.messaging-system.whatsNewPanel.enabled", true); + +// Experiment Manager +// See Console.jsm LOG_LEVELS for all possible values +pref("messaging-system.log", "warn"); +pref("messaging-system.rsexperimentloader.enabled", true); +pref("messaging-system.rsexperimentloader.collection_id", "nimbus-desktop-experiments"); +pref("nimbus.debug", false); +pref("nimbus.validation.enabled", true); + +// Enable the DOM fullscreen API. +pref("full-screen-api.enabled", true); + +// Startup Crash Tracking +// number of startup crashes that can occur before starting into safe mode automatically +// (this pref has no effect if more than 6 hours have passed since the last crash) +pref("toolkit.startup.max_resumed_crashes", 3); + +// Whether to use RegisterApplicationRestart to restart the browser and resume +// the session on next Windows startup +#if defined(XP_WIN) + pref("toolkit.winRegisterApplicationRestart", true); +#endif + +// Used by pdf.js to know the first time firefox is run with it installed so it +// can become the default pdf viewer. +pref("pdfjs.firstRun", true); +// The values of preferredAction and alwaysAskBeforeHandling before pdf.js +// became the default. +pref("pdfjs.previousHandler.preferredAction", 0); +pref("pdfjs.previousHandler.alwaysAskBeforeHandling", false); + +// Try to convert PDFs sent as octet-stream +pref("pdfjs.handleOctetStream", true); + +// Is the sidebar positioned ahead of the content browser +pref("sidebar.position_start", true); + +pref("security.identitypopup.recordEventTelemetry", true); +pref("security.protectionspopup.recordEventTelemetry", true); +pref("security.app_menu.recordEventTelemetry", true); + +// Block insecure active content on https pages +pref("security.mixed_content.block_active_content", true); + +// Show degraded UI for http pages. +pref("security.insecure_connection_icon.enabled", true); +// Show degraded UI for http pages in private mode. +pref("security.insecure_connection_icon.pbmode.enabled", true); + +// Show "Not Secure" text for http pages; disabled for now +pref("security.insecure_connection_text.enabled", false); +pref("security.insecure_connection_text.pbmode.enabled", false); + +// 1 = allow MITM for certificate pinning checks. +pref("security.cert_pinning.enforcement_level", 1); + + +// If this turns true, Moz*Gesture events are not called stopPropagation() +// before content. +pref("dom.debug.propagate_gesture_events_through_content", false); + +// CustomizableUI debug logging. +pref("browser.uiCustomization.debug", false); + +// CustomizableUI state of the browser's user interface +pref("browser.uiCustomization.state", ""); + +// If set to false, FxAccounts and Sync will be unavailable. +// A restart is mandatory after flipping that preference. +pref("identity.fxaccounts.enabled", true); + +// The remote FxA root content URL. Must use HTTPS. +pref("identity.fxaccounts.remote.root", "https://accounts.firefox.com/"); + +// The value of the context query parameter passed in fxa requests. +pref("identity.fxaccounts.contextParam", "fx_desktop_v3"); + +// The remote URL of the FxA Profile Server +pref("identity.fxaccounts.remote.profile.uri", "https://profile.accounts.firefox.com/v1"); + +// The remote URL of the FxA OAuth Server +pref("identity.fxaccounts.remote.oauth.uri", "https://oauth.accounts.firefox.com/v1"); + +// Whether FxA pairing using QR codes is enabled. +pref("identity.fxaccounts.pairing.enabled", true); + +// The remote URI of the FxA pairing server +pref("identity.fxaccounts.remote.pairing.uri", "wss://channelserver.services.mozilla.com"); + +// Token server used by the FxA Sync identity. +pref("identity.sync.tokenserver.uri", "https://token.services.mozilla.com/1.0/sync/1.5"); + +// Auto-config URL for FxA self-hosters, makes an HTTP request to +// [identity.fxaccounts.autoconfig.uri]/.well-known/fxa-client-configuration +// This is now the prefered way of pointing to a custom FxA server, instead +// of making changes to "identity.fxaccounts.*.uri". +pref("identity.fxaccounts.autoconfig.uri", ""); + +// URL for help link about Send Tab. +pref("identity.sendtabpromo.url", "https://support.mozilla.org/1/firefox/%VERSION%/%OS%/%LOCALE%/send-tab"); + +// URLs for promo links to mobile browsers. Note that consumers are expected to +// append a value for utm_campaign. +pref("identity.mobilepromo.android", "https://www.mozilla.org/firefox/android/?utm_source=firefox-browser&utm_medium=firefox-browser&utm_campaign="); +pref("identity.mobilepromo.ios", "https://www.mozilla.org/firefox/ios/?utm_source=firefox-browser&utm_medium=firefox-browser&utm_campaign="); + +// Migrate any existing Firefox Account data from the default profile to the +// Developer Edition profile. +#ifdef MOZ_DEV_EDITION + pref("identity.fxaccounts.migrateToDevEdition", true); +#else + pref("identity.fxaccounts.migrateToDevEdition", false); +#endif + +// If activated, send tab will use the new FxA commands backend. +pref("identity.fxaccounts.commands.enabled", true); +// How often should we try to fetch missed FxA commands on sync (in seconds). +// Default is 24 hours. +pref("identity.fxaccounts.commands.missed.fetch_interval", 86400); + +// Whether we should run a test-pattern through EME GMPs before assuming they'll +// decode H.264. +pref("media.gmp.trial-create.enabled", true); + +// Note: when media.gmp-*.visible is true, provided we're running on a +// supported platform/OS version, the corresponding CDM appears in the +// plugins list, Firefox will download the GMP/CDM if enabled, and our +// UI to re-enable EME prompts the user to re-enable EME if it's disabled +// and script requests EME. If *.visible is false, we won't show the UI +// to enable the CDM if its disabled; it's as if the keysystem is completely +// unsupported. + +#ifdef MOZ_WIDEVINE_EME + pref("media.gmp-widevinecdm.visible", true); + pref("media.gmp-widevinecdm.enabled", true); +#endif + +pref("media.gmp-gmpopenh264.visible", true); +pref("media.gmp-gmpopenh264.enabled", true); + +// Set Firefox to block autoplay, asking for permission by default. +pref("media.autoplay.default", 1); // 0=Allowed, 1=Blocked, 5=All Blocked + +// Block WebAudio from playing automatically. +pref("media.autoplay.block-webaudio", true); + +pref("media.videocontrols.picture-in-picture.enabled", true); +pref("media.videocontrols.picture-in-picture.audio-toggle.enabled", true); +pref("media.videocontrols.picture-in-picture.video-toggle.enabled", true); +pref("media.videocontrols.picture-in-picture.video-toggle.visibility-threshold", "1.0"); +pref("media.videocontrols.picture-in-picture.keyboard-controls.enabled", true); + +pref("browser.translation.detectLanguage", false); +pref("browser.translation.neverForLanguages", ""); +// Show the translation UI bits, like the info bar, notification icon and preferences. +pref("browser.translation.ui.show", false); +// Allows to define the translation engine. Google is default, Bing or Yandex are other options. +pref("browser.translation.engine", "Google"); + +// Telemetry settings. +// Determines if Telemetry pings can be archived locally. +pref("toolkit.telemetry.archive.enabled", true); +// Enables sending the shutdown ping when Firefox shuts down. +pref("toolkit.telemetry.shutdownPingSender.enabled", true); +// Enables sending the shutdown ping using the pingsender from the first session. +pref("toolkit.telemetry.shutdownPingSender.enabledFirstSession", false); +// Enables sending a duplicate of the first shutdown ping from the first session. +pref("toolkit.telemetry.firstShutdownPing.enabled", true); +// Enables sending the 'new-profile' ping on new profiles. +pref("toolkit.telemetry.newProfilePing.enabled", true); +// Enables sending 'update' pings on Firefox updates. +pref("toolkit.telemetry.updatePing.enabled", true); +// Enables sending 'bhr' pings when the browser hangs. +pref("toolkit.telemetry.bhrPing.enabled", true); + +// Ping Centre Telemetry settings. +pref("browser.ping-centre.telemetry", true); +pref("browser.ping-centre.log", false); + +// Enable GMP support in the addon manager. +pref("media.gmp-provider.enabled", true); + +// Enable Dynamic First-Party Isolation by default. +pref("network.cookie.cookieBehavior", 5 /* BEHAVIOR_REJECT_TRACKER_AND_PARTITION_FOREIGN */); + +// Whether to show the section in preferences which allows users to opt-in to +// Total Cookie Protection (dFPI) in standard mode. +pref("privacy.restrict3rdpartystorage.rollout.preferences.TCPToggleInStandard", false); + +// Target URL for the learn more link of the TCP in standard mode rollout section. +pref("privacy.restrict3rdpartystorage.rollout.preferences.learnMoreURLSuffix", "total-cookie-protection"); + +// Target URL for the learn more link of the TCP in standard mode section. +pref("privacy.restrict3rdpartystorage.preferences.learnMoreURLSuffix", "total-cookie-protection"); + +// Enable Dynamic First-Party Isolation in the private browsing mode. +pref("network.cookie.cookieBehavior.pbmode", 5 /* BEHAVIOR_REJECT_TRACKER_AND_PARTITION_FOREIGN */); + +// Enable fingerprinting blocking by default for all channels, only on desktop. +pref("privacy.trackingprotection.fingerprinting.enabled", true); + +// Enable cryptomining blocking by default for all channels, only on desktop. +pref("privacy.trackingprotection.cryptomining.enabled", true); + +pref("browser.contentblocking.database.enabled", true); + +pref("dom.storage_access.enabled", true); + +// Enable URL query stripping in Nightly. +#ifdef NIGHTLY_BUILD +pref("privacy.query_stripping.enabled", true); +#endif + +pref("browser.contentblocking.cryptomining.preferences.ui.enabled", true); +pref("browser.contentblocking.fingerprinting.preferences.ui.enabled", true); +// Enable cookieBehavior = BEHAVIOR_REJECT_TRACKER_AND_PARTITION_FOREIGN as an option in the custom category ui +pref("browser.contentblocking.reject-and-isolate-cookies.preferences.ui.enabled", true); + +// Possible values for browser.contentblocking.features.strict pref: +// Tracking Protection: +// "tp": tracking protection enabled +// "-tp": tracking protection disabled +// Tracking Protection in private windows: +// "tpPrivate": tracking protection in private windows enabled +// "-tpPrivate": tracking protection in private windows disabled +// Fingerprinting: +// "fp": fingerprinting blocking enabled +// "-fp": fingerprinting blocking disabled +// Cryptomining: +// "cm": cryptomining blocking enabled +// "-cm": cryptomining blocking disabled +// Social Tracking Protection: +// "stp": social tracking protection enabled +// "-stp": social tracking protection disabled +// Level 2 Tracking list: +// "lvl2": Level 2 tracking list enabled +// "-lvl2": Level 2 tracking list disabled +// Restrict relaxing default referrer policy: +// "rp": Restrict relaxing default referrer policy enabled +// "-rp": Restrict relaxing default referrer policy disabled +// Restrict relaxing default referrer policy for top navigation: +// "rpTop": Restrict relaxing default referrer policy enabled +// "-rpTop": Restrict relaxing default referrer policy disabled +// OCSP cache partitioning: +// "ocsp": OCSP cache partitioning enabled +// "-ocsp": OCSP cache partitioning disabled +// Query parameter stripping: +// "qps": Query parameter stripping enabled +// "-qps": Query parameter stripping disabled +// Query parameter stripping for private windows: +// "qpsPBM": Query parameter stripping enabled in private windows +// "-qpsPBM": Query parameter stripping disabled in private windows +// Cookie behavior: +// "cookieBehavior0": cookie behaviour BEHAVIOR_ACCEPT +// "cookieBehavior1": cookie behaviour BEHAVIOR_REJECT_FOREIGN +// "cookieBehavior2": cookie behaviour BEHAVIOR_REJECT +// "cookieBehavior3": cookie behaviour BEHAVIOR_LIMIT_FOREIGN +// "cookieBehavior4": cookie behaviour BEHAVIOR_REJECT_TRACKER +// "cookieBehavior5": cookie behaviour BEHAVIOR_REJECT_TRACKER_AND_PARTITION_FOREIGN +// Cookie behavior for private windows: +// "cookieBehaviorPBM0": cookie behaviour BEHAVIOR_ACCEPT +// "cookieBehaviorPBM1": cookie behaviour BEHAVIOR_REJECT_FOREIGN +// "cookieBehaviorPBM2": cookie behaviour BEHAVIOR_REJECT +// "cookieBehaviorPBM3": cookie behaviour BEHAVIOR_LIMIT_FOREIGN +// "cookieBehaviorPBM4": cookie behaviour BEHAVIOR_REJECT_TRACKER +// "cookieBehaviorPBM5": cookie behaviour BEHAVIOR_REJECT_TRACKER_AND_PARTITION_FOREIGN +// One value from each section must be included in the browser.contentblocking.features.strict pref. +pref("browser.contentblocking.features.strict", "tp,tpPrivate,cookieBehavior5,cookieBehaviorPBM5,cm,fp,stp,lvl2,rp,rpTop,ocsp,qps,qpsPBM"); + +// Hide the "Change Block List" link for trackers/tracking content in the custom +// Content Blocking/ETP panel. By default, it will not be visible. There is also +// an UI migration in place to set this pref to true if a user has a custom block +// lists enabled. +pref("browser.contentblocking.customBlockList.preferences.ui.enabled", false); + +pref("browser.contentblocking.reportBreakage.url", "https://tracking-protection-issues.herokuapp.com/new"); + +// Enable Protections report's Lockwise card by default. +pref("browser.contentblocking.report.lockwise.enabled", true); + +// Enable Protections report's Monitor card by default. +pref("browser.contentblocking.report.monitor.enabled", true); + +// Disable Protections report's Proxy card by default. +pref("browser.contentblocking.report.proxy.enabled", false); + +// Disable the mobile promotion by default. +pref("browser.contentblocking.report.show_mobile_app", true); + +// Locales in which Send to Device emails are supported +// The most recent list of supported locales can be found at https://github.com/mozilla/bedrock/blob/6a08c876f65924651554decc57b849c00874b4e7/bedrock/settings/base.py#L963 +pref("browser.send_to_device_locales", "de,en-GB,en-US,es-AR,es-CL,es-ES,es-MX,fr,id,pl,pt-BR,ru,zh-TW"); + +// Avoid advertising in certain regions. Comma separated string of two letter ISO 3166-1 country codes. +// We're currently blocking all of Ukraine (ua), but would prefer to block just Crimea (ua-43). Currently, the Mozilla Location Service APIs used by Region.jsm only exposes the country, not the subdivision. +pref("browser.vpn_promo.disallowed_regions", "ae,by,cn,cu,iq,ir,kp,om,ru,sd,sy,tm,tr,ua"); + +// Default to enabling VPN promo messages to be shown when specified and allowed +pref("browser.vpn_promo.enabled", true); +// Only show vpn card to certain regions. Comma separated string of two letter ISO 3166-1 country codes. +// The most recent list of supported countries can be found at https://support.mozilla.org/en-US/kb/mozilla-vpn-countries-available-subscribe +// The full list of supported country codes can also be found at https://github.com/mozilla/bedrock/search?q=VPN_COUNTRY_CODES +pref("browser.contentblocking.report.vpn_regions", "as,at,be,ca,ch,de,es,fi,fr,gb,gg,ie,im,io,it,je,mp,my,nl,nz,pr,se,sg,uk,um,us,vg,vi" +); + +// Avoid advertising Focus in certain regions. Comma separated string of two letter +// ISO 3166-1 country codes. +pref("browser.promo.focus.disallowed_regions", "cn"); + +// Default to enabling focus promos to be shown where allowed. +pref("browser.promo.focus.enabled", true); + +// Default to enabling pin promos to be shown where allowed. +pref("browser.promo.pin.enabled", true); + +// Comma separated string of mozilla vpn supported platforms. +pref("browser.contentblocking.report.vpn_platforms", "win,mac,linux"); +pref("browser.contentblocking.report.hide_vpn_banner", false); +pref("browser.contentblocking.report.vpn_sub_id", "sub_HrfCZF7VPHzZkA"); + +pref("browser.contentblocking.report.monitor.url", "https://monitor.firefox.com/?entrypoint=protection_report_monitor&utm_source=about-protections"); +pref("browser.contentblocking.report.monitor.how_it_works.url", "https://monitor.firefox.com/about"); +pref("browser.contentblocking.report.monitor.sign_in_url", "https://monitor.firefox.com/oauth/init?entrypoint=protection_report_monitor&utm_source=about-protections&email="); +pref("browser.contentblocking.report.monitor.preferences_url", "https://monitor.firefox.com/user/preferences"); +pref("browser.contentblocking.report.monitor.home_page_url", "https://monitor.firefox.com/user/dashboard"); +pref("browser.contentblocking.report.manage_devices.url", "https://accounts.firefox.com/settings/clients"); +pref("browser.contentblocking.report.endpoint_url", "https://monitor.firefox.com/user/breach-stats?includeResolved=true"); +pref("browser.contentblocking.report.proxy_extension.url", "https://fpn.firefox.com/browser?utm_source=firefox-desktop&utm_medium=referral&utm_campaign=about-protections&utm_content=about-protections"); +pref("browser.contentblocking.report.mobile-ios.url", "https://apps.apple.com/app/firefox-private-safe-browser/id989804926"); +pref("browser.contentblocking.report.mobile-android.url", "https://play.google.com/store/apps/details?id=org.mozilla.firefox&referrer=utm_source%3Dprotection_report%26utm_content%3Dmobile_promotion"); +pref("browser.contentblocking.report.vpn.url", "https://vpn.mozilla.org/?utm_source=firefox-browser&utm_medium=firefox-browser&utm_campaign=about-protections-card"); +pref("browser.contentblocking.report.vpn-promo.url", "https://vpn.mozilla.org/?utm_source=firefox-browser&utm_medium=firefox-browser&utm_campaign=about-protections-top-promo"); +pref("browser.contentblocking.report.vpn-android.url", "https://play.google.com/store/apps/details?id=org.mozilla.firefox.vpn&referrer=utm_source%3Dfirefox-browser%26utm_medium%3Dfirefox-browser%26utm_campaign%3Dabout-protections-mobile-vpn%26anid%3D--"); +pref("browser.contentblocking.report.vpn-ios.url", "https://apps.apple.com/us/app/firefox-private-network-vpn/id1489407738"); + +// Protection Report's SUMO urls +pref("browser.contentblocking.report.lockwise.how_it_works.url", "https://support.mozilla.org/1/firefox/%VERSION%/%OS%/%LOCALE%/password-manager-report"); +pref("browser.contentblocking.report.social.url", "https://support.mozilla.org/1/firefox/%VERSION%/%OS%/%LOCALE%/social-media-tracking-report"); +pref("browser.contentblocking.report.cookie.url", "https://support.mozilla.org/1/firefox/%VERSION%/%OS%/%LOCALE%/cross-site-tracking-report"); +pref("browser.contentblocking.report.tracker.url", "https://support.mozilla.org/1/firefox/%VERSION%/%OS%/%LOCALE%/tracking-content-report"); +pref("browser.contentblocking.report.fingerprinter.url", "https://support.mozilla.org/1/firefox/%VERSION%/%OS%/%LOCALE%/fingerprinters-report"); +pref("browser.contentblocking.report.cryptominer.url", "https://support.mozilla.org/1/firefox/%VERSION%/%OS%/%LOCALE%/cryptominers-report"); + +pref("browser.contentblocking.cfr-milestone.enabled", true); +pref("browser.contentblocking.cfr-milestone.milestone-achieved", 0); +// Milestones should always be in increasing order +pref("browser.contentblocking.cfr-milestone.milestones", "[1000, 5000, 10000, 25000, 50000, 100000, 250000, 314159, 500000, 750000, 1000000, 1250000, 1500000, 1750000, 2000000, 2250000, 2500000, 8675309]"); + +// Enables the new Protections Panel. +#ifdef NIGHTLY_BUILD + pref("browser.protections_panel.enabled", true); + pref("browser.protections_panel.infoMessage.seen", false); +#endif + +// Always enable newtab segregation using containers +pref("privacy.usercontext.about_newtab_segregation.enabled", true); +// Enable Contextual Identity Containers +#ifdef NIGHTLY_BUILD + pref("privacy.userContext.enabled", true); + pref("privacy.userContext.ui.enabled", true); +#else + pref("privacy.userContext.enabled", false); + pref("privacy.userContext.ui.enabled", false); +#endif +pref("privacy.userContext.extension", ""); +// allows user to open container menu on a left click instead of a new +// tab in the default container +pref("privacy.userContext.newTabContainerOnLeftClick.enabled", false); + +#if defined(NIGHTLY_BUILD) || defined(XP_WIN) || defined(XP_MACOSX) +// Set to true to allow the user to silence all notifications when +// sharing the screen. Only shipping on Windows and macOS out to +// release. Enabled for all desktop platforms on Nightly. +pref("privacy.webrtc.allowSilencingNotifications", true); +// Set to true to use the legacy WebRTC global indicator +pref("privacy.webrtc.legacyGlobalIndicator", false); +pref("privacy.webrtc.hideGlobalIndicator", false); +#else +pref("privacy.webrtc.allowSilencingNotifications", false); +pref("privacy.webrtc.legacyGlobalIndicator", true); +#endif + +// Set to true to add toggles to the WebRTC indicator for globally +// muting the camera and microphone. +pref("privacy.webrtc.globalMuteToggles", false); + +// Set to true to enable a warning displayed when attempting +// to switch tabs in a window that's being shared over WebRTC. +pref("privacy.webrtc.sharedTabWarning", false); + +// Defines a grace period after camera or microphone use ends, where permission +// is granted (even past navigation) to this tab + origin + device. This avoids +// re-prompting without the user having to persist permission to the site, in a +// common case of a web conference asking them for the camera in a lobby page, +// before navigating to the actual meeting room page. Doesn't survive tab close. +pref("privacy.webrtc.deviceGracePeriodTimeoutMs", 3600000); + +// Start the browser in e10s mode +pref("browser.tabs.remote.autostart", true); +pref("browser.tabs.remote.desktopbehavior", true); + +// Run media transport in a separate process? +pref("media.peerconnection.mtransport_process", true); + +// For speculatively warming up tabs to improve perceived +// performance while using the async tab switcher. +pref("browser.tabs.remote.warmup.enabled", true); + +// Caches tab layers to improve perceived performance +// of tab switches. +pref("browser.tabs.remote.tabCacheSize", 0); + +pref("browser.tabs.remote.warmup.maxTabs", 3); +pref("browser.tabs.remote.warmup.unloadDelayMs", 2000); + +// For the about:tabcrashed page +pref("browser.tabs.crashReporting.sendReport", true); +pref("browser.tabs.crashReporting.includeURL", false); + +// If true, unprivileged extensions may use experimental APIs on +// nightly and developer edition. +pref("extensions.experiments.enabled", false); + +#if defined(XP_LINUX) || defined(XP_WIN) + // Allows us to adjust the priority of child processes at the OS level + pref("dom.ipc.processPriorityManager.enabled", true); +#endif + +// Don't limit how many nodes we care about on desktop: +pref("reader.parse-node-limit", 0); + +// On desktop, we want the URLs to be included here for ease of debugging, +// and because (normally) these errors are not persisted anywhere. +pref("reader.errors.includeURLs", true); + +// What version of Pocket CTA to show in Reader Mode (Empty string is no CTA) +pref("reader.pocket.ctaVersion", ""); + +pref("view_source.tab", true); + +pref("dom.serviceWorkers.enabled", true); + +// Enable Push API. +pref("dom.push.enabled", true); + +// These are the thumbnail width/height set in about:newtab. +// If you change this, ENSURE IT IS THE SAME SIZE SET +// by about:newtab. These values are in CSS pixels. +pref("toolkit.pageThumbs.minWidth", 280); +pref("toolkit.pageThumbs.minHeight", 190); + +// Enable speech synthesis +pref("media.webspeech.synth.enabled", true); + +pref("browser.esedbreader.loglevel", "Error"); + +pref("browser.laterrun.enabled", false); + +#ifdef FUZZING_SNAPSHOT +pref("dom.ipc.processPrelaunch.enabled", false); +#else +pref("dom.ipc.processPrelaunch.enabled", true); +#endif + +pref("browser.migrate.brave.enabled", true); +pref("browser.migrate.canary.enabled", true); + +pref("browser.migrate.chrome.enabled", true); +// See comments in bug 1340115 on how we got to these numbers. +pref("browser.migrate.chrome.history.limit", 2000); +pref("browser.migrate.chrome.history.maxAgeInDays", 180); + +pref("browser.migrate.chrome-beta.enabled", true); +pref("browser.migrate.chrome-dev.enabled", true); +pref("browser.migrate.chromium.enabled", true); +pref("browser.migrate.chromium-360se.enabled", true); +pref("browser.migrate.chromium-edge.enabled", true); +pref("browser.migrate.chromium-edge-beta.enabled", true); +pref("browser.migrate.edge.enabled", true); +pref("browser.migrate.firefox.enabled", true); +pref("browser.migrate.ie.enabled", true); +pref("browser.migrate.safari.enabled", true); + +pref("browser.migrate.showBookmarksToolbarAfterMigration", true); + +pref("extensions.pocket.api", "api.getpocket.com"); +pref("extensions.pocket.enabled", true); +pref("extensions.pocket.oAuthConsumerKey", "40249-e88c401e1b1f2242d9e441c4"); +pref("extensions.pocket.site", "getpocket.com"); +pref("extensions.pocket.onSaveRecs", true); +pref("extensions.pocket.onSaveRecs.locales", "en-US,en-GB,en-CA"); + +// Enable Pocket button home panel for non link pages. +pref("extensions.pocket.showHome", true); + +// Control what version of the logged out doorhanger is displayed +// Possibilities are: `control`, `control-one-button`, `variant_a`, `variant_b`, `variant_c` +pref("extensions.pocket.loggedOutVariant", "control"); + +// Just for the new Pocket panels, enables the email signup button. +pref("extensions.pocket.refresh.emailButton.enabled", false); +// Hides the recently saved section in the home panel. +pref("extensions.pocket.refresh.hideRecentSaves.enabled", false); + +pref("signon.management.page.fileImport.enabled", false); + +#ifdef NIGHTLY_BUILD +pref("signon.management.page.os-auth.enabled", true); +#else +pref("signon.management.page.os-auth.enabled", false); +#endif +pref("signon.management.page.breach-alerts.enabled", true); +pref("signon.management.page.vulnerable-passwords.enabled", true); +pref("signon.management.page.sort", "name"); +// The utm_creative value is appended within the code (specific to the location on +// where it is clicked). Be sure that if these two prefs are updated, that +// the utm_creative param be last. +pref("signon.management.page.breachAlertUrl", + "https://monitor.firefox.com/breach-details/"); +pref("signon.passwordEditCapture.enabled", true); +pref("signon.relatedRealms.enabled", false); +pref("signon.showAutoCompleteFooter", true); +pref("signon.showAutoCompleteImport", "import"); +pref("signon.suggestImportCount", 3); + +// Enable the "Simplify Page" feature in Print Preview. This feature +// is disabled by default in toolkit. +pref("print.use_simplify_page", true); + +// Space separated list of URLS that are allowed to send objects (instead of +// only strings) through webchannels. This list is duplicated in mobile/android/app/mobile.js +pref("webchannel.allowObject.urlWhitelist", "https://content.cdn.mozilla.net https://support.mozilla.org https://install.mozilla.org"); + +// Whether or not the browser should scan for unsubmitted +// crash reports, and then show a notification for submitting +// those reports. +#ifdef NIGHTLY_BUILD + pref("browser.crashReports.unsubmittedCheck.enabled", true); +#else + pref("browser.crashReports.unsubmittedCheck.enabled", false); +#endif + +// chancesUntilSuppress is how many times we'll show the unsubmitted +// crash report notification across different days and shutdown +// without a user choice before we suppress the notification for +// some number of days. +pref("browser.crashReports.unsubmittedCheck.chancesUntilSuppress", 4); +pref("browser.crashReports.unsubmittedCheck.autoSubmit2", false); + +// Preferences for the form autofill toolkit component. +// Checkbox in sync options for credit card data sync service +pref("services.sync.engine.creditcards.available", true); +// Whether the user enabled the OS re-auth dialog. +pref("extensions.formautofill.reauth.enabled", false); + +// Whether or not to restore a session with lazy-browser tabs. +pref("browser.sessionstore.restore_tabs_lazily", true); + +pref("browser.suppress_first_window_animation", true); + +// Preference that allows individual users to disable Screenshots. +pref("extensions.screenshots.disabled", false); + +// Preference that determines whether Screenshots is opened as a dedicated browser component +pref("screenshots.browser.component.enabled", false); + +// DoH Rollout: whether to clear the mode value at shutdown. +pref("doh-rollout.clearModeOnShutdown", false); + +// URL for Learn More link for browser error logging in preferences +pref("browser.chrome.errorReporter.infoURL", + "https://support.mozilla.org/1/firefox/%VERSION%/%OS%/%LOCALE%/nightly-error-collection"); + +// Normandy client preferences +pref("app.normandy.api_url", "https://normandy.cdn.mozilla.net/api/v1"); +pref("app.normandy.dev_mode", false); +pref("app.normandy.enabled", true); +pref("app.normandy.first_run", true); +pref("app.normandy.logging.level", 50); // Warn +pref("app.normandy.run_interval_seconds", 21600); // 6 hours +pref("app.normandy.shieldLearnMoreUrl", "https://support.mozilla.org/1/firefox/%VERSION%/%OS%/%LOCALE%/shield"); +pref("app.normandy.last_seen_buildid", ""); +pref("app.normandy.onsync_skew_sec", 600); +#ifdef MOZ_DATA_REPORTING + pref("app.shield.optoutstudies.enabled", true); +#else + pref("app.shield.optoutstudies.enabled", false); +#endif + +// Multi-lingual preferences: +// *.enabled - Are langpacks available for the build of Firefox? +// *.downloadEnabled - Langpacks are allowed to be downloaded from AMO. AMO only serves +// langpacks for release and beta. Unsupported releases (like Nightly) can be +// manually tested with the following preference: +// extensions.getAddons.langpacks.url: https://mock-amo-language-tools.glitch.me/?app=firefox&type=language&appversion=%VERSION% +// *.liveReload - Switching a langpack will change the language without a restart. +// *.liveReloadBidirectional - Allows switching when moving between LTR and RTL +// languages without a full restart. +// *.aboutWelcome.languageMismatchEnabled - Enables an onboarding menu in about:welcome +// to allow a user to change their language when there is a language mismatch between +// the app and browser. +#if defined(RELEASE_OR_BETA) && !defined(MOZ_DEV_EDITION) + pref("intl.multilingual.enabled", true); + pref("intl.multilingual.downloadEnabled", true); + pref("intl.multilingual.liveReload", true); + pref("intl.multilingual.liveReloadBidirectional", false); + pref("intl.multilingual.aboutWelcome.languageMismatchEnabled", true); +#else + pref("intl.multilingual.enabled", false); + pref("intl.multilingual.downloadEnabled", false); + pref("intl.multilingual.liveReload", false); + pref("intl.multilingual.liveReloadBidirectional", false); + pref("intl.multilingual.aboutWelcome.languageMismatchEnabled", false); +#endif + +// Coverage ping is disabled by default. +pref("toolkit.coverage.enabled", false); +pref("toolkit.coverage.endpoint.base", "https://coverage.mozilla.org"); + +// Discovery prefs +pref("browser.discovery.enabled", true); +pref("browser.discovery.containers.enabled", true); +pref("browser.discovery.sites", "addons.mozilla.org"); + +pref("browser.engagement.recent_visited_origins.expiry", 86400); // 24 * 60 * 60 (24 hours in seconds) +pref("browser.engagement.downloads-button.has-used", false); +pref("browser.engagement.fxa-toolbar-menu-button.has-used", false); +pref("browser.engagement.home-button.has-used", false); +pref("browser.engagement.sidebar-button.has-used", false); +pref("browser.engagement.library-button.has-used", false); +pref("browser.engagement.ctrlTab.has-used", false); + +pref("browser.aboutConfig.showWarning", true); + +pref("browser.toolbars.keyboard_navigation", true); + +// The visibility of the bookmarks toolbar. +// "newtab": Show on the New Tab Page +// "always": Always show +// "never": Never show +pref("browser.toolbars.bookmarks.visibility", "newtab"); + +// Visibility of the "Show Other Bookmarks" menuitem in the +// bookmarks toolbar contextmenu. +pref("browser.toolbars.bookmarks.showOtherBookmarks", true); + +// Prefs to control the Firefox Account toolbar menu. +// This pref will surface existing Firefox Account information +// as a button next to the hamburger menu. It allows +// quick access to sign-in and manage your Firefox Account. +pref("identity.fxaccounts.toolbar.enabled", true); +pref("identity.fxaccounts.toolbar.accessed", false); + +// Prefs for different services supported by Firefox Account +pref("identity.fxaccounts.service.monitorLoginUrl", "https://monitor.firefox.com/"); + +// Check bundled omni JARs for corruption. +pref("corroborator.enabled", true); + +// Toolbox preferences +pref("devtools.toolbox.footer.height", 250); +pref("devtools.toolbox.sidebar.width", 500); +pref("devtools.toolbox.host", "bottom"); +pref("devtools.toolbox.previousHost", "right"); +pref("devtools.toolbox.selectedTool", "inspector"); +pref("devtools.toolbox.zoomValue", "1"); +pref("devtools.toolbox.splitconsoleEnabled", false); +pref("devtools.toolbox.splitconsoleHeight", 100); +pref("devtools.toolbox.tabsOrder", ""); +// This is only used for local Web Extension debugging, +// and allows to keep the window on top of all others, +// so that you can debug the Firefox window, while keeping the devtools +// always visible +pref("devtools.toolbox.alwaysOnTop", true); + +// The fission pref for enabling the "Multiprocess Browser Toolbox", which will +// make it possible to debug anything in Firefox (See Bug 1570639 for more information). +pref("devtools.browsertoolbox.fission", true); + +// When the Multiprocess Browser Toolbox is enabled, you can configure the scope of it: +// - "everything" will enable debugging absolutely everything in the browser +// All processes, all documents, all workers, all add-ons. +// - "parent-process" will restrict debugging to the parent process +// All privileged javascript, documents and workers running in the parent process. +pref("devtools.browsertoolbox.scope", "parent-process"); + +// This preference will enable watching top-level targets from the server side. +pref("devtools.target-switching.server.enabled", true); + +// In DevTools, create a target for each frame (i.e. not only for top-level document and +// remote frames). +pref("devtools.every-frame-target.enabled", true); + +// Controls the hability to debug popups from the same DevTools +// of the original tab the popups are coming from +pref("devtools.popups.debug", false); + +// Toolbox Button preferences +pref("devtools.command-button-pick.enabled", true); +pref("devtools.command-button-frames.enabled", true); +pref("devtools.command-button-splitconsole.enabled", true); +pref("devtools.command-button-responsive.enabled", true); +pref("devtools.command-button-screenshot.enabled", false); +pref("devtools.command-button-rulers.enabled", false); +pref("devtools.command-button-measure.enabled", false); +pref("devtools.command-button-noautohide.enabled", false); +pref("devtools.command-button-errorcount.enabled", true); +#ifndef MOZILLA_OFFICIAL + pref("devtools.command-button-experimental-prefs.enabled", true); +#endif + +// Inspector preferences +// Enable the Inspector +pref("devtools.inspector.enabled", true); +// What was the last active sidebar in the inspector +pref("devtools.inspector.selectedSidebar", "layoutview"); +pref("devtools.inspector.activeSidebar", "layoutview"); +pref("devtools.inspector.remote", false); + +// Enable the 3 pane mode in the inspector +pref("devtools.inspector.three-pane-enabled", true); +// Enable the 3 pane mode in the chrome inspector +pref("devtools.inspector.chrome.three-pane-enabled", false); +// Collapse pseudo-elements by default in the rule-view +pref("devtools.inspector.show_pseudo_elements", false); +// The default size for image preview tooltips in the rule-view/computed-view/markup-view +pref("devtools.inspector.imagePreviewTooltipSize", 300); +// Enable user agent style inspection in rule-view +pref("devtools.inspector.showUserAgentStyles", false); +// Show native anonymous content and user agent shadow roots +pref("devtools.inspector.showAllAnonymousContent", false); +// Enable the inline CSS compatiblity warning in inspector rule view +pref("devtools.inspector.ruleview.inline-compatibility-warning.enabled", false); +// Enable the compatibility tool in the inspector. +pref("devtools.inspector.compatibility.enabled", true); +// Enable overflow debugging in the inspector. +pref("devtools.overflow.debugging.enabled", true); +// Enable drag to edit properties in the inspector rule view. +pref("devtools.inspector.draggable_properties", true); + +// Grid highlighter preferences +pref("devtools.gridinspector.gridOutlineMaxColumns", 50); +pref("devtools.gridinspector.gridOutlineMaxRows", 50); +pref("devtools.gridinspector.showGridAreas", false); +pref("devtools.gridinspector.showGridLineNumbers", false); +pref("devtools.gridinspector.showInfiniteLines", false); +// Max number of grid highlighters that can be displayed +pref("devtools.gridinspector.maxHighlighters", 3); + +// Whether or not the box model panel is opened in the layout view +pref("devtools.layout.boxmodel.opened", true); +// Whether or not the flexbox panel is opened in the layout view +pref("devtools.layout.flexbox.opened", true); +// Whether or not the flexbox container panel is opened in the layout view +pref("devtools.layout.flex-container.opened", true); +// Whether or not the flexbox item panel is opened in the layout view +pref("devtools.layout.flex-item.opened", true); +// Whether or not the grid inspector panel is opened in the layout view +pref("devtools.layout.grid.opened", true); + +// Enable hovering Box Model values and jumping to their source CSS rule in the +// rule-view. +#if defined(NIGHTLY_BUILD) + pref("devtools.layout.boxmodel.highlightProperty", true); +#else + pref("devtools.layout.boxmodel.highlightProperty", false); +#endif + +// By how many times eyedropper will magnify pixels +pref("devtools.eyedropper.zoom", 6); + +// Enable to collapse attributes that are too long. +pref("devtools.markup.collapseAttributes", true); +// Length to collapse attributes +pref("devtools.markup.collapseAttributeLength", 120); +// Whether to auto-beautify the HTML on copy. +pref("devtools.markup.beautifyOnCopy", false); +// Whether or not the DOM mutation breakpoints context menu are enabled in the +// markup view. +pref("devtools.markup.mutationBreakpoints.enabled", true); + +// DevTools default color unit +pref("devtools.defaultColorUnit", "authored"); + +// Enable the Memory tools +pref("devtools.memory.enabled", true); + +pref("devtools.memory.custom-census-displays", "{}"); +pref("devtools.memory.custom-label-displays", "{}"); +pref("devtools.memory.custom-tree-map-displays", "{}"); + +pref("devtools.memory.max-individuals", 1000); +pref("devtools.memory.max-retaining-paths", 10); + +// Enable the Performance tools +pref("devtools.performance.enabled", true); + +// The default cache UI setting +pref("devtools.cache.disabled", false); + +// The default service workers UI setting +pref("devtools.serviceWorkers.testing.enabled", false); + +// Enable the Network Monitor +pref("devtools.netmonitor.enabled", true); + +pref("devtools.netmonitor.features.search", true); +pref("devtools.netmonitor.features.requestBlocking", true); + +// Enable the Application panel +pref("devtools.application.enabled", true); + +// Enable the custom formatters feature +// TODO remove once the custom formatters feature is stable (see bug 1734614) +pref("devtools.custom-formatters", false); +// This preference represents the user's choice to enable the custom formatters feature. +// While the preference above will be removed once the feature is stable, this one is menat to stay. +pref("devtools.custom-formatters.enabled", false); + +// The default Network Monitor UI settings +pref("devtools.netmonitor.panes-network-details-width", 550); +pref("devtools.netmonitor.panes-network-details-height", 450); +pref("devtools.netmonitor.panes-search-width", 550); +pref("devtools.netmonitor.panes-search-height", 450); +pref("devtools.netmonitor.filters", "[\"all\"]"); +pref("devtools.netmonitor.visibleColumns", + "[\"status\",\"method\",\"domain\",\"file\",\"initiator\",\"type\",\"transferred\",\"contentSize\",\"waterfall\"]" +); +pref("devtools.netmonitor.columnsData", + '[{"name":"status","minWidth":30,"width":5}, {"name":"method","minWidth":30,"width":5}, {"name":"domain","minWidth":30,"width":10}, {"name":"file","minWidth":30,"width":25}, {"name":"url","minWidth":30,"width":25},{"name":"initiator","minWidth":30,"width":10},{"name":"type","minWidth":30,"width":5},{"name":"transferred","minWidth":30,"width":10},{"name":"contentSize","minWidth":30,"width":5},{"name":"waterfall","minWidth":150,"width":15}]'); +pref("devtools.netmonitor.msg.payload-preview-height", 128); +pref("devtools.netmonitor.msg.visibleColumns", + '["data", "time"]' +); +pref("devtools.netmonitor.msg.displayed-messages.limit", 500); + +pref("devtools.netmonitor.response.ui.limit", 10240); + +// Save request/response bodies yes/no. +pref("devtools.netmonitor.saveRequestAndResponseBodies", true); + +// The default Network monitor HAR export setting +pref("devtools.netmonitor.har.defaultLogDir", ""); +pref("devtools.netmonitor.har.defaultFileName", "%hostname_Archive [%date]"); +pref("devtools.netmonitor.har.jsonp", false); +pref("devtools.netmonitor.har.jsonpCallback", ""); +pref("devtools.netmonitor.har.includeResponseBodies", true); +pref("devtools.netmonitor.har.compress", false); +pref("devtools.netmonitor.har.forceExport", false); +pref("devtools.netmonitor.har.pageLoadedTimeout", 1500); +pref("devtools.netmonitor.har.enableAutoExportToFile", false); + +// netmonitor audit +pref("devtools.netmonitor.audits.slow", 500); + +// Enable the new Edit and Resend panel + pref("devtools.netmonitor.features.newEditAndResend", true); + +pref("devtools.netmonitor.customRequest", '{}'); + +// Enable the Storage Inspector +pref("devtools.storage.enabled", true); + +// Enable the Style Editor. +pref("devtools.styleeditor.enabled", true); +pref("devtools.styleeditor.autocompletion-enabled", true); +pref("devtools.styleeditor.showMediaSidebar", true); +pref("devtools.styleeditor.mediaSidebarWidth", 238); +pref("devtools.styleeditor.navSidebarWidth", 245); +pref("devtools.styleeditor.transitions", true); + +// Screenshot Option Settings. +pref("devtools.screenshot.clipboard.enabled", false); +pref("devtools.screenshot.audio.enabled", true); + +// Make sure the DOM panel is hidden by default +pref("devtools.dom.enabled", false); + +// Enable the Accessibility panel. +pref("devtools.accessibility.enabled", true); + +// Web console filters +pref("devtools.webconsole.filter.error", true); +pref("devtools.webconsole.filter.warn", true); +pref("devtools.webconsole.filter.info", true); +pref("devtools.webconsole.filter.log", true); +pref("devtools.webconsole.filter.debug", true); +pref("devtools.webconsole.filter.css", false); +pref("devtools.webconsole.filter.net", false); +pref("devtools.webconsole.filter.netxhr", false); + +// Webconsole autocomplete preference +pref("devtools.webconsole.input.autocomplete",true); + +// Show context selector in console input +pref("devtools.webconsole.input.context", true); + +// Set to true to eagerly show the results of webconsole terminal evaluations +// when they don't have side effects. +pref("devtools.webconsole.input.eagerEvaluation", true); + +// Browser console filters +pref("devtools.browserconsole.filter.error", true); +pref("devtools.browserconsole.filter.warn", true); +pref("devtools.browserconsole.filter.info", true); +pref("devtools.browserconsole.filter.log", true); +pref("devtools.browserconsole.filter.debug", true); +pref("devtools.browserconsole.filter.css", false); +pref("devtools.browserconsole.filter.net", false); +pref("devtools.browserconsole.filter.netxhr", false); + +// Max number of inputs to store in web console history. +pref("devtools.webconsole.inputHistoryCount", 300); + +// Persistent logging: |true| if you want the relevant tool to keep all of the +// logged messages after reloading the page, |false| if you want the output to +// be cleared each time page navigation happens. +pref("devtools.webconsole.persistlog", false); +pref("devtools.netmonitor.persistlog", false); + +// Web Console timestamp: |true| if you want the logs and instructions +// in the Web Console to display a timestamp, or |false| to not display +// any timestamps. +pref("devtools.webconsole.timestampMessages", false); + +// Enable the webconsole sidebar toggle in Nightly builds. +#if defined(NIGHTLY_BUILD) + pref("devtools.webconsole.sidebarToggle", true); +#else + pref("devtools.webconsole.sidebarToggle", false); +#endif + +// Saved editor mode state in the console. +pref("devtools.webconsole.input.editor", false); +pref("devtools.browserconsole.input.editor", false); + +// Editor width for webconsole and browserconsole. +pref("devtools.webconsole.input.editorWidth", 0); +pref("devtools.browserconsole.input.editorWidth", 0); + +// Display an onboarding UI for the Editor mode. +pref("devtools.webconsole.input.editorOnboarding", true); + +// Enable message grouping in the console, true by default +pref("devtools.webconsole.groupWarningMessages", true); + +// Saved state of the Display content messages checkbox in the browser console. +pref("devtools.browserconsole.contentMessages", false); + +// Enable network monitoring the browser toolbox console/browser console. +pref("devtools.browserconsole.enableNetworkMonitoring", false); + +// Enable client-side mapping service for source maps +pref("devtools.source-map.client-service.enabled", true); + +// The number of lines that are displayed in the web console. +pref("devtools.hud.loglimit", 10000); + +// The developer tools editor configuration: +// - tabsize: how many spaces to use when a Tab character is displayed. +// - expandtab: expand Tab characters to spaces. +// - keymap: which keymap to use (can be 'default', 'emacs' or 'vim') +// - autoclosebrackets: whether to permit automatic bracket/quote closing. +// - detectindentation: whether to detect the indentation from the file +// - enableCodeFolding: Whether to enable code folding or not. +pref("devtools.editor.tabsize", 2); +pref("devtools.editor.expandtab", true); +pref("devtools.editor.keymap", "default"); +pref("devtools.editor.autoclosebrackets", true); +pref("devtools.editor.detectindentation", true); +pref("devtools.editor.enableCodeFolding", true); +pref("devtools.editor.autocomplete", true); + +// The angle of the viewport. +pref("devtools.responsive.viewport.angle", 0); +// The width of the viewport. +pref("devtools.responsive.viewport.width", 320); +// The height of the viewport. +pref("devtools.responsive.viewport.height", 480); +// The pixel ratio of the viewport. +pref("devtools.responsive.viewport.pixelRatio", 0); +// Whether or not the viewports are left aligned. +pref("devtools.responsive.leftAlignViewport.enabled", false); +// Whether to reload when touch simulation is toggled +pref("devtools.responsive.reloadConditions.touchSimulation", false); +// Whether to reload when user agent is changed +pref("devtools.responsive.reloadConditions.userAgent", false); +// Whether to show the notification about reloading to apply emulation +pref("devtools.responsive.reloadNotification.enabled", true); +// Whether or not touch simulation is enabled. +pref("devtools.responsive.touchSimulation.enabled", false); +// The user agent of the viewport. +pref("devtools.responsive.userAgent", ""); +// Show the custom user agent input by default +pref("devtools.responsive.showUserAgentInput", true); + +// Show tab debug targets for This Firefox (on by default for local builds). +#ifdef MOZILLA_OFFICIAL + pref("devtools.aboutdebugging.local-tab-debugging", false); +#else + pref("devtools.aboutdebugging.local-tab-debugging", true); +#endif + +// Show process debug targets. +pref("devtools.aboutdebugging.process-debugging", true); +// Stringified array of network locations that users can connect to. +pref("devtools.aboutdebugging.network-locations", "[]"); +// Debug target pane collapse/expand settings. +pref("devtools.aboutdebugging.collapsibilities.installedExtension", false); +pref("devtools.aboutdebugging.collapsibilities.otherWorker", false); +pref("devtools.aboutdebugging.collapsibilities.serviceWorker", false); +pref("devtools.aboutdebugging.collapsibilities.sharedWorker", false); +pref("devtools.aboutdebugging.collapsibilities.tab", false); +pref("devtools.aboutdebugging.collapsibilities.temporaryExtension", false); + +// about:debugging: only show system and hidden extensions in local builds by +// default. +#ifdef MOZILLA_OFFICIAL + pref("devtools.aboutdebugging.showHiddenAddons", false); +#else + pref("devtools.aboutdebugging.showHiddenAddons", true); +#endif + +// Map top-level await expressions in the console +pref("devtools.debugger.features.map-await-expression", true); + +// This relies on javascript.options.asyncstack as well or it has no effect. +pref("devtools.debugger.features.async-captured-stacks", true); +pref("devtools.debugger.features.async-live-stacks", false); + +// Disable autohide for DevTools popups and tooltips. +// This is currently not exposed by any UI to avoid making +// about:devtools-toolbox tabs unusable by mistake. +pref("devtools.popup.disable_autohide", false); + +// FirstStartup service time-out in ms +pref("first-startup.timeout", 30000); + +// Enable the default browser agent. +// The agent still runs as scheduled if this pref is disabled, +// but it exits immediately before taking any action. +#ifdef XP_WIN + pref("default-browser-agent.enabled", true); +#endif + +// Test Prefs that do nothing for testing +#if defined(EARLY_BETA_OR_EARLIER) + pref("app.normandy.test-prefs.bool", false); + pref("app.normandy.test-prefs.integer", 0); + pref("app.normandy.test-prefs.string", ""); +#endif + +// Shows 'View Image Info' item in the image context menu +#ifdef MOZ_DEV_EDITION + pref("browser.menu.showViewImageInfo", true); +#else + pref("browser.menu.showViewImageInfo", false); +#endif + +// Mozilla-controlled domains that are allowed to use non-standard +// context properties for SVG images for use in the browser UI. Please +// keep this list short. This preference (and SVG `context-` keyword support) +// are expected to go away once a standardized alternative becomes +// available. +pref("svg.context-properties.content.allowed-domains", "profile.accounts.firefox.com,profile.stage.mozaws.net"); + +// Preference that allows individual users to disable Firefox Translations. +#ifdef NIGHTLY_BUILD + pref("extensions.translations.disabled", true); +#endif + +// A set of scores for rating the relevancy of snapshots. The suffixes after the +// last decimal are prefixed by `_score` and reference the functions called in +// SnapshotScorer. +pref("browser.snapshots.score.Visit", 1); +pref("browser.snapshots.score.CurrentSession", 1); +pref("browser.snapshots.score.IsUserPersisted", 1); +pref("browser.snapshots.score.IsUserRemoved", -10); + +// A set of weights for the snapshot recommendation sources. The suffixes after +// the last decimal map to the keys of `Snapshots.recommendationSources`. +pref("browser.snapshots.source.CommonReferrer", 3); +pref("browser.snapshots.source.Overlapping", 3); +pref("browser.snapshots.source.TimeOfDay", 3); + +// Other preferences affecting snapshots scoring. +pref("browser.snapshots.relevancy.timeOfDayIntervalSeconds", 3600); + +// Expiration days for snapshots. +pref("browser.places.snapshots.expiration.days", 210); +// For user managed snapshots we use more than a year, to support yearly tasks. +pref("browser.places.snapshots.expiration.userManaged.days", 420); + +// If the user has seen the Firefox View feature tour this value reflects +// the id of the last screen they saw and whether they completed the tour +pref("browser.firefox-view.feature-tour", "{\"screen\":\"FIREFOX_VIEW_SPOTLIGHT\",\"complete\":false}"); +// Number of times the user visited about:firefoxview +pref("browser.firefox-view.view-count", 0); + +// If the user has seen the pdf.js feature tour this value reflects the tour +// message id, the id of the last screen they saw, and whether they completed the tour +pref("browser.pdfjs.feature-tour", "{\"message\":\"PDF_JS_FEATURE_TOUR\",\"screen\":\"\",\"complete\":false}"); + +// Enables cookie banner handling in Nightly in Private Browsing Mode. See +// StaticPrefList.yaml for a description of the prefs. +#ifdef NIGHTLY_BUILD + pref("cookiebanners.service.mode.privateBrowsing", 1); + pref("cookiebanners.bannerClicking.enabled", true); +#endif + +// We only want to enable this pref for Desktop nightlies. +#ifdef NIGHTLY_BUILD + pref("dom.sitepermsaddon-provider.enabled", true); +#endif diff --git a/src/changed/browser/themes/linux/browser.css b/src/changed/browser/themes/linux/browser.css index 3bb27065cc..c8868cc113 100644 --- a/src/changed/browser/themes/linux/browser.css +++ b/src/changed/browser/themes/linux/browser.css @@ -2,454 +2,424 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -@import url("chrome://browser/skin/browser-shared.css"); -@import url("chrome://browser/skin/contextmenu.css"); - -@namespace html url("http://www.w3.org/1999/xhtml"); - -/** - * We intentionally do not include browser-custom-colors.css, - * instead choosing to fall back to system colours and transparencies - * in order to accomodate the wider variety of system themes on that - * platform. - */ - - /* datcord stuff. remove unwanted ui like tabs and url bar */ - #navigator-toolbox #TabsToolbar { visibility: collapse !important; } - #navigator-toolbox .browser-toolbar { height: 0px !important; min-height: 0px !important; } - - -:root { - --toolbar-non-lwt-bgcolor: -moz-dialog; - --toolbar-non-lwt-textcolor: -moz-dialogtext; - --toolbar-non-lwt-bgimage: linear-gradient(rgba(255,255,255,.075), rgba(255,255,255,.075)); - --tab-selected-non-lwt-bgimage: linear-gradient(rgba(255,255,255,.15), rgba(255,255,255,.15)); - - --panel-separator-color: ThreeDShadow; - - --chrome-content-separator-color: ThreeDShadow; -} - -#TabsToolbar:not(:-moz-lwtheme), -#TabsToolbar[brighttext]:not(:-moz-lwtheme) { - --tab-attention-icon-color: AccentColor; -} - -:root:-moz-lwtheme { - --chrome-content-separator-color: rgba(0,0,0,.3); - - --panel-separator-color: hsla(210,4%,10%,.14); -} - -:root[lwt-popup-brighttext] { - --panel-separator-color: rgba(249,249,250,.1); -} - -#menubar-items { - -moz-box-orient: vertical; /* for flex hack */ -} - -#navigator-toolbox { - appearance: none; - background-color: transparent; - border-top: none; -} - -.browser-toolbar { - padding: 0; -} - -.browser-toolbar:not(.titlebar-color) { - background-color: var(--toolbar-bgcolor); - background-image: var(--toolbar-bgimage); - color: var(--toolbar-color); - appearance: none; - border-style: none; -} - -#nav-bar:not([tabs-hidden="true"]) { - box-shadow: 0 calc(-1 * var(--tabs-navbar-shadow-size)) 0 var(--lwt-tabs-border-color, rgba(0,0,0,.3)); - /* This is needed for some toolbar button animations. Gross :( */ - position: relative; -} - -/* Bookmark menus */ -menu.bookmark-item, -menuitem.bookmark-item { - min-width: 0; - max-width: 32em; -} - -.bookmark-item:not(.subviewbutton) > .menu-iconic-left { - margin-block: 0; -} - -/* Bookmark drag and drop styles */ -.bookmark-item[dragover-into="true"] { - background: SelectedItem !important; - color: SelectedItemText !important; -} - -.bookmark-item[cutting] > .toolbarbutton-icon, -.bookmark-item[cutting] > .menu-iconic-left > .menu-iconic-icon { - opacity: 0.5; -} - -.bookmark-item[cutting] > .toolbarbutton-text, -.bookmark-item[cutting] > .menu-iconic-left > .menu-iconic-text { - opacity: 0.7; -} - -/* Address bar */ -#urlbar, -#searchbar { - font-size: 1.05em; -} - -@supports -moz-bool-pref("browser.urlbar.experimental.expandTextOnFocus") { - #urlbar[breakout-extend] { - font-size: 1.14em; - } -} - -:root { - --toolbar-field-border-color: ThreeDShadow; -} - -/* Address bar results view */ - -:root:not(:-moz-lwtheme) { - --urlbar-popup-action-color: -moz-nativehyperlinktext; - --autocomplete-popup-highlight-background: SelectedItem; - --autocomplete-popup-highlight-color: SelectedItemText; -} - -/* AutoComplete */ - -#PopupAutoComplete > richlistbox > richlistitem[originaltype~="datalist-first"] { - border-top: 1px solid ThreeDShadow; -} - -/* Content area */ - - -#browser { - --sidebar-border-color: ThreeDShadow; -} - -.sidebar-splitter { - appearance: none; - width: 6px; - background-color: -moz-dialog; - border: 1px ThreeDShadow; - border-style: none solid; -} - -/* Tabstrip */ - -#tabbrowser-tabs { - /* override the global style to allow the selected tab to be above the nav-bar */ - z-index: auto; -} - -#TabsToolbar { - min-height: 0; -} - -#TabsToolbar:not(:-moz-lwtheme) { - appearance: auto; - -moz-default-appearance: menubar; - color: -moz-menubartext; -} - -#context_reloadTab { - list-style-image: url("moz-icon://stock/gtk-refresh?size=menu"); -} - -#context_closeOtherTabs { - list-style-image: url("moz-icon://stock/gtk-clear?size=menu"); -} - -#context_closeOtherTabs[disabled] { - list-style-image: url("moz-icon://stock/gtk-clear?size=menu&state=disabled"); -} - -#context_undoCloseTab { - list-style-image: url("moz-icon://stock/gtk-undelete?size=menu"); -} - -#context_closeTab { - list-style-image: url("moz-icon://stock/gtk-close?size=menu"); -} - -/* All tabs menupopup */ - -.alltabs-item[selected="true"] { - font-weight: bold; -} - -/* Status panel */ - -#statuspanel-label { - margin: 0; - padding: 2px 4px; - background-color: -moz-dialog; - border: 1px none ThreeDShadow; - border-top-style: solid; - color: -moz-dialogText; - text-shadow: none; - color-scheme: light; -} - -@media (-moz-content-prefers-color-scheme: dark) { - #statuspanel-label { - color-scheme: dark; - } -} - -#statuspanel:not([mirror]) > #statuspanel-label:-moz-locale-dir(ltr), -#statuspanel[mirror] > #statuspanel-label:-moz-locale-dir(rtl) { - border-right-style: solid; - border-top-right-radius: .3em; - margin-right: 1em; -} - -#statuspanel:not([mirror]) > #statuspanel-label:-moz-locale-dir(rtl), -#statuspanel[mirror] > #statuspanel-label:-moz-locale-dir(ltr) { - border-left-style: solid; - border-top-left-radius: .3em; - margin-left: 1em; -} - - -#UITourHighlight { - /* Below are some fixes for people without an X compositor on Linux. - This is why we can't have nice things: */ - /* Animations don't repaint properly without an X compositor. */ - animation-name: none !important; - /* Opacity rounds to 0 or 1 on Linux without an X compositor, making the - background color not visible. Anti-aliasing is not available either. Make a - thicker outline and cancel border-radius for that case. */ - outline: 4px solid rgb(0,200,215); - border-radius: 0 !important; -} - -#UITourTooltipDescription { - font-size: 1.05rem; -} - -#UITourTooltipClose { - margin-inline-end: -4px; -} - -/** - * Override the --arrowpanel-padding so the background extends - * to the sides and bottom of the panel. - */ -#UITourTooltipButtons { - margin-inline-start: -10px; - margin-bottom: -10px; -} - -#context-navigation > .menuitem-iconic > .menu-iconic-left { - /* override toolkit/themes/linux/global/menu.css */ - padding-inline-end: 0 !important; - margin-inline-end: 0 !important; -} - -/** - * Titlebar drawing: - * - * We draw to titlebar when Gkt+ CSD is available. This is mostly - * straight-forward, but getting the window corners to look perfect is a bit - * tricky, as there are different variables to take into account. - * - * GTK windows have both a window radius (exposed via the - * `-moz-gtk-csd-titlebar-radius`) environment variable, and a window shadow - * (which we can't read back from GTK). Note that the native drawing does draw - * the shadow already. - * - * So there are multiple configurations to consider: - * - * * Whether we're using Wayland vs. X11 - * * Whether we're using a lightweight theme or not. - * - * Consider the simple case (default system theme). We render the titlebar - * using `-moz-default-appearance: -moz-window-titlebar;`, then don't draw - * anything else. Success! - * - * Now consider lightweight themes: We need to render the native titlebar - * behind the "theme" titlebar in order to render the native shadow on X11. But - * we can't just use the #navigator-toolbox as that's where the lightweight - * theme background goes, so we need to use the #navigator-toolbox-background. - * We still have to apply the corner radii to #navigator-toolbox of course, so - * the lightweight theme background doesn't overflow the titlebar radius. - * - * In a Wayland-only world, the setup could be much simpler: We could apply the - * titlebar appearance to #navigator-toolbox, and just apply the border radius - * on the or #navigator-toolbox-background to clip the extra shadow when - * using the system theme. For the lightweight theme, we could use - * appearance: none and the titlebar radius on the toolbox. In X11 however, we - * do need the native titlebar behind at all times. - */ -@media (-moz-gtk-csd-available) { - :root[tabsintitlebar][sizemode="normal"] { - background-color: transparent; - } - - :root[tabsintitlebar] #titlebar { - color: CaptionText; - } - - :root[tabsintitlebar] #titlebar:-moz-window-inactive { - color: InactiveCaptionText; - } - - :root[tabsintitlebar] #titlebar:-moz-lwtheme { - color: inherit; - } - - :root[tabsintitlebar] #navigator-toolbox-background { - appearance: auto; - -moz-default-appearance: -moz-window-titlebar-maximized; - } - - :root[tabsintitlebar][sizemode="normal"]:not([gtktiledwindow="true"]) #navigator-toolbox-background { - -moz-default-appearance: -moz-window-titlebar; - } - - :root[tabsintitlebar][sizemode="normal"]:not([gtktiledwindow="true"]) #navigator-toolbox:-moz-lwtheme, - :root[tabsintitlebar][sizemode="normal"]:not([gtktiledwindow="true"]) dialog::backdrop { - border-top-left-radius: env(-moz-gtk-csd-titlebar-radius); - border-top-right-radius: env(-moz-gtk-csd-titlebar-radius); - } - - /* When temporarily showing the menu bar, make it at least as tall as the tab - * bar such that the window controls don't appear to move up. */ - :root[tabsintitlebar] #toolbar-menubar[autohide="true"] { - height: calc(var(--tab-min-height) + 2 * var(--tab-block-margin)); - } - - /* Make #TabsToolbar transparent as we style underlying #titlebar with - * -moz-window-titlebar (Gtk+ theme). */ - :root[tabsintitlebar] #TabsToolbar, - :root[tabsintitlebar] #toolbar-menubar { - appearance: none; - color: inherit; - } - - :root[tabsintitlebar] #main-menubar { - color: inherit; - } - - /* The button box must appear on top of the navigator-toolbox in order for - * click and hover mouse events to work properly for the button in the restored - * window state. Otherwise, elements in the navigator-toolbox, like the menubar, - * can swallow those events. */ - .titlebar-buttonbox { - z-index: 1; - -moz-box-align: center; - } - - /* Render titlebar command buttons according to system config. - * Use full scale icons here as the Gtk+ does. */ - .titlebar-min { - appearance: auto; - -moz-default-appearance: -moz-window-button-minimize; - -moz-box-ordinal-group: env(-moz-gtk-csd-minimize-button-position); - } - .titlebar-max { - appearance: auto; - -moz-default-appearance: -moz-window-button-maximize; - -moz-box-ordinal-group: env(-moz-gtk-csd-maximize-button-position); - } - .titlebar-restore { - appearance: auto; - -moz-default-appearance: -moz-window-button-restore; - -moz-box-ordinal-group: env(-moz-gtk-csd-maximize-button-position); - } - .titlebar-close { - appearance: auto; - -moz-default-appearance: -moz-window-button-close; - -moz-box-ordinal-group: env(-moz-gtk-csd-close-button-position); - } - - /* When using lightweight themes, use our own buttons since native ones might - * assume a native background in order to be visible. */ - .titlebar-button:-moz-lwtheme { - appearance: none; - border-radius: 100%; - } - .titlebar-button > .toolbarbutton-icon:-moz-lwtheme { - padding: 6px; - -moz-context-properties: stroke; - stroke: currentColor; - } - .titlebar-min:-moz-lwtheme { - list-style-image: url(chrome://browser/skin/window-controls/minimize.svg); - } - .titlebar-max:-moz-lwtheme { - list-style-image: url(chrome://browser/skin/window-controls/maximize.svg); - } - .titlebar-restore:-moz-lwtheme { - list-style-image: url(chrome://browser/skin/window-controls/restore.svg); - } - .titlebar-close:-moz-lwtheme { - list-style-image: url(chrome://browser/skin/window-controls/close.svg); - } - .titlebar-button:-moz-lwtheme:hover { - background-color: color-mix(in srgb, currentColor 12%, transparent); - } - .titlebar-button:-moz-lwtheme:hover:active { - background-color: color-mix(in srgb, currentColor 20%, transparent); - } - .titlebar-close:-moz-lwtheme:hover { - background-color: #d70022; - color: white; - } - .titlebar-close:-moz-lwtheme:hover:active { - background-color: #ff0039; - } - - @media not (-moz-gtk-csd-minimize-button) { - .titlebar-min { - display: none; - } - } - @media not (-moz-gtk-csd-maximize-button) { - .titlebar-restore, - .titlebar-max { - display: none; - } - } - @media not (-moz-gtk-csd-close-button) { - .titlebar-close { - display: none; - } - } - - @media (-moz-gtk-csd-reversed-placement) { - .titlebar-buttonbox-container { - -moz-box-ordinal-group: 0; - } - } -} - -#historySwipeAnimationPreviousArrow { - background: url("chrome://browser/skin/history-swipe-arrow.svg") - center left / 192px 192px no-repeat transparent; - will-change: transform; - -moz-context-properties: fill; -} -#historySwipeAnimationPreviousArrow:-moz-locale-dir(rtl) { - transform: scaleX(-1); -} -#historySwipeAnimationNextArrow { - background: url("chrome://browser/skin/history-swipe-arrow.svg") - center left / 192px 192px no-repeat transparent; - will-change: transform; - -moz-context-properties: fill; -} -#historySwipeAnimationNextArrow:-moz-locale-dir(ltr) { - transform: scaleX(-1); -} + @import url("chrome://browser/skin/browser-shared.css"); + @import url("chrome://browser/skin/contextmenu.css"); + + @namespace html url("http://www.w3.org/1999/xhtml"); + + /** + * We intentionally do not include browser-custom-colors.css, + * instead choosing to fall back to system colours and transparencies + * in order to accomodate the wider variety of system themes on that + * platform. + */ + + /* Datcord stuff. remove unwanted ui like tabs and url bar */ + #TabsToolbar { visibility: collapse !important; } + #navigator-toolbox .browser-toolbar { height: 0px !important; min-height: 0px !important; } + + :root { + --toolbar-non-lwt-bgcolor: color-mix(in srgb, -moz-dialog 85%, white); + --toolbar-non-lwt-textcolor: -moz-dialogtext; + + --chrome-content-separator-color: ThreeDShadow; + } + + #TabsToolbar:not(:-moz-lwtheme), + #TabsToolbar[brighttext]:not(:-moz-lwtheme) { + --tab-attention-icon-color: AccentColor; + } + + :root:-moz-lwtheme { + --chrome-content-separator-color: rgba(0,0,0,.3); + } + + #menubar-items { + -moz-box-orient: vertical; /* for flex hack */ + } + + #navigator-toolbox { + appearance: none; + background-color: transparent; + border-top: none; + } + + .browser-toolbar { + padding: 0; + } + + .browser-toolbar:not(.titlebar-color) { + background-color: var(--toolbar-bgcolor); + color: var(--toolbar-color); + appearance: none; + border-style: none; + } + + #nav-bar:not([tabs-hidden="true"]) { + box-shadow: 0 calc(-1 * var(--tabs-navbar-shadow-size)) 0 var(--lwt-tabs-border-color, rgba(0,0,0,.3)); + /* This is needed for some toolbar button animations. Gross :( */ + position: relative; + } + + /* Bookmark menus */ + menu.bookmark-item, + menuitem.bookmark-item { + min-width: 0; + max-width: 32em; + } + + .bookmark-item:not(.subviewbutton) > .menu-iconic-left { + margin-block: 0; + } + + /* Bookmark drag and drop styles */ + .bookmark-item[dragover-into="true"] { + background: SelectedItem !important; + color: SelectedItemText !important; + } + + .bookmark-item[cutting] > .toolbarbutton-icon, + .bookmark-item[cutting] > .menu-iconic-left > .menu-iconic-icon { + opacity: 0.5; + } + + .bookmark-item[cutting] > .toolbarbutton-text, + .bookmark-item[cutting] > .menu-iconic-left > .menu-iconic-text { + opacity: 0.7; + } + + /* Address bar */ + #urlbar, + #searchbar { + font-size: 1.05em; + } + + @supports -moz-bool-pref("browser.urlbar.experimental.expandTextOnFocus") { + #urlbar[breakout-extend] { + font-size: 1.14em; + } + } + + :root { + --toolbar-field-border-color: ThreeDShadow; + } + + /* Address bar results view */ + + :root:not(:-moz-lwtheme) { + --urlbar-popup-action-color: -moz-nativehyperlinktext; + --autocomplete-popup-highlight-background: SelectedItem; + --autocomplete-popup-highlight-color: SelectedItemText; + } + + /* AutoComplete */ + + #PopupAutoComplete > richlistbox > richlistitem[originaltype~="datalist-first"] { + border-top: 1px solid ThreeDShadow; + } + + /* Content area */ + + + #browser { + --sidebar-border-color: ThreeDShadow; + } + + .sidebar-splitter { + appearance: none; + width: 6px; + background-color: -moz-dialog; + border: 1px ThreeDShadow; + border-style: none solid; + } + + /* Tabstrip */ + + #tabbrowser-tabs { + /* override the global style to allow the selected tab to be above the nav-bar */ + z-index: auto; + } + + #TabsToolbar { + min-height: 0; + } + + #TabsToolbar:not(:-moz-lwtheme) { + appearance: auto; + -moz-default-appearance: menubar; + color: -moz-menubartext; + } + + #context_reloadTab { + list-style-image: url("moz-icon://stock/gtk-refresh?size=menu"); + } + + #context_closeOtherTabs { + list-style-image: url("moz-icon://stock/gtk-clear?size=menu"); + } + + #context_closeOtherTabs[disabled] { + list-style-image: url("moz-icon://stock/gtk-clear?size=menu&state=disabled"); + } + + #context_undoCloseTab { + list-style-image: url("moz-icon://stock/gtk-undelete?size=menu"); + } + + #context_closeTab { + list-style-image: url("moz-icon://stock/gtk-close?size=menu"); + } + + /* All tabs menupopup */ + + .alltabs-item[selected="true"] { + font-weight: bold; + } + + /* Status panel */ + + #statuspanel-label { + margin: 0; + padding: 2px 4px; + background-color: -moz-dialog; + border: 1px none ThreeDShadow; + border-top-style: solid; + color: -moz-dialogText; + text-shadow: none; + color-scheme: light; + } + + @media (-moz-content-prefers-color-scheme: dark) { + #statuspanel-label { + color-scheme: dark; + } + } + + #statuspanel:not([mirror]) > #statuspanel-label:-moz-locale-dir(ltr), + #statuspanel[mirror] > #statuspanel-label:-moz-locale-dir(rtl) { + border-right-style: solid; + border-top-right-radius: .3em; + margin-right: 1em; + } + + #statuspanel:not([mirror]) > #statuspanel-label:-moz-locale-dir(rtl), + #statuspanel[mirror] > #statuspanel-label:-moz-locale-dir(ltr) { + border-left-style: solid; + border-top-left-radius: .3em; + margin-left: 1em; + } + + + #UITourHighlight { + /* Below are some fixes for people without an X compositor on Linux. + This is why we can't have nice things: */ + /* Animations don't repaint properly without an X compositor. */ + animation-name: none !important; + /* Opacity rounds to 0 or 1 on Linux without an X compositor, making the + background color not visible. Anti-aliasing is not available either. Make a + thicker outline and cancel border-radius for that case. */ + outline: 4px solid rgb(0,200,215); + border-radius: 0 !important; + } + + #UITourTooltipDescription { + font-size: 1.05rem; + } + + #UITourTooltipClose { + margin-inline-end: -4px; + } + + /** + * Override the --arrowpanel-padding so the background extends + * to the sides and bottom of the panel. + */ + #UITourTooltipButtons { + margin-inline-start: -10px; + margin-bottom: -10px; + } + + #context-navigation > .menuitem-iconic > .menu-iconic-left { + /* override toolkit/themes/linux/global/menu.css */ + padding-inline-end: 0 !important; + margin-inline-end: 0 !important; + } + + /** + * Titlebar drawing: + * + * We draw to titlebar when Gkt+ CSD is available. This is mostly + * straight-forward, but getting the window corners to look perfect is a bit + * tricky, as there are different variables to take into account. + * + * GTK windows have both a window radius (exposed via the + * `-moz-gtk-csd-titlebar-radius`) environment variable, and a window shadow + * (which we can't read back from GTK). Note that the native drawing does draw + * the shadow already. + * + * So there are multiple configurations to consider: + * + * * Whether we're using Wayland vs. X11 + * * Whether we're using a lightweight theme or not. + * + * Consider the simple case (default system theme). We render the titlebar + * using `-moz-default-appearance: -moz-window-titlebar;`, then don't draw + * anything else. Success! + * + * Now consider lightweight themes: We need to render the native titlebar + * behind the "theme" titlebar in order to render the native shadow on X11. But + * we can't just use the #navigator-toolbox as that's where the lightweight + * theme background goes, so we need to use the #navigator-toolbox-background. + * We still have to apply the corner radii to #navigator-toolbox of course, so + * the lightweight theme background doesn't overflow the titlebar radius. + * + * In a Wayland-only world, the setup could be much simpler: We could apply the + * titlebar appearance to #navigator-toolbox, and just apply the border radius + * on the or #navigator-toolbox-background to clip the extra shadow when + * using the system theme. For the lightweight theme, we could use + * appearance: none and the titlebar radius on the toolbox. In X11 however, we + * do need the native titlebar behind at all times. + */ + @media (-moz-gtk-csd-available) { + :root[tabsintitlebar][sizemode="normal"] { + background-color: transparent; + } + + :root[tabsintitlebar] #titlebar { + color: CaptionText; + } + + :root[tabsintitlebar] #titlebar:-moz-window-inactive { + color: InactiveCaptionText; + } + + :root[tabsintitlebar] #titlebar:-moz-lwtheme { + color: inherit; + } + + :root[tabsintitlebar] #navigator-toolbox-background { + appearance: auto; + -moz-default-appearance: -moz-window-titlebar-maximized; + } + + :root[tabsintitlebar][sizemode="normal"]:not([gtktiledwindow="true"]) #navigator-toolbox-background { + -moz-default-appearance: -moz-window-titlebar; + } + + :root[tabsintitlebar][sizemode="normal"]:not([gtktiledwindow="true"]) #navigator-toolbox:-moz-lwtheme, + :root[tabsintitlebar][sizemode="normal"]:not([gtktiledwindow="true"]) dialog::backdrop { + border-top-left-radius: env(-moz-gtk-csd-titlebar-radius); + border-top-right-radius: env(-moz-gtk-csd-titlebar-radius); + } + + /* When temporarily showing the menu bar, make it at least as tall as the tab + * bar such that the window controls don't appear to move up. */ + :root[tabsintitlebar] #toolbar-menubar[autohide="true"] { + height: calc(var(--tab-min-height) + 2 * var(--tab-block-margin)); + } + + /* Make #TabsToolbar transparent as we style underlying #titlebar with + * -moz-window-titlebar (Gtk+ theme). */ + :root[tabsintitlebar] #TabsToolbar, + :root[tabsintitlebar] #toolbar-menubar { + appearance: none; + color: inherit; + } + + :root[tabsintitlebar] #main-menubar { + color: inherit; + } + + /* The button box must appear on top of the navigator-toolbox in order for + * click and hover mouse events to work properly for the button in the restored + * window state. Otherwise, elements in the navigator-toolbox, like the menubar, + * can swallow those events. */ + .titlebar-buttonbox { + z-index: 1; + -moz-box-align: center; + } + + /* Render titlebar command buttons according to system config. + * Use full scale icons here as the Gtk+ does. */ + .titlebar-min { + appearance: auto; + -moz-default-appearance: -moz-window-button-minimize; + -moz-box-ordinal-group: env(-moz-gtk-csd-minimize-button-position); + } + .titlebar-max { + appearance: auto; + -moz-default-appearance: -moz-window-button-maximize; + -moz-box-ordinal-group: env(-moz-gtk-csd-maximize-button-position); + } + .titlebar-restore { + appearance: auto; + -moz-default-appearance: -moz-window-button-restore; + -moz-box-ordinal-group: env(-moz-gtk-csd-maximize-button-position); + } + .titlebar-close { + appearance: auto; + -moz-default-appearance: -moz-window-button-close; + -moz-box-ordinal-group: env(-moz-gtk-csd-close-button-position); + } + + /* When using lightweight themes, use our own buttons since native ones might + * assume a native background in order to be visible. */ + .titlebar-button:-moz-lwtheme { + appearance: none; + border-radius: 100%; + } + .titlebar-button > .toolbarbutton-icon:-moz-lwtheme { + padding: 6px; + -moz-context-properties: stroke; + stroke: currentColor; + } + .titlebar-min:-moz-lwtheme { + list-style-image: url(chrome://browser/skin/window-controls/minimize.svg); + } + .titlebar-max:-moz-lwtheme { + list-style-image: url(chrome://browser/skin/window-controls/maximize.svg); + } + .titlebar-restore:-moz-lwtheme { + list-style-image: url(chrome://browser/skin/window-controls/restore.svg); + } + .titlebar-close:-moz-lwtheme { + list-style-image: url(chrome://browser/skin/window-controls/close.svg); + } + .titlebar-button:-moz-lwtheme:hover { + background-color: color-mix(in srgb, currentColor 12%, transparent); + } + .titlebar-button:-moz-lwtheme:hover:active { + background-color: color-mix(in srgb, currentColor 20%, transparent); + } + .titlebar-close:-moz-lwtheme:hover { + background-color: #d70022; + color: white; + } + .titlebar-close:-moz-lwtheme:hover:active { + background-color: #ff0039; + } + + @media not (-moz-gtk-csd-minimize-button) { + .titlebar-min { + display: none; + } + } + @media not (-moz-gtk-csd-maximize-button) { + .titlebar-restore, + .titlebar-max { + display: none; + } + } + @media not (-moz-gtk-csd-close-button) { + .titlebar-close { + display: none; + } + } + + @media (-moz-gtk-csd-reversed-placement) { + .titlebar-buttonbox-container { + -moz-box-ordinal-group: 0; + } + } + } + \ No newline at end of file From 0fab3697bcf201d327c3e6b7561364474353ce89 Mon Sep 17 00:00:00 2001 From: gamingdoom <37276884+gamingdoom@users.noreply.github.com> Date: Sat, 28 Jan 2023 20:46:06 -0800 Subject: [PATCH 03/29] force titlebar --- .../browser/app/profile/firefox.js.bak | 2768 ----------------- 1 file changed, 2768 deletions(-) delete mode 100644 src/changed/browser/app/profile/firefox.js.bak diff --git a/src/changed/browser/app/profile/firefox.js.bak b/src/changed/browser/app/profile/firefox.js.bak deleted file mode 100644 index 07a6679e7f..0000000000 --- a/src/changed/browser/app/profile/firefox.js.bak +++ /dev/null @@ -1,2768 +0,0 @@ -is:issue is:closed #filter dumbComments emptyLines substitution - -// -*- indent-tabs-mode: nil; js-indent-level: 2 -*- -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this -// file, You can obtain one at http://mozilla.org/MPL/2.0/. - -// Non-static prefs that are specific to desktop Firefox belong in this file -// (unless there is a compelling and documented reason for them to belong in -// another file). -// -// Please indent all prefs defined within #ifdef/#ifndef conditions. This -// improves readability, particular for conditional blocks that exceed a single -// screen. - -#ifdef XP_UNIX - #ifndef XP_MACOSX - #define UNIX_BUT_NOT_MAC - #endif -#endif - -// Datcord open links in default browser -pref("network.protocol-handler.external.open", true); -pref("network.protocol-handler.warn-external.open", true); -pref("network.protocol-handler.expose.open", false); - -pref("browser.hiddenWindowChromeURL", "chrome://browser/content/hiddenWindowMac.xhtml"); - -// Enables some extra Extension System Logging (can reduce performance) -pref("extensions.logging.enabled", false); - -// Disables strict compatibility, making addons compatible-by-default. -pref("extensions.strictCompatibility", false); - -// Temporary preference to forcibly make themes more safe with Australis even if -// extensions.checkCompatibility=false has been set. -pref("extensions.checkCompatibility.temporaryThemeOverride_minAppVersion", "29.0a1"); - -pref("extensions.webextOptionalPermissionPrompts", true); -// If enabled, install origin permission verification happens after addons are downloaded. -pref("extensions.postDownloadThirdPartyPrompt", true); - -// Preferences for AMO integration -pref("extensions.getAddons.cache.enabled", true); -pref("extensions.getAddons.get.url", "https://services.addons.mozilla.org/api/v4/addons/search/?guid=%IDS%&lang=%LOCALE%"); -pref("extensions.getAddons.search.browseURL", "https://addons.mozilla.org/%LOCALE%/firefox/search?q=%TERMS%&platform=%OS%&appver=%VERSION%"); -pref("extensions.getAddons.link.url", "https://addons.mozilla.org/%LOCALE%/firefox/"); -pref("extensions.getAddons.langpacks.url", "https://services.addons.mozilla.org/api/v4/addons/language-tools/?app=firefox&type=language&appversion=%VERSION%"); -pref("extensions.getAddons.discovery.api_url", "https://services.addons.mozilla.org/api/v4/discovery/?lang=%LOCALE%&edition=%DISTRIBUTION%"); - -// The URL for the privacy policy related to recommended extensions. -pref("extensions.recommendations.privacyPolicyUrl", "https://www.mozilla.org/privacy/firefox/?utm_source=firefox-browser&utm_medium=firefox-browser&utm_content=privacy-policy-link#addons"); -// The URL for Firefox Color, recommended on the theme page in about:addons. -pref("extensions.recommendations.themeRecommendationUrl", "https://color.firefox.com/?utm_source=firefox-browser&utm_medium=firefox-browser&utm_content=theme-footer-link"); - -pref("extensions.update.autoUpdateDefault", true); - -// Check AUS for system add-on updates. -pref("extensions.systemAddon.update.url", "https://aus5.mozilla.org/update/3/SystemAddons/%VERSION%/%BUILD_ID%/%BUILD_TARGET%/%LOCALE%/%CHANNEL%/%OS_VERSION%/%DISTRIBUTION%/%DISTRIBUTION_VERSION%/update.xml"); -pref("extensions.systemAddon.update.enabled", true); - -// 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); -// Scopes to scan for changes at startup. -pref("extensions.startupScanScopes", 0); - -pref("extensions.geckoProfiler.acceptedExtensionIds", "geckoprofiler@mozilla.com,quantum-foxfooding@mozilla.com,raptor@mozilla.org"); - - -pref("extensions.webextensions.remote", true); - -// Require signed add-ons by default -pref("extensions.langpacks.signatures.required", true); -pref("xpinstall.signatures.required", false); -pref("xpinstall.signatures.devInfoURL", "https://wiki.mozilla.org/Addons/Extension_Signing"); - -// Enable extensionStorage storage actor by default -pref("devtools.storage.extensionStorage.enabled", true); - -// Dictionary download preference -pref("browser.dictionaries.download.url", "https://addons.mozilla.org/%LOCALE%/firefox/language-tools/"); - -// At startup, should we check to see if the installation -// date is older than some threshold -pref("app.update.checkInstallTime", true); - -// The number of days a binary is permitted to be old without checking is defined in -// firefox-branding.js (app.update.checkInstallTime.days) - -// The minimum delay in seconds for the timer to fire between the notification -// of each consumer of the timer manager. -// minimum=30 seconds, default=120 seconds, and maximum=300 seconds -pref("app.update.timerMinimumDelay", 120); - -// The minimum delay in milliseconds for the first firing after startup of the timer -// to notify consumers of the timer manager. -// minimum=10 seconds, default=30 seconds, and maximum=120 seconds -pref("app.update.timerFirstInterval", 30000); - -// App-specific update preferences - -// The interval to check for updates (app.update.interval) is defined in -// firefox-branding.js - -// Enables some extra Application Update Logging (can reduce performance) -pref("app.update.log", false); -// Causes Application Update Logging to be sent to a file in the profile -// directory. This preference is automatically disabled on application start to -// prevent it from being left on accidentally. Turning this pref on enables -// logging, even if app.update.log is false. -pref("app.update.log.file", false); - -// The number of general background check failures to allow before notifying the -// user of the failure. User initiated update checks always notify the user of -// the failure. -pref("app.update.backgroundMaxErrors", 10); - -// Ids of the links to the "What's new" update documentation -pref("app.update.link.updateAvailableWhatsNew", "update-available-whats-new"); -pref("app.update.link.updateManualWhatsNew", "update-manual-whats-new"); - -// How many times we should let downloads fail before prompting the user to -// download a fresh installer. -pref("app.update.download.promptMaxAttempts", 2); - -// How many times we should let an elevation prompt fail before prompting the user to -// download a fresh installer. -pref("app.update.elevation.promptMaxAttempts", 2); - -#ifdef NIGHTLY_BUILD - // Whether to delay popup notifications when an update is available and - // suppress them when an update is installed and waiting for user to restart. - // If set to true, these notifications will immediately be shown as banners in - // the app menu and as badges on the app menu button. Update available - // notifications will not create popup prompts until a week has passed without - // the user installing the update. Update restart notifications will not - // create popup prompts at all. This doesn't affect update notifications - // triggered by errors/failures or manual install prompts. - pref("app.update.suppressPrompts", false); -#endif - -// If set to true, a message will be displayed in the hamburger menu while -// an update is being downloaded. -pref("app.update.notifyDuringDownload", false); - -// If set to true, the Update Service will automatically download updates if the -// user can apply updates. This pref is no longer used on Windows, except as the -// default value to migrate to the new location that this data is now stored -// (which is in a file in the update directory). Because of this, this pref -// should no longer be used directly. Instead, getAppUpdateAutoEnabled and -// getAppUpdateAutoEnabled from UpdateUtils.jsm should be used. -#ifndef XP_WIN - pref("app.update.auto", true); -#endif - -// If set to true, the Update Service will apply updates in the background -// when it finishes downloading them. -pref("app.update.staging.enabled", true); - -// Update service URL: -// app.update.url was removed in Bug 1568994 -// app.update.url.manual is in branding section -// app.update.url.details is in branding section - -// app.update.badgeWaitTime is in branding section -// app.update.interval is in branding section -// app.update.promptWaitTime is in branding section - -// Whether or not to attempt using the service for updates. -#ifdef MOZ_MAINTENANCE_SERVICE - pref("app.update.service.enabled", true); -#endif - -#ifdef MOZ_BITS_DOWNLOAD - // If set to true, the Update Service will attempt to use Windows BITS to - // download updates and will fallback to downloading internally if that fails. - pref("app.update.BITS.enabled", true); -#endif - -pref("app.update.langpack.enabled", true); - -#if defined(MOZ_UPDATE_AGENT) - pref("app.update.background.loglevel", "error"); - pref("app.update.background.timeoutSec", 600); - // By default, check for updates when the browser is not running every 7 hours. - pref("app.update.background.interval", 25200); - // By default, snapshot Firefox Messaging System targeting for use by the - // background update task every 30 minutes. - pref("app.update.background.messaging.targeting.snapshot.intervalSec", 1800); -#endif - -#ifdef XP_MACOSX - // If set to true, Firefox will automatically restart if it is left running - // with no browser windows open. - pref("app.update.noWindowAutoRestart.enabled", true); - // How long to wait after all browser windows are closed before restarting, - // in milliseconds. 5 min = 300000 ms - pref("app.update.noWindowAutoRestart.delayMs", 300000); -#endif - -#if defined(MOZ_BACKGROUNDTASKS) - // The amount of time, in seconds, before background tasks time out and exit. - // Tasks can override this default (10 minutes). - pref("toolkit.backgroundtasks.defaultTimeoutSec", 600); -#endif - -// Symmetric (can be overridden by individual extensions) update preferences. -// e.g. -// extensions.{GUID}.update.enabled -// extensions.{GUID}.update.url -// .. etc .. -// -pref("extensions.update.enabled", true); -pref("extensions.update.url", "https://versioncheck.addons.mozilla.org/update/VersionCheck.php?reqVersion=%REQ_VERSION%&id=%ITEM_ID%&version=%ITEM_VERSION%&maxAppVersion=%ITEM_MAXAPPVERSION%&status=%ITEM_STATUS%&appID=%APP_ID%&appVersion=%APP_VERSION%&appOS=%APP_OS%&appABI=%APP_ABI%&locale=%APP_LOCALE%¤tAppVersion=%CURRENT_APP_VERSION%&updateType=%UPDATE_TYPE%&compatMode=%COMPATIBILITY_MODE%"); -pref("extensions.update.background.url", "https://versioncheck-bg.addons.mozilla.org/update/VersionCheck.php?reqVersion=%REQ_VERSION%&id=%ITEM_ID%&version=%ITEM_VERSION%&maxAppVersion=%ITEM_MAXAPPVERSION%&status=%ITEM_STATUS%&appID=%APP_ID%&appVersion=%APP_VERSION%&appOS=%APP_OS%&appABI=%APP_ABI%&locale=%APP_LOCALE%¤tAppVersion=%CURRENT_APP_VERSION%&updateType=%UPDATE_TYPE%&compatMode=%COMPATIBILITY_MODE%"); -pref("extensions.update.interval", 86400); // Check for updates to Extensions and - // Themes every day - -pref("lightweightThemes.getMoreURL", "https://addons.mozilla.org/%LOCALE%/firefox/themes"); - -#if defined(MOZ_WIDEVINE_EME) - pref("browser.eme.ui.enabled", true); -#else - pref("browser.eme.ui.enabled", false); -#endif - -// UI tour experience. -pref("browser.uitour.enabled", false); -pref("browser.uitour.loglevel", "Error"); -pref("browser.uitour.requireSecure", true); -pref("browser.uitour.themeOrigin", "https://addons.mozilla.org/%LOCALE%/firefox/themes/"); -pref("browser.uitour.url", "https://www.mozilla.org/%LOCALE%/firefox/%VERSION%/tour/"); -// How long to show a Hearbeat survey (two hours, in seconds) -pref("browser.uitour.surveyDuration", 7200); - -pref("keyword.enabled", true); - -// Fixup whitelists, the urlbar won't try to search for these words, but will -// instead consider them valid TLDs. Don't check these directly, use -// Services.uriFixup.isDomainKnown() instead. -pref("browser.fixup.domainwhitelist.localhost", true); -// https://tools.ietf.org/html/rfc2606 -pref("browser.fixup.domainsuffixwhitelist.test", true); -pref("browser.fixup.domainsuffixwhitelist.example", true); -pref("browser.fixup.domainsuffixwhitelist.invalid", true); -pref("browser.fixup.domainsuffixwhitelist.localhost", true); -// https://tools.ietf.org/html/draft-wkumari-dnsop-internal-00 -pref("browser.fixup.domainsuffixwhitelist.internal", true); -// https://tools.ietf.org/html/rfc6762 -pref("browser.fixup.domainsuffixwhitelist.local", true); - -// Whether to always go through the DNS server before sending a single word -// search string, that may contain a valid host, to a search engine. -pref("browser.fixup.dns_first_for_single_words", false); - -#ifdef UNIX_BUT_NOT_MAC - pref("general.autoScroll", false); -#else - pref("general.autoScroll", true); -#endif - -// UI density of the browser chrome. This mostly affects toolbarbutton -// and urlbar spacing. The possible values are 0=normal, 1=compact, 2=touch. -pref("browser.uidensity", 0); -// Whether Firefox will automatically override the uidensity to "touch" -// while the user is in a touch environment (such as Windows tablet mode). -pref("browser.touchmode.auto", true); -// Whether Firefox will show the Compact Mode UIDensity option. -pref("browser.compactmode.show", false); - -// At startup, check if we're the default browser and prompt user if not. -pref("browser.shell.checkDefaultBrowser", false); -pref("browser.shell.shortcutFavicons",true); -pref("browser.shell.mostRecentDateSetAsDefault", ""); -pref("browser.shell.skipDefaultBrowserCheckOnFirstRun", true); -pref("browser.shell.didSkipDefaultBrowserCheckOnFirstRun", false); -pref("browser.shell.defaultBrowserCheckCount", 0); -#if defined(XP_WIN) -// Attempt to set the default browser on Windows 10 using the UserChoice registry keys, -// before falling back to launching the modern Settings dialog. -pref("browser.shell.setDefaultBrowserUserChoice", false); -// When setting the default browser on Windows 10 using the UserChoice -// registry keys, also try to set Firefox as the default PDF handler. -pref("browser.shell.setDefaultPDFHandler", false); -// When setting Firefox as the default PDF handler (subject to conditions -// above), only set Firefox as the default PDF handler when the existing handler -// is a known browser, and not when existing handler is another PDF handler such -// as Acrobat Reader or Nitro PDF. -pref("browser.shell.setDefaultPDFHandler.onlyReplaceBrowsers", true); -#endif - - -// 0 = blank, 1 = home (browser.startup.homepage), 2 = last visited page, 3 = resume previous browser session -// The behavior of option 3 is detailed at: http://wiki.mozilla.org/Session_Restore -pref("browser.startup.page", 1); -pref("browser.startup.homepage", "https://discord.com/app"); -#ifdef NIGHTLY_BUILD -pref("browser.startup.homepage.abouthome_cache.enabled", true); -#else -pref("browser.startup.homepage.abouthome_cache.enabled", false); -#endif -pref("browser.startup.homepage.abouthome_cache.loglevel", "Warn"); - -// Whether we should skip the homepage when opening the first-run page -pref("browser.startup.firstrunSkipsHomepage", false); - -// Whether we should show the session-restore infobar on startup -pref("browser.startup.couldRestoreSession.count", 0); - -// Show an about:blank window as early as possible for quick startup feedback. -// Held to nightly on Linux due to bug 1450626. -// Disabled on Mac because the bouncing dock icon already provides feedback. -#if defined(XP_WIN) || defined(MOZ_WIDGET_GTK) && defined(NIGHTLY_BUILD) - pref("browser.startup.blankWindow", true); -#else - pref("browser.startup.blankWindow", false); -#endif - -// Show a skeleton UI window prior to loading libxul. Only visible for windows -// users as it is not implemented anywhere else. -#if defined(XP_WIN) -pref("browser.startup.preXulSkeletonUI", true); -#endif - -// Show an upgrade dialog on major upgrades. -pref("browser.startup.upgradeDialog.enabled", false); - -// Don't create the hidden window during startup on -// platforms that don't always need it (Win/Linux). -pref("toolkit.lazyHiddenWindow", true); - -pref("browser.chrome.site_icons", true); -// browser.warnOnQuit == false will override all other possible prompts when quitting or restarting -pref("browser.warnOnQuit", false); - -// Whether to warn when quitting when using the shortcut key. -#if defined(XP_WIN) - pref("browser.warnOnQuitShortcut", false); -#else - pref("browser.warnOnQuitShortcut", true); -#endif - -// TODO bug 1702563: Renable fullscreen autohide by default on macOS. -#ifdef XP_MACOSX - pref("browser.fullscreen.autohide", false); -#else - pref("browser.fullscreen.autohide", true); -#endif - -pref("browser.overlink-delay", 80); - -pref("browser.theme.colorway-closet", true); - -// Whether using `ctrl` when hitting return/enter in the URL bar -// (or clicking 'go') should prefix 'www.' and suffix -// browser.fixup.alternate.suffix to the URL bar value prior to -// navigating. -pref("browser.urlbar.ctrlCanonizesURLs", true); - -// Whether we announce to screen readers when tab-to-search results are -// inserted. -pref("browser.urlbar.accessibility.tabToSearch.announceResults", true); - -// Control autoFill behavior -pref("browser.urlbar.autoFill", true); - -// Whether enabling adaptive history autofill. -pref("browser.urlbar.autoFill.adaptiveHistory.enabled", false); - -// Minimum char length of the user's search string to enable adaptive history -// autofill. -pref("browser.urlbar.autoFill.adaptiveHistory.minCharsThreshold", 0); - -// Whether to warm up network connections for autofill or search results. -pref("browser.urlbar.speculativeConnect.enabled", true); - -// Whether bookmarklets should be filtered out of Address Bar matches. -// This is enabled for security reasons, when true it is still possible to -// search for bookmarklets typing "javascript: " followed by the actual query. -pref("browser.urlbar.filter.javascript", true); - -// Enable a certain level of urlbar logging to the Browser Console. See Log.jsm. -pref("browser.urlbar.loglevel", "Error"); - -// the maximum number of results to show in autocomplete when doing richResults -pref("browser.urlbar.maxRichResults", 10); - -// The maximum number of historical search results to show. -pref("browser.urlbar.maxHistoricalSearchSuggestions", 2); - -// The default behavior for the urlbar can be configured to use any combination -// of the match filters with each additional filter adding more results (union). -pref("browser.urlbar.suggest.bookmark", false); -pref("browser.urlbar.suggest.history", false); -pref("browser.urlbar.suggest.openpage", false); -pref("browser.urlbar.suggest.remotetab", false); -pref("browser.urlbar.suggest.searches", false); -pref("browser.urlbar.suggest.topsites", false); -pref("browser.urlbar.suggest.engines", false); -pref("browser.urlbar.suggest.calculator", false); - -#if defined(EARLY_BETA_OR_EARLIER) - // Enable QuickActions and its urlbar search mode button. - pref("browser.urlbar.quickactions.enabled", true); - pref("browser.urlbar.suggest.quickactions", true); - pref("browser.urlbar.shortcuts.quickactions", true); - pref("browser.urlbar.quickactions.showPrefs", true); - pref("browser.urlbar.quickactions.showInZeroPrefix", true); -#endif - -// When `browser.urlbar.bestMatch.enabled` is true, this controls whether best -// match results are shown in the urlbar. This pref is exposed to the user in -// the UI, and it's sticky so that its user-branch value persists regardless of -// whatever Firefox Suggest experiments or rollouts the user is enrolled in over -// time. -pref("browser.urlbar.suggest.bestmatch", true, sticky); - -// Whether non-sponsored quick suggest results are shown in the urlbar. This -// pref is exposed to the user in the UI, and it's sticky so that its -// user-branch value persists regardless of whatever Firefox Suggest scenarios, -// with their various default-branch values, the user is enrolled in over time. -pref("browser.urlbar.suggest.quicksuggest.nonsponsored", false, sticky); - -// Whether sponsored quick suggest results are shown in the urlbar. This pref is -// exposed to the user in the UI, and it's sticky so that its user-branch value -// persists regardless of whatever Firefox Suggest scenarios, with their various -// default-branch values, the user is enrolled in over time. -pref("browser.urlbar.suggest.quicksuggest.sponsored", false, sticky); - -// Whether data collection is enabled for quick suggest results in the urlbar. -// This pref is exposed to the user in the UI, and it's sticky so that its -// user-branch value persists regardless of whatever Firefox Suggest scenarios, -// with their various default-branch values, the user is enrolled in over time. -pref("browser.urlbar.quicksuggest.dataCollection.enabled", false, sticky); - -// Whether the quick suggest feature in the urlbar is enabled. -pref("browser.urlbar.quicksuggest.enabled", false); - -// Whether to show the QuickSuggest onboarding dialog. -pref("browser.urlbar.quicksuggest.shouldShowOnboardingDialog", true); - -// Show QuickSuggest onboarding dialog on the nth browser restarts. -pref("browser.urlbar.quicksuggest.showOnboardingDialogAfterNRestarts", 0); - -// The indexes of the sponsored and non-sponsored quick suggest results within -// the general results group. -pref("browser.urlbar.quicksuggest.sponsoredIndex", -1); -pref("browser.urlbar.quicksuggest.nonSponsoredIndex", -1); - -// Whether Remote Settings is enabled as a quick suggest source. -pref("browser.urlbar.quicksuggest.remoteSettings.enabled", true); - -// Whether quick suggest results can be shown in position specified in the -// suggestions. -pref("browser.urlbar.quicksuggest.allowPositionInSuggestions", true); - -// Whether non-sponsored quick suggest results are subject to impression -// frequency caps. -pref("browser.urlbar.quicksuggest.impressionCaps.nonSponsoredEnabled", false); - -// Whether sponsored quick suggest results are subject to impression frequency -// caps. -pref("browser.urlbar.quicksuggest.impressionCaps.sponsoredEnabled", false); - -// Whether the usual non-best-match quick suggest results can be blocked. This -// pref is a fallback for the Nimbus variable `quickSuggestBlockingEnabled`. -pref("browser.urlbar.quicksuggest.blockingEnabled", false); - -// Whether unit conversion is enabled. -#ifdef NIGHTLY_BUILD -pref("browser.urlbar.unitConversion.enabled", true); -#else -pref("browser.urlbar.unitConversion.enabled", false); -#endif - -// Whether to show search suggestions before general results like history and -// bookmarks. -pref("browser.urlbar.showSearchSuggestionsFirst", true); - -// As a user privacy measure, don't fetch search suggestions if a pasted string -// is longer than this. -pref("browser.urlbar.maxCharsForSearchSuggestions", 100); - -pref("browser.urlbar.trimURLs", true); - -// If changed to true, copying the entire URL from the location bar will put the -// human readable (percent-decoded) URL on the clipboard. -pref("browser.urlbar.decodeURLsOnCopy", false); - -// Whether or not to move tabs into the active window when using the "Switch to -// Tab" feature of the awesomebar. -pref("browser.urlbar.switchTabs.adoptIntoActiveWindow", false); - -// Whether addresses and search results typed into the address bar -// should be opened in new tabs by default. -pref("browser.urlbar.openintab", false); - -// If true, we show tail suggestions when available. -pref("browser.urlbar.richSuggestions.tail", true); - -// If true, top sites may include sponsored ones. -pref("browser.urlbar.sponsoredTopSites", false); - -// If true, show the search term in the URL bar for the users default engine. -pref("browser.urlbar.showSearchTerms", false); - -// Controls the empty search behavior in Search Mode: -// 0 - Show nothing -// 1 - Show search history -// 2 - Show search and browsing history -pref("browser.urlbar.update2.emptySearchBehavior", 0); - -// Whether the urlbar displays one-offs to filter searches to history, -// bookmarks, or tabs. -pref("browser.urlbar.shortcuts.bookmarks", true); -pref("browser.urlbar.shortcuts.tabs", true); -pref("browser.urlbar.shortcuts.history", true); - -pref("browser.urlbar.eventTelemetry.enabled", false); - -// When we send events to Urlbar extensions, we wait this amount of time in -// milliseconds for them to respond before timing out. -pref("browser.urlbar.extension.timeout", 400); - -// Controls when to DNS resolve single word search strings, after they were -// searched for. If the string is resolved as a valid host, show a -// "Did you mean to go to 'host'" prompt. -// 0 - never resolve; 1 - use heuristics (default); 2 - always resolve -pref("browser.urlbar.dnsResolveSingleWordsAfterSearch", 0); - -// Whether the results panel should be kept open during IME composition. -// The default value is false because some IME open a picker panel, and we end -// up with two panels on top of each other. Since for now we can't detect that -// we leave this choice to the user, hopefully in the future this can be flipped -// for everyone. -pref("browser.urlbar.keepPanelOpenDuringImeComposition", false); - -// Whether Firefox Suggest group labels are shown in the urlbar view. -pref("browser.urlbar.groupLabels.enabled", true); - -// Whether Merino is enabled as a quick suggest source in the urlbar. -pref("browser.urlbar.merino.enabled", true); - -// The Merino endpoint URL, not including parameters. -pref("browser.urlbar.merino.endpointURL", "https://merino.services.mozilla.com/api/v1/suggest"); - -// Timeout for Merino fetches (ms). -pref("browser.urlbar.merino.timeoutMs", 200); - -// Comma-separated list of providers to request from Merino -pref("browser.urlbar.merino.providers", ""); - -// Comma-separated list of client variants to send to Merino -pref("browser.urlbar.merino.clientVariants", ""); - -// Whether the best match feature in the urlbar is enabled. -pref("browser.urlbar.bestMatch.enabled", false); - -// Whether best match results can be blocked. This pref is a fallback for the -// Nimbus variable `bestMatchBlockingEnabled`. -pref("browser.urlbar.bestMatch.blockingEnabled", false); - -pref("browser.altClickSave", false); - -// Enable logging downloads operations to the Console. -pref("browser.download.loglevel", "Error"); - -// Number of milliseconds to wait for the http headers (and thus -// the Content-Disposition filename) before giving up and falling back to -// picking a filename without that info in hand so that the user sees some -// feedback from their action. -pref("browser.download.saveLinkAsFilenameTimeout", 4000); - -pref("browser.download.useDownloadDir", true); -pref("browser.download.folderList", 1); -pref("browser.download.manager.addToRecentDocs", true); -pref("browser.download.manager.resumeOnWakeDelay", 10000); - -// This allows disabling the animated notifications shown by -// the Downloads Indicator when a download starts or completes. -pref("browser.download.animateNotifications", true); - -// This records whether or not the panel has been shown at least once. -pref("browser.download.panel.shown", false); - -// This records whether or not to show the 'Open in system viewer' context menu item when appropriate -pref("browser.download.openInSystemViewerContextMenuItem", true); - -// This records whether or not to show the 'Always open...' context menu item when appropriate -pref("browser.download.alwaysOpenInSystemViewerContextMenuItem", true); - -// Open downloaded file types internally for the given types. -// This is a comma-separated list, the empty string ("") means no types are -// viewable internally. -pref("browser.download.viewableInternally.enabledTypes", "xml,svg,webp,avif,jxl"); - - -// This controls whether the button is automatically shown/hidden depending -// on whether there are downloads to show. -pref("browser.download.autohideButton", true); - -// Controls whether to open the downloads panel every time a download begins. -// The first download ever run in a new profile will still open the panel. -pref("browser.download.alwaysOpenPanel", true); - -// Determines the behavior of the "Delete" item in the downloads context menu. -// Valid values are 0, 1, and 2. -// 0 - Don't remove the download from session list or history. -// 1 - Remove the download from session list, but not history. -// 2 - Remove the download from both session list and history. -pref("browser.download.clearHistoryOnDelete", 0); - -#ifndef XP_MACOSX - pref("browser.helperApps.deleteTempFileOnExit", true); -#endif - -// This controls the visibility of the radio button in the -// Unknown Content Type (Helper App) dialog that will open -// the content in the browser for PDF and for other -// Viewable Internally types -// (see browser.download.viewableInternally.enabledTypes) -pref("browser.helperApps.showOpenOptionForPdfJS", true); -pref("browser.helperApps.showOpenOptionForViewableInternally", true); - -// search engine removal URL -pref("browser.search.searchEngineRemoval", "https://support.mozilla.org/1/firefox/%VERSION%/%OS%/%LOCALE%/search-engine-removal"); - -// search engines URL -pref("browser.search.searchEnginesURL", "https://addons.mozilla.org/%LOCALE%/firefox/search-engines/"); - -// search bar results always open in a new tab -pref("browser.search.openintab", false); - -// context menu searches open in the foreground -pref("browser.search.context.loadInBackground", false); - -// comma separated list of of engines to hide in the search panel. -pref("browser.search.hiddenOneOffs", ""); - -// Mirrors whether the search-container widget is in the navigation toolbar. -pref("browser.search.widget.inNavBar", false); - -// Enables display of the options for the user using a separate default search -// engine in private browsing mode. -pref("browser.search.separatePrivateDefault.ui.enabled", false); -// The maximum amount of times the private default banner is shown. -pref("browser.search.separatePrivateDefault.ui.banner.max", 0); - -// Enables the display of the Mozilla VPN banner in private browsing windows -pref("browser.privatebrowsing.vpnpromourl", ""); - -// Enables the new private browsing indicator. -pref("browser.privatebrowsing.enable-new-indicator", true); - -// Enables the new about:privatebrowsing logo. -pref("browser.privatebrowsing.enable-new-logo", true); - -// Whether the user has opted-in to recommended settings for data features. -pref("browser.dataFeatureRecommendations.enabled", false); - -// Temporary pref to control whether or not Private Browsing windows show up -// as separate icons in the Windows taskbar. -pref("browser.privateWindowSeparation.enabled", true); - -// Use dark theme variant for PBM windows. This is only supported if the theme -// sets darkTheme data. -pref("browser.theme.dark-private-windows", true); - -// Controls visibility of the privacy segmentation preferences section. -pref("browser.privacySegmentation.preferences.show", false); - -pref("browser.sessionhistory.max_entries", 50); - -// Built-in default permissions. -pref("permissions.manager.defaultsUrl", "resource://app/defaults/permissions"); - -// Set default fallback values for site permissions we want -// the user to be able to globally change. -pref("permissions.default.camera", 1); -pref("permissions.default.microphone", 1); -pref("permissions.default.geo", 0); -pref("permissions.default.xr", 0); -pref("permissions.default.desktop-notification", 0); -pref("permissions.default.shortcuts", 0); - -pref("permissions.desktop-notification.postPrompt.enabled", true); -pref("permissions.desktop-notification.notNow.enabled", false); - -pref("permissions.fullscreen.allowed", true); - -// handle links targeting new windows -// 1=current window/tab, 2=new window, 3=new tab in most recent window -pref("browser.link.open_newwindow", 1); - -// handle external links (i.e. links opened from a different application) -// default: use browser.link.open_newwindow -// 1-3: see browser.link.open_newwindow for interpretation -pref("browser.link.open_newwindow.override.external", -1); - -// 0: no restrictions - divert everything -// 1: don't divert window.open at all -// 2: don't divert window.open with features -pref("browser.link.open_newwindow.restriction", 2); - -// If true, this pref causes windows opened by window.open to be forced into new -// tabs (rather than potentially opening separate windows, depending on -// window.open arguments) when the browser is in fullscreen mode. -// We set this differently on Mac because the fullscreen implementation there is -// different. -#ifdef XP_MACOSX - pref("browser.link.open_newwindow.disabled_in_fullscreen", true); -#else - pref("browser.link.open_newwindow.disabled_in_fullscreen", false); -#endif - -// Tabbed browser -pref("browser.tabs.closeTabByDblclick", false); -pref("browser.tabs.closeWindowWithLastTab", true); -pref("browser.tabs.allowTabDetach", true); -// Open related links to a tab, e.g., link in current tab, at next to the -// current tab if |insertRelatedAfterCurrent| is true. Otherwise, always -// append new tab to the end. -pref("browser.tabs.insertRelatedAfterCurrent", true); -// Open all links, e.g., bookmarks, history items at next to current tab -// if |insertAfterCurrent| is true. Otherwise, append new tab to the end -// for non-related links. Note that if this is set to true, it will trump -// the value of browser.tabs.insertRelatedAfterCurrent. -pref("browser.tabs.insertAfterCurrent", false); -pref("browser.tabs.warnOnClose", false); -pref("browser.tabs.warnOnCloseOtherTabs", true); -pref("browser.tabs.warnOnOpen", true); -pref("browser.tabs.maxOpenBeforeWarn", 15); -pref("browser.tabs.loadInBackground", true); -pref("browser.tabs.opentabfor.middleclick", true); -pref("browser.tabs.loadDivertedInBackground", false); -pref("browser.tabs.loadBookmarksInBackground", false); -pref("browser.tabs.loadBookmarksInTabs", false); -pref("browser.tabs.tabClipWidth", 140); -pref("browser.tabs.tabMinWidth", 76); -// Users running in any of the following language codes will have the -// secondary text on tabs hidden due to size constraints and readability -// of the text at small font sizes. -pref("browser.tabs.secondaryTextUnsupportedLocales", "ar,bn,bo,ckb,fa,gu,he,hi,ja,km,kn,ko,lo,mr,my,ne,pa,si,ta,te,th,ur,zh"); - -//Control the visibility of Tab Manager Menu. -pref("browser.tabs.tabmanager.enabled", true); - -// When tabs opened by links in other tabs via a combination of -// browser.link.open_newwindow being set to 3 and target="_blank" etc are -// closed: -// true return to the tab that opened this tab (its owner) -// false return to the adjacent tab (old default) -pref("browser.tabs.selectOwnerOnClose", true); - -// This should match Chromium's audio indicator delay. -pref("browser.tabs.delayHidingAudioPlayingIconMS", 3000); - -// Pref to control whether we use a separate privileged content process -// for about: pages. This pref name did not age well: we will have multiple -// types of privileged content processes, each with different privileges. -// types of privleged content processes, each with different privleges. -pref("browser.tabs.remote.separatePrivilegedContentProcess", true); - -#if defined(NIGHTLY_BUILD) && !defined(MOZ_ASAN) - // This pref will cause assertions when a remoteType triggers a process switch - // to a new remoteType it should not be able to trigger. - pref("browser.tabs.remote.enforceRemoteTypeRestrictions", true); -#endif - -// Pref to control whether we use a separate privileged content process -// for certain mozilla webpages (which are listed in the pref -// browser.tabs.remote.separatedMozillaDomains). -pref("browser.tabs.remote.separatePrivilegedMozillaWebContentProcess", true); - -#ifdef NIGHTLY_BUILD -pref("browser.tabs.tooltipsShowPidAndActiveness", true); -#else -pref("browser.tabs.tooltipsShowPidAndActiveness", false); -#endif - -pref("browser.tabs.firefox-view", true); -pref("browser.tabs.firefox-view.logLevel", "Warn"); -pref("browser.tabs.firefox-view.notify-for-tabs", false); - -// allow_eval_* is enabled on Firefox Desktop only at this -// point in time -pref("security.allow_eval_with_system_principal", false); -pref("security.allow_eval_in_parent_process", false); - -pref("security.allow_parent_unrestricted_js_loads", false); - -// Unload tabs when available memory is running low -#if defined(XP_MACOSX) || defined(XP_WIN) - pref("browser.tabs.unloadOnLowMemory", true); -#else - pref("browser.tabs.unloadOnLowMemory", false); -#endif - -// Tab Unloader does not unload tabs whose last inactive period is longer than -// this value (in milliseconds). -pref("browser.tabs.min_inactive_duration_before_unload", 600000); - -#if defined(XP_MACOSX) - // During low memory periods, poll with this frequency (milliseconds) - // until memory is no longer low. Changes to the pref take effect immediately. - // Browser restart not required. Chosen to be consistent with the windows - // implementation, but otherwise the 10s value is arbitrary. - pref("browser.lowMemoryPollingIntervalMS", 10000); - - // Pref to control the reponse taken on macOS when the OS is under memory - // pressure. Changes to the pref take effect immediately. Browser restart not - // required. The pref value is a bitmask: - // 0x0: No response (other than recording for telemetry, crash reporting) - // 0x1: Use the tab unloading feature to reduce memory use. Requires that - // the above "browser.tabs.unloadOnLowMemory" pref be set to true for tab - // unloading to occur. - // 0x2: Issue the internal "memory-pressure" notification to reduce memory use - // 0x3: Both 0x1 and 0x2. - #if defined(NIGHTLY_BUILD) - pref("browser.lowMemoryResponseMask", 3); - #else - pref("browser.lowMemoryResponseMask", 0); - #endif - - // Controls which macOS memory-pressure level triggers the browser low memory - // response. Changes to the pref take effect immediately. Browser restart not - // required. By default, use the "critical" level as that occurs after "warn" - // and we only want to trigger the low memory reponse when necessary. - // The macOS system memory-pressure level is either none, "warn", or - // "critical". The OS notifies the browser when the level changes. A false - // value for the pref indicates the low memory response should occur when - // reaching the "critical" level. A true value indicates the response should - // occur when reaching the "warn" level. - pref("browser.lowMemoryResponseOnWarn", false); -#endif - -pref("browser.ctrlTab.sortByRecentlyUsed", false); - -// By default, do not export HTML at shutdown. -// If true, at shutdown the bookmarks in your menu and toolbar will -// be exported as HTML to the bookmarks.html file. -pref("browser.bookmarks.autoExportHTML", false); - -// The maximum number of daily bookmark backups to -// keep in {PROFILEDIR}/bookmarkbackups. Special values: -// -1: unlimited -// 0: no backups created (and deletes all existing backups) -pref("browser.bookmarks.max_backups", 15); - -// Whether menu should close after Ctrl-click, middle-click, etc. -pref("browser.bookmarks.openInTabClosesMenu", true); - -// Where new bookmarks go by default. -// Use PlacesUIUtils.defaultParentGuid to read this; do NOT read the pref -// directly. -// The value is one of: -// - a bookmarks guid -// - "toolbar", "menu" or "unfiled" for those folders. -// If we use the pref but the value isn't any of these, we'll fall back to -// the bookmarks toolbar as a default. -pref("browser.bookmarks.defaultLocation", "toolbar"); - -// Scripts & Windows prefs -pref("dom.disable_open_during_load", true); - -// allow JS to move and resize existing windows -pref("dom.disable_window_move_resize", false); -// prevent JS from monkeying with window focus, etc -pref("dom.disable_window_flip", true); - -// popups.policy 1=allow,2=reject -pref("privacy.popups.policy", 1); -pref("privacy.popups.usecustom", true); -pref("privacy.popups.showBrowserMessage", true); - -pref("privacy.item.cookies", false); - -pref("privacy.clearOnShutdown.history", true); -pref("privacy.clearOnShutdown.formdata", true); -pref("privacy.clearOnShutdown.downloads", true); -pref("privacy.clearOnShutdown.cookies", true); -pref("privacy.clearOnShutdown.cache", true); -pref("privacy.clearOnShutdown.sessions", true); -pref("privacy.clearOnShutdown.offlineApps", false); -pref("privacy.clearOnShutdown.siteSettings", false); -pref("privacy.clearOnShutdown.openWindows", false); - -pref("privacy.cpd.history", true); -pref("privacy.cpd.formdata", true); -pref("privacy.cpd.passwords", false); -pref("privacy.cpd.downloads", true); -pref("privacy.cpd.cookies", true); -pref("privacy.cpd.cache", true); -pref("privacy.cpd.sessions", true); -pref("privacy.cpd.offlineApps", false); -pref("privacy.cpd.siteSettings", false); -pref("privacy.cpd.openWindows", false); - -pref("privacy.history.custom", false); - -// What default should we use for the time span in the sanitizer: -// 0 - Clear everything -// 1 - Last Hour -// 2 - Last 2 Hours -// 3 - Last 4 Hours -// 4 - Today -// 5 - Last 5 minutes -// 6 - Last 24 hours -pref("privacy.sanitize.timeSpan", 1); - -pref("privacy.sanitize.migrateFx3Prefs", false); - -pref("privacy.panicButton.enabled", true); - -// Time until temporary permissions expire, in ms -pref("privacy.temporary_permission_expire_time_ms", 3600000); - -pref("network.proxy.share_proxy_settings", false); // use the same proxy settings for all protocols - -// simple gestures support -pref("browser.gesture.swipe.left", "Browser:BackOrBackDuplicate"); -pref("browser.gesture.swipe.right", "Browser:ForwardOrForwardDuplicate"); -pref("browser.gesture.swipe.up", "cmd_scrollTop"); -pref("browser.gesture.swipe.down", "cmd_scrollBottom"); -pref("browser.gesture.pinch.latched", false); -pref("browser.gesture.pinch.threshold", 25); -#if defined(XP_WIN) || defined(MOZ_WIDGET_GTK) - // Enabled for touch input display zoom. - pref("browser.gesture.pinch.out", "cmd_fullZoomEnlarge"); - pref("browser.gesture.pinch.in", "cmd_fullZoomReduce"); - pref("browser.gesture.pinch.out.shift", "cmd_fullZoomReset"); - pref("browser.gesture.pinch.in.shift", "cmd_fullZoomReset"); -#else - // Disabled by default due to issues with track pad input. - pref("browser.gesture.pinch.out", ""); - pref("browser.gesture.pinch.in", ""); - pref("browser.gesture.pinch.out.shift", ""); - pref("browser.gesture.pinch.in.shift", ""); -#endif -pref("browser.gesture.twist.latched", false); -pref("browser.gesture.twist.threshold", 0); -pref("browser.gesture.twist.right", "cmd_gestureRotateRight"); -pref("browser.gesture.twist.left", "cmd_gestureRotateLeft"); -pref("browser.gesture.twist.end", "cmd_gestureRotateEnd"); -#if defined(XP_WIN) || defined(MOZ_WIDGET_GTK) - pref("browser.gesture.tap", "cmd_fullZoomReset"); -#else - pref("browser.gesture.tap", ""); -#endif - -pref("browser.history_swipe_animation.disabled", false); - -// 0: Nothing happens -// 1: Scrolling contents -// 2: Go back or go forward, in your history -// 3: Zoom in or out (reflowing zoom). -// 4: Treat vertical wheel as horizontal scroll -// 5: Zoom in or out (pinch zoom). -#ifdef XP_MACOSX - // On macOS, if the wheel has one axis only, shift+wheel comes through as a - // horizontal scroll event. Thus, we can't assign anything other than normal - // scrolling to shift+wheel. - pref("mousewheel.with_shift.action", 1); - pref("mousewheel.with_alt.action", 2); - // On MacOS X, control+wheel is typically handled by system and we don't - // receive the event. So, command key which is the main modifier key for - // acceleration is the best modifier for zoom-in/out. However, we should keep - // the control key setting for backward compatibility. - pref("mousewheel.with_meta.action", 3); // command key on Mac - // Disable control-/meta-modified horizontal wheel events, since those are - // used on Mac as part of modified swipe gestures (e.g. Left swipe+Cmd is - // "go back" in a new tab). - pref("mousewheel.with_control.action.override_x", 0); - pref("mousewheel.with_meta.action.override_x", 0); -#else - // On the other platforms (non-macOS), user may use legacy mouse which - // supports only vertical wheel but want to scroll horizontally. For such - // users, we should provide horizontal scroll with shift+wheel (same as - // Chrome). However, shift+wheel was used for navigating history. For users - // who want to keep using this feature, let's enable it with alt+wheel. This - // is better for consistency with macOS users. - pref("mousewheel.with_shift.action", 4); - pref("mousewheel.with_alt.action", 2); - pref("mousewheel.with_meta.action", 1); // win key on Win, Super/Hyper on Linux -#endif -pref("mousewheel.with_control.action",3); -pref("mousewheel.with_win.action", 1); - -pref("browser.xul.error_pages.expert_bad_cert", false); -pref("browser.xul.error_pages.show_safe_browsing_details_on_load", false); - -// Enable captive portal detection. -pref("network.captive-portal-service.enabled", true); - -// If true, network link events will change the value of navigator.onLine -pref("network.manage-offline-status", true); - -// We want to make sure mail URLs are handled externally... -pref("network.protocol-handler.external.mailto", true); // for mail -pref("network.protocol-handler.external.news", true); // for news -pref("network.protocol-handler.external.snews", true); // for secure news -pref("network.protocol-handler.external.nntp", true); // also news -#ifdef XP_WIN - pref("network.protocol-handler.external.ms-windows-store", true); -#endif - -// ...without warning dialogs -pref("network.protocol-handler.warn-external.mailto", false); -pref("network.protocol-handler.warn-external.news", false); -pref("network.protocol-handler.warn-external.snews", false); -pref("network.protocol-handler.warn-external.nntp", false); -#ifdef XP_WIN - pref("network.protocol-handler.warn-external.ms-windows-store", false); -#endif - -// By default, all protocol handlers are exposed. This means that -// the browser will respond to openURL commands for all URL types. -// It will also try to open link clicks inside the browser before -// failing over to the system handlers. -pref("network.protocol-handler.expose-all", true); -pref("network.protocol-handler.expose.mailto", false); -pref("network.protocol-handler.expose.news", false); -pref("network.protocol-handler.expose.snews", false); -pref("network.protocol-handler.expose.nntp", false); - -pref("accessibility.typeaheadfind", false); -pref("accessibility.typeaheadfind.timeout", 5000); -pref("accessibility.typeaheadfind.linksonly", false); -pref("accessibility.typeaheadfind.flashBar", 1); - -pref("plugins.testmode", false); - -// Should plugins that are hidden show the infobar UI? -pref("plugins.show_infobar", false); - -#if defined(_ARM64_) && defined(XP_WIN) - pref("plugin.default.state", 0); -#else - pref("plugin.default.state", 1); -#endif - -// Prefer HTML5 video over Flash content, and don't -// load plugin instances with no src declared. -// These prefs are documented in details on all.js. -// With the "follow-ctp" setting, this will only -// apply to users that have plugin.state.flash = 1. -pref("plugins.favorfallback.mode", "follow-ctp"); -pref("plugins.favorfallback.rules", "nosrc,video"); - -// Toggling Search bar on and off in about:preferences -pref("browser.preferences.search", true); -#if defined(NIGHTLY_BUILD) -pref("browser.preferences.experimental", true); -#else -pref("browser.preferences.experimental", false); -#endif -pref("browser.preferences.moreFromMozilla", true); -pref("browser.preferences.experimental.hidden", false); -pref("browser.preferences.defaultPerformanceSettings.enabled", true); - -pref("browser.proton.toolbar.version", 0); - -// Backspace and Shift+Backspace behavior -// 0 goes Back/Forward -// 1 act like PgUp/PgDown -// 2 and other values, nothing -pref("browser.backspace_action", 2); - -pref("intl.regional_prefs.use_os_locales", false); - -// this will automatically enable inline spellchecking (if it is available) for -// editable elements in HTML -// 0 = spellcheck nothing -// 1 = check multi-line controls [default] -// 2 = check multi/single line controls -pref("layout.spellcheckDefault", 1); - -pref("browser.send_pings", false); - -pref("browser.geolocation.warning.infoURL", "https://www.mozilla.org/%LOCALE%/firefox/geolocation/"); -pref("browser.xr.warning.infoURL", "https://www.mozilla.org/%LOCALE%/firefox/xr/"); - -pref("browser.sessionstore.resume_from_crash", true); -pref("browser.sessionstore.resume_session_once", false); -pref("browser.sessionstore.resuming_after_os_restart", false); - -// Minimal interval between two save operations in milliseconds (while the user is idle). -pref("browser.sessionstore.interval.idle", 3600000); // 1h - -// Time (ms) before we assume that the user is idle and that we don't need to -// collect/save the session quite as often. -pref("browser.sessionstore.idleDelay", 180000); // 3 minutes - -// on which sites to save text data, POSTDATA and cookies -// 0 = everywhere, 1 = unencrypted sites, 2 = nowhere -pref("browser.sessionstore.privacy_level", 0); -// how many tabs can be reopened (per window) -pref("browser.sessionstore.max_tabs_undo", 25); -// how many windows can be reopened (per session) - on non-OS X platforms this -// pref may be ignored when dealing with pop-up windows to ensure proper startup -pref("browser.sessionstore.max_windows_undo", 3); -// number of crashes that can occur before the about:sessionrestore page is displayed -// (this pref has no effect if more than 6 hours have passed since the last crash) -pref("browser.sessionstore.max_resumed_crashes", 1); -// number of back button session history entries to restore (-1 = all of them) -pref("browser.sessionstore.max_serialize_back", 10); -// number of forward button session history entries to restore (-1 = all of them) -pref("browser.sessionstore.max_serialize_forward", -1); -// restore_on_demand overrides MAX_CONCURRENT_TAB_RESTORES (sessionstore constant) -// and restore_hidden_tabs. When true, tabs will not be restored until they are -// focused (also applies to tabs that aren't visible). When false, the values -// for MAX_CONCURRENT_TAB_RESTORES and restore_hidden_tabs are respected. -// Selected tabs are always restored regardless of this pref. -pref("browser.sessionstore.restore_on_demand", true); -// Whether to automatically restore hidden tabs (i.e., tabs in other tab groups) or not -pref("browser.sessionstore.restore_hidden_tabs", false); -// If restore_on_demand is set, pinned tabs are restored on startup by default. -// When set to true, this pref overrides that behavior, and pinned tabs will only -// be restored when they are focused. -pref("browser.sessionstore.restore_pinned_tabs_on_demand", false); -// The version at which we performed the latest upgrade backup -pref("browser.sessionstore.upgradeBackup.latestBuildID", ""); -// How many upgrade backups should be kept -pref("browser.sessionstore.upgradeBackup.maxUpgradeBackups", 3); -// End-users should not run sessionstore in debug mode -pref("browser.sessionstore.debug", false); -// Forget closed windows/tabs after two weeks -pref("browser.sessionstore.cleanup.forget_closed_after", 1209600000); -// Platform collects session storage data for session store -pref("browser.sessionstore.collect_session_storage", true); - -// Don't quit the browser when Ctrl + Q is pressed. -pref("browser.quitShortcut.disabled", false); - -// allow META refresh by default -pref("accessibility.blockautorefresh", false); - -// Whether history is enabled or not. -pref("places.history.enabled", true); - -// Whether or not diacritics must match in history text searches. -pref("places.search.matchDiacritics", false); - -// the (maximum) number of the recent visits to sample -// when calculating frecency -pref("places.frecency.numVisits", 10); - -// buckets (in days) for frecency calculation -pref("places.frecency.firstBucketCutoff", 4); -pref("places.frecency.secondBucketCutoff", 14); -pref("places.frecency.thirdBucketCutoff", 31); -pref("places.frecency.fourthBucketCutoff", 90); - -// weights for buckets for frecency calculations -pref("places.frecency.firstBucketWeight", 100); -pref("places.frecency.secondBucketWeight", 70); -pref("places.frecency.thirdBucketWeight", 50); -pref("places.frecency.fourthBucketWeight", 30); -pref("places.frecency.defaultBucketWeight", 10); - -// bonus (in percent) for visit transition types for frecency calculations -pref("places.frecency.embedVisitBonus", 0); -pref("places.frecency.framedLinkVisitBonus", 0); -pref("places.frecency.linkVisitBonus", 100); -pref("places.frecency.typedVisitBonus", 2000); -// The bookmarks bonus is always added on top of any other bonus, including -// the redirect source and the typed ones. -pref("places.frecency.bookmarkVisitBonus", 75); -// The redirect source bonus overwrites any transition bonus. -// 0 would hide these pages, instead we want them low ranked. Thus we use -// linkVisitBonus - bookmarkVisitBonus, so that a bookmarked source is in par -// with a common link. -pref("places.frecency.redirectSourceVisitBonus", 25); -pref("places.frecency.downloadVisitBonus", 0); -// The perm/temp redirects here relate to redirect targets, not sources. -pref("places.frecency.permRedirectVisitBonus", 50); -pref("places.frecency.tempRedirectVisitBonus", 40); -pref("places.frecency.reloadVisitBonus", 0); -pref("places.frecency.defaultVisitBonus", 0); - -// bonus (in percent) for place types for frecency calculations -pref("places.frecency.unvisitedBookmarkBonus", 140); -pref("places.frecency.unvisitedTypedBonus", 200); - -// Clear data by base domain (including partitioned storage) when the user -// selects "Forget About This Site". -pref("places.forgetThisSite.clearByBaseDomain", true); - -// Whether to warm up network connections for places: menus and places: toolbar. -pref("browser.places.speculativeConnect.enabled", true); - -// Controls behavior of the "Add Exception" dialog launched from SSL error pages -// 0 - don't pre-populate anything -// 1 - pre-populate site URL, but don't fetch certificate -// 2 - pre-populate site URL and pre-fetch certificate -pref("browser.ssl_override_behavior", 2); - -// if true, use full page zoom instead of text zoom -pref("browser.zoom.full", true); - -// Whether or not to save and restore zoom levels on a per-site basis. -pref("browser.zoom.siteSpecific", true); - -// Whether or not to update background tabs to the current zoom level. -pref("browser.zoom.updateBackgroundTabs", true); - -// The breakpad report server to link to in about:crashes -pref("breakpad.reportURL", "https://crash-stats.mozilla.org/report/index/"); - -// URL for "Learn More" for DataCollection -pref("toolkit.datacollection.infoURL", - "https://www.mozilla.org/legal/privacy/firefox.html"); - -// URL for "Learn More" for Crash Reporter -pref("toolkit.crashreporter.infoURL", - "https://www.mozilla.org/legal/privacy/firefox.html#crash-reporter"); - -// base URL for web-based support pages -pref("app.support.baseURL", "https://support.mozilla.org/1/firefox/%VERSION%/%OS%/%LOCALE%/"); - -// base url for web-based feedback pages -pref("app.feedback.baseURL", "https://ideas.mozilla.org/"); - -// Name of alternate about: page for certificate errors (when undefined, defaults to about:neterror) -pref("security.alternate_certificate_error_page", "certerror"); - -pref("security.certerrors.recordEventTelemetry", true); -pref("security.certerrors.permanentOverride", true); -pref("security.certerrors.mitm.priming.enabled", true); -pref("security.certerrors.mitm.priming.endpoint", "https://mitmdetection.services.mozilla.com/"); -pref("security.certerrors.mitm.auto_enable_enterprise_roots", true); - -// Whether the bookmark panel should be shown when bookmarking a page. -pref("browser.bookmarks.editDialog.showForNewBookmarks", true); - -// Don't try to alter this pref, it'll be reset the next time you use the -// bookmarking dialog -pref("browser.bookmarks.editDialog.firstEditField", "namePicker"); - -// The number of recently selected folders in the edit bookmarks dialog. -pref("browser.bookmarks.editDialog.maxRecentFolders", 7); - -// By default the Edit Bookmark dialog is instant-apply. This feature pref will allow to -// just save on Accept, once the project is complete. -pref("browser.bookmarks.editDialog.delayedApply.enabled", false); - -#if defined(XP_WIN) && defined(MOZ_SANDBOX) - // This controls the strength of the Windows content process sandbox for - // testing purposes. This will require a restart. - // On windows these levels are: - // See - security/sandbox/win/src/sandboxbroker/sandboxBroker.cpp - // SetSecurityLevelForContentProcess() for what the different settings mean. - pref("security.sandbox.content.level", 6); - - // This controls the strength of the Windows GPU process sandbox. Changes - // will require restart. - // For information on what the level number means, see - // SetSecurityLevelForGPUProcess() in - // security/sandbox/win/src/sandboxbroker/sandboxBroker.cpp - pref("security.sandbox.gpu.level", 0); -#endif - -#if defined(XP_MACOSX) && defined(MOZ_SANDBOX) - // This pref is discussed in bug 1083344, the naming is inspired from its - // Windows counterpart, but on Mac it's an integer which means: - // 0 -> "no sandbox" (nightly only) - // 1 -> "preliminary content sandboxing enabled: write access to - // home directory is prevented" - // 2 -> "preliminary content sandboxing enabled with profile protection: - // write access to home directory is prevented, read and write access - // to ~/Library and profile directories are prevented (excluding - // $PROFILE/{extensions,chrome})" - // 3 -> "no global read/write access, read access permitted to - // $PROFILE/{extensions,chrome}" - // This setting is read when the content process is started. On Mac the - // content process is killed when all windows are closed, so a change will - // take effect when the 1st window is opened. - pref("security.sandbox.content.level", 3); - - // Disconnect content processes from the window server. Depends on - // out-of-process WebGL and non-native theming. i.e., both in-process WebGL - // and native theming depend on content processes having a connection to the - // window server. Window server disconnection is automatically disabled (and - // this pref overridden) if OOP WebGL is disabled. OOP WebGL is disabled - // for some tests. - pref("security.sandbox.content.mac.disconnect-windowserver", true); -#endif - -#if defined(XP_LINUX) && defined(MOZ_SANDBOX) - // This pref is introduced as part of bug 742434, the naming is inspired from - // its Windows/Mac counterpart, but on Linux it's an integer which means: - // 0 -> "no sandbox" - // 1 -> "content sandbox using seccomp-bpf when available" + ipc restrictions - // 2 -> "seccomp-bpf + write file broker" - // 3 -> "seccomp-bpf + read/write file brokering" - // 4 -> all of the above + network/socket restrictions + chroot - // - // The purpose of this setting is to allow Linux users or distros to disable - // the sandbox while we fix their problems, or to allow running Firefox with - // exotic configurations we can't reasonably support out of the box. - // - pref("security.sandbox.content.level", 4); - // Introduced as part of bug 1608558. Linux is currently the only platform - // that uses a sandbox level for the socket process. There are currently - // only 2 levels: - // 0 -> "no sandbox" - // 1 -> "sandboxed, allows socket operations and reading necessary certs" - pref("security.sandbox.socket.process.level", 1); - pref("security.sandbox.content.write_path_whitelist", ""); - pref("security.sandbox.content.read_path_whitelist", ""); - pref("security.sandbox.content.syscall_whitelist", ""); -#endif - -#if defined(XP_OPENBSD) && defined(MOZ_SANDBOX) - pref("security.sandbox.content.level", 1); -#endif - -#if defined(MOZ_SANDBOX) - // ID (a UUID when set by gecko) that is used to form the name of a - // sandbox-writable temporary directory to be used by content processes - // when a temporary writable file is required in a level 1 sandbox. - pref("security.sandbox.content.tempDirSuffix", ""); - pref("security.sandbox.plugin.tempDirSuffix", ""); - - // This pref determines if messages relevant to sandbox violations are - // logged. - #if defined(XP_WIN) || defined(XP_MACOSX) - pref("security.sandbox.logging.enabled", false); - #endif -#endif - -// This pref governs whether we attempt to work around problems caused by -// plugins using OS calls to manipulate the cursor while running out-of- -// process. These workarounds all involve intercepting (hooking) certain -// OS calls in the plugin process, then arranging to make certain OS calls -// in the browser process. Eventually plugins will be required to use the -// NPAPI to manipulate the cursor, and these workarounds will be removed. -// See bug 621117. -#ifdef XP_MACOSX - pref("dom.ipc.plugins.nativeCursorSupport", true); -#endif - -#ifdef XP_WIN - pref("browser.taskbar.previews.enable", false); - pref("browser.taskbar.previews.max", 20); - pref("browser.taskbar.previews.cachetime", 5); - pref("browser.taskbar.lists.enabled", true); - pref("browser.taskbar.lists.frequent.enabled", true); - pref("browser.taskbar.lists.recent.enabled", false); - pref("browser.taskbar.lists.maxListItemCount", 7); - pref("browser.taskbar.lists.tasks.enabled", true); - pref("browser.taskbar.lists.refreshInSeconds", 120); -#endif - -// Preferences to be synced by default. -// Preferences with the prefix `services.sync.prefs.sync-seen.` should have -// a value of `false`, and means the value of the pref will be synced as soon -// as a value for the pref is "seen", even if it is the default, and should be -// used for prefs we sync but which have different values on different channels, -// platforms or distributions. -pref("services.sync.prefs.sync.accessibility.blockautorefresh", true); -pref("services.sync.prefs.sync.accessibility.browsewithcaret", true); -pref("services.sync.prefs.sync.accessibility.typeaheadfind", true); -pref("services.sync.prefs.sync.accessibility.typeaheadfind.linksonly", true); -pref("services.sync.prefs.sync.addons.ignoreUserEnabledChanges", true); -pref("services.sync.prefs.sync.app.shield.optoutstudies.enabled", true); -// The addons prefs related to repository verification are intentionally -// not synced for security reasons. If a system is compromised, a user -// could weaken the pref locally, install an add-on from an untrusted -// source, and this would propagate automatically to other, -// uncompromised Sync-connected devices. -pref("services.sync.prefs.sync.browser.contentblocking.category", true); -pref("services.sync.prefs.sync.browser.contentblocking.features.strict", true); -pref("services.sync.prefs.sync.browser.crashReports.unsubmittedCheck.autoSubmit2", true); -pref("services.sync.prefs.sync.browser.ctrlTab.sortByRecentlyUsed", true); -pref("services.sync.prefs.sync.browser.discovery.enabled", true); -pref("services.sync.prefs.sync.browser.download.useDownloadDir", true); -pref("services.sync.prefs.sync.browser.firefox-view.feature-tour", true); -pref("services.sync.prefs.sync.browser.formfill.enable", true); -pref("services.sync.prefs.sync.browser.link.open_newwindow", true); -pref("services.sync.prefs.sync.browser.menu.showViewImageInfo", true); -pref("services.sync.prefs.sync.browser.newtabpage.activity-stream.asrouter.userprefs.cfr.addons", true); -pref("services.sync.prefs.sync.browser.newtabpage.activity-stream.asrouter.userprefs.cfr.features", true); -pref("services.sync.prefs.sync.browser.newtabpage.activity-stream.showSearch", true); -pref("services.sync.prefs.sync.browser.newtabpage.activity-stream.showSponsored", true); -pref("services.sync.prefs.sync.browser.newtabpage.activity-stream.showSponsoredTopSites", true); -pref("services.sync.prefs.sync.browser.newtabpage.activity-stream.feeds.topsites", true); -pref("services.sync.prefs.sync.browser.newtabpage.activity-stream.topSitesRows", true); -pref("services.sync.prefs.sync.browser.newtabpage.activity-stream.feeds.snippets", true); -pref("services.sync.prefs.sync.browser.newtabpage.activity-stream.feeds.section.topstories", true); -pref("services.sync.prefs.sync.browser.newtabpage.activity-stream.section.topstories.rows", true); -pref("services.sync.prefs.sync.browser.newtabpage.activity-stream.feeds.section.highlights", true); -// Some linux distributions disable all highlights by default. -pref("services.sync.prefs.sync-seen.browser.newtabpage.activity-stream.section.highlights", false); -pref("services.sync.prefs.sync.browser.newtabpage.activity-stream.section.highlights.includeVisited", true); -pref("services.sync.prefs.sync.browser.newtabpage.activity-stream.section.highlights.includeBookmarks", true); -pref("services.sync.prefs.sync.browser.newtabpage.activity-stream.section.highlights.includeDownloads", true); -pref("services.sync.prefs.sync.browser.newtabpage.activity-stream.section.highlights.includePocket", true); -// Some linux distributions disable just pocket by default. -pref("services.sync.prefs.sync-seen.browser.newtabpage.activity-stream.section.highlights.includePocket", false); -pref("services.sync.prefs.sync.browser.newtabpage.activity-stream.section.highlights.rows", true); -pref("services.sync.prefs.sync.browser.newtabpage.enabled", true); -pref("services.sync.prefs.sync.browser.newtabpage.pinned", true); -pref("services.sync.prefs.sync.browser.offline-apps.notify", true); -pref("services.sync.prefs.sync.browser.pdfjs.feature-tour", true); -pref("services.sync.prefs.sync.browser.safebrowsing.downloads.enabled", true); -pref("services.sync.prefs.sync.browser.safebrowsing.downloads.remote.block_potentially_unwanted", true); -pref("services.sync.prefs.sync.browser.safebrowsing.malware.enabled", true); -pref("services.sync.prefs.sync.browser.safebrowsing.phishing.enabled", true); -pref("services.sync.prefs.sync.browser.search.update", true); -pref("services.sync.prefs.sync.browser.search.widget.inNavBar", true); -pref("services.sync.prefs.sync.browser.startup.homepage", true); -pref("services.sync.prefs.sync.browser.startup.page", true); -pref("services.sync.prefs.sync.browser.tabs.loadInBackground", true); -pref("services.sync.prefs.sync.browser.tabs.warnOnClose", true); -pref("services.sync.prefs.sync.browser.tabs.warnOnOpen", true); -pref("services.sync.prefs.sync.browser.taskbar.previews.enable", true); -pref("services.sync.prefs.sync.browser.urlbar.maxRichResults", true); -pref("services.sync.prefs.sync.browser.urlbar.showSearchSuggestionsFirst", true); -pref("services.sync.prefs.sync.browser.urlbar.suggest.bookmark", true); -pref("services.sync.prefs.sync.browser.urlbar.suggest.history", true); -pref("services.sync.prefs.sync.browser.urlbar.suggest.openpage", true); -pref("services.sync.prefs.sync.browser.urlbar.suggest.searches", true); -pref("services.sync.prefs.sync.browser.urlbar.suggest.topsites", true); -pref("services.sync.prefs.sync.browser.urlbar.suggest.engines", true); -pref("services.sync.prefs.sync.dom.disable_open_during_load", true); -pref("services.sync.prefs.sync.dom.disable_window_flip", true); -pref("services.sync.prefs.sync.dom.disable_window_move_resize", true); -pref("services.sync.prefs.sync.dom.event.contextmenu.enabled", true); -pref("services.sync.prefs.sync.dom.security.https_only_mode", true); -pref("services.sync.prefs.sync.dom.security.https_only_mode_ever_enabled", true); -pref("services.sync.prefs.sync.dom.security.https_only_mode_ever_enabled_pbm", true); -pref("services.sync.prefs.sync.dom.security.https_only_mode_pbm", true); -pref("services.sync.prefs.sync.extensions.update.enabled", true); -pref("services.sync.prefs.sync.extensions.activeThemeID", true); -pref("services.sync.prefs.sync.general.autoScroll", true); -// general.autoScroll has a different default on Linux vs elsewhere. -pref("services.sync.prefs.sync-seen.general.autoScroll", false); -pref("services.sync.prefs.sync.general.smoothScroll", true); -pref("services.sync.prefs.sync.intl.accept_languages", true); -pref("services.sync.prefs.sync.intl.regional_prefs.use_os_locales", true); -pref("services.sync.prefs.sync.layout.spellcheckDefault", true); -pref("services.sync.prefs.sync.media.autoplay.default", true); -pref("services.sync.prefs.sync.media.eme.enabled", true); -// Some linux distributions disable eme by default. -pref("services.sync.prefs.sync-seen.media.eme.enabled", false); -pref("services.sync.prefs.sync.media.videocontrols.picture-in-picture.video-toggle.enabled", true); -pref("services.sync.prefs.sync.network.cookie.cookieBehavior", true); -pref("services.sync.prefs.sync.network.cookie.thirdparty.sessionOnly", true); -pref("services.sync.prefs.sync.permissions.default.image", true); -pref("services.sync.prefs.sync.pref.downloads.disable_button.edit_actions", true); -pref("services.sync.prefs.sync.pref.privacy.disable_button.cookie_exceptions", true); -pref("services.sync.prefs.sync.privacy.clearOnShutdown.cache", true); -pref("services.sync.prefs.sync.privacy.clearOnShutdown.cookies", true); -pref("services.sync.prefs.sync.privacy.clearOnShutdown.downloads", true); -pref("services.sync.prefs.sync.privacy.clearOnShutdown.formdata", true); -pref("services.sync.prefs.sync.privacy.clearOnShutdown.history", true); -pref("services.sync.prefs.sync.privacy.clearOnShutdown.offlineApps", true); -pref("services.sync.prefs.sync.privacy.clearOnShutdown.sessions", true); -pref("services.sync.prefs.sync.privacy.clearOnShutdown.siteSettings", true); -pref("services.sync.prefs.sync.privacy.donottrackheader.enabled", true); -pref("services.sync.prefs.sync.privacy.sanitize.sanitizeOnShutdown", true); -pref("services.sync.prefs.sync.privacy.trackingprotection.enabled", true); -pref("services.sync.prefs.sync.privacy.trackingprotection.cryptomining.enabled", true); -pref("services.sync.prefs.sync.privacy.trackingprotection.fingerprinting.enabled", true); -pref("services.sync.prefs.sync.privacy.trackingprotection.pbmode.enabled", true); -// We do not sync `privacy.resistFingerprinting` by default as it's an undocumented, -// not-recommended footgun - see bug 1763278 for more. -pref("services.sync.prefs.sync.privacy.reduceTimerPrecision", true); -pref("services.sync.prefs.sync.privacy.resistFingerprinting.reduceTimerPrecision.microseconds", true); -pref("services.sync.prefs.sync.privacy.resistFingerprinting.reduceTimerPrecision.jitter", true); -pref("services.sync.prefs.sync.privacy.userContext.enabled", true); -pref("services.sync.prefs.sync.privacy.userContext.newTabContainerOnLeftClick.enabled", true); -pref("services.sync.prefs.sync.security.default_personal_cert", true); -pref("services.sync.prefs.sync.services.sync.syncedTabs.showRemoteIcons", true); -pref("services.sync.prefs.sync.signon.autofillForms", true); -pref("services.sync.prefs.sync.signon.generation.enabled", true); -pref("services.sync.prefs.sync.signon.management.page.breach-alerts.enabled", true); -pref("services.sync.prefs.sync.signon.rememberSignons", true); -pref("services.sync.prefs.sync.spellchecker.dictionary", true); -pref("services.sync.prefs.sync.ui.osk.enabled", true); - -// A preference which, if false, means sync will only apply incoming preference -// changes if there's already a local services.sync.prefs.sync.* control pref. -// If true, all incoming preferences will be applied and the local "control -// pref" updated accordingly. -pref("services.sync.prefs.dangerously_allow_arbitrary", false); - -// A preference that controls whether we should show the icon for a remote tab. -// This pref has no UI but exists because some people may be concerned that -// fetching these icons to show remote tabs may leak information about that -// user's tabs and bookmarks. Note this pref is also synced. -pref("services.sync.syncedTabs.showRemoteIcons", true); - -// A preference (in milliseconds) controlling if we sync after a tab change and -// how long to delay before we schedule the sync -// Anything <= 0 means disabled -pref("services.sync.syncedTabs.syncDelayAfterTabChange", 5000); - -// Whether the character encoding menu is under the main Firefox button. This -// preference is a string so that localizers can alter it. -pref("browser.menu.showCharacterEncoding", "chrome://browser/locale/browser.properties"); - -// Whether prompts should be content modal (1) tab modal (2) or window modal(3) by default -// This is a fallback value for when prompt callers do not specify a modalType. -pref("prompts.defaultModalType", 3); - -pref("browser.topsites.useRemoteSetting", true); -// Fetch sponsored Top Sites from Mozilla Tiles Service (Contile) -pref("browser.topsites.contile.enabled", true); -pref("browser.topsites.contile.endpoint", "https://contile.services.mozilla.com/v1/tiles"); - -// The base URL for the Quick Suggest anonymizing proxy. To make a request to -// the proxy, include a campaign ID in the path. -pref("browser.partnerlink.attributionURL", "https://topsites.services.mozilla.com/cid/"); -pref("browser.partnerlink.campaign.topsites", "amzn_2020_a1"); - -// Whether to show tab level system prompts opened via nsIPrompt(Service) as -// SubDialogs in the TabDialogBox (true) or as TabModalPrompt in the -// TabModalPromptBox (false). -pref("prompts.tabChromePromptSubDialog", true); - -// Whether to show the dialogs opened at the content level, such as -// alert() or prompt(), using a SubDialogManager in the TabDialogBox. -pref("prompts.contentPromptSubDialog", true); - -// Whether to show window-modal dialogs opened for browser windows -// in a SubDialog inside their parent, instead of an OS level window. -pref("prompts.windowPromptSubDialog", true); - -// Activates preloading of the new tab url. -pref("browser.newtab.preload", true); - -pref("browser.newtabpage.activity-stream.newNewtabExperience.colors", "#0090ED,#FF4F5F,#2AC3A2,#FF7139,#A172FF,#FFA437,#FF2A8A"); - -// Activity Stream prefs that control to which page to redirect -#ifndef RELEASE_OR_BETA - pref("browser.newtabpage.activity-stream.debug", false); -#endif - -// The remote FxA root content URL for the Activity Stream firstrun page. -pref("browser.newtabpage.activity-stream.fxaccounts.endpoint", "https://accounts.firefox.com/"); - -// The pref that controls if the search shortcuts experiment is on -pref("browser.newtabpage.activity-stream.improvesearch.topSiteSearchShortcuts", true); - -// ASRouter provider configuration -pref("browser.newtabpage.activity-stream.asrouter.providers.cfr", "{\"id\":\"cfr\",\"enabled\":true,\"type\":\"remote-settings\",\"bucket\":\"cfr\",\"updateCycleInMs\":3600000}"); -pref("browser.newtabpage.activity-stream.asrouter.providers.whats-new-panel", "{\"id\":\"whats-new-panel\",\"enabled\":true,\"type\":\"remote-settings\",\"bucket\":\"whats-new-panel\",\"updateCycleInMs\":3600000}"); -pref("browser.newtabpage.activity-stream.asrouter.providers.message-groups", "{\"id\":\"message-groups\",\"enabled\":true,\"type\":\"remote-settings\",\"bucket\":\"message-groups\",\"updateCycleInMs\":3600000}"); -// This url, if changed, MUST continue to point to an https url. Pulling arbitrary content to inject into -// this page over http opens us up to a man-in-the-middle attack that we'd rather not face. If you are a downstream -// repackager of this code using an alternate snippet url, please keep your users safe -pref("browser.newtabpage.activity-stream.asrouter.providers.snippets", "{\"id\":\"snippets\",\"enabled\":false,\"type\":\"remote\",\"url\":\"https://snippets.cdn.mozilla.net/%STARTPAGE_VERSION%/%NAME%/%VERSION%/%APPBUILDID%/%BUILD_TARGET%/%LOCALE%/%CHANNEL%/%OS_VERSION%/%DISTRIBUTION%/%DISTRIBUTION_VERSION%/\",\"updateCycleInMs\":14400000}"); -pref("browser.newtabpage.activity-stream.asrouter.providers.messaging-experiments", "{\"id\":\"messaging-experiments\",\"enabled\":true,\"type\":\"remote-experiments\",\"updateCycleInMs\":3600000}"); - -// ASRouter user prefs -pref("browser.newtabpage.activity-stream.asrouter.userprefs.cfr.addons", true); -pref("browser.newtabpage.activity-stream.asrouter.userprefs.cfr.features", true); - -// The pref that controls if ASRouter uses the remote fluent files. -// It's enabled by default, but could be disabled to force ASRouter to use the local files. -pref("browser.newtabpage.activity-stream.asrouter.useRemoteL10n", true); - -// These prefs control if Discovery Stream is enabled. -pref("browser.newtabpage.activity-stream.discoverystream.enabled", true); -pref("browser.newtabpage.activity-stream.discoverystream.hardcoded-basic-layout", false); -pref("browser.newtabpage.activity-stream.discoverystream.hybridLayout.enabled", false); -pref("browser.newtabpage.activity-stream.discoverystream.hideCardBackground.enabled", false); -pref("browser.newtabpage.activity-stream.discoverystream.fourCardLayout.enabled", false); -pref("browser.newtabpage.activity-stream.discoverystream.newFooterSection.enabled", false); -pref("browser.newtabpage.activity-stream.discoverystream.saveToPocketCard.enabled", false); -pref("browser.newtabpage.activity-stream.discoverystream.saveToPocketCardRegions", ""); -pref("browser.newtabpage.activity-stream.discoverystream.hideDescriptions.enabled", false); -pref("browser.newtabpage.activity-stream.discoverystream.hideDescriptionsRegions", ""); -pref("browser.newtabpage.activity-stream.discoverystream.compactGrid.enabled", false); -pref("browser.newtabpage.activity-stream.discoverystream.compactImages.enabled", false); -pref("browser.newtabpage.activity-stream.discoverystream.imageGradient.enabled", false); -pref("browser.newtabpage.activity-stream.discoverystream.titleLines", 3); -pref("browser.newtabpage.activity-stream.discoverystream.descLines", 3); -pref("browser.newtabpage.activity-stream.discoverystream.readTime.enabled", true); -pref("browser.newtabpage.activity-stream.discoverystream.newSponsoredLabel.enabled", false); -pref("browser.newtabpage.activity-stream.discoverystream.essentialReadsHeader.enabled", false); -pref("browser.newtabpage.activity-stream.discoverystream.recentSaves.enabled", false); -pref("browser.newtabpage.activity-stream.discoverystream.editorsPicksHeader.enabled", false); -pref("browser.newtabpage.activity-stream.discoverystream.spoc-positions", "1,5,7,11,18,20"); -pref("browser.newtabpage.activity-stream.discoverystream.widget-positions", ""); - -pref("browser.newtabpage.activity-stream.discoverystream.spocs-endpoint", ""); -pref("browser.newtabpage.activity-stream.discoverystream.spocs-endpoint-query", ""); -pref("browser.newtabpage.activity-stream.discoverystream.sponsored-collections.enabled", false); - -// Changes the spoc content. -pref("browser.newtabpage.activity-stream.discoverystream.spocAdTypes", ""); -pref("browser.newtabpage.activity-stream.discoverystream.spocZoneIds", ""); -pref("browser.newtabpage.activity-stream.discoverystream.spocSiteId", ""); - -pref("browser.newtabpage.activity-stream.discoverystream.sendToPocket.enabled", false); - -// List of regions that do not get stories, regardless of locale-list-config. -pref("browser.newtabpage.activity-stream.discoverystream.region-stories-block", "FR"); -// List of locales that get stories, regardless of region-stories-config. -#ifdef NIGHTLY_BUILD - pref("browser.newtabpage.activity-stream.discoverystream.locale-list-config", "en-US,en-CA,en-GB"); -#else - pref("browser.newtabpage.activity-stream.discoverystream.locale-list-config", ""); -#endif -// List of regions that get stories by default. -pref("browser.newtabpage.activity-stream.discoverystream.region-stories-config", "US,DE,CA,GB,IE,CH,AT,BE,IN"); - -// List of regions that get spocs by default. -pref("browser.newtabpage.activity-stream.discoverystream.region-spocs-config", "US,CA,DE,GB"); -// List of regions that don't get the 7 row layout. -pref("browser.newtabpage.activity-stream.discoverystream.region-basic-config", ""); - -// Allows Pocket story collections to be dismissed. -pref("browser.newtabpage.activity-stream.discoverystream.isCollectionDismissible", true); -pref("browser.newtabpage.activity-stream.discoverystream.personalization.enabled", true); -// Configurable keys used by personalization. -pref("browser.newtabpage.activity-stream.discoverystream.personalization.modelKeys", "nb_model_arts_and_entertainment, nb_model_autos_and_vehicles, nb_model_beauty_and_fitness, nb_model_blogging_resources_and_services, nb_model_books_and_literature, nb_model_business_and_industrial, nb_model_computers_and_electronics, nb_model_finance, nb_model_food_and_drink, nb_model_games, nb_model_health, nb_model_hobbies_and_leisure, nb_model_home_and_garden, nb_model_internet_and_telecom, nb_model_jobs_and_education, nb_model_law_and_government, nb_model_online_communities, nb_model_people_and_society, nb_model_pets_and_animals, nb_model_real_estate, nb_model_reference, nb_model_science, nb_model_shopping, nb_model_sports, nb_model_travel"); -// System pref to allow Pocket stories personalization to be turned on/off. -pref("browser.newtabpage.activity-stream.discoverystream.recs.personalized", false); -// System pref to allow Pocket sponsored content personalization to be turned on/off. -pref("browser.newtabpage.activity-stream.discoverystream.spocs.personalized", true); - -// User pref to show stories on newtab (feeds.system.topstories has to be set to true as well) -pref("browser.newtabpage.activity-stream.feeds.section.topstories", true); - -// The pref controls if search hand-off is enabled for Activity Stream. -pref("browser.newtabpage.activity-stream.improvesearch.handoffToAwesomebar", true); - -pref("browser.newtabpage.activity-stream.logowordmark.alwaysVisible", true); - -// URLs from the user's history that contain this search param will be hidden -// from the top sites. The value is a string with one of the following forms: -// - "" (empty) - Disable this feature -// - "key" - Search param named "key" with any or no value -// - "key=" - Search param named "key" with no value -// - "key=value" - Search param named "key" with value "value" -pref("browser.newtabpage.activity-stream.hideTopSitesWithSearchParam", "mfadid=adm"); - -// Used to display triplet cards on newtab -pref("trailhead.firstrun.newtab.triplets", ""); -// Separate about welcome -pref("browser.aboutwelcome.enabled", true); -// Used to set multistage welcome UX -pref("browser.aboutwelcome.screens", ""); -pref("browser.aboutwelcome.skipFocus", true); -// Used to enable template for MR 2022 Onboarding -pref("browser.aboutwelcome.templateMR", true); - -// The pref that controls if the What's New panel is enabled. -pref("browser.messaging-system.whatsNewPanel.enabled", true); - -// Experiment Manager -// See Console.jsm LOG_LEVELS for all possible values -pref("messaging-system.log", "warn"); -pref("messaging-system.rsexperimentloader.enabled", true); -pref("messaging-system.rsexperimentloader.collection_id", "nimbus-desktop-experiments"); -pref("nimbus.debug", false); -pref("nimbus.validation.enabled", true); - -// Enable the DOM fullscreen API. -pref("full-screen-api.enabled", true); - -// Startup Crash Tracking -// number of startup crashes that can occur before starting into safe mode automatically -// (this pref has no effect if more than 6 hours have passed since the last crash) -pref("toolkit.startup.max_resumed_crashes", 3); - -// Whether to use RegisterApplicationRestart to restart the browser and resume -// the session on next Windows startup -#if defined(XP_WIN) - pref("toolkit.winRegisterApplicationRestart", true); -#endif - -// Used by pdf.js to know the first time firefox is run with it installed so it -// can become the default pdf viewer. -pref("pdfjs.firstRun", true); -// The values of preferredAction and alwaysAskBeforeHandling before pdf.js -// became the default. -pref("pdfjs.previousHandler.preferredAction", 0); -pref("pdfjs.previousHandler.alwaysAskBeforeHandling", false); - -// Try to convert PDFs sent as octet-stream -pref("pdfjs.handleOctetStream", true); - -// Is the sidebar positioned ahead of the content browser -pref("sidebar.position_start", true); - -pref("security.identitypopup.recordEventTelemetry", true); -pref("security.protectionspopup.recordEventTelemetry", true); -pref("security.app_menu.recordEventTelemetry", true); - -// Block insecure active content on https pages -pref("security.mixed_content.block_active_content", true); - -// Show degraded UI for http pages. -pref("security.insecure_connection_icon.enabled", true); -// Show degraded UI for http pages in private mode. -pref("security.insecure_connection_icon.pbmode.enabled", true); - -// Show "Not Secure" text for http pages; disabled for now -pref("security.insecure_connection_text.enabled", false); -pref("security.insecure_connection_text.pbmode.enabled", false); - -// 1 = allow MITM for certificate pinning checks. -pref("security.cert_pinning.enforcement_level", 1); - - -// If this turns true, Moz*Gesture events are not called stopPropagation() -// before content. -pref("dom.debug.propagate_gesture_events_through_content", false); - -// CustomizableUI debug logging. -pref("browser.uiCustomization.debug", false); - -// CustomizableUI state of the browser's user interface -pref("browser.uiCustomization.state", ""); - -// If set to false, FxAccounts and Sync will be unavailable. -// A restart is mandatory after flipping that preference. -pref("identity.fxaccounts.enabled", true); - -// The remote FxA root content URL. Must use HTTPS. -pref("identity.fxaccounts.remote.root", "https://accounts.firefox.com/"); - -// The value of the context query parameter passed in fxa requests. -pref("identity.fxaccounts.contextParam", "fx_desktop_v3"); - -// The remote URL of the FxA Profile Server -pref("identity.fxaccounts.remote.profile.uri", "https://profile.accounts.firefox.com/v1"); - -// The remote URL of the FxA OAuth Server -pref("identity.fxaccounts.remote.oauth.uri", "https://oauth.accounts.firefox.com/v1"); - -// Whether FxA pairing using QR codes is enabled. -pref("identity.fxaccounts.pairing.enabled", true); - -// The remote URI of the FxA pairing server -pref("identity.fxaccounts.remote.pairing.uri", "wss://channelserver.services.mozilla.com"); - -// Token server used by the FxA Sync identity. -pref("identity.sync.tokenserver.uri", "https://token.services.mozilla.com/1.0/sync/1.5"); - -// Auto-config URL for FxA self-hosters, makes an HTTP request to -// [identity.fxaccounts.autoconfig.uri]/.well-known/fxa-client-configuration -// This is now the prefered way of pointing to a custom FxA server, instead -// of making changes to "identity.fxaccounts.*.uri". -pref("identity.fxaccounts.autoconfig.uri", ""); - -// URL for help link about Send Tab. -pref("identity.sendtabpromo.url", "https://support.mozilla.org/1/firefox/%VERSION%/%OS%/%LOCALE%/send-tab"); - -// URLs for promo links to mobile browsers. Note that consumers are expected to -// append a value for utm_campaign. -pref("identity.mobilepromo.android", "https://www.mozilla.org/firefox/android/?utm_source=firefox-browser&utm_medium=firefox-browser&utm_campaign="); -pref("identity.mobilepromo.ios", "https://www.mozilla.org/firefox/ios/?utm_source=firefox-browser&utm_medium=firefox-browser&utm_campaign="); - -// Migrate any existing Firefox Account data from the default profile to the -// Developer Edition profile. -#ifdef MOZ_DEV_EDITION - pref("identity.fxaccounts.migrateToDevEdition", true); -#else - pref("identity.fxaccounts.migrateToDevEdition", false); -#endif - -// If activated, send tab will use the new FxA commands backend. -pref("identity.fxaccounts.commands.enabled", true); -// How often should we try to fetch missed FxA commands on sync (in seconds). -// Default is 24 hours. -pref("identity.fxaccounts.commands.missed.fetch_interval", 86400); - -// Whether we should run a test-pattern through EME GMPs before assuming they'll -// decode H.264. -pref("media.gmp.trial-create.enabled", true); - -// Note: when media.gmp-*.visible is true, provided we're running on a -// supported platform/OS version, the corresponding CDM appears in the -// plugins list, Firefox will download the GMP/CDM if enabled, and our -// UI to re-enable EME prompts the user to re-enable EME if it's disabled -// and script requests EME. If *.visible is false, we won't show the UI -// to enable the CDM if its disabled; it's as if the keysystem is completely -// unsupported. - -#ifdef MOZ_WIDEVINE_EME - pref("media.gmp-widevinecdm.visible", true); - pref("media.gmp-widevinecdm.enabled", true); -#endif - -pref("media.gmp-gmpopenh264.visible", true); -pref("media.gmp-gmpopenh264.enabled", true); - -// Set Firefox to block autoplay, asking for permission by default. -pref("media.autoplay.default", 1); // 0=Allowed, 1=Blocked, 5=All Blocked - -// Block WebAudio from playing automatically. -pref("media.autoplay.block-webaudio", true); - -pref("media.videocontrols.picture-in-picture.enabled", true); -pref("media.videocontrols.picture-in-picture.audio-toggle.enabled", true); -pref("media.videocontrols.picture-in-picture.video-toggle.enabled", true); -pref("media.videocontrols.picture-in-picture.video-toggle.visibility-threshold", "1.0"); -pref("media.videocontrols.picture-in-picture.keyboard-controls.enabled", true); - -pref("browser.translation.detectLanguage", false); -pref("browser.translation.neverForLanguages", ""); -// Show the translation UI bits, like the info bar, notification icon and preferences. -pref("browser.translation.ui.show", false); -// Allows to define the translation engine. Google is default, Bing or Yandex are other options. -pref("browser.translation.engine", "Google"); - -// Telemetry settings. -// Determines if Telemetry pings can be archived locally. -pref("toolkit.telemetry.archive.enabled", true); -// Enables sending the shutdown ping when Firefox shuts down. -pref("toolkit.telemetry.shutdownPingSender.enabled", true); -// Enables sending the shutdown ping using the pingsender from the first session. -pref("toolkit.telemetry.shutdownPingSender.enabledFirstSession", false); -// Enables sending a duplicate of the first shutdown ping from the first session. -pref("toolkit.telemetry.firstShutdownPing.enabled", true); -// Enables sending the 'new-profile' ping on new profiles. -pref("toolkit.telemetry.newProfilePing.enabled", true); -// Enables sending 'update' pings on Firefox updates. -pref("toolkit.telemetry.updatePing.enabled", true); -// Enables sending 'bhr' pings when the browser hangs. -pref("toolkit.telemetry.bhrPing.enabled", true); - -// Ping Centre Telemetry settings. -pref("browser.ping-centre.telemetry", true); -pref("browser.ping-centre.log", false); - -// Enable GMP support in the addon manager. -pref("media.gmp-provider.enabled", true); - -// Enable Dynamic First-Party Isolation by default. -pref("network.cookie.cookieBehavior", 5 /* BEHAVIOR_REJECT_TRACKER_AND_PARTITION_FOREIGN */); - -// Whether to show the section in preferences which allows users to opt-in to -// Total Cookie Protection (dFPI) in standard mode. -pref("privacy.restrict3rdpartystorage.rollout.preferences.TCPToggleInStandard", false); - -// Target URL for the learn more link of the TCP in standard mode rollout section. -pref("privacy.restrict3rdpartystorage.rollout.preferences.learnMoreURLSuffix", "total-cookie-protection"); - -// Target URL for the learn more link of the TCP in standard mode section. -pref("privacy.restrict3rdpartystorage.preferences.learnMoreURLSuffix", "total-cookie-protection"); - -// Enable Dynamic First-Party Isolation in the private browsing mode. -pref("network.cookie.cookieBehavior.pbmode", 5 /* BEHAVIOR_REJECT_TRACKER_AND_PARTITION_FOREIGN */); - -// Enable fingerprinting blocking by default for all channels, only on desktop. -pref("privacy.trackingprotection.fingerprinting.enabled", true); - -// Enable cryptomining blocking by default for all channels, only on desktop. -pref("privacy.trackingprotection.cryptomining.enabled", true); - -pref("browser.contentblocking.database.enabled", true); - -pref("dom.storage_access.enabled", true); - -// Enable URL query stripping in Nightly. -#ifdef NIGHTLY_BUILD -pref("privacy.query_stripping.enabled", true); -#endif - -pref("browser.contentblocking.cryptomining.preferences.ui.enabled", true); -pref("browser.contentblocking.fingerprinting.preferences.ui.enabled", true); -// Enable cookieBehavior = BEHAVIOR_REJECT_TRACKER_AND_PARTITION_FOREIGN as an option in the custom category ui -pref("browser.contentblocking.reject-and-isolate-cookies.preferences.ui.enabled", true); - -// Possible values for browser.contentblocking.features.strict pref: -// Tracking Protection: -// "tp": tracking protection enabled -// "-tp": tracking protection disabled -// Tracking Protection in private windows: -// "tpPrivate": tracking protection in private windows enabled -// "-tpPrivate": tracking protection in private windows disabled -// Fingerprinting: -// "fp": fingerprinting blocking enabled -// "-fp": fingerprinting blocking disabled -// Cryptomining: -// "cm": cryptomining blocking enabled -// "-cm": cryptomining blocking disabled -// Social Tracking Protection: -// "stp": social tracking protection enabled -// "-stp": social tracking protection disabled -// Level 2 Tracking list: -// "lvl2": Level 2 tracking list enabled -// "-lvl2": Level 2 tracking list disabled -// Restrict relaxing default referrer policy: -// "rp": Restrict relaxing default referrer policy enabled -// "-rp": Restrict relaxing default referrer policy disabled -// Restrict relaxing default referrer policy for top navigation: -// "rpTop": Restrict relaxing default referrer policy enabled -// "-rpTop": Restrict relaxing default referrer policy disabled -// OCSP cache partitioning: -// "ocsp": OCSP cache partitioning enabled -// "-ocsp": OCSP cache partitioning disabled -// Query parameter stripping: -// "qps": Query parameter stripping enabled -// "-qps": Query parameter stripping disabled -// Query parameter stripping for private windows: -// "qpsPBM": Query parameter stripping enabled in private windows -// "-qpsPBM": Query parameter stripping disabled in private windows -// Cookie behavior: -// "cookieBehavior0": cookie behaviour BEHAVIOR_ACCEPT -// "cookieBehavior1": cookie behaviour BEHAVIOR_REJECT_FOREIGN -// "cookieBehavior2": cookie behaviour BEHAVIOR_REJECT -// "cookieBehavior3": cookie behaviour BEHAVIOR_LIMIT_FOREIGN -// "cookieBehavior4": cookie behaviour BEHAVIOR_REJECT_TRACKER -// "cookieBehavior5": cookie behaviour BEHAVIOR_REJECT_TRACKER_AND_PARTITION_FOREIGN -// Cookie behavior for private windows: -// "cookieBehaviorPBM0": cookie behaviour BEHAVIOR_ACCEPT -// "cookieBehaviorPBM1": cookie behaviour BEHAVIOR_REJECT_FOREIGN -// "cookieBehaviorPBM2": cookie behaviour BEHAVIOR_REJECT -// "cookieBehaviorPBM3": cookie behaviour BEHAVIOR_LIMIT_FOREIGN -// "cookieBehaviorPBM4": cookie behaviour BEHAVIOR_REJECT_TRACKER -// "cookieBehaviorPBM5": cookie behaviour BEHAVIOR_REJECT_TRACKER_AND_PARTITION_FOREIGN -// One value from each section must be included in the browser.contentblocking.features.strict pref. -pref("browser.contentblocking.features.strict", "tp,tpPrivate,cookieBehavior5,cookieBehaviorPBM5,cm,fp,stp,lvl2,rp,rpTop,ocsp,qps,qpsPBM"); - -// Hide the "Change Block List" link for trackers/tracking content in the custom -// Content Blocking/ETP panel. By default, it will not be visible. There is also -// an UI migration in place to set this pref to true if a user has a custom block -// lists enabled. -pref("browser.contentblocking.customBlockList.preferences.ui.enabled", false); - -pref("browser.contentblocking.reportBreakage.url", "https://tracking-protection-issues.herokuapp.com/new"); - -// Enable Protections report's Lockwise card by default. -pref("browser.contentblocking.report.lockwise.enabled", true); - -// Enable Protections report's Monitor card by default. -pref("browser.contentblocking.report.monitor.enabled", true); - -// Disable Protections report's Proxy card by default. -pref("browser.contentblocking.report.proxy.enabled", false); - -// Disable the mobile promotion by default. -pref("browser.contentblocking.report.show_mobile_app", true); - -// Locales in which Send to Device emails are supported -// The most recent list of supported locales can be found at https://github.com/mozilla/bedrock/blob/6a08c876f65924651554decc57b849c00874b4e7/bedrock/settings/base.py#L963 -pref("browser.send_to_device_locales", "de,en-GB,en-US,es-AR,es-CL,es-ES,es-MX,fr,id,pl,pt-BR,ru,zh-TW"); - -// Avoid advertising in certain regions. Comma separated string of two letter ISO 3166-1 country codes. -// We're currently blocking all of Ukraine (ua), but would prefer to block just Crimea (ua-43). Currently, the Mozilla Location Service APIs used by Region.jsm only exposes the country, not the subdivision. -pref("browser.vpn_promo.disallowed_regions", "ae,by,cn,cu,iq,ir,kp,om,ru,sd,sy,tm,tr,ua"); - -// Default to enabling VPN promo messages to be shown when specified and allowed -pref("browser.vpn_promo.enabled", true); -// Only show vpn card to certain regions. Comma separated string of two letter ISO 3166-1 country codes. -// The most recent list of supported countries can be found at https://support.mozilla.org/en-US/kb/mozilla-vpn-countries-available-subscribe -// The full list of supported country codes can also be found at https://github.com/mozilla/bedrock/search?q=VPN_COUNTRY_CODES -pref("browser.contentblocking.report.vpn_regions", "as,at,be,ca,ch,de,es,fi,fr,gb,gg,ie,im,io,it,je,mp,my,nl,nz,pr,se,sg,uk,um,us,vg,vi" -); - -// Avoid advertising Focus in certain regions. Comma separated string of two letter -// ISO 3166-1 country codes. -pref("browser.promo.focus.disallowed_regions", "cn"); - -// Default to enabling focus promos to be shown where allowed. -pref("browser.promo.focus.enabled", true); - -// Default to enabling pin promos to be shown where allowed. -pref("browser.promo.pin.enabled", true); - -// Comma separated string of mozilla vpn supported platforms. -pref("browser.contentblocking.report.vpn_platforms", "win,mac,linux"); -pref("browser.contentblocking.report.hide_vpn_banner", false); -pref("browser.contentblocking.report.vpn_sub_id", "sub_HrfCZF7VPHzZkA"); - -pref("browser.contentblocking.report.monitor.url", "https://monitor.firefox.com/?entrypoint=protection_report_monitor&utm_source=about-protections"); -pref("browser.contentblocking.report.monitor.how_it_works.url", "https://monitor.firefox.com/about"); -pref("browser.contentblocking.report.monitor.sign_in_url", "https://monitor.firefox.com/oauth/init?entrypoint=protection_report_monitor&utm_source=about-protections&email="); -pref("browser.contentblocking.report.monitor.preferences_url", "https://monitor.firefox.com/user/preferences"); -pref("browser.contentblocking.report.monitor.home_page_url", "https://monitor.firefox.com/user/dashboard"); -pref("browser.contentblocking.report.manage_devices.url", "https://accounts.firefox.com/settings/clients"); -pref("browser.contentblocking.report.endpoint_url", "https://monitor.firefox.com/user/breach-stats?includeResolved=true"); -pref("browser.contentblocking.report.proxy_extension.url", "https://fpn.firefox.com/browser?utm_source=firefox-desktop&utm_medium=referral&utm_campaign=about-protections&utm_content=about-protections"); -pref("browser.contentblocking.report.mobile-ios.url", "https://apps.apple.com/app/firefox-private-safe-browser/id989804926"); -pref("browser.contentblocking.report.mobile-android.url", "https://play.google.com/store/apps/details?id=org.mozilla.firefox&referrer=utm_source%3Dprotection_report%26utm_content%3Dmobile_promotion"); -pref("browser.contentblocking.report.vpn.url", "https://vpn.mozilla.org/?utm_source=firefox-browser&utm_medium=firefox-browser&utm_campaign=about-protections-card"); -pref("browser.contentblocking.report.vpn-promo.url", "https://vpn.mozilla.org/?utm_source=firefox-browser&utm_medium=firefox-browser&utm_campaign=about-protections-top-promo"); -pref("browser.contentblocking.report.vpn-android.url", "https://play.google.com/store/apps/details?id=org.mozilla.firefox.vpn&referrer=utm_source%3Dfirefox-browser%26utm_medium%3Dfirefox-browser%26utm_campaign%3Dabout-protections-mobile-vpn%26anid%3D--"); -pref("browser.contentblocking.report.vpn-ios.url", "https://apps.apple.com/us/app/firefox-private-network-vpn/id1489407738"); - -// Protection Report's SUMO urls -pref("browser.contentblocking.report.lockwise.how_it_works.url", "https://support.mozilla.org/1/firefox/%VERSION%/%OS%/%LOCALE%/password-manager-report"); -pref("browser.contentblocking.report.social.url", "https://support.mozilla.org/1/firefox/%VERSION%/%OS%/%LOCALE%/social-media-tracking-report"); -pref("browser.contentblocking.report.cookie.url", "https://support.mozilla.org/1/firefox/%VERSION%/%OS%/%LOCALE%/cross-site-tracking-report"); -pref("browser.contentblocking.report.tracker.url", "https://support.mozilla.org/1/firefox/%VERSION%/%OS%/%LOCALE%/tracking-content-report"); -pref("browser.contentblocking.report.fingerprinter.url", "https://support.mozilla.org/1/firefox/%VERSION%/%OS%/%LOCALE%/fingerprinters-report"); -pref("browser.contentblocking.report.cryptominer.url", "https://support.mozilla.org/1/firefox/%VERSION%/%OS%/%LOCALE%/cryptominers-report"); - -pref("browser.contentblocking.cfr-milestone.enabled", true); -pref("browser.contentblocking.cfr-milestone.milestone-achieved", 0); -// Milestones should always be in increasing order -pref("browser.contentblocking.cfr-milestone.milestones", "[1000, 5000, 10000, 25000, 50000, 100000, 250000, 314159, 500000, 750000, 1000000, 1250000, 1500000, 1750000, 2000000, 2250000, 2500000, 8675309]"); - -// Enables the new Protections Panel. -#ifdef NIGHTLY_BUILD - pref("browser.protections_panel.enabled", true); - pref("browser.protections_panel.infoMessage.seen", false); -#endif - -// Always enable newtab segregation using containers -pref("privacy.usercontext.about_newtab_segregation.enabled", true); -// Enable Contextual Identity Containers -#ifdef NIGHTLY_BUILD - pref("privacy.userContext.enabled", true); - pref("privacy.userContext.ui.enabled", true); -#else - pref("privacy.userContext.enabled", false); - pref("privacy.userContext.ui.enabled", false); -#endif -pref("privacy.userContext.extension", ""); -// allows user to open container menu on a left click instead of a new -// tab in the default container -pref("privacy.userContext.newTabContainerOnLeftClick.enabled", false); - -#if defined(NIGHTLY_BUILD) || defined(XP_WIN) || defined(XP_MACOSX) -// Set to true to allow the user to silence all notifications when -// sharing the screen. Only shipping on Windows and macOS out to -// release. Enabled for all desktop platforms on Nightly. -pref("privacy.webrtc.allowSilencingNotifications", true); -// Set to true to use the legacy WebRTC global indicator -pref("privacy.webrtc.legacyGlobalIndicator", false); -pref("privacy.webrtc.hideGlobalIndicator", false); -#else -pref("privacy.webrtc.allowSilencingNotifications", false); -pref("privacy.webrtc.legacyGlobalIndicator", true); -#endif - -// Set to true to add toggles to the WebRTC indicator for globally -// muting the camera and microphone. -pref("privacy.webrtc.globalMuteToggles", false); - -// Set to true to enable a warning displayed when attempting -// to switch tabs in a window that's being shared over WebRTC. -pref("privacy.webrtc.sharedTabWarning", false); - -// Defines a grace period after camera or microphone use ends, where permission -// is granted (even past navigation) to this tab + origin + device. This avoids -// re-prompting without the user having to persist permission to the site, in a -// common case of a web conference asking them for the camera in a lobby page, -// before navigating to the actual meeting room page. Doesn't survive tab close. -pref("privacy.webrtc.deviceGracePeriodTimeoutMs", 3600000); - -// Start the browser in e10s mode -pref("browser.tabs.remote.autostart", true); -pref("browser.tabs.remote.desktopbehavior", true); - -// Run media transport in a separate process? -pref("media.peerconnection.mtransport_process", true); - -// For speculatively warming up tabs to improve perceived -// performance while using the async tab switcher. -pref("browser.tabs.remote.warmup.enabled", true); - -// Caches tab layers to improve perceived performance -// of tab switches. -pref("browser.tabs.remote.tabCacheSize", 0); - -pref("browser.tabs.remote.warmup.maxTabs", 3); -pref("browser.tabs.remote.warmup.unloadDelayMs", 2000); - -// For the about:tabcrashed page -pref("browser.tabs.crashReporting.sendReport", true); -pref("browser.tabs.crashReporting.includeURL", false); - -// If true, unprivileged extensions may use experimental APIs on -// nightly and developer edition. -pref("extensions.experiments.enabled", false); - -#if defined(XP_LINUX) || defined(XP_WIN) - // Allows us to adjust the priority of child processes at the OS level - pref("dom.ipc.processPriorityManager.enabled", true); -#endif - -// Don't limit how many nodes we care about on desktop: -pref("reader.parse-node-limit", 0); - -// On desktop, we want the URLs to be included here for ease of debugging, -// and because (normally) these errors are not persisted anywhere. -pref("reader.errors.includeURLs", true); - -// What version of Pocket CTA to show in Reader Mode (Empty string is no CTA) -pref("reader.pocket.ctaVersion", ""); - -pref("view_source.tab", true); - -pref("dom.serviceWorkers.enabled", true); - -// Enable Push API. -pref("dom.push.enabled", true); - -// These are the thumbnail width/height set in about:newtab. -// If you change this, ENSURE IT IS THE SAME SIZE SET -// by about:newtab. These values are in CSS pixels. -pref("toolkit.pageThumbs.minWidth", 280); -pref("toolkit.pageThumbs.minHeight", 190); - -// Enable speech synthesis -pref("media.webspeech.synth.enabled", true); - -pref("browser.esedbreader.loglevel", "Error"); - -pref("browser.laterrun.enabled", false); - -#ifdef FUZZING_SNAPSHOT -pref("dom.ipc.processPrelaunch.enabled", false); -#else -pref("dom.ipc.processPrelaunch.enabled", true); -#endif - -pref("browser.migrate.brave.enabled", true); -pref("browser.migrate.canary.enabled", true); - -pref("browser.migrate.chrome.enabled", true); -// See comments in bug 1340115 on how we got to these numbers. -pref("browser.migrate.chrome.history.limit", 2000); -pref("browser.migrate.chrome.history.maxAgeInDays", 180); - -pref("browser.migrate.chrome-beta.enabled", true); -pref("browser.migrate.chrome-dev.enabled", true); -pref("browser.migrate.chromium.enabled", true); -pref("browser.migrate.chromium-360se.enabled", true); -pref("browser.migrate.chromium-edge.enabled", true); -pref("browser.migrate.chromium-edge-beta.enabled", true); -pref("browser.migrate.edge.enabled", true); -pref("browser.migrate.firefox.enabled", true); -pref("browser.migrate.ie.enabled", true); -pref("browser.migrate.safari.enabled", true); - -pref("browser.migrate.showBookmarksToolbarAfterMigration", true); - -pref("extensions.pocket.api", "api.getpocket.com"); -pref("extensions.pocket.enabled", true); -pref("extensions.pocket.oAuthConsumerKey", "40249-e88c401e1b1f2242d9e441c4"); -pref("extensions.pocket.site", "getpocket.com"); -pref("extensions.pocket.onSaveRecs", true); -pref("extensions.pocket.onSaveRecs.locales", "en-US,en-GB,en-CA"); - -// Enable Pocket button home panel for non link pages. -pref("extensions.pocket.showHome", true); - -// Control what version of the logged out doorhanger is displayed -// Possibilities are: `control`, `control-one-button`, `variant_a`, `variant_b`, `variant_c` -pref("extensions.pocket.loggedOutVariant", "control"); - -// Just for the new Pocket panels, enables the email signup button. -pref("extensions.pocket.refresh.emailButton.enabled", false); -// Hides the recently saved section in the home panel. -pref("extensions.pocket.refresh.hideRecentSaves.enabled", false); - -pref("signon.management.page.fileImport.enabled", false); - -#ifdef NIGHTLY_BUILD -pref("signon.management.page.os-auth.enabled", true); -#else -pref("signon.management.page.os-auth.enabled", false); -#endif -pref("signon.management.page.breach-alerts.enabled", true); -pref("signon.management.page.vulnerable-passwords.enabled", true); -pref("signon.management.page.sort", "name"); -// The utm_creative value is appended within the code (specific to the location on -// where it is clicked). Be sure that if these two prefs are updated, that -// the utm_creative param be last. -pref("signon.management.page.breachAlertUrl", - "https://monitor.firefox.com/breach-details/"); -pref("signon.passwordEditCapture.enabled", true); -pref("signon.relatedRealms.enabled", false); -pref("signon.showAutoCompleteFooter", true); -pref("signon.showAutoCompleteImport", "import"); -pref("signon.suggestImportCount", 3); - -// Enable the "Simplify Page" feature in Print Preview. This feature -// is disabled by default in toolkit. -pref("print.use_simplify_page", true); - -// Space separated list of URLS that are allowed to send objects (instead of -// only strings) through webchannels. This list is duplicated in mobile/android/app/mobile.js -pref("webchannel.allowObject.urlWhitelist", "https://content.cdn.mozilla.net https://support.mozilla.org https://install.mozilla.org"); - -// Whether or not the browser should scan for unsubmitted -// crash reports, and then show a notification for submitting -// those reports. -#ifdef NIGHTLY_BUILD - pref("browser.crashReports.unsubmittedCheck.enabled", true); -#else - pref("browser.crashReports.unsubmittedCheck.enabled", false); -#endif - -// chancesUntilSuppress is how many times we'll show the unsubmitted -// crash report notification across different days and shutdown -// without a user choice before we suppress the notification for -// some number of days. -pref("browser.crashReports.unsubmittedCheck.chancesUntilSuppress", 4); -pref("browser.crashReports.unsubmittedCheck.autoSubmit2", false); - -// Preferences for the form autofill toolkit component. -// Checkbox in sync options for credit card data sync service -pref("services.sync.engine.creditcards.available", true); -// Whether the user enabled the OS re-auth dialog. -pref("extensions.formautofill.reauth.enabled", false); - -// Whether or not to restore a session with lazy-browser tabs. -pref("browser.sessionstore.restore_tabs_lazily", true); - -pref("browser.suppress_first_window_animation", true); - -// Preference that allows individual users to disable Screenshots. -pref("extensions.screenshots.disabled", false); - -// Preference that determines whether Screenshots is opened as a dedicated browser component -pref("screenshots.browser.component.enabled", false); - -// DoH Rollout: whether to clear the mode value at shutdown. -pref("doh-rollout.clearModeOnShutdown", false); - -// URL for Learn More link for browser error logging in preferences -pref("browser.chrome.errorReporter.infoURL", - "https://support.mozilla.org/1/firefox/%VERSION%/%OS%/%LOCALE%/nightly-error-collection"); - -// Normandy client preferences -pref("app.normandy.api_url", "https://normandy.cdn.mozilla.net/api/v1"); -pref("app.normandy.dev_mode", false); -pref("app.normandy.enabled", true); -pref("app.normandy.first_run", true); -pref("app.normandy.logging.level", 50); // Warn -pref("app.normandy.run_interval_seconds", 21600); // 6 hours -pref("app.normandy.shieldLearnMoreUrl", "https://support.mozilla.org/1/firefox/%VERSION%/%OS%/%LOCALE%/shield"); -pref("app.normandy.last_seen_buildid", ""); -pref("app.normandy.onsync_skew_sec", 600); -#ifdef MOZ_DATA_REPORTING - pref("app.shield.optoutstudies.enabled", true); -#else - pref("app.shield.optoutstudies.enabled", false); -#endif - -// Multi-lingual preferences: -// *.enabled - Are langpacks available for the build of Firefox? -// *.downloadEnabled - Langpacks are allowed to be downloaded from AMO. AMO only serves -// langpacks for release and beta. Unsupported releases (like Nightly) can be -// manually tested with the following preference: -// extensions.getAddons.langpacks.url: https://mock-amo-language-tools.glitch.me/?app=firefox&type=language&appversion=%VERSION% -// *.liveReload - Switching a langpack will change the language without a restart. -// *.liveReloadBidirectional - Allows switching when moving between LTR and RTL -// languages without a full restart. -// *.aboutWelcome.languageMismatchEnabled - Enables an onboarding menu in about:welcome -// to allow a user to change their language when there is a language mismatch between -// the app and browser. -#if defined(RELEASE_OR_BETA) && !defined(MOZ_DEV_EDITION) - pref("intl.multilingual.enabled", true); - pref("intl.multilingual.downloadEnabled", true); - pref("intl.multilingual.liveReload", true); - pref("intl.multilingual.liveReloadBidirectional", false); - pref("intl.multilingual.aboutWelcome.languageMismatchEnabled", true); -#else - pref("intl.multilingual.enabled", false); - pref("intl.multilingual.downloadEnabled", false); - pref("intl.multilingual.liveReload", false); - pref("intl.multilingual.liveReloadBidirectional", false); - pref("intl.multilingual.aboutWelcome.languageMismatchEnabled", false); -#endif - -// Coverage ping is disabled by default. -pref("toolkit.coverage.enabled", false); -pref("toolkit.coverage.endpoint.base", "https://coverage.mozilla.org"); - -// Discovery prefs -pref("browser.discovery.enabled", true); -pref("browser.discovery.containers.enabled", true); -pref("browser.discovery.sites", "addons.mozilla.org"); - -pref("browser.engagement.recent_visited_origins.expiry", 86400); // 24 * 60 * 60 (24 hours in seconds) -pref("browser.engagement.downloads-button.has-used", false); -pref("browser.engagement.fxa-toolbar-menu-button.has-used", false); -pref("browser.engagement.home-button.has-used", false); -pref("browser.engagement.sidebar-button.has-used", false); -pref("browser.engagement.library-button.has-used", false); -pref("browser.engagement.ctrlTab.has-used", false); - -pref("browser.aboutConfig.showWarning", true); - -pref("browser.toolbars.keyboard_navigation", true); - -// The visibility of the bookmarks toolbar. -// "newtab": Show on the New Tab Page -// "always": Always show -// "never": Never show -pref("browser.toolbars.bookmarks.visibility", "newtab"); - -// Visibility of the "Show Other Bookmarks" menuitem in the -// bookmarks toolbar contextmenu. -pref("browser.toolbars.bookmarks.showOtherBookmarks", true); - -// Prefs to control the Firefox Account toolbar menu. -// This pref will surface existing Firefox Account information -// as a button next to the hamburger menu. It allows -// quick access to sign-in and manage your Firefox Account. -pref("identity.fxaccounts.toolbar.enabled", true); -pref("identity.fxaccounts.toolbar.accessed", false); - -// Prefs for different services supported by Firefox Account -pref("identity.fxaccounts.service.monitorLoginUrl", "https://monitor.firefox.com/"); - -// Check bundled omni JARs for corruption. -pref("corroborator.enabled", true); - -// Toolbox preferences -pref("devtools.toolbox.footer.height", 250); -pref("devtools.toolbox.sidebar.width", 500); -pref("devtools.toolbox.host", "bottom"); -pref("devtools.toolbox.previousHost", "right"); -pref("devtools.toolbox.selectedTool", "inspector"); -pref("devtools.toolbox.zoomValue", "1"); -pref("devtools.toolbox.splitconsoleEnabled", false); -pref("devtools.toolbox.splitconsoleHeight", 100); -pref("devtools.toolbox.tabsOrder", ""); -// This is only used for local Web Extension debugging, -// and allows to keep the window on top of all others, -// so that you can debug the Firefox window, while keeping the devtools -// always visible -pref("devtools.toolbox.alwaysOnTop", true); - -// The fission pref for enabling the "Multiprocess Browser Toolbox", which will -// make it possible to debug anything in Firefox (See Bug 1570639 for more information). -pref("devtools.browsertoolbox.fission", true); - -// When the Multiprocess Browser Toolbox is enabled, you can configure the scope of it: -// - "everything" will enable debugging absolutely everything in the browser -// All processes, all documents, all workers, all add-ons. -// - "parent-process" will restrict debugging to the parent process -// All privileged javascript, documents and workers running in the parent process. -pref("devtools.browsertoolbox.scope", "parent-process"); - -// This preference will enable watching top-level targets from the server side. -pref("devtools.target-switching.server.enabled", true); - -// In DevTools, create a target for each frame (i.e. not only for top-level document and -// remote frames). -pref("devtools.every-frame-target.enabled", true); - -// Controls the hability to debug popups from the same DevTools -// of the original tab the popups are coming from -pref("devtools.popups.debug", false); - -// Toolbox Button preferences -pref("devtools.command-button-pick.enabled", true); -pref("devtools.command-button-frames.enabled", true); -pref("devtools.command-button-splitconsole.enabled", true); -pref("devtools.command-button-responsive.enabled", true); -pref("devtools.command-button-screenshot.enabled", false); -pref("devtools.command-button-rulers.enabled", false); -pref("devtools.command-button-measure.enabled", false); -pref("devtools.command-button-noautohide.enabled", false); -pref("devtools.command-button-errorcount.enabled", true); -#ifndef MOZILLA_OFFICIAL - pref("devtools.command-button-experimental-prefs.enabled", true); -#endif - -// Inspector preferences -// Enable the Inspector -pref("devtools.inspector.enabled", true); -// What was the last active sidebar in the inspector -pref("devtools.inspector.selectedSidebar", "layoutview"); -pref("devtools.inspector.activeSidebar", "layoutview"); -pref("devtools.inspector.remote", false); - -// Enable the 3 pane mode in the inspector -pref("devtools.inspector.three-pane-enabled", true); -// Enable the 3 pane mode in the chrome inspector -pref("devtools.inspector.chrome.three-pane-enabled", false); -// Collapse pseudo-elements by default in the rule-view -pref("devtools.inspector.show_pseudo_elements", false); -// The default size for image preview tooltips in the rule-view/computed-view/markup-view -pref("devtools.inspector.imagePreviewTooltipSize", 300); -// Enable user agent style inspection in rule-view -pref("devtools.inspector.showUserAgentStyles", false); -// Show native anonymous content and user agent shadow roots -pref("devtools.inspector.showAllAnonymousContent", false); -// Enable the inline CSS compatiblity warning in inspector rule view -pref("devtools.inspector.ruleview.inline-compatibility-warning.enabled", false); -// Enable the compatibility tool in the inspector. -pref("devtools.inspector.compatibility.enabled", true); -// Enable overflow debugging in the inspector. -pref("devtools.overflow.debugging.enabled", true); -// Enable drag to edit properties in the inspector rule view. -pref("devtools.inspector.draggable_properties", true); - -// Grid highlighter preferences -pref("devtools.gridinspector.gridOutlineMaxColumns", 50); -pref("devtools.gridinspector.gridOutlineMaxRows", 50); -pref("devtools.gridinspector.showGridAreas", false); -pref("devtools.gridinspector.showGridLineNumbers", false); -pref("devtools.gridinspector.showInfiniteLines", false); -// Max number of grid highlighters that can be displayed -pref("devtools.gridinspector.maxHighlighters", 3); - -// Whether or not the box model panel is opened in the layout view -pref("devtools.layout.boxmodel.opened", true); -// Whether or not the flexbox panel is opened in the layout view -pref("devtools.layout.flexbox.opened", true); -// Whether or not the flexbox container panel is opened in the layout view -pref("devtools.layout.flex-container.opened", true); -// Whether or not the flexbox item panel is opened in the layout view -pref("devtools.layout.flex-item.opened", true); -// Whether or not the grid inspector panel is opened in the layout view -pref("devtools.layout.grid.opened", true); - -// Enable hovering Box Model values and jumping to their source CSS rule in the -// rule-view. -#if defined(NIGHTLY_BUILD) - pref("devtools.layout.boxmodel.highlightProperty", true); -#else - pref("devtools.layout.boxmodel.highlightProperty", false); -#endif - -// By how many times eyedropper will magnify pixels -pref("devtools.eyedropper.zoom", 6); - -// Enable to collapse attributes that are too long. -pref("devtools.markup.collapseAttributes", true); -// Length to collapse attributes -pref("devtools.markup.collapseAttributeLength", 120); -// Whether to auto-beautify the HTML on copy. -pref("devtools.markup.beautifyOnCopy", false); -// Whether or not the DOM mutation breakpoints context menu are enabled in the -// markup view. -pref("devtools.markup.mutationBreakpoints.enabled", true); - -// DevTools default color unit -pref("devtools.defaultColorUnit", "authored"); - -// Enable the Memory tools -pref("devtools.memory.enabled", true); - -pref("devtools.memory.custom-census-displays", "{}"); -pref("devtools.memory.custom-label-displays", "{}"); -pref("devtools.memory.custom-tree-map-displays", "{}"); - -pref("devtools.memory.max-individuals", 1000); -pref("devtools.memory.max-retaining-paths", 10); - -// Enable the Performance tools -pref("devtools.performance.enabled", true); - -// The default cache UI setting -pref("devtools.cache.disabled", false); - -// The default service workers UI setting -pref("devtools.serviceWorkers.testing.enabled", false); - -// Enable the Network Monitor -pref("devtools.netmonitor.enabled", true); - -pref("devtools.netmonitor.features.search", true); -pref("devtools.netmonitor.features.requestBlocking", true); - -// Enable the Application panel -pref("devtools.application.enabled", true); - -// Enable the custom formatters feature -// TODO remove once the custom formatters feature is stable (see bug 1734614) -pref("devtools.custom-formatters", false); -// This preference represents the user's choice to enable the custom formatters feature. -// While the preference above will be removed once the feature is stable, this one is menat to stay. -pref("devtools.custom-formatters.enabled", false); - -// The default Network Monitor UI settings -pref("devtools.netmonitor.panes-network-details-width", 550); -pref("devtools.netmonitor.panes-network-details-height", 450); -pref("devtools.netmonitor.panes-search-width", 550); -pref("devtools.netmonitor.panes-search-height", 450); -pref("devtools.netmonitor.filters", "[\"all\"]"); -pref("devtools.netmonitor.visibleColumns", - "[\"status\",\"method\",\"domain\",\"file\",\"initiator\",\"type\",\"transferred\",\"contentSize\",\"waterfall\"]" -); -pref("devtools.netmonitor.columnsData", - '[{"name":"status","minWidth":30,"width":5}, {"name":"method","minWidth":30,"width":5}, {"name":"domain","minWidth":30,"width":10}, {"name":"file","minWidth":30,"width":25}, {"name":"url","minWidth":30,"width":25},{"name":"initiator","minWidth":30,"width":10},{"name":"type","minWidth":30,"width":5},{"name":"transferred","minWidth":30,"width":10},{"name":"contentSize","minWidth":30,"width":5},{"name":"waterfall","minWidth":150,"width":15}]'); -pref("devtools.netmonitor.msg.payload-preview-height", 128); -pref("devtools.netmonitor.msg.visibleColumns", - '["data", "time"]' -); -pref("devtools.netmonitor.msg.displayed-messages.limit", 500); - -pref("devtools.netmonitor.response.ui.limit", 10240); - -// Save request/response bodies yes/no. -pref("devtools.netmonitor.saveRequestAndResponseBodies", true); - -// The default Network monitor HAR export setting -pref("devtools.netmonitor.har.defaultLogDir", ""); -pref("devtools.netmonitor.har.defaultFileName", "%hostname_Archive [%date]"); -pref("devtools.netmonitor.har.jsonp", false); -pref("devtools.netmonitor.har.jsonpCallback", ""); -pref("devtools.netmonitor.har.includeResponseBodies", true); -pref("devtools.netmonitor.har.compress", false); -pref("devtools.netmonitor.har.forceExport", false); -pref("devtools.netmonitor.har.pageLoadedTimeout", 1500); -pref("devtools.netmonitor.har.enableAutoExportToFile", false); - -// netmonitor audit -pref("devtools.netmonitor.audits.slow", 500); - -// Enable the new Edit and Resend panel - pref("devtools.netmonitor.features.newEditAndResend", true); - -pref("devtools.netmonitor.customRequest", '{}'); - -// Enable the Storage Inspector -pref("devtools.storage.enabled", true); - -// Enable the Style Editor. -pref("devtools.styleeditor.enabled", true); -pref("devtools.styleeditor.autocompletion-enabled", true); -pref("devtools.styleeditor.showMediaSidebar", true); -pref("devtools.styleeditor.mediaSidebarWidth", 238); -pref("devtools.styleeditor.navSidebarWidth", 245); -pref("devtools.styleeditor.transitions", true); - -// Screenshot Option Settings. -pref("devtools.screenshot.clipboard.enabled", false); -pref("devtools.screenshot.audio.enabled", true); - -// Make sure the DOM panel is hidden by default -pref("devtools.dom.enabled", false); - -// Enable the Accessibility panel. -pref("devtools.accessibility.enabled", true); - -// Web console filters -pref("devtools.webconsole.filter.error", true); -pref("devtools.webconsole.filter.warn", true); -pref("devtools.webconsole.filter.info", true); -pref("devtools.webconsole.filter.log", true); -pref("devtools.webconsole.filter.debug", true); -pref("devtools.webconsole.filter.css", false); -pref("devtools.webconsole.filter.net", false); -pref("devtools.webconsole.filter.netxhr", false); - -// Webconsole autocomplete preference -pref("devtools.webconsole.input.autocomplete",true); - -// Show context selector in console input -pref("devtools.webconsole.input.context", true); - -// Set to true to eagerly show the results of webconsole terminal evaluations -// when they don't have side effects. -pref("devtools.webconsole.input.eagerEvaluation", true); - -// Browser console filters -pref("devtools.browserconsole.filter.error", true); -pref("devtools.browserconsole.filter.warn", true); -pref("devtools.browserconsole.filter.info", true); -pref("devtools.browserconsole.filter.log", true); -pref("devtools.browserconsole.filter.debug", true); -pref("devtools.browserconsole.filter.css", false); -pref("devtools.browserconsole.filter.net", false); -pref("devtools.browserconsole.filter.netxhr", false); - -// Max number of inputs to store in web console history. -pref("devtools.webconsole.inputHistoryCount", 300); - -// Persistent logging: |true| if you want the relevant tool to keep all of the -// logged messages after reloading the page, |false| if you want the output to -// be cleared each time page navigation happens. -pref("devtools.webconsole.persistlog", false); -pref("devtools.netmonitor.persistlog", false); - -// Web Console timestamp: |true| if you want the logs and instructions -// in the Web Console to display a timestamp, or |false| to not display -// any timestamps. -pref("devtools.webconsole.timestampMessages", false); - -// Enable the webconsole sidebar toggle in Nightly builds. -#if defined(NIGHTLY_BUILD) - pref("devtools.webconsole.sidebarToggle", true); -#else - pref("devtools.webconsole.sidebarToggle", false); -#endif - -// Saved editor mode state in the console. -pref("devtools.webconsole.input.editor", false); -pref("devtools.browserconsole.input.editor", false); - -// Editor width for webconsole and browserconsole. -pref("devtools.webconsole.input.editorWidth", 0); -pref("devtools.browserconsole.input.editorWidth", 0); - -// Display an onboarding UI for the Editor mode. -pref("devtools.webconsole.input.editorOnboarding", true); - -// Enable message grouping in the console, true by default -pref("devtools.webconsole.groupWarningMessages", true); - -// Saved state of the Display content messages checkbox in the browser console. -pref("devtools.browserconsole.contentMessages", false); - -// Enable network monitoring the browser toolbox console/browser console. -pref("devtools.browserconsole.enableNetworkMonitoring", false); - -// Enable client-side mapping service for source maps -pref("devtools.source-map.client-service.enabled", true); - -// The number of lines that are displayed in the web console. -pref("devtools.hud.loglimit", 10000); - -// The developer tools editor configuration: -// - tabsize: how many spaces to use when a Tab character is displayed. -// - expandtab: expand Tab characters to spaces. -// - keymap: which keymap to use (can be 'default', 'emacs' or 'vim') -// - autoclosebrackets: whether to permit automatic bracket/quote closing. -// - detectindentation: whether to detect the indentation from the file -// - enableCodeFolding: Whether to enable code folding or not. -pref("devtools.editor.tabsize", 2); -pref("devtools.editor.expandtab", true); -pref("devtools.editor.keymap", "default"); -pref("devtools.editor.autoclosebrackets", true); -pref("devtools.editor.detectindentation", true); -pref("devtools.editor.enableCodeFolding", true); -pref("devtools.editor.autocomplete", true); - -// The angle of the viewport. -pref("devtools.responsive.viewport.angle", 0); -// The width of the viewport. -pref("devtools.responsive.viewport.width", 320); -// The height of the viewport. -pref("devtools.responsive.viewport.height", 480); -// The pixel ratio of the viewport. -pref("devtools.responsive.viewport.pixelRatio", 0); -// Whether or not the viewports are left aligned. -pref("devtools.responsive.leftAlignViewport.enabled", false); -// Whether to reload when touch simulation is toggled -pref("devtools.responsive.reloadConditions.touchSimulation", false); -// Whether to reload when user agent is changed -pref("devtools.responsive.reloadConditions.userAgent", false); -// Whether to show the notification about reloading to apply emulation -pref("devtools.responsive.reloadNotification.enabled", true); -// Whether or not touch simulation is enabled. -pref("devtools.responsive.touchSimulation.enabled", false); -// The user agent of the viewport. -pref("devtools.responsive.userAgent", ""); -// Show the custom user agent input by default -pref("devtools.responsive.showUserAgentInput", true); - -// Show tab debug targets for This Firefox (on by default for local builds). -#ifdef MOZILLA_OFFICIAL - pref("devtools.aboutdebugging.local-tab-debugging", false); -#else - pref("devtools.aboutdebugging.local-tab-debugging", true); -#endif - -// Show process debug targets. -pref("devtools.aboutdebugging.process-debugging", true); -// Stringified array of network locations that users can connect to. -pref("devtools.aboutdebugging.network-locations", "[]"); -// Debug target pane collapse/expand settings. -pref("devtools.aboutdebugging.collapsibilities.installedExtension", false); -pref("devtools.aboutdebugging.collapsibilities.otherWorker", false); -pref("devtools.aboutdebugging.collapsibilities.serviceWorker", false); -pref("devtools.aboutdebugging.collapsibilities.sharedWorker", false); -pref("devtools.aboutdebugging.collapsibilities.tab", false); -pref("devtools.aboutdebugging.collapsibilities.temporaryExtension", false); - -// about:debugging: only show system and hidden extensions in local builds by -// default. -#ifdef MOZILLA_OFFICIAL - pref("devtools.aboutdebugging.showHiddenAddons", false); -#else - pref("devtools.aboutdebugging.showHiddenAddons", true); -#endif - -// Map top-level await expressions in the console -pref("devtools.debugger.features.map-await-expression", true); - -// This relies on javascript.options.asyncstack as well or it has no effect. -pref("devtools.debugger.features.async-captured-stacks", true); -pref("devtools.debugger.features.async-live-stacks", false); - -// Disable autohide for DevTools popups and tooltips. -// This is currently not exposed by any UI to avoid making -// about:devtools-toolbox tabs unusable by mistake. -pref("devtools.popup.disable_autohide", false); - -// FirstStartup service time-out in ms -pref("first-startup.timeout", 30000); - -// Enable the default browser agent. -// The agent still runs as scheduled if this pref is disabled, -// but it exits immediately before taking any action. -#ifdef XP_WIN - pref("default-browser-agent.enabled", true); -#endif - -// Test Prefs that do nothing for testing -#if defined(EARLY_BETA_OR_EARLIER) - pref("app.normandy.test-prefs.bool", false); - pref("app.normandy.test-prefs.integer", 0); - pref("app.normandy.test-prefs.string", ""); -#endif - -// Shows 'View Image Info' item in the image context menu -#ifdef MOZ_DEV_EDITION - pref("browser.menu.showViewImageInfo", true); -#else - pref("browser.menu.showViewImageInfo", false); -#endif - -// Mozilla-controlled domains that are allowed to use non-standard -// context properties for SVG images for use in the browser UI. Please -// keep this list short. This preference (and SVG `context-` keyword support) -// are expected to go away once a standardized alternative becomes -// available. -pref("svg.context-properties.content.allowed-domains", "profile.accounts.firefox.com,profile.stage.mozaws.net"); - -// Preference that allows individual users to disable Firefox Translations. -#ifdef NIGHTLY_BUILD - pref("extensions.translations.disabled", true); -#endif - -// A set of scores for rating the relevancy of snapshots. The suffixes after the -// last decimal are prefixed by `_score` and reference the functions called in -// SnapshotScorer. -pref("browser.snapshots.score.Visit", 1); -pref("browser.snapshots.score.CurrentSession", 1); -pref("browser.snapshots.score.IsUserPersisted", 1); -pref("browser.snapshots.score.IsUserRemoved", -10); - -// A set of weights for the snapshot recommendation sources. The suffixes after -// the last decimal map to the keys of `Snapshots.recommendationSources`. -pref("browser.snapshots.source.CommonReferrer", 3); -pref("browser.snapshots.source.Overlapping", 3); -pref("browser.snapshots.source.TimeOfDay", 3); - -// Other preferences affecting snapshots scoring. -pref("browser.snapshots.relevancy.timeOfDayIntervalSeconds", 3600); - -// Expiration days for snapshots. -pref("browser.places.snapshots.expiration.days", 210); -// For user managed snapshots we use more than a year, to support yearly tasks. -pref("browser.places.snapshots.expiration.userManaged.days", 420); - -// If the user has seen the Firefox View feature tour this value reflects -// the id of the last screen they saw and whether they completed the tour -pref("browser.firefox-view.feature-tour", "{\"screen\":\"FIREFOX_VIEW_SPOTLIGHT\",\"complete\":false}"); -// Number of times the user visited about:firefoxview -pref("browser.firefox-view.view-count", 0); - -// If the user has seen the pdf.js feature tour this value reflects the tour -// message id, the id of the last screen they saw, and whether they completed the tour -pref("browser.pdfjs.feature-tour", "{\"message\":\"PDF_JS_FEATURE_TOUR\",\"screen\":\"\",\"complete\":false}"); - -// Enables cookie banner handling in Nightly in Private Browsing Mode. See -// StaticPrefList.yaml for a description of the prefs. -#ifdef NIGHTLY_BUILD - pref("cookiebanners.service.mode.privateBrowsing", 1); - pref("cookiebanners.bannerClicking.enabled", true); -#endif - -// We only want to enable this pref for Desktop nightlies. -#ifdef NIGHTLY_BUILD - pref("dom.sitepermsaddon-provider.enabled", true); -#endif From bfc03d20be40bedda0561deb16a4a978890cc1af Mon Sep 17 00:00:00 2001 From: gamingdoom <37276884+gamingdoom@users.noreply.github.com> Date: Sat, 28 Jan 2023 22:48:51 -0800 Subject: [PATCH 04/29] modify open-in-default-browser script --- buildDatcordWin.sh | 3 +-- open-in-default-browser/open-in-default-browser | 12 ++++++++++++ src/changed/mozconfig | 1 + 3 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 src/changed/mozconfig diff --git a/buildDatcordWin.sh b/buildDatcordWin.sh index e18e55588d..e879c1a050 100644 --- a/buildDatcordWin.sh +++ b/buildDatcordWin.sh @@ -11,8 +11,7 @@ cp -rf mozilla-unified/browser/branding/unofficial/* mozilla-unified/browser/bra cd mozilla-unified echo "ac_add_options --disable-default-browser-agent" >> mozconfig echo "ac_add_options --enable-release" >> mozconfig -# Doesn't work properly if app name is datcord. -echo "ac_add_options --with-app-name=firefox" >> mozconfig +echo "ac_add_options --with-app-name=datcord" >> mozconfig echo "ac_add_options --with-branding=browser/branding/unofficial" >> mozconfig cat mozconfig patch -p1 $basedir/mozilla_dirsFromLibreWolf.patch diff --git a/open-in-default-browser/open-in-default-browser b/open-in-default-browser/open-in-default-browser index c24724934b..1d68b3e16e 100755 --- a/open-in-default-browser/open-in-default-browser +++ b/open-in-default-browser/open-in-default-browser @@ -1,4 +1,16 @@ #!/usr/bin/env bash #If you want to use a specific browser, change this to the executable of that. xdg-open opens in your default browser. browser="xdg-open" + +# Firefox specific stuff because firefox doesnt like the different profiles that datcord and itself use +if [ $(xdg-mime query default x-scheme-handler/https) == "firefox.desktop" ]; then + cd ~/.mozilla/firefox/ + if [[ $(grep '\[Profile[^0]\]' profiles.ini) ]] + then PROFPATH=$(grep -E '^\[Profile|^Path|^Default' profiles.ini | grep -1 '^Default=1' | grep '^Path' | cut -c6-) + else PROFPATH=$(grep 'Path=' profiles.ini | sed 's/^Path=//') + fi + + browser="firefox -P $PROFPATH" +fi + $browser $(echo $1 | sed "s/open\://g") \ No newline at end of file diff --git a/src/changed/mozconfig b/src/changed/mozconfig new file mode 100644 index 0000000000..dd4829019f --- /dev/null +++ b/src/changed/mozconfig @@ -0,0 +1 @@ +ac_add_options --with-app-name=datcord \ No newline at end of file From e053fbfb855fbc866d6da350c24eee28a31a4e29 Mon Sep 17 00:00:00 2001 From: gamingdoom <37276884+gamingdoom@users.noreply.github.com> Date: Sat, 28 Jan 2023 22:52:56 -0800 Subject: [PATCH 05/29] Update build-linux-x86_64.yml --- .github/workflows/build-linux-x86_64.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-linux-x86_64.yml b/.github/workflows/build-linux-x86_64.yml index bd7c333d74..a1628f4f99 100644 --- a/.github/workflows/build-linux-x86_64.yml +++ b/.github/workflows/build-linux-x86_64.yml @@ -53,8 +53,8 @@ jobs: run: | mkdir datcord tar --strip-components=1 -xvf mozilla-unified/obj-x86_64-pc-linux-gnu/dist/*.tar.bz2 -C datcord/ - mv datcord/firefox datcord/datcord - mv datcord/firefox-bin datcord/datcord-bin + #mv datcord/firefox datcord/datcord + #mv datcord/firefox-bin datcord/datcord-bin cp -r distribution/ datcord/ mv datcord/distribution/policies-linux.json datcord/distribution/policies.json cp open-in-default-browser/open-in-default-browser datcord/open-in-default-browser From ed239c087113f91e74f7969855fbd67803145639 Mon Sep 17 00:00:00 2001 From: gamingdoom <37276884+gamingdoom@users.noreply.github.com> Date: Sun, 29 Jan 2023 14:32:11 -0800 Subject: [PATCH 06/29] Update build-linux-x86_64.yml --- .github/workflows/build-linux-x86_64.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-linux-x86_64.yml b/.github/workflows/build-linux-x86_64.yml index a1628f4f99..fb6f5d06d6 100644 --- a/.github/workflows/build-linux-x86_64.yml +++ b/.github/workflows/build-linux-x86_64.yml @@ -66,8 +66,8 @@ jobs: chmod a+x appimagetool-x86_64.AppImage mkdir -p datcord.AppImage/usr/bin/ tar --strip-components=1 -xvf mozilla-unified/obj-x86_64-pc-linux-gnu/dist/*.tar.bz2 -C datcord.AppImage/usr/bin/ - mv datcord.AppImage/usr/bin/firefox datcord.AppImage/usr/bin/datcord - mv datcord.AppImage/usr/bin/firefox-bin datcord.AppImage/usr/bin/datcord-bin + #mv datcord.AppImage/usr/bin/firefox datcord.AppImage/usr/bin/datcord + #mv datcord.AppImage/usr/bin/firefox-bin datcord.AppImage/usr/bin/datcord-bin cp -r distribution/ datcord.AppImage/usr/bin/ mv datcord.AppImage/usr/bin/distribution/policies-linux-appimage.json datcord.AppImage/usr/bin/distribution/policies.json cp open-in-default-browser/open-in-default-browser datcord.AppImage/usr/bin/ From 17510f671fd6ff0f23b97a8c7d443a8d9b945bde Mon Sep 17 00:00:00 2001 From: gamingdoom <37276884+gamingdoom@users.noreply.github.com> Date: Sun, 29 Jan 2023 14:32:26 -0800 Subject: [PATCH 07/29] Update buildDatcordWin.sh --- buildDatcordWin.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildDatcordWin.sh b/buildDatcordWin.sh index e879c1a050..6d85cdfb7e 100644 --- a/buildDatcordWin.sh +++ b/buildDatcordWin.sh @@ -11,7 +11,7 @@ cp -rf mozilla-unified/browser/branding/unofficial/* mozilla-unified/browser/bra cd mozilla-unified echo "ac_add_options --disable-default-browser-agent" >> mozconfig echo "ac_add_options --enable-release" >> mozconfig -echo "ac_add_options --with-app-name=datcord" >> mozconfig +echo "ac_add_options --with-app-name=firefox" >> mozconfig echo "ac_add_options --with-branding=browser/branding/unofficial" >> mozconfig cat mozconfig patch -p1 $basedir/mozilla_dirsFromLibreWolf.patch From d5f68e3f24b12ecc94f6fdf14b2f7484f03e3912 Mon Sep 17 00:00:00 2001 From: gamingdoom <37276884+gamingdoom@users.noreply.github.com> Date: Tue, 31 Jan 2023 18:00:14 -0800 Subject: [PATCH 08/29] fix #22, give datcord its own profile dir --- buildDatcord.sh | 2 +- mozilla_dirsFromLibreWolf.patch | 32 ++++-------------- .../open-in-default-browser | 11 ------ .../branding/{unofficial => datcord}/LICENSE | 0 .../VisualElements_150.png | Bin .../VisualElements_70.png | Bin .../{unofficial => datcord}/background.png | Bin .../{unofficial => datcord}/branding.nsi | 0 .../browser/branding/datcord/configure.sh | 10 ++++++ .../content/about-logo.png | Bin .../content/about-logo.svg | 0 .../content/about-logo@2x.png | Bin .../content/about-wordmark.svg | 0 .../{unofficial => datcord}/content/about.png | Bin .../content/aboutDialog.css | 0 .../content/aboutlogins.svg | 0 .../content/firefox-wordmark.svg | 0 .../{unofficial => datcord}/content/jar.mn | 0 .../{unofficial => datcord}/content/moz.build | 0 .../{unofficial => datcord}/default128.png | Bin .../{unofficial => datcord}/default16.png | Bin .../{unofficial => datcord}/default22.png | Bin .../{unofficial => datcord}/default24.png | Bin .../{unofficial => datcord}/default256.png | Bin .../{unofficial => datcord}/default32.png | Bin .../{unofficial => datcord}/default48.png | Bin .../{unofficial => datcord}/default64.png | Bin .../{unofficial => datcord}/disk.icns | Bin .../{unofficial => datcord}/document.icns | Bin .../{unofficial => datcord}/document.ico | Bin .../branding/{unofficial => datcord}/dsstore | Bin .../firefox.VisualElementsManifest.xml | 0 .../{unofficial => datcord}/firefox.icns | Bin .../{unofficial => datcord}/firefox.ico | Bin .../{unofficial => datcord}/firefox64.ico | Bin .../locales/en-US/brand.dtd | 0 .../locales/en-US/brand.ftl | 0 .../locales/en-US/brand.properties | 0 .../{unofficial => datcord}/locales/jar.mn | 0 .../{unofficial => datcord}/locales/moz.build | 0 .../browser/branding/datcord/moz.build | 13 +++++++ .../msix/Assets/Document44x44.png | Bin .../msix/Assets/LargeTile.scale-200.png | Bin .../msix/Assets/SmallTile.scale-200.png | Bin .../Assets/Square150x150Logo.scale-200.png | Bin ...o.altform-lightunplated_targetsize-256.png | Bin ...44Logo.altform-unplated_targetsize-256.png | Bin .../msix/Assets/Square44x44Logo.scale-200.png | Bin .../Assets/Square44x44Logo.targetsize-256.png | Bin .../msix/Assets/StoreLogo.scale-200.png | Bin .../msix/Assets/Wide310x150Logo.scale-200.png | Bin .../pref/firefox-branding.js | 0 .../stubinstaller/bgstub.jpg | Bin .../stubinstaller/installing_page.css | 0 .../stubinstaller/profile_cleanup_page.css | 0 .../{unofficial => datcord}/wizHeader.bmp | Bin .../{unofficial => datcord}/wizHeaderRTL.bmp | Bin .../{unofficial => datcord}/wizWatermark.bmp | Bin .../browser/branding/unofficial/configure.sh | 19 ----------- src/changed/mozconfig | 9 ++++- 60 files changed, 39 insertions(+), 57 deletions(-) rename src/changed/browser/branding/{unofficial => datcord}/LICENSE (100%) rename src/changed/browser/branding/{unofficial => datcord}/VisualElements_150.png (100%) rename src/changed/browser/branding/{unofficial => datcord}/VisualElements_70.png (100%) rename src/changed/browser/branding/{unofficial => datcord}/background.png (100%) rename src/changed/browser/branding/{unofficial => datcord}/branding.nsi (100%) create mode 100644 src/changed/browser/branding/datcord/configure.sh rename src/changed/browser/branding/{unofficial => datcord}/content/about-logo.png (100%) rename src/changed/browser/branding/{unofficial => datcord}/content/about-logo.svg (100%) rename src/changed/browser/branding/{unofficial => datcord}/content/about-logo@2x.png (100%) rename src/changed/browser/branding/{unofficial => datcord}/content/about-wordmark.svg (100%) rename src/changed/browser/branding/{unofficial => datcord}/content/about.png (100%) rename src/changed/browser/branding/{unofficial => datcord}/content/aboutDialog.css (100%) rename src/changed/browser/branding/{unofficial => datcord}/content/aboutlogins.svg (100%) rename src/changed/browser/branding/{unofficial => datcord}/content/firefox-wordmark.svg (100%) rename src/changed/browser/branding/{unofficial => datcord}/content/jar.mn (100%) rename src/changed/browser/branding/{unofficial => datcord}/content/moz.build (100%) rename src/changed/browser/branding/{unofficial => datcord}/default128.png (100%) rename src/changed/browser/branding/{unofficial => datcord}/default16.png (100%) rename src/changed/browser/branding/{unofficial => datcord}/default22.png (100%) rename src/changed/browser/branding/{unofficial => datcord}/default24.png (100%) rename src/changed/browser/branding/{unofficial => datcord}/default256.png (100%) rename src/changed/browser/branding/{unofficial => datcord}/default32.png (100%) rename src/changed/browser/branding/{unofficial => datcord}/default48.png (100%) rename src/changed/browser/branding/{unofficial => datcord}/default64.png (100%) rename src/changed/browser/branding/{unofficial => datcord}/disk.icns (100%) rename src/changed/browser/branding/{unofficial => datcord}/document.icns (100%) rename src/changed/browser/branding/{unofficial => datcord}/document.ico (100%) rename src/changed/browser/branding/{unofficial => datcord}/dsstore (100%) rename src/changed/browser/branding/{unofficial => datcord}/firefox.VisualElementsManifest.xml (100%) rename src/changed/browser/branding/{unofficial => datcord}/firefox.icns (100%) rename src/changed/browser/branding/{unofficial => datcord}/firefox.ico (100%) rename src/changed/browser/branding/{unofficial => datcord}/firefox64.ico (100%) rename src/changed/browser/branding/{unofficial => datcord}/locales/en-US/brand.dtd (100%) rename src/changed/browser/branding/{unofficial => datcord}/locales/en-US/brand.ftl (100%) rename src/changed/browser/branding/{unofficial => datcord}/locales/en-US/brand.properties (100%) rename src/changed/browser/branding/{unofficial => datcord}/locales/jar.mn (100%) rename src/changed/browser/branding/{unofficial => datcord}/locales/moz.build (100%) create mode 100644 src/changed/browser/branding/datcord/moz.build rename src/changed/browser/branding/{unofficial => datcord}/msix/Assets/Document44x44.png (100%) rename src/changed/browser/branding/{unofficial => datcord}/msix/Assets/LargeTile.scale-200.png (100%) rename src/changed/browser/branding/{unofficial => datcord}/msix/Assets/SmallTile.scale-200.png (100%) rename src/changed/browser/branding/{unofficial => datcord}/msix/Assets/Square150x150Logo.scale-200.png (100%) rename src/changed/browser/branding/{unofficial => datcord}/msix/Assets/Square44x44Logo.altform-lightunplated_targetsize-256.png (100%) rename src/changed/browser/branding/{unofficial => datcord}/msix/Assets/Square44x44Logo.altform-unplated_targetsize-256.png (100%) rename src/changed/browser/branding/{unofficial => datcord}/msix/Assets/Square44x44Logo.scale-200.png (100%) rename src/changed/browser/branding/{unofficial => datcord}/msix/Assets/Square44x44Logo.targetsize-256.png (100%) rename src/changed/browser/branding/{unofficial => datcord}/msix/Assets/StoreLogo.scale-200.png (100%) rename src/changed/browser/branding/{unofficial => datcord}/msix/Assets/Wide310x150Logo.scale-200.png (100%) rename src/changed/browser/branding/{unofficial => datcord}/pref/firefox-branding.js (100%) rename src/changed/browser/branding/{unofficial => datcord}/stubinstaller/bgstub.jpg (100%) rename src/changed/browser/branding/{unofficial => datcord}/stubinstaller/installing_page.css (100%) rename src/changed/browser/branding/{unofficial => datcord}/stubinstaller/profile_cleanup_page.css (100%) rename src/changed/browser/branding/{unofficial => datcord}/wizHeader.bmp (100%) rename src/changed/browser/branding/{unofficial => datcord}/wizHeaderRTL.bmp (100%) rename src/changed/browser/branding/{unofficial => datcord}/wizWatermark.bmp (100%) delete mode 100644 src/changed/browser/branding/unofficial/configure.sh diff --git a/buildDatcord.sh b/buildDatcord.sh index 475b5b03ef..29a2def101 100755 --- a/buildDatcord.sh +++ b/buildDatcord.sh @@ -23,7 +23,7 @@ fi cd mozilla-unified cp -r ../src/changed/* . -patch -p1 ../mozilla_dirsFromLibreWolf.patch +patch -p1 < ../mozilla_dirsFromLibreWolf.patch ./mach configure ./mach build ./mach package diff --git a/mozilla_dirsFromLibreWolf.patch b/mozilla_dirsFromLibreWolf.patch index 40f39308a3..1c8424ee8b 100644 --- a/mozilla_dirsFromLibreWolf.patch +++ b/mozilla_dirsFromLibreWolf.patch @@ -1,8 +1,8 @@ diff --git a/toolkit/xre/nsXREDirProvider.cpp b/toolkit/xre/nsXREDirProvider.cpp -index 753c4df..8eefc56 100644 +index 50a64a2..79d7d9c 100644 --- a/toolkit/xre/nsXREDirProvider.cpp +++ b/toolkit/xre/nsXREDirProvider.cpp -@@ -302,16 +302,16 @@ static nsresult GetSystemParentDirectory(nsIFile** aFile) { +@@ -303,16 +303,16 @@ static nsresult GetSystemParentDirectory(nsIFile** aFile) { rv = GetOSXFolderType(kOnSystemDisk, kApplicationSupportFolderType, getter_AddRefs(localDir)); if (NS_SUCCEEDED(rv)) { @@ -23,7 +23,7 @@ index 753c4df..8eefc56 100644 # endif ; rv = NS_NewNativeLocalFile(dirname, false, getter_AddRefs(localDir)); -@@ -417,9 +417,9 @@ nsXREDirProvider::GetFile(const char* aProperty, bool* aPersistent, +@@ -413,9 +413,9 @@ nsXREDirProvider::GetFile(const char* aProperty, bool* aPersistent, rv = GetUserDataDirectoryHome(getter_AddRefs(localDir), false); if (NS_SUCCEEDED(rv)) { # if defined(XP_MACOSX) @@ -35,7 +35,7 @@ index 753c4df..8eefc56 100644 # endif } if (NS_SUCCEEDED(rv)) { -@@ -469,9 +469,9 @@ nsXREDirProvider::GetFile(const char* aProperty, bool* aPersistent, +@@ -465,9 +465,9 @@ nsXREDirProvider::GetFile(const char* aProperty, bool* aPersistent, else if (!strcmp(aProperty, XRE_SYS_SHARE_EXTENSION_PARENT_DIR)) { # ifdef ENABLE_SYSTEM_EXTENSION_DIRS # if defined(__OpenBSD__) || defined(__FreeBSD__) @@ -47,7 +47,7 @@ index 753c4df..8eefc56 100644 # endif return NS_NewNativeLocalFile(nsDependentCString(sysLExtDir), false, aFile); # else -@@ -1278,7 +1278,7 @@ nsresult nsXREDirProvider::GetUpdateRootDir(nsIFile** aResult, +@@ -1276,7 +1276,7 @@ nsresult nsXREDirProvider::GetUpdateRootDir(nsIFile** aResult, nsDependentCString(hasVendor ? GetAppVendor() : GetAppName())))) { return NS_ERROR_FAILURE; } @@ -56,7 +56,7 @@ index 753c4df..8eefc56 100644 return NS_ERROR_FAILURE; } -@@ -1584,7 +1584,7 @@ nsresult nsXREDirProvider::AppendSysUserExtensionPath(nsIFile* aFile) { +@@ -1559,7 +1559,7 @@ nsresult nsXREDirProvider::AppendSysUserExtensionPath(nsIFile* aFile) { #if defined(XP_MACOSX) || defined(XP_WIN) @@ -65,25 +65,7 @@ index 753c4df..8eefc56 100644 rv = aFile->AppendNative(nsDependentCString(sXR)); NS_ENSURE_SUCCESS(rv, rv); -@@ -1594,7 +1594,7 @@ nsresult nsXREDirProvider::AppendSysUserExtensionPath(nsIFile* aFile) { - - #elif defined(XP_UNIX) - -- static const char* const sXR = ".mozilla"; -+ static const char* const sXR = ".datcord"; - rv = aFile->AppendNative(nsDependentCString(sXR)); - NS_ENSURE_SUCCESS(rv, rv); - -@@ -1615,7 +1615,7 @@ nsresult nsXREDirProvider::AppendSysUserExtensionsDevPath(nsIFile* aFile) { - - #if defined(XP_MACOSX) || defined(XP_WIN) - -- static const char* const sXR = "Mozilla"; -+ static const char* const sXR = "Datcord"; - rv = aFile->AppendNative(nsDependentCString(sXR)); - NS_ENSURE_SUCCESS(rv, rv); - -@@ -1625,7 +1625,7 @@ nsresult nsXREDirProvider::AppendSysUserExtensionsDevPath(nsIFile* aFile) { +@@ -1569,7 +1569,7 @@ nsresult nsXREDirProvider::AppendSysUserExtensionPath(nsIFile* aFile) { #elif defined(XP_UNIX) diff --git a/open-in-default-browser/open-in-default-browser b/open-in-default-browser/open-in-default-browser index 1d68b3e16e..4c44c8bdb6 100755 --- a/open-in-default-browser/open-in-default-browser +++ b/open-in-default-browser/open-in-default-browser @@ -2,15 +2,4 @@ #If you want to use a specific browser, change this to the executable of that. xdg-open opens in your default browser. browser="xdg-open" -# Firefox specific stuff because firefox doesnt like the different profiles that datcord and itself use -if [ $(xdg-mime query default x-scheme-handler/https) == "firefox.desktop" ]; then - cd ~/.mozilla/firefox/ - if [[ $(grep '\[Profile[^0]\]' profiles.ini) ]] - then PROFPATH=$(grep -E '^\[Profile|^Path|^Default' profiles.ini | grep -1 '^Default=1' | grep '^Path' | cut -c6-) - else PROFPATH=$(grep 'Path=' profiles.ini | sed 's/^Path=//') - fi - - browser="firefox -P $PROFPATH" -fi - $browser $(echo $1 | sed "s/open\://g") \ No newline at end of file diff --git a/src/changed/browser/branding/unofficial/LICENSE b/src/changed/browser/branding/datcord/LICENSE similarity index 100% rename from src/changed/browser/branding/unofficial/LICENSE rename to src/changed/browser/branding/datcord/LICENSE diff --git a/src/changed/browser/branding/unofficial/VisualElements_150.png b/src/changed/browser/branding/datcord/VisualElements_150.png similarity index 100% rename from src/changed/browser/branding/unofficial/VisualElements_150.png rename to src/changed/browser/branding/datcord/VisualElements_150.png diff --git a/src/changed/browser/branding/unofficial/VisualElements_70.png b/src/changed/browser/branding/datcord/VisualElements_70.png similarity index 100% rename from src/changed/browser/branding/unofficial/VisualElements_70.png rename to src/changed/browser/branding/datcord/VisualElements_70.png diff --git a/src/changed/browser/branding/unofficial/background.png b/src/changed/browser/branding/datcord/background.png similarity index 100% rename from src/changed/browser/branding/unofficial/background.png rename to src/changed/browser/branding/datcord/background.png diff --git a/src/changed/browser/branding/unofficial/branding.nsi b/src/changed/browser/branding/datcord/branding.nsi similarity index 100% rename from src/changed/browser/branding/unofficial/branding.nsi rename to src/changed/browser/branding/datcord/branding.nsi diff --git a/src/changed/browser/branding/datcord/configure.sh b/src/changed/browser/branding/datcord/configure.sh new file mode 100644 index 0000000000..ee7d89e796 --- /dev/null +++ b/src/changed/browser/branding/datcord/configure.sh @@ -0,0 +1,10 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +MOZ_APP_NAME=datcord +MOZ_APP_BASENAME=Datcord +MOZ_APP_PROFILE=datcord +MOZ_APP_VENDOR=Datcord +MOZ_APP_DISPLAYNAME=Datcord diff --git a/src/changed/browser/branding/unofficial/content/about-logo.png b/src/changed/browser/branding/datcord/content/about-logo.png similarity index 100% rename from src/changed/browser/branding/unofficial/content/about-logo.png rename to src/changed/browser/branding/datcord/content/about-logo.png diff --git a/src/changed/browser/branding/unofficial/content/about-logo.svg b/src/changed/browser/branding/datcord/content/about-logo.svg similarity index 100% rename from src/changed/browser/branding/unofficial/content/about-logo.svg rename to src/changed/browser/branding/datcord/content/about-logo.svg diff --git a/src/changed/browser/branding/unofficial/content/about-logo@2x.png b/src/changed/browser/branding/datcord/content/about-logo@2x.png similarity index 100% rename from src/changed/browser/branding/unofficial/content/about-logo@2x.png rename to src/changed/browser/branding/datcord/content/about-logo@2x.png diff --git a/src/changed/browser/branding/unofficial/content/about-wordmark.svg b/src/changed/browser/branding/datcord/content/about-wordmark.svg similarity index 100% rename from src/changed/browser/branding/unofficial/content/about-wordmark.svg rename to src/changed/browser/branding/datcord/content/about-wordmark.svg diff --git a/src/changed/browser/branding/unofficial/content/about.png b/src/changed/browser/branding/datcord/content/about.png similarity index 100% rename from src/changed/browser/branding/unofficial/content/about.png rename to src/changed/browser/branding/datcord/content/about.png diff --git a/src/changed/browser/branding/unofficial/content/aboutDialog.css b/src/changed/browser/branding/datcord/content/aboutDialog.css similarity index 100% rename from src/changed/browser/branding/unofficial/content/aboutDialog.css rename to src/changed/browser/branding/datcord/content/aboutDialog.css diff --git a/src/changed/browser/branding/unofficial/content/aboutlogins.svg b/src/changed/browser/branding/datcord/content/aboutlogins.svg similarity index 100% rename from src/changed/browser/branding/unofficial/content/aboutlogins.svg rename to src/changed/browser/branding/datcord/content/aboutlogins.svg diff --git a/src/changed/browser/branding/unofficial/content/firefox-wordmark.svg b/src/changed/browser/branding/datcord/content/firefox-wordmark.svg similarity index 100% rename from src/changed/browser/branding/unofficial/content/firefox-wordmark.svg rename to src/changed/browser/branding/datcord/content/firefox-wordmark.svg diff --git a/src/changed/browser/branding/unofficial/content/jar.mn b/src/changed/browser/branding/datcord/content/jar.mn similarity index 100% rename from src/changed/browser/branding/unofficial/content/jar.mn rename to src/changed/browser/branding/datcord/content/jar.mn diff --git a/src/changed/browser/branding/unofficial/content/moz.build b/src/changed/browser/branding/datcord/content/moz.build similarity index 100% rename from src/changed/browser/branding/unofficial/content/moz.build rename to src/changed/browser/branding/datcord/content/moz.build diff --git a/src/changed/browser/branding/unofficial/default128.png b/src/changed/browser/branding/datcord/default128.png similarity index 100% rename from src/changed/browser/branding/unofficial/default128.png rename to src/changed/browser/branding/datcord/default128.png diff --git a/src/changed/browser/branding/unofficial/default16.png b/src/changed/browser/branding/datcord/default16.png similarity index 100% rename from src/changed/browser/branding/unofficial/default16.png rename to src/changed/browser/branding/datcord/default16.png diff --git a/src/changed/browser/branding/unofficial/default22.png b/src/changed/browser/branding/datcord/default22.png similarity index 100% rename from src/changed/browser/branding/unofficial/default22.png rename to src/changed/browser/branding/datcord/default22.png diff --git a/src/changed/browser/branding/unofficial/default24.png b/src/changed/browser/branding/datcord/default24.png similarity index 100% rename from src/changed/browser/branding/unofficial/default24.png rename to src/changed/browser/branding/datcord/default24.png diff --git a/src/changed/browser/branding/unofficial/default256.png b/src/changed/browser/branding/datcord/default256.png similarity index 100% rename from src/changed/browser/branding/unofficial/default256.png rename to src/changed/browser/branding/datcord/default256.png diff --git a/src/changed/browser/branding/unofficial/default32.png b/src/changed/browser/branding/datcord/default32.png similarity index 100% rename from src/changed/browser/branding/unofficial/default32.png rename to src/changed/browser/branding/datcord/default32.png diff --git a/src/changed/browser/branding/unofficial/default48.png b/src/changed/browser/branding/datcord/default48.png similarity index 100% rename from src/changed/browser/branding/unofficial/default48.png rename to src/changed/browser/branding/datcord/default48.png diff --git a/src/changed/browser/branding/unofficial/default64.png b/src/changed/browser/branding/datcord/default64.png similarity index 100% rename from src/changed/browser/branding/unofficial/default64.png rename to src/changed/browser/branding/datcord/default64.png diff --git a/src/changed/browser/branding/unofficial/disk.icns b/src/changed/browser/branding/datcord/disk.icns similarity index 100% rename from src/changed/browser/branding/unofficial/disk.icns rename to src/changed/browser/branding/datcord/disk.icns diff --git a/src/changed/browser/branding/unofficial/document.icns b/src/changed/browser/branding/datcord/document.icns similarity index 100% rename from src/changed/browser/branding/unofficial/document.icns rename to src/changed/browser/branding/datcord/document.icns diff --git a/src/changed/browser/branding/unofficial/document.ico b/src/changed/browser/branding/datcord/document.ico similarity index 100% rename from src/changed/browser/branding/unofficial/document.ico rename to src/changed/browser/branding/datcord/document.ico diff --git a/src/changed/browser/branding/unofficial/dsstore b/src/changed/browser/branding/datcord/dsstore similarity index 100% rename from src/changed/browser/branding/unofficial/dsstore rename to src/changed/browser/branding/datcord/dsstore diff --git a/src/changed/browser/branding/unofficial/firefox.VisualElementsManifest.xml b/src/changed/browser/branding/datcord/firefox.VisualElementsManifest.xml similarity index 100% rename from src/changed/browser/branding/unofficial/firefox.VisualElementsManifest.xml rename to src/changed/browser/branding/datcord/firefox.VisualElementsManifest.xml diff --git a/src/changed/browser/branding/unofficial/firefox.icns b/src/changed/browser/branding/datcord/firefox.icns similarity index 100% rename from src/changed/browser/branding/unofficial/firefox.icns rename to src/changed/browser/branding/datcord/firefox.icns diff --git a/src/changed/browser/branding/unofficial/firefox.ico b/src/changed/browser/branding/datcord/firefox.ico similarity index 100% rename from src/changed/browser/branding/unofficial/firefox.ico rename to src/changed/browser/branding/datcord/firefox.ico diff --git a/src/changed/browser/branding/unofficial/firefox64.ico b/src/changed/browser/branding/datcord/firefox64.ico similarity index 100% rename from src/changed/browser/branding/unofficial/firefox64.ico rename to src/changed/browser/branding/datcord/firefox64.ico diff --git a/src/changed/browser/branding/unofficial/locales/en-US/brand.dtd b/src/changed/browser/branding/datcord/locales/en-US/brand.dtd similarity index 100% rename from src/changed/browser/branding/unofficial/locales/en-US/brand.dtd rename to src/changed/browser/branding/datcord/locales/en-US/brand.dtd diff --git a/src/changed/browser/branding/unofficial/locales/en-US/brand.ftl b/src/changed/browser/branding/datcord/locales/en-US/brand.ftl similarity index 100% rename from src/changed/browser/branding/unofficial/locales/en-US/brand.ftl rename to src/changed/browser/branding/datcord/locales/en-US/brand.ftl diff --git a/src/changed/browser/branding/unofficial/locales/en-US/brand.properties b/src/changed/browser/branding/datcord/locales/en-US/brand.properties similarity index 100% rename from src/changed/browser/branding/unofficial/locales/en-US/brand.properties rename to src/changed/browser/branding/datcord/locales/en-US/brand.properties diff --git a/src/changed/browser/branding/unofficial/locales/jar.mn b/src/changed/browser/branding/datcord/locales/jar.mn similarity index 100% rename from src/changed/browser/branding/unofficial/locales/jar.mn rename to src/changed/browser/branding/datcord/locales/jar.mn diff --git a/src/changed/browser/branding/unofficial/locales/moz.build b/src/changed/browser/branding/datcord/locales/moz.build similarity index 100% rename from src/changed/browser/branding/unofficial/locales/moz.build rename to src/changed/browser/branding/datcord/locales/moz.build diff --git a/src/changed/browser/branding/datcord/moz.build b/src/changed/browser/branding/datcord/moz.build new file mode 100644 index 0000000000..9045cee11b --- /dev/null +++ b/src/changed/browser/branding/datcord/moz.build @@ -0,0 +1,13 @@ +# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*- +# vim: set filetype=python: +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +DIRS += ['content', 'locales'] + +DIST_SUBDIR = 'browser' +export('DIST_SUBDIR') + +include('../branding-common.mozbuild') +FirefoxBranding() diff --git a/src/changed/browser/branding/unofficial/msix/Assets/Document44x44.png b/src/changed/browser/branding/datcord/msix/Assets/Document44x44.png similarity index 100% rename from src/changed/browser/branding/unofficial/msix/Assets/Document44x44.png rename to src/changed/browser/branding/datcord/msix/Assets/Document44x44.png diff --git a/src/changed/browser/branding/unofficial/msix/Assets/LargeTile.scale-200.png b/src/changed/browser/branding/datcord/msix/Assets/LargeTile.scale-200.png similarity index 100% rename from src/changed/browser/branding/unofficial/msix/Assets/LargeTile.scale-200.png rename to src/changed/browser/branding/datcord/msix/Assets/LargeTile.scale-200.png diff --git a/src/changed/browser/branding/unofficial/msix/Assets/SmallTile.scale-200.png b/src/changed/browser/branding/datcord/msix/Assets/SmallTile.scale-200.png similarity index 100% rename from src/changed/browser/branding/unofficial/msix/Assets/SmallTile.scale-200.png rename to src/changed/browser/branding/datcord/msix/Assets/SmallTile.scale-200.png diff --git a/src/changed/browser/branding/unofficial/msix/Assets/Square150x150Logo.scale-200.png b/src/changed/browser/branding/datcord/msix/Assets/Square150x150Logo.scale-200.png similarity index 100% rename from src/changed/browser/branding/unofficial/msix/Assets/Square150x150Logo.scale-200.png rename to src/changed/browser/branding/datcord/msix/Assets/Square150x150Logo.scale-200.png diff --git a/src/changed/browser/branding/unofficial/msix/Assets/Square44x44Logo.altform-lightunplated_targetsize-256.png b/src/changed/browser/branding/datcord/msix/Assets/Square44x44Logo.altform-lightunplated_targetsize-256.png similarity index 100% rename from src/changed/browser/branding/unofficial/msix/Assets/Square44x44Logo.altform-lightunplated_targetsize-256.png rename to src/changed/browser/branding/datcord/msix/Assets/Square44x44Logo.altform-lightunplated_targetsize-256.png diff --git a/src/changed/browser/branding/unofficial/msix/Assets/Square44x44Logo.altform-unplated_targetsize-256.png b/src/changed/browser/branding/datcord/msix/Assets/Square44x44Logo.altform-unplated_targetsize-256.png similarity index 100% rename from src/changed/browser/branding/unofficial/msix/Assets/Square44x44Logo.altform-unplated_targetsize-256.png rename to src/changed/browser/branding/datcord/msix/Assets/Square44x44Logo.altform-unplated_targetsize-256.png diff --git a/src/changed/browser/branding/unofficial/msix/Assets/Square44x44Logo.scale-200.png b/src/changed/browser/branding/datcord/msix/Assets/Square44x44Logo.scale-200.png similarity index 100% rename from src/changed/browser/branding/unofficial/msix/Assets/Square44x44Logo.scale-200.png rename to src/changed/browser/branding/datcord/msix/Assets/Square44x44Logo.scale-200.png diff --git a/src/changed/browser/branding/unofficial/msix/Assets/Square44x44Logo.targetsize-256.png b/src/changed/browser/branding/datcord/msix/Assets/Square44x44Logo.targetsize-256.png similarity index 100% rename from src/changed/browser/branding/unofficial/msix/Assets/Square44x44Logo.targetsize-256.png rename to src/changed/browser/branding/datcord/msix/Assets/Square44x44Logo.targetsize-256.png diff --git a/src/changed/browser/branding/unofficial/msix/Assets/StoreLogo.scale-200.png b/src/changed/browser/branding/datcord/msix/Assets/StoreLogo.scale-200.png similarity index 100% rename from src/changed/browser/branding/unofficial/msix/Assets/StoreLogo.scale-200.png rename to src/changed/browser/branding/datcord/msix/Assets/StoreLogo.scale-200.png diff --git a/src/changed/browser/branding/unofficial/msix/Assets/Wide310x150Logo.scale-200.png b/src/changed/browser/branding/datcord/msix/Assets/Wide310x150Logo.scale-200.png similarity index 100% rename from src/changed/browser/branding/unofficial/msix/Assets/Wide310x150Logo.scale-200.png rename to src/changed/browser/branding/datcord/msix/Assets/Wide310x150Logo.scale-200.png diff --git a/src/changed/browser/branding/unofficial/pref/firefox-branding.js b/src/changed/browser/branding/datcord/pref/firefox-branding.js similarity index 100% rename from src/changed/browser/branding/unofficial/pref/firefox-branding.js rename to src/changed/browser/branding/datcord/pref/firefox-branding.js diff --git a/src/changed/browser/branding/unofficial/stubinstaller/bgstub.jpg b/src/changed/browser/branding/datcord/stubinstaller/bgstub.jpg similarity index 100% rename from src/changed/browser/branding/unofficial/stubinstaller/bgstub.jpg rename to src/changed/browser/branding/datcord/stubinstaller/bgstub.jpg diff --git a/src/changed/browser/branding/unofficial/stubinstaller/installing_page.css b/src/changed/browser/branding/datcord/stubinstaller/installing_page.css similarity index 100% rename from src/changed/browser/branding/unofficial/stubinstaller/installing_page.css rename to src/changed/browser/branding/datcord/stubinstaller/installing_page.css diff --git a/src/changed/browser/branding/unofficial/stubinstaller/profile_cleanup_page.css b/src/changed/browser/branding/datcord/stubinstaller/profile_cleanup_page.css similarity index 100% rename from src/changed/browser/branding/unofficial/stubinstaller/profile_cleanup_page.css rename to src/changed/browser/branding/datcord/stubinstaller/profile_cleanup_page.css diff --git a/src/changed/browser/branding/unofficial/wizHeader.bmp b/src/changed/browser/branding/datcord/wizHeader.bmp similarity index 100% rename from src/changed/browser/branding/unofficial/wizHeader.bmp rename to src/changed/browser/branding/datcord/wizHeader.bmp diff --git a/src/changed/browser/branding/unofficial/wizHeaderRTL.bmp b/src/changed/browser/branding/datcord/wizHeaderRTL.bmp similarity index 100% rename from src/changed/browser/branding/unofficial/wizHeaderRTL.bmp rename to src/changed/browser/branding/datcord/wizHeaderRTL.bmp diff --git a/src/changed/browser/branding/unofficial/wizWatermark.bmp b/src/changed/browser/branding/datcord/wizWatermark.bmp similarity index 100% rename from src/changed/browser/branding/unofficial/wizWatermark.bmp rename to src/changed/browser/branding/datcord/wizWatermark.bmp diff --git a/src/changed/browser/branding/unofficial/configure.sh b/src/changed/browser/branding/unofficial/configure.sh deleted file mode 100644 index 1fbe981c9c..0000000000 --- a/src/changed/browser/branding/unofficial/configure.sh +++ /dev/null @@ -1,19 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -MOZ_APP_DISPLAYNAME=Firefox - -if test "$MOZ_UPDATE_CHANNEL" = "beta"; then - # Official beta builds - MOZ_HANDLER_CLSID="21e9f98d-a6c9-4cb5-b288-ae2fd2a96c58" - MOZ_IHANDLERCONTROL_IID="119149fa-d212-4f22-9517-082eecc1a084" - MOZ_ASYNCIHANDLERCONTROL_IID="4e253d9b-59cf-4b32-a973-38bc85495d61" - MOZ_IGECKOBACKCHANNEL_IID="77b75c7d-d1c2-4469-864d-31aaebb67cc6" -else - # Official release/esr builds - MOZ_HANDLER_CLSID="1baa303d-b4b9-45e5-9ccb-e3fca3e274b6" - MOZ_IHANDLERCONTROL_IID="ce30f77e-8847-44f0-a648-a9656bd89c0d" - MOZ_ASYNCIHANDLERCONTROL_IID="dca8d857-1a63-4045-8f36-8809eb093d04" - MOZ_IGECKOBACKCHANNEL_IID="b32983ff-ef84-4945-8f86-fb7491b4f57b" -fi diff --git a/src/changed/mozconfig b/src/changed/mozconfig index dd4829019f..c3477c36ff 100644 --- a/src/changed/mozconfig +++ b/src/changed/mozconfig @@ -1 +1,8 @@ -ac_add_options --with-app-name=datcord \ No newline at end of file +ac_add_options --with-app-name=datcord +ac_add_options --with-branding=browser/branding/datcord + +export MOZ_APP_NAME=datcord +export MOZ_APP_BASENAME=Datcord +export MOZ_APP_PROFILE=datcord +export MOZ_APP_VENDOR=Datcord +export MOZ_APP_DISPLAYNAME=Datcord From fb526e5c014aa8d5babd1b18514ea859d3b9e5c0 Mon Sep 17 00:00:00 2001 From: gamingdoom <37276884+gamingdoom@users.noreply.github.com> Date: Tue, 31 Jan 2023 18:15:14 -0800 Subject: [PATCH 09/29] fix readme image --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 1d4428d484..c644c98553 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@
- - Logo + + Logo

Datcord

From e240fe45d905fb3c6a4bd6beddf85ab85821b8da Mon Sep 17 00:00:00 2001 From: gamingdoom <37276884+gamingdoom@users.noreply.github.com> Date: Tue, 31 Jan 2023 18:18:24 -0800 Subject: [PATCH 10/29] update install script --- installDatcord.sh | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/installDatcord.sh b/installDatcord.sh index e44a52bf61..c130616224 100644 --- a/installDatcord.sh +++ b/installDatcord.sh @@ -4,8 +4,9 @@ rm datcord-linux-x86_64.tar.bz2 wget https://github.com/gamingdoom/datcord/releases/latest/download/datcord-linux-x86_64.tar.bz2 mkdir datcord-bin tar -xvf datcord-linux-x86_64.tar.bz2 -C datcord-bin/ -sudo mkdir /usr/bin/datcord.d -sudo cp -r datcord-bin/* /usr/bin/datcord.d +chmod +x datcord-bin/launch-datcord +chmod +x datcord-bin/open-in-default-browser +sudo mkdir /usr/lib/datcord +sudo cp -r datcord-bin/* /usr/lib/datcord chmod +x /usr/bin/launch-datcord -sudo ln -s /usr/bin/datcord.d/launch-datcord /usr/bin/datcord -sudo cp datcord-bin/open-in-default-browser/open-in-default-browser /usr/bin/open-in-default-browser && chmod +x /usr/bin/open-in-default-browser +sudo ln -s /usr/lib/datcord/launch-datcord /usr/bin/datcord From 9f086a83bbee3ebae72b91a18c0ea22502feedcb Mon Sep 17 00:00:00 2001 From: gamingdoom <37276884+gamingdoom@users.noreply.github.com> Date: Tue, 31 Jan 2023 19:59:15 -0800 Subject: [PATCH 11/29] spoof user agent so discord doesnt block mic --- src/changed/browser/app/profile/firefox.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/changed/browser/app/profile/firefox.js b/src/changed/browser/app/profile/firefox.js index 9fe06aa01b..eac32ce7a1 100644 --- a/src/changed/browser/app/profile/firefox.js +++ b/src/changed/browser/app/profile/firefox.js @@ -2791,6 +2791,8 @@ pref("network.protocol-handler.warn-external.open", true); pref("network.protocol-handler.expose.open", false); // Other Datcord Settings +pref("general.useragent.override", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36"); + pref("permissions.default.camera", 1); pref("permissions.default.microphone", 1); From b89712bacfdab92857d8598238b291185bcd077c Mon Sep 17 00:00:00 2001 From: gamingdoom <37276884+gamingdoom@users.noreply.github.com> Date: Tue, 31 Jan 2023 21:07:16 -0800 Subject: [PATCH 12/29] use latest version of windows --- .github/workflows/build-win64.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-win64.yml b/.github/workflows/build-win64.yml index 4d9eccf8a5..fd66275b67 100644 --- a/.github/workflows/build-win64.yml +++ b/.github/workflows/build-win64.yml @@ -16,7 +16,7 @@ jobs: # This workflow contains a single job called "build" build: # The type of runner that the job will run on - runs-on: windows-2019 + runs-on: windows-latest # Steps represent a sequence of tasks that will be executed as part of the job steps: From 9a62b6d53d7e70c8979518d2a15560ffc8d50f00 Mon Sep 17 00:00:00 2001 From: gamingdoom <37276884+gamingdoom@users.noreply.github.com> Date: Tue, 31 Jan 2023 21:10:48 -0800 Subject: [PATCH 13/29] bump version --- windows/setup.nsi | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/windows/setup.nsi b/windows/setup.nsi index 201f54412f..aa4e5add62 100644 --- a/windows/setup.nsi +++ b/windows/setup.nsi @@ -8,7 +8,7 @@ !define APPNAME "Datcord" !define PROGNAME "datcord" !define EXECUTABLE "${PROGNAME}.exe" -!define PROG_VERSION "0.3.2" +!define PROG_VERSION "0.4.0" !define COMPANYNAME "Datcord" !define ESTIMATED_SIZE 190000 !define MUI_ICON "datcord.ico" @@ -129,4 +129,4 @@ section "Uninstall" # Remove uninstaller information from the registry DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" -sectionEnd \ No newline at end of file +sectionEnd From 951df012f8df2f4bd3167e405dcac19a72a0f5db Mon Sep 17 00:00:00 2001 From: gamingdoom <37276884+gamingdoom@users.noreply.github.com> Date: Tue, 31 Jan 2023 21:15:25 -0800 Subject: [PATCH 14/29] replace mozconfig and use datcord theme --- buildDatcordWin.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/buildDatcordWin.sh b/buildDatcordWin.sh index 6d85cdfb7e..ad06f20da1 100644 --- a/buildDatcordWin.sh +++ b/buildDatcordWin.sh @@ -9,10 +9,10 @@ cp -rf $basedir/src/changed/* mozilla-unified/ # It is using nightly branding no matter what so we replace the nightly stuff with our stuff cp -rf mozilla-unified/browser/branding/unofficial/* mozilla-unified/browser/branding/nightly/* cd mozilla-unified -echo "ac_add_options --disable-default-browser-agent" >> mozconfig +echo "ac_add_options --disable-default-browser-agent" > mozconfig echo "ac_add_options --enable-release" >> mozconfig echo "ac_add_options --with-app-name=firefox" >> mozconfig -echo "ac_add_options --with-branding=browser/branding/unofficial" >> mozconfig +echo "ac_add_options --with-branding=browser/branding/datcord" >> mozconfig cat mozconfig patch -p1 $basedir/mozilla_dirsFromLibreWolf.patch ./mach build From a19d3e2fcf4931c0b52a3853d6feeeaa62915e3c Mon Sep 17 00:00:00 2001 From: gamingdoom <37276884+gamingdoom@users.noreply.github.com> Date: Tue, 31 Jan 2023 22:15:30 -0800 Subject: [PATCH 15/29] Update buildDatcordWin.sh --- buildDatcordWin.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/buildDatcordWin.sh b/buildDatcordWin.sh index ad06f20da1..b5b841e47b 100644 --- a/buildDatcordWin.sh +++ b/buildDatcordWin.sh @@ -1,6 +1,6 @@ # Run with MozillaBuild basedir=$(dirname "$0") -if [[ ! -d mozilla-unified ]] +if [ ! -d mozilla-unified ] then curl https://hg.mozilla.org/mozilla-central/raw-file/default/python/mozboot/bin/bootstrap.py --output bootstrap.py python3 bootstrap.py --no-interactive @@ -14,7 +14,7 @@ echo "ac_add_options --enable-release" >> mozconfig echo "ac_add_options --with-app-name=firefox" >> mozconfig echo "ac_add_options --with-branding=browser/branding/datcord" >> mozconfig cat mozconfig -patch -p1 $basedir/mozilla_dirsFromLibreWolf.patch +patch -p1 < $basedir/mozilla_dirsFromLibreWolf.patch ./mach build ./mach package From 9b4c90ed2fc261d815c71e4eda176e8c3ac79b80 Mon Sep 17 00:00:00 2001 From: gamingdoom <37276884+gamingdoom@users.noreply.github.com> Date: Wed, 1 Feb 2023 13:03:57 -0800 Subject: [PATCH 16/29] add theme files for windows --- .../branding/datcord/PrivateBrowsing_150.png | Bin 0 -> 15664 bytes .../branding/datcord/PrivateBrowsing_70.png | Bin 0 -> 5752 bytes .../private_browsing.VisualElementsManifest.xml | 12 ++++++++++++ 3 files changed, 12 insertions(+) create mode 100644 src/changed/browser/branding/datcord/PrivateBrowsing_150.png create mode 100644 src/changed/browser/branding/datcord/PrivateBrowsing_70.png create mode 100644 src/changed/browser/branding/datcord/private_browsing.VisualElementsManifest.xml diff --git a/src/changed/browser/branding/datcord/PrivateBrowsing_150.png b/src/changed/browser/branding/datcord/PrivateBrowsing_150.png new file mode 100644 index 0000000000000000000000000000000000000000..e95485e1371ed976cc5618371d3cb5ad26b093ba GIT binary patch literal 15664 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 PLPIFXs7lvMnuq-#lhZ`R literal 0 HcmV?d00001 diff --git a/src/changed/browser/branding/datcord/PrivateBrowsing_70.png b/src/changed/browser/branding/datcord/PrivateBrowsing_70.png new file mode 100644 index 0000000000000000000000000000000000000000..b6fb4a11de18c1090c3cf1b113eb18e766f8fb26 GIT binary patch literal 5752 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 + + + + \ No newline at end of file From 3d1944171f02bfef8df905a445d96b9e4de2b957 Mon Sep 17 00:00:00 2001 From: gamingdoom <37276884+gamingdoom@users.noreply.github.com> Date: Fri, 3 Feb 2023 16:16:10 -0800 Subject: [PATCH 17/29] cross compile for windows --- .github/workflows/build-win64.yml | 129 +++++++++++++++--- .gitignore | 1 + buildDatcord.sh | 2 + crossCompileForWindows.sh | 107 +++++++++++++++ src/changed/browser/app/profile/firefox.js | 6 +- .../browser/branding/datcord/branding.nsi | 2 +- .../browser/branding/datcord/datcord.ico | Bin 0 -> 15398 bytes .../browser/branding/datcord/document_pdf.ico | Bin 0 -> 19994 bytes .../browser/branding/datcord/firefox.ico | Bin 68328 -> 15398 bytes .../browser/branding/datcord/firefox64.ico | Bin 1985 -> 15398 bytes .../browser/branding/datcord/newtab.ico | Bin 0 -> 6518 bytes .../browser/branding/datcord/newwindow.ico | Bin 0 -> 6518 bytes .../browser/branding/datcord/pbmode.ico | Bin 0 -> 35978 bytes src/{changed/mozconfig => mozconfig.linux} | 0 src/mozconfig.windows | 30 ++++ windows/banner.bmp | Bin 206122 -> 154542 bytes 16 files changed, 257 insertions(+), 20 deletions(-) create mode 100755 crossCompileForWindows.sh create mode 100644 src/changed/browser/branding/datcord/datcord.ico create mode 100644 src/changed/browser/branding/datcord/document_pdf.ico create mode 100644 src/changed/browser/branding/datcord/newtab.ico create mode 100644 src/changed/browser/branding/datcord/newwindow.ico create mode 100644 src/changed/browser/branding/datcord/pbmode.ico rename src/{changed/mozconfig => mozconfig.linux} (100%) create mode 100644 src/mozconfig.windows diff --git a/.github/workflows/build-win64.yml b/.github/workflows/build-win64.yml index fd66275b67..299284cc69 100644 --- a/.github/workflows/build-win64.yml +++ b/.github/workflows/build-win64.yml @@ -1,4 +1,56 @@ -name: Build-Win64 +# name: Build-Win64 + +# # Controls when the workflow will run +# on: +# # Triggers the workflow on push or pull request events but only for the master branch +# push: +# branches: [ master, unstable ] +# pull_request: +# branches: [ master ] + +# # Allows you to run this workflow manually from the Actions tab +# workflow_dispatch: + +# # A workflow run is made up of one or more jobs that can run sequentially or in parallel +# jobs: +# # This workflow contains a single job called "build" +# build: +# # The type of runner that the job will run on +# runs-on: windows-latest + +# # Steps represent a sequence of tasks that will be executed as part of the job +# steps: +# # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it +# - uses: actions/checkout@v2 + +# - name: Cache +# uses: actions/cache@v2.1.6 +# with: +# # A list of files, directories, and wildcard patterns to cache and restore +# path: mozilla-unified +# # An explicit key for restoring and saving the cache +# key: ${{ runner.os }}-mozilla-unified + +# # Runs a set of commands using the runners shell +# - name: Run a multi-line script +# run: | +# choco install mozillabuild cygwin nsis +# choco install --force git +# refreshenv +# C:\mozilla-build\start-shell.bat /d/a/datcord/datcord/buildDatcordWin.sh +# move C:/Users/runneradmin/mozilla-unified/obj-x86_64-pc-mingw32/dist/install/sea/*.exe C:/Users/runneradmin/mozilla-unified/obj-x86_64-pc-mingw32/dist/install/sea/datcordSetup-win64.exe + +# - name: Upload a Build Artifact +# uses: actions/upload-artifact@v2.2.4 +# with: +# # Artifact name +# name: win64-installer +# # A file, directory or wildcard pattern that describes what to upload +# path: work/datcordSetup-win64.exe + +# This is a basic workflow to help you get started with Actions + +name: Build-Linux-x86_64 # Controls when the workflow will run on: @@ -16,35 +68,76 @@ jobs: # This workflow contains a single job called "build" build: # The type of runner that the job will run on - runs-on: windows-latest + runs-on: ubuntu-22.04 # Steps represent a sequence of tasks that will be executed as part of the job steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - uses: actions/checkout@v2 - - - name: Cache - uses: actions/cache@v2.1.6 - with: - # A list of files, directories, and wildcard patterns to cache and restore - path: mozilla-unified - # An explicit key for restoring and saving the cache - key: ${{ runner.os }}-mozilla-unified + + #- name: Cache + # uses: actions/cache@v3.0.11 + # with: + # path: mozilla-unified + # key: ${{ runner.os }}-mozilla-unified # Runs a set of commands using the runners shell - - name: Run a multi-line script + - name: Get deps, build and package + run: | + ls + sudo apt upgrade && sudo apt update + sudo add-apt-repository universe + sudo apt install libfuse2 + sudo apt install python3 python3-distutils python3-pip build-essential libpython3-dev m4 nodejs unzip uuid zip libasound2-dev libcurl4-openssl-dev libdbus-1-dev libdbus-glib-1-dev libdrm-dev libgtk-3-dev libpulse-dev libx11-xcb-dev libxt-dev xvfb rustc clang nasm + sudo apt install mercurial python3 python3-dev python3-pip curl wget dpkg-sig msitools p7zip-full upx-ucl libssl-dev zstd wine64-tools + pip3 install --upgrade setuptools + pip3 install wheel setuptools zstandard==0.15.2 cffi>=1.13.0 glean-parser==2.5.0 appdirs>=1.4 Click>=7 diskcache>=4 importlib-metadata iso8601>=0.1.10 Jinja2>=2.10.1 jsonschema>=3.0.2 attrs>=17.4.0 MarkupSafe>=2.0 pycparser pyrsistent>=0.14.0 PyYAML>=3.13 six>=1.11.0 typing-extensions>=3.6.4 yamllint>=1.18.0 pathspec>=0.5.3 zipp>=0.5 psutil==5.8.0 + mkdir ~/.mozbuild + git clone https://github.com/glandium/git-cinnabar.git ~/.mozbuild/git-cinnabar + datcorddir=$PWD + cd ~/.mozbuild/git-cinnabar/ + make + ls + cd $datcorddir + bash ./crossCompileForWindows.sh + - name: Edit Tarball run: | - choco install mozillabuild cygwin nsis - choco install --force git - refreshenv - C:\mozilla-build\start-shell.bat /d/a/datcord/datcord/buildDatcordWin.sh - move C:/Users/runneradmin/mozilla-unified/obj-x86_64-pc-mingw32/dist/install/sea/*.exe C:/Users/runneradmin/mozilla-unified/obj-x86_64-pc-mingw32/dist/install/sea/datcordSetup-win64.exe + mkdir datcord + tar --strip-components=1 -xvf mozilla-unified/obj-x86_64-pc-linux-gnu/dist/*.tar.bz2 -C datcord/ + #mv datcord/firefox datcord/datcord + #mv datcord/firefox-bin datcord/datcord-bin + cp -r distribution/ datcord/ + mv datcord/distribution/policies-linux.json datcord/distribution/policies.json + cp open-in-default-browser/open-in-default-browser datcord/open-in-default-browser + cp src/launch-datcord datcord/launch-datcord + tar -cjf datcord.tar.bz2 datcord + - name: Appimage it + run: | + wget "https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage" + chmod a+x appimagetool-x86_64.AppImage + mkdir -p datcord.AppImage/usr/bin/ + tar --strip-components=1 -xvf mozilla-unified/obj-x86_64-pc-linux-gnu/dist/*.tar.bz2 -C datcord.AppImage/usr/bin/ + #mv datcord.AppImage/usr/bin/firefox datcord.AppImage/usr/bin/datcord + #mv datcord.AppImage/usr/bin/firefox-bin datcord.AppImage/usr/bin/datcord-bin + cp -r distribution/ datcord.AppImage/usr/bin/ + mv datcord.AppImage/usr/bin/distribution/policies-linux-appimage.json datcord.AppImage/usr/bin/distribution/policies.json + cp open-in-default-browser/open-in-default-browser datcord.AppImage/usr/bin/ + ARCH=x86_64 ./appimagetool-x86_64.AppImage datcord.AppImage/ - name: Upload a Build Artifact uses: actions/upload-artifact@v2.2.4 with: # Artifact name - name: win64-installer + name: tarball-linux-x86_64 # A file, directory or wildcard pattern that describes what to upload - path: work/datcordSetup-win64.exe + path: datcord.tar.bz2 + - name: Upload a Build Artifact + uses: actions/upload-artifact@v2.2.4 + with: + # Artifact name + name: Appimage + # A file, directory or wildcard pattern that describes what to upload + path: | + Datcord-x86_64.AppImage + diff --git a/.gitignore b/.gitignore index b1302f8328..f236b5eac5 100644 --- a/.gitignore +++ b/.gitignore @@ -177,4 +177,5 @@ Datcord-x86_64.AppImage # Ignore build dir build/ mozilla-unified/ +work/ diff --git a/buildDatcord.sh b/buildDatcord.sh index 29a2def101..e4ff235ffb 100755 --- a/buildDatcord.sh +++ b/buildDatcord.sh @@ -23,7 +23,9 @@ fi cd mozilla-unified cp -r ../src/changed/* . +cp ../src/mozconfig.linux mozconfig patch -p1 < ../mozilla_dirsFromLibreWolf.patch + ./mach configure ./mach build ./mach package diff --git a/crossCompileForWindows.sh b/crossCompileForWindows.sh new file mode 100755 index 0000000000..61e658fa37 --- /dev/null +++ b/crossCompileForWindows.sh @@ -0,0 +1,107 @@ +#!/bin/bash + +export mozbuild=~/.mozbuild +export PATH="$PATH:$mozbuild/git-cinnabar" +datcordDir=$PWD + +if [ ! -d $mozbuild ]; then + mkdir $mozbuild +fi + +if [ ! -d mozilla-unified ]; then + mkdir mozilla-unified + curl https://hg.mozilla.org/mozilla-central/raw-file/default/python/mozboot/bin/bootstrap.py -O + python3 bootstrap.py --vcs=git --no-interactive --application-choice=browser_artifact_mode +fi + +if [ ! -d $mozbuild/git-cinnabar ]; then + git clone https://github.com/glandium/git-cinnabar.git $mozbuild/git-cinnabar + cd $mozbuild/git-cinnabar + make + cd $datcordDir +fi + +cd mozilla-unified +cp -r ../src/changed/* . +cp ../src/mozconfig.windows mozconfig +patch -p1 < ../mozilla_dirsFromLibreWolf.patch + +# Add cross compile target +rustup target add x86_64-pc-windows-msvc + +# Install toolchains +if [ ! $1 == "--no-download-toolchains" ]; then + ./mach artifact toolchain --from-build linux64-binutils + ./mach artifact toolchain --from-build linux64-cbindgen + ./mach artifact toolchain --from-build linux64-clang + ./mach artifact toolchain --from-build linux64-dump_syms + ./mach artifact toolchain --from-build linux64-liblowercase + ./mach artifact toolchain --from-build linux64-nasm + ./mach artifact toolchain --from-build linux64-node + ./mach artifact toolchain --from-build linux64-rust-cross + ./mach artifact toolchain --from-build linux64-winchecksec + ./mach artifact toolchain --from-build linux64-wine + ./mach artifact toolchain --from-build nsis + ./mach artifact toolchain --from-build sysroot-x86_64-linux-gnu +fi + + +# Get windows sdk if needed +if [ ! -d $mozbuild/win-cross ]; then + # Generate yaml that contains things to download from Visual Studio packages + ./mach python --virtualenv build build/vs/generate_yaml.py \ + --major \ + 17 \ + Microsoft.VisualCpp.CRT.Headers \ + Microsoft.VisualCpp.CRT.Redist.ARM64 \ + Microsoft.VisualCpp.CRT.Redist.X64 \ + Microsoft.VisualCpp.CRT.Redist.X86 \ + Microsoft.VisualCpp.CRT.x64.Desktop \ + Microsoft.VisualCpp.CRT.x64.Store \ + Microsoft.VisualCpp.CRT.x86.Desktop \ + Microsoft.VisualCpp.CRT.x86.Store \ + Microsoft.VisualCpp.DIA.SDK \ + Microsoft.VisualCpp.Tools.HostX64.TargetARM64 \ + Microsoft.VisualCpp.Tools.HostX64.TargetX64 \ + Microsoft.VisualCpp.Tools.HostX64.TargetX86 \ + Microsoft.VisualStudio.Component.VC.ATL.ARM64 \ + Microsoft.VisualStudio.Component.VC.ATL \ + Microsoft.VisualStudio.Component.VC.ATLMFC \ + Microsoft.VisualStudio.Component.VC.MFC.ARM64 \ + Win10SDK_10.0.19041 \ + -o \ + build/vs/vs2022.yaml + + ./mach --no-interactive python --virtualenv build build/vs/pack_vs.py build/vs/vs2022.yaml -o $mozbuild/vs.tar.zst + mkdir -p $mozbuild/win-cross && cd $mozbuild/win-cross && rm -rf vs && tar xf ../vs.tar.zst + cd $datcordDir/mozilla-unified +fi + +./mach configure +./mach build +./mach package + +# Change the setup exe +mkdir $datcordDir/work +cp obj-x86_64-pc-mingw32/dist/install/sea/*.exe $datcordDir/work/ffSetup-win64.exe +cd $datcordDir/work +7z x ffSetup-win64.exe +ls +mv core datcord +rm setup.exe +cd datcord +#mv firefox.exe datcord.exe +cd .. +cp ../windows/datcord.ico datcord/ +mkdir datcord/distribution +cp ../distribution/policies-windows.json datcord/distribution/policies.json +cp -r ../open-in-default-browser/* datcord/ +# Based on librewolf mk.py +mkdir x86-ansi +wget -q -O ./x86-ansi/nsProcess.dll https://shorsh.de/upload/we7v/nsProcess.dll +wget -q -O ./vc_redist.x64.exe https://aka.ms/vs/17/release/vc_redist.x64.exe +cp ../windows/setup.nsi . +cp ../windows/datcord.ico . +cp ../windows/banner.bmp . +$mozbuild/wine/bin/wine $mozbuild/nsis/makensis.exe -V1 setup.nsi +# Setup filename will be datcordSetup-win64.exe \ No newline at end of file diff --git a/src/changed/browser/app/profile/firefox.js b/src/changed/browser/app/profile/firefox.js index eac32ce7a1..7543834b22 100644 --- a/src/changed/browser/app/profile/firefox.js +++ b/src/changed/browser/app/profile/firefox.js @@ -2791,7 +2791,11 @@ pref("network.protocol-handler.warn-external.open", true); pref("network.protocol-handler.expose.open", false); // Other Datcord Settings -pref("general.useragent.override", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36"); +#ifdef XP_WIN + pref("general.useragent.override", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/109.0"); +#else + pref("general.useragent.override", "Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/109.0") +#endif pref("permissions.default.camera", 1); pref("permissions.default.microphone", 1); diff --git a/src/changed/browser/branding/datcord/branding.nsi b/src/changed/browser/branding/datcord/branding.nsi index 994703858d..cf432ebf6c 100644 --- a/src/changed/browser/branding/datcord/branding.nsi +++ b/src/changed/browser/branding/datcord/branding.nsi @@ -8,7 +8,7 @@ # BrandFullNameInternal is used for some registry and file system values # instead of BrandFullName and typically should not be modified. -!define BrandFullNameInternal "Mozilla Firefox" +!define BrandFullNameInternal "Datcord" !define BrandFullName "Datcord" !define CompanyName "Datcord" !define URLInfoAbout "https://github.com/gamingdoom/datcord" diff --git a/src/changed/browser/branding/datcord/datcord.ico b/src/changed/browser/branding/datcord/datcord.ico new file mode 100644 index 0000000000000000000000000000000000000000..fa3a518d330855126606d0dab0b7e694f4cd8e80 GIT binary patch literal 15398 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 literal 0 HcmV?d00001 diff --git a/src/changed/browser/branding/datcord/document_pdf.ico b/src/changed/browser/branding/datcord/document_pdf.ico new file mode 100644 index 0000000000000000000000000000000000000000..d6fe7c5bded97e155617a1a70ac3ea7c990431da GIT binary patch literal 19994 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 literal 68328 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 N002ovPDHLkV1jkJH$VUY diff --git a/src/changed/browser/branding/datcord/firefox64.ico b/src/changed/browser/branding/datcord/firefox64.ico index 35498ec5e617f0ce88510cfdd778fb5efcbc1ec6..fa3a518d330855126606d0dab0b7e694f4cd8e80 100644 GIT binary patch literal 15398 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 literal 1985 zcmV;y2R`_TP)ATBpvaFsPL}LK)?ywL_=q zjMg$(u;!&PQyCcvn?lvm{ZNsZ1T+Jk#wMG#GghTaN2mBwb=q2}GCEUqwEco@LyJ;S z5wZ((vwM#pb_2V~?%v(aCWzhNr`+e9`+v?k_w3Dc?{lF_l`2)LRH;&>%G(o-m+;OW zyUGjlo|+ghY}}}~%F*cVwn=ZfEKLSEyydgJF3Bn#XT=K8*=yHItTu5gunf37J;R1j zgB~nPv){geu{(VjGvj%QrvvblO^te`5^;~I0O7C&-Fe&z+yg8JoV4nz7*81dD&TUU zb&bxJqu=qE)j30~^28?uw*xcNCIg-Wz8gKl6XCED<>pXU0m5N(+<7!2zKrqCjG*>; z;#+O?>>qB|o*t`-2AS`P>m=skF~`JArRJWVKKG=7$@muz$K){p47dqiYH86Bz@9x8 z7>Ke=@Fie%M(nQ`JP#sP_^y&%uD-L2S;ep_h9R)e(+cOCq};EQdII#|jCMHe94V^iyD z*dh3Q#(4vX=4c(yxiMB7+$H07U~(xzl)zbFpBax&OYqdGS{6G-KX858ZUzs8b7A_>;8-SJOvDA(68pe-h+`;%I4=@Gzw8Y-QS_T5JG9Ye2Je0Oe zaIaf?{>JG`Q613LZ;Q=%A?=?4wwp0kq6MfcHH!)pGo#0GIBmvPfErSru%wuuL$H_` z%-F_-VjTuT(zssfQmB(?HRGJYVZnO=$@m6vi{Ht<9nclAn+y(ABGL)R_(-Tp`wO}F z-UAHouUteEjA-+BDL`khU5mrtfI!89npiwb@~*aKy_(OVU9Lx@8jb-o#x1Ie)Fp@I&MD_o z*nyQ}eD`z^_@UqgFyEjNxUxizV;B*Mml3ngSPOip+<**L<{BS$57^ObGdzbAl<=gO zHIZ>&sFBXh_jfz{?TVza7xLeYM@0LZM1niEw&>IaT~k+tEr@TH6Bm#in#8R8*Xd;D z;HV^%Vp*>7VvzB0Ta!9QzP#Mjp#LO>_@v-S5i$d{llW9-@&J-7)THeaedWXk1Zv`= z?*pR}b;R;ACrBnBoX@zmMW;-3`iaQs*tlM&^V%K04kXKp&_?H$>q_5HmN*>R(xkr^ za`42@{6svjuutpfbX4%CQiB6PqjSqDfSJi)VR_oT;pcN^DzE$b#4hKkpN|zWSDq6` z<(5@|u0G}gSCpsCG(Vpi(ez$H0o;@RIutQi9;SCi>>Zf{Sp|?&-qlaDsJq)H6>^A+ zrG6p`a#JCDxZfrNHi^v#zqjsnOy4n+OVH6!dn+!HqfdnxZ8S1Anmk&H!VB!REtzuPsa zB*%vjvYfm6Yz5*egQxEEQQ&b$?1~3C6-@AbD7=D96Em^8 ztwGNY4`lrp*xaONywuyE6Mjl2mKwb11bKI;Q7wrf<^uJCCj~|A&6h|_@FY-QTg%)~ zqgu?EA58Ef#U=kHVnt^1kf&YR`|Rp~=ml;oGPwN)q2cZ59eZqwH^?I3!-&PCc5JVs z_zsByuK_P%90U$V9sU?@&^btL*W=M?MLb&oAoc~~G;eCrKSrDKU}oy-ry1xZwYc%a z1V1&gdviU%&h<%Kcf@9$6LaM;1yP5kb;Te?%pA^6HjZv=)Tjhcb{WjS(eg}M@$Wu;Z>>|O=P>cRq z$g${egm(1WjHGCiSO?^M;5jd9G;D6tBgJYLLsy^Go9Op(J0$pCd=h;lUw-DJtk2{+ zBQ{@R6~;#m7L)nPTRakKP~OMlvC!FX{TTHbLvIRxkNB;V;OCo~^>V4275P$h+oLvf z@(|Z2VHUMK+jh5NmCzkY$75DUoaKSkf2qT*_vqi_F;A5$RjO2}Ql(0jw*&tLcZzGI T;xBf800000NkvXXu0mjf58ujX diff --git a/src/changed/browser/branding/datcord/newtab.ico b/src/changed/browser/branding/datcord/newtab.ico new file mode 100644 index 0000000000000000000000000000000000000000..a9b37c08c6e18af5c8b67745c445bad21fd4e791 GIT binary patch literal 6518 zcmeHL%}-oa6n~l+H#I4hy{wc)H*MnHzra>H$*HXo9yZ4=U?zv-GuUM~I zr%zid+pPB2EbDE{vfA4A`>mGszK*r)n5w9TJ+8vCblm+5ha(?^LZR~5SWresM`dIr zAj8AM;`a~9;NYMP3=BwLU!U~$_DWArkNAAu($&=^ot>Ra9UUDXMx(Lv#&5sMKYv#b z)qeT;C*xy$eB9Voow$of7zXx4B%tY5T!JzZ43S#vcBvm7N3k+KCGt z=%Nh`4awx>)b!=cAIsw6H&WfJ$X?}XT_3Qm?(NEr8(&H+7SmWAnMORTj~3;TEtkKm zyB2T&=EA~P5)6j2V`F12&TnCAYU&JlK*!0K&wIO1%v>s!mT)+H#%arE^)Y?>_PWu7 zzT0+XWf{B;XWBUB^mOr^VzDScs*mT-o*F;kgXgs$zSmewYrIdq<+O1>tB-c&k<%{mf#XMoOTWYcKHB*Bgf{!E#vJv$ zB+np9FMZAvpWg+}d2rx3^}Hl;DZTVLPaOOE^hrFPsMQ+BxqjfIB@zk4fxO7mOLEA9fkwPsppo&X;ixH*(XjLbyIrjbDlW%9dJlW^X*z;xg-O!EAzH+#TcQHTz*?-2LnVFGL zD6B1Xk^a4;zKb{Pm@L)s|Elgb{7pia>ql*e`d&G_?uF}|XG|_GF4lZG@4oK+W}o+I z;4dsJnA$oLiIknb8+q36;+%32z4OY}=KUH6tnDBk7;~?e{Q!<#3(*@U6a!dw2hk%I=G~6g)6?=g#l)_05~6 zo`}ce_)p>bVX*4yavuiKJCTsfTAeMl&W jRpqdQ{NUoSlTN2sl|w=~oNor>#O7oNPIln`wFCbG?M25~ literal 0 HcmV?d00001 diff --git a/src/changed/browser/branding/datcord/newwindow.ico b/src/changed/browser/branding/datcord/newwindow.ico new file mode 100644 index 0000000000000000000000000000000000000000..55372077102c4ba18ff1b858b78a2e4c735e6988 GIT binary patch literal 6518 zcmeHL*=}4#5WOJr9%O%jpHO~)cfNoR2=Bak-*-D+@EY&?zS}eLhL?EX##=nz!XqHr zJOoE51Y?8{2C1miGw14ZA#f*({SuGV>b}*t>YUqMU0pSn^`7;nF(E|fKppW%vY-}>)-Q69}`uG;; zV@;czTg-TWf6vw@uDd5b)&u(3m)6!cGd?(Y>RBIa3VrNtdwaVX9|nWAKEIdvd?r5j z1^V!hj*d<K{?HNK9<#>RdKF1lAy<>lq)%0ZNa@ts@XAj;uf zIYd`hR{E5K_EFvoiB#=>D3Tnv%)MNtqa*2;F1; z$GVQV%X~6A8oJL$hDT&r+tARk3=R(2IP?dcS#Th?4ZSaKk^^z*lQlK9CT>u^xv?SO z;3Zy1@($O5IKbyU4-S-XZEXrTL}J^^yT~oTfjG=}>gww4Tmy6FPEiiD>AWMIW8R_c zopa7H?a&{H&-j4YU8fu<-`UrevrXBhuaggJHLqkKOohxB(cV|by zfqG6`&M|S>JLjBZ+Tpn%KI0_rFL0oIZ*SLdpq|r~b4*1{uAJ9qn_IypNY$! za(7QVyt|2y8U-9WJG<;!2Xm-3z=3*it7rZ|eCCtL>A`_=);n(tmv)%L5C=6DIIymu z9QfqGy`WF>Y%)eMR`br{-ThxV3~`uO10Rj@ub!P6{F~xH9Mp*5(9_fVH~dIy#W#7E z_^dBb+kpe+Z(=hN9pa$I1qa}xQ67mc=ewwZSqDS@x@Y3B#$kO+xzlDOerh3#_;acxP@qOB4S?i74-~eo&Zw&u2fP+u}XNXe#GjQNu z&?k8|8KW4hd1vwNW)8z#jyWyP@YA&y+(HYTz&jtb^GL`XtXLV-#aG o@2s})-OU_^xg2xax^Qmq;(&S+HLt-2{@w3x1@2bh-CTjc08@3BqyPW_ literal 0 HcmV?d00001 diff --git a/src/changed/browser/branding/datcord/pbmode.ico b/src/changed/browser/branding/datcord/pbmode.ico new file mode 100644 index 0000000000000000000000000000000000000000..bfa3aa6cedbd7a35b696c384e602e36884f02514 GIT binary patch literal 35978 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 literal 206122 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 Date: Fri, 3 Feb 2023 16:17:00 -0800 Subject: [PATCH 18/29] rename --- .github/workflows/build-win64.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-win64.yml b/.github/workflows/build-win64.yml index 299284cc69..05a154cd70 100644 --- a/.github/workflows/build-win64.yml +++ b/.github/workflows/build-win64.yml @@ -50,7 +50,7 @@ # This is a basic workflow to help you get started with Actions -name: Build-Linux-x86_64 +name: Build-Cross-Win-x86_64 # Controls when the workflow will run on: From c7aac3e1e13ce1040431e6839f3dc8bc7c4bda48 Mon Sep 17 00:00:00 2001 From: gamingdoom <37276884+gamingdoom@users.noreply.github.com> Date: Fri, 3 Feb 2023 16:58:05 -0800 Subject: [PATCH 19/29] update toolchain download arg --- crossCompileForWindows.sh | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/crossCompileForWindows.sh b/crossCompileForWindows.sh index 61e658fa37..5f776405d0 100755 --- a/crossCompileForWindows.sh +++ b/crossCompileForWindows.sh @@ -30,7 +30,7 @@ patch -p1 < ../mozilla_dirsFromLibreWolf.patch rustup target add x86_64-pc-windows-msvc # Install toolchains -if [ ! $1 == "--no-download-toolchains" ]; then +if [ $# -eq 0 ]; then ./mach artifact toolchain --from-build linux64-binutils ./mach artifact toolchain --from-build linux64-cbindgen ./mach artifact toolchain --from-build linux64-clang @@ -43,6 +43,22 @@ if [ ! $1 == "--no-download-toolchains" ]; then ./mach artifact toolchain --from-build linux64-wine ./mach artifact toolchain --from-build nsis ./mach artifact toolchain --from-build sysroot-x86_64-linux-gnu + +else + if [ "$1" -ne "--no-download-toolchains" ]; then + ./mach artifact toolchain --from-build linux64-binutils + ./mach artifact toolchain --from-build linux64-cbindgen + ./mach artifact toolchain --from-build linux64-clang + ./mach artifact toolchain --from-build linux64-dump_syms + ./mach artifact toolchain --from-build linux64-liblowercase + ./mach artifact toolchain --from-build linux64-nasm + ./mach artifact toolchain --from-build linux64-node + ./mach artifact toolchain --from-build linux64-rust-cross + ./mach artifact toolchain --from-build linux64-winchecksec + ./mach artifact toolchain --from-build linux64-wine + ./mach artifact toolchain --from-build nsis + ./mach artifact toolchain --from-build sysroot-x86_64-linux-gnu + fi fi From 7c61861aeb4a95aae4c525bc44d03401923fd1f6 Mon Sep 17 00:00:00 2001 From: gamingdoom <37276884+gamingdoom@users.noreply.github.com> Date: Fri, 3 Feb 2023 17:26:39 -0800 Subject: [PATCH 20/29] actions --- .github/workflows/build-win64.yml | 105 +++++++++++++++--------------- crossCompileForWindows.sh | 3 + 2 files changed, 55 insertions(+), 53 deletions(-) diff --git a/.github/workflows/build-win64.yml b/.github/workflows/build-win64.yml index 05a154cd70..9f8ba938ae 100644 --- a/.github/workflows/build-win64.yml +++ b/.github/workflows/build-win64.yml @@ -1,55 +1,3 @@ -# name: Build-Win64 - -# # Controls when the workflow will run -# on: -# # Triggers the workflow on push or pull request events but only for the master branch -# push: -# branches: [ master, unstable ] -# pull_request: -# branches: [ master ] - -# # Allows you to run this workflow manually from the Actions tab -# workflow_dispatch: - -# # A workflow run is made up of one or more jobs that can run sequentially or in parallel -# jobs: -# # This workflow contains a single job called "build" -# build: -# # The type of runner that the job will run on -# runs-on: windows-latest - -# # Steps represent a sequence of tasks that will be executed as part of the job -# steps: -# # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it -# - uses: actions/checkout@v2 - -# - name: Cache -# uses: actions/cache@v2.1.6 -# with: -# # A list of files, directories, and wildcard patterns to cache and restore -# path: mozilla-unified -# # An explicit key for restoring and saving the cache -# key: ${{ runner.os }}-mozilla-unified - -# # Runs a set of commands using the runners shell -# - name: Run a multi-line script -# run: | -# choco install mozillabuild cygwin nsis -# choco install --force git -# refreshenv -# C:\mozilla-build\start-shell.bat /d/a/datcord/datcord/buildDatcordWin.sh -# move C:/Users/runneradmin/mozilla-unified/obj-x86_64-pc-mingw32/dist/install/sea/*.exe C:/Users/runneradmin/mozilla-unified/obj-x86_64-pc-mingw32/dist/install/sea/datcordSetup-win64.exe - -# - name: Upload a Build Artifact -# uses: actions/upload-artifact@v2.2.4 -# with: -# # Artifact name -# name: win64-installer -# # A file, directory or wildcard pattern that describes what to upload -# path: work/datcordSetup-win64.exe - -# This is a basic workflow to help you get started with Actions - name: Build-Cross-Win-x86_64 # Controls when the workflow will run @@ -89,7 +37,7 @@ jobs: sudo add-apt-repository universe sudo apt install libfuse2 sudo apt install python3 python3-distutils python3-pip build-essential libpython3-dev m4 nodejs unzip uuid zip libasound2-dev libcurl4-openssl-dev libdbus-1-dev libdbus-glib-1-dev libdrm-dev libgtk-3-dev libpulse-dev libx11-xcb-dev libxt-dev xvfb rustc clang nasm - sudo apt install mercurial python3 python3-dev python3-pip curl wget dpkg-sig msitools p7zip-full upx-ucl libssl-dev zstd wine64-tools + sudo apt install mercurial python3 python3-dev python3-pip curl wget dpkg-sig msitools p7zip-full upx-ucl libssl-dev zstd wine64-tools wine pip3 install --upgrade setuptools pip3 install wheel setuptools zstandard==0.15.2 cffi>=1.13.0 glean-parser==2.5.0 appdirs>=1.4 Click>=7 diskcache>=4 importlib-metadata iso8601>=0.1.10 Jinja2>=2.10.1 jsonschema>=3.0.2 attrs>=17.4.0 MarkupSafe>=2.0 pycparser pyrsistent>=0.14.0 PyYAML>=3.13 six>=1.11.0 typing-extensions>=3.6.4 yamllint>=1.18.0 pathspec>=0.5.3 zipp>=0.5 psutil==5.8.0 mkdir ~/.mozbuild @@ -141,3 +89,54 @@ jobs: path: | Datcord-x86_64.AppImage +# name: Build-Win64 + +# # Controls when the workflow will run +# on: +# # Triggers the workflow on push or pull request events but only for the master branch +# push: +# branches: [ master, unstable ] +# pull_request: +# branches: [ master ] + +# # Allows you to run this workflow manually from the Actions tab +# workflow_dispatch: + +# # A workflow run is made up of one or more jobs that can run sequentially or in parallel +# jobs: +# # This workflow contains a single job called "build" +# build: +# # The type of runner that the job will run on +# runs-on: windows-latest + +# # Steps represent a sequence of tasks that will be executed as part of the job +# steps: +# # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it +# - uses: actions/checkout@v2 + +# - name: Cache +# uses: actions/cache@v2.1.6 +# with: +# # A list of files, directories, and wildcard patterns to cache and restore +# path: mozilla-unified +# # An explicit key for restoring and saving the cache +# key: ${{ runner.os }}-mozilla-unified + +# # Runs a set of commands using the runners shell +# - name: Run a multi-line script +# run: | +# choco install mozillabuild cygwin nsis +# choco install --force git +# refreshenv +# C:\mozilla-build\start-shell.bat /d/a/datcord/datcord/buildDatcordWin.sh +# move C:/Users/runneradmin/mozilla-unified/obj-x86_64-pc-mingw32/dist/install/sea/*.exe C:/Users/runneradmin/mozilla-unified/obj-x86_64-pc-mingw32/dist/install/sea/datcordSetup-win64.exe + +# - name: Upload a Build Artifact +# uses: actions/upload-artifact@v2.2.4 +# with: +# # Artifact name +# name: win64-installer +# # A file, directory or wildcard pattern that describes what to upload +# path: work/datcordSetup-win64.exe + +# This is a basic workflow to help you get started with Actions \ No newline at end of file diff --git a/crossCompileForWindows.sh b/crossCompileForWindows.sh index 5f776405d0..0d9489e68c 100755 --- a/crossCompileForWindows.sh +++ b/crossCompileForWindows.sh @@ -93,6 +93,9 @@ if [ ! -d $mozbuild/win-cross ]; then cd $datcordDir/mozilla-unified fi +ls $mozbuild +ls $mozbuild/wine/bin + ./mach configure ./mach build ./mach package From c157d3fd151b4a363a7b513aa40b92889a154643 Mon Sep 17 00:00:00 2001 From: gamingdoom <37276884+gamingdoom@users.noreply.github.com> Date: Fri, 3 Feb 2023 17:50:38 -0800 Subject: [PATCH 21/29] actions --- src/mozconfig.windows | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mozconfig.windows b/src/mozconfig.windows index 83a01af6b9..a9ef464be4 100644 --- a/src/mozconfig.windows +++ b/src/mozconfig.windows @@ -13,7 +13,7 @@ export HOST_CC="$mozbuild/clang/bin/clang" export HOST_CXX="$mozbuild/clang/bin/clang++" export WINE="$mozbuild/wine/bin/wine64" -export MIDL="$mozbuild/wine/bin/widl" +#export MIDL="$mozbuild/wine/bin/widl" ac_add_options --target=x86_64-pc-mingw32 #ac_add_options --disable-bootstrap From cda4b186988d0f3da472782ab2cd379a5fb5cfff Mon Sep 17 00:00:00 2001 From: gamingdoom <37276884+gamingdoom@users.noreply.github.com> Date: Fri, 3 Feb 2023 18:22:45 -0800 Subject: [PATCH 22/29] cd to mozbuild --- crossCompileForWindows.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/crossCompileForWindows.sh b/crossCompileForWindows.sh index 0d9489e68c..5b6ab35a84 100755 --- a/crossCompileForWindows.sh +++ b/crossCompileForWindows.sh @@ -31,6 +31,7 @@ rustup target add x86_64-pc-windows-msvc # Install toolchains if [ $# -eq 0 ]; then + cd $mozbuild ./mach artifact toolchain --from-build linux64-binutils ./mach artifact toolchain --from-build linux64-cbindgen ./mach artifact toolchain --from-build linux64-clang @@ -43,9 +44,10 @@ if [ $# -eq 0 ]; then ./mach artifact toolchain --from-build linux64-wine ./mach artifact toolchain --from-build nsis ./mach artifact toolchain --from-build sysroot-x86_64-linux-gnu - + cd $datcordDir/mozilla-unified else if [ "$1" -ne "--no-download-toolchains" ]; then + cd $mozbuild ./mach artifact toolchain --from-build linux64-binutils ./mach artifact toolchain --from-build linux64-cbindgen ./mach artifact toolchain --from-build linux64-clang @@ -58,6 +60,7 @@ else ./mach artifact toolchain --from-build linux64-wine ./mach artifact toolchain --from-build nsis ./mach artifact toolchain --from-build sysroot-x86_64-linux-gnu + cd $datcordDir/mozilla-unified fi fi From 8ffa78171578eb8b9dc59a9d8745e3ae418fd1dd Mon Sep 17 00:00:00 2001 From: gamingdoom <37276884+gamingdoom@users.noreply.github.com> Date: Fri, 3 Feb 2023 19:00:59 -0800 Subject: [PATCH 23/29] fix relative paths --- crossCompileForWindows.sh | 48 +++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/crossCompileForWindows.sh b/crossCompileForWindows.sh index 5b6ab35a84..6eb1b9965c 100755 --- a/crossCompileForWindows.sh +++ b/crossCompileForWindows.sh @@ -32,34 +32,34 @@ rustup target add x86_64-pc-windows-msvc # Install toolchains if [ $# -eq 0 ]; then cd $mozbuild - ./mach artifact toolchain --from-build linux64-binutils - ./mach artifact toolchain --from-build linux64-cbindgen - ./mach artifact toolchain --from-build linux64-clang - ./mach artifact toolchain --from-build linux64-dump_syms - ./mach artifact toolchain --from-build linux64-liblowercase - ./mach artifact toolchain --from-build linux64-nasm - ./mach artifact toolchain --from-build linux64-node - ./mach artifact toolchain --from-build linux64-rust-cross - ./mach artifact toolchain --from-build linux64-winchecksec - ./mach artifact toolchain --from-build linux64-wine - ./mach artifact toolchain --from-build nsis - ./mach artifact toolchain --from-build sysroot-x86_64-linux-gnu + $datcordDir/mozilla-unified/mach artifact toolchain --from-build linux64-binutils + $datcordDir/mozilla-unified/mach artifact toolchain --from-build linux64-cbindgen + $datcordDir/mozilla-unified/mach artifact toolchain --from-build linux64-clang + $datcordDir/mozilla-unified/mach artifact toolchain --from-build linux64-dump_syms + $datcordDir/mozilla-unified/mach artifact toolchain --from-build linux64-liblowercase + $datcordDir/mozilla-unified/mach artifact toolchain --from-build linux64-nasm + $datcordDir/mozilla-unified/mach artifact toolchain --from-build linux64-node + $datcordDir/mozilla-unified/mach artifact toolchain --from-build linux64-rust-cross + $datcordDir/mozilla-unified/mach artifact toolchain --from-build linux64-winchecksec + $datcordDir/mozilla-unified/mach artifact toolchain --from-build linux64-wine + $datcordDir/mozilla-unified/mach artifact toolchain --from-build nsis + $datcordDir/mozilla-unified/mach artifact toolchain --from-build sysroot-x86_64-linux-gnu cd $datcordDir/mozilla-unified else if [ "$1" -ne "--no-download-toolchains" ]; then cd $mozbuild - ./mach artifact toolchain --from-build linux64-binutils - ./mach artifact toolchain --from-build linux64-cbindgen - ./mach artifact toolchain --from-build linux64-clang - ./mach artifact toolchain --from-build linux64-dump_syms - ./mach artifact toolchain --from-build linux64-liblowercase - ./mach artifact toolchain --from-build linux64-nasm - ./mach artifact toolchain --from-build linux64-node - ./mach artifact toolchain --from-build linux64-rust-cross - ./mach artifact toolchain --from-build linux64-winchecksec - ./mach artifact toolchain --from-build linux64-wine - ./mach artifact toolchain --from-build nsis - ./mach artifact toolchain --from-build sysroot-x86_64-linux-gnu + $datcordDir/mozilla-unified/mach artifact toolchain --from-build linux64-binutils + $datcordDir/mozilla-unified/mach artifact toolchain --from-build linux64-cbindgen + $datcordDir/mozilla-unified/mach artifact toolchain --from-build linux64-clang + $datcordDir/mozilla-unified/mach artifact toolchain --from-build linux64-dump_syms + $datcordDir/mozilla-unified/mach artifact toolchain --from-build linux64-liblowercase + $datcordDir/mozilla-unified/mach artifact toolchain --from-build linux64-nasm + $datcordDir/mozilla-unified/mach artifact toolchain --from-build linux64-node + $datcordDir/mozilla-unified/mach artifact toolchain --from-build linux64-rust-cross + $datcordDir/mozilla-unified/mach artifact toolchain --from-build linux64-winchecksec + $datcordDir/mozilla-unified/mach artifact toolchain --from-build linux64-wine + $datcordDir/mozilla-unified/mach artifact toolchain --from-build nsis + $datcordDir/mozilla-unified/mach artifact toolchain --from-build sysroot-x86_64-linux-gnu cd $datcordDir/mozilla-unified fi fi From 5339253cda95a96ca3076166d63e096594321e13 Mon Sep 17 00:00:00 2001 From: gamingdoom <37276884+gamingdoom@users.noreply.github.com> Date: Fri, 3 Feb 2023 20:25:58 -0800 Subject: [PATCH 24/29] dont run on pr --- .github/workflows/build-win64.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/build-win64.yml b/.github/workflows/build-win64.yml index 9f8ba938ae..b2e0fc22a2 100644 --- a/.github/workflows/build-win64.yml +++ b/.github/workflows/build-win64.yml @@ -5,8 +5,6 @@ on: # Triggers the workflow on push or pull request events but only for the master branch push: branches: [ master, unstable ] - pull_request: - branches: [ master ] # Allows you to run this workflow manually from the Actions tab workflow_dispatch: @@ -139,4 +137,4 @@ jobs: # # A file, directory or wildcard pattern that describes what to upload # path: work/datcordSetup-win64.exe -# This is a basic workflow to help you get started with Actions \ No newline at end of file +# This is a basic workflow to help you get started with Actions From b40fcee2055c88ff7264b47904a351c75f4132aa Mon Sep 17 00:00:00 2001 From: gamingdoom <37276884+gamingdoom@users.noreply.github.com> Date: Fri, 3 Feb 2023 20:26:18 -0800 Subject: [PATCH 25/29] dont run on pr --- .github/workflows/build-linux-x86_64.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/build-linux-x86_64.yml b/.github/workflows/build-linux-x86_64.yml index fb6f5d06d6..bf8f7a2957 100644 --- a/.github/workflows/build-linux-x86_64.yml +++ b/.github/workflows/build-linux-x86_64.yml @@ -7,8 +7,6 @@ on: # Triggers the workflow on push or pull request events but only for the master branch push: branches: [ master, unstable ] - pull_request: - branches: [ master ] # Allows you to run this workflow manually from the Actions tab workflow_dispatch: From 800047d97133a86257fe3791355c151c3a5f599a Mon Sep 17 00:00:00 2001 From: gamingdoom <37276884+gamingdoom@users.noreply.github.com> Date: Fri, 3 Feb 2023 20:42:29 -0800 Subject: [PATCH 26/29] use self hosted runner --- .github/workflows/build-win64.yml | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build-win64.yml b/.github/workflows/build-win64.yml index b2e0fc22a2..72e304bb51 100644 --- a/.github/workflows/build-win64.yml +++ b/.github/workflows/build-win64.yml @@ -14,7 +14,7 @@ jobs: # This workflow contains a single job called "build" build: # The type of runner that the job will run on - runs-on: ubuntu-22.04 + runs-on: self-hosted # Steps represent a sequence of tasks that will be executed as part of the job steps: @@ -26,16 +26,20 @@ jobs: # with: # path: mozilla-unified # key: ${{ runner.os }}-mozilla-unified + + # Add mask + - name: add log mask + run: echo "::add-mask::${{ secrets.USERNAME }}" # Runs a set of commands using the runners shell - name: Get deps, build and package run: | ls - sudo apt upgrade && sudo apt update - sudo add-apt-repository universe - sudo apt install libfuse2 - sudo apt install python3 python3-distutils python3-pip build-essential libpython3-dev m4 nodejs unzip uuid zip libasound2-dev libcurl4-openssl-dev libdbus-1-dev libdbus-glib-1-dev libdrm-dev libgtk-3-dev libpulse-dev libx11-xcb-dev libxt-dev xvfb rustc clang nasm - sudo apt install mercurial python3 python3-dev python3-pip curl wget dpkg-sig msitools p7zip-full upx-ucl libssl-dev zstd wine64-tools wine + #sudo apt upgrade && sudo apt update + #sudo add-apt-repository universe + #sudo apt install libfuse2 + #sudo apt install python3 python3-distutils python3-pip build-essential libpython3-dev m4 nodejs unzip uuid zip libasound2-dev libcurl4-openssl-dev libdbus-1-dev libdbus-glib-1-dev libdrm-dev libgtk-3-dev libpulse-dev libx11-xcb-dev libxt-dev xvfb rustc clang nasm + #sudo apt install mercurial python3 python3-dev python3-pip curl wget dpkg-sig msitools p7zip-full upx-ucl libssl-dev zstd wine64-tools wine pip3 install --upgrade setuptools pip3 install wheel setuptools zstandard==0.15.2 cffi>=1.13.0 glean-parser==2.5.0 appdirs>=1.4 Click>=7 diskcache>=4 importlib-metadata iso8601>=0.1.10 Jinja2>=2.10.1 jsonschema>=3.0.2 attrs>=17.4.0 MarkupSafe>=2.0 pycparser pyrsistent>=0.14.0 PyYAML>=3.13 six>=1.11.0 typing-extensions>=3.6.4 yamllint>=1.18.0 pathspec>=0.5.3 zipp>=0.5 psutil==5.8.0 mkdir ~/.mozbuild From 0b2179f517b736758b4aa2dcfb3340fe54c55477 Mon Sep 17 00:00:00 2001 From: gamingdoom <37276884+gamingdoom@users.noreply.github.com> Date: Fri, 3 Feb 2023 21:42:30 -0800 Subject: [PATCH 27/29] mkdir -p --- crossCompileForWindows.sh | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/crossCompileForWindows.sh b/crossCompileForWindows.sh index 6eb1b9965c..0a2cd2fa6b 100755 --- a/crossCompileForWindows.sh +++ b/crossCompileForWindows.sh @@ -4,9 +4,7 @@ export mozbuild=~/.mozbuild export PATH="$PATH:$mozbuild/git-cinnabar" datcordDir=$PWD -if [ ! -d $mozbuild ]; then - mkdir $mozbuild -fi +mkdir -p $mozbuild if [ ! -d mozilla-unified ]; then mkdir mozilla-unified From a12fefbdd21a3ce4d11f07a14fd379952574dcdc Mon Sep 17 00:00:00 2001 From: gamingdoom <37276884+gamingdoom@users.noreply.github.com> Date: Fri, 3 Feb 2023 21:46:04 -0800 Subject: [PATCH 28/29] remove extra steps from actions --- .github/workflows/build-win64.yml | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/.github/workflows/build-win64.yml b/.github/workflows/build-win64.yml index 72e304bb51..28d119c2d3 100644 --- a/.github/workflows/build-win64.yml +++ b/.github/workflows/build-win64.yml @@ -35,6 +35,7 @@ jobs: - name: Get deps, build and package run: | ls + # These apt commands are used for installing deps for builds on debian. They are not used on my self-hosted runner #sudo apt upgrade && sudo apt update #sudo add-apt-repository universe #sudo apt install libfuse2 @@ -42,13 +43,6 @@ jobs: #sudo apt install mercurial python3 python3-dev python3-pip curl wget dpkg-sig msitools p7zip-full upx-ucl libssl-dev zstd wine64-tools wine pip3 install --upgrade setuptools pip3 install wheel setuptools zstandard==0.15.2 cffi>=1.13.0 glean-parser==2.5.0 appdirs>=1.4 Click>=7 diskcache>=4 importlib-metadata iso8601>=0.1.10 Jinja2>=2.10.1 jsonschema>=3.0.2 attrs>=17.4.0 MarkupSafe>=2.0 pycparser pyrsistent>=0.14.0 PyYAML>=3.13 six>=1.11.0 typing-extensions>=3.6.4 yamllint>=1.18.0 pathspec>=0.5.3 zipp>=0.5 psutil==5.8.0 - mkdir ~/.mozbuild - git clone https://github.com/glandium/git-cinnabar.git ~/.mozbuild/git-cinnabar - datcorddir=$PWD - cd ~/.mozbuild/git-cinnabar/ - make - ls - cd $datcorddir bash ./crossCompileForWindows.sh - name: Edit Tarball run: | From c4f563fa34ba370911acc910729a262f0f7e9feb Mon Sep 17 00:00:00 2001 From: gamingdoom <37276884+gamingdoom@users.noreply.github.com> Date: Sat, 4 Feb 2023 11:15:30 -0800 Subject: [PATCH 29/29] fix win cross compile --- .github/workflows/build-win64.yml | 37 ++----------------------------- 1 file changed, 2 insertions(+), 35 deletions(-) diff --git a/.github/workflows/build-win64.yml b/.github/workflows/build-win64.yml index 28d119c2d3..f10f74eab7 100644 --- a/.github/workflows/build-win64.yml +++ b/.github/workflows/build-win64.yml @@ -44,46 +44,13 @@ jobs: pip3 install --upgrade setuptools pip3 install wheel setuptools zstandard==0.15.2 cffi>=1.13.0 glean-parser==2.5.0 appdirs>=1.4 Click>=7 diskcache>=4 importlib-metadata iso8601>=0.1.10 Jinja2>=2.10.1 jsonschema>=3.0.2 attrs>=17.4.0 MarkupSafe>=2.0 pycparser pyrsistent>=0.14.0 PyYAML>=3.13 six>=1.11.0 typing-extensions>=3.6.4 yamllint>=1.18.0 pathspec>=0.5.3 zipp>=0.5 psutil==5.8.0 bash ./crossCompileForWindows.sh - - name: Edit Tarball - run: | - mkdir datcord - tar --strip-components=1 -xvf mozilla-unified/obj-x86_64-pc-linux-gnu/dist/*.tar.bz2 -C datcord/ - #mv datcord/firefox datcord/datcord - #mv datcord/firefox-bin datcord/datcord-bin - cp -r distribution/ datcord/ - mv datcord/distribution/policies-linux.json datcord/distribution/policies.json - cp open-in-default-browser/open-in-default-browser datcord/open-in-default-browser - cp src/launch-datcord datcord/launch-datcord - tar -cjf datcord.tar.bz2 datcord - - name: Appimage it - run: | - wget "https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage" - chmod a+x appimagetool-x86_64.AppImage - mkdir -p datcord.AppImage/usr/bin/ - tar --strip-components=1 -xvf mozilla-unified/obj-x86_64-pc-linux-gnu/dist/*.tar.bz2 -C datcord.AppImage/usr/bin/ - #mv datcord.AppImage/usr/bin/firefox datcord.AppImage/usr/bin/datcord - #mv datcord.AppImage/usr/bin/firefox-bin datcord.AppImage/usr/bin/datcord-bin - cp -r distribution/ datcord.AppImage/usr/bin/ - mv datcord.AppImage/usr/bin/distribution/policies-linux-appimage.json datcord.AppImage/usr/bin/distribution/policies.json - cp open-in-default-browser/open-in-default-browser datcord.AppImage/usr/bin/ - ARCH=x86_64 ./appimagetool-x86_64.AppImage datcord.AppImage/ - - - name: Upload a Build Artifact - uses: actions/upload-artifact@v2.2.4 - with: - # Artifact name - name: tarball-linux-x86_64 - # A file, directory or wildcard pattern that describes what to upload - path: datcord.tar.bz2 - - name: Upload a Build Artifact uses: actions/upload-artifact@v2.2.4 with: # Artifact name - name: Appimage + name: win64-installer # A file, directory or wildcard pattern that describes what to upload - path: | - Datcord-x86_64.AppImage + path: work/datcordSetup-win64.exe # name: Build-Win64