0
Fork 0
mirror of https://codeberg.org/librewolf/source.git synced 2024-12-22 05:33:03 -05:00

Merge pull request 'split_pref_pane' (!65) from split_pref_pane into main

Reviewed-on: https://codeberg.org/librewolf/source/pulls/65
This commit is contained in:
Bert van der Weerd 2023-10-30 08:21:00 +00:00
commit 1b9acfd124
10 changed files with 896 additions and 1 deletions

View file

@ -9,7 +9,6 @@ patches/disable-data-reporting-at-compile-time.patch
patches/flatpak-autoconf.patch
patches/fullpage-translations.patch
patches/hide-passwordmgr.patch
patches/librewolf-pref-pane.patch
patches/librewolf-prefs.patch
patches/mozilla_dirs.patch
patches/msix.patch

View file

@ -0,0 +1,22 @@
### overview:
* This folder replaces the original big pref-pane.patch, the original patch is moved into the `patches/removed-patches` folder.
* This new solution should make it much easier for everyone to edit the librewolf preferences.
#### librewolf.inc.xhtml
Contains the html elements that make up the preferences UI. for example, a checkmark to 'enable firefox sync'. In this example there is a html snippet that uses only the `identity.fxaccounts.enabled` setting, so no JavaScript needed.
#### librewolf.js
Other code called by the ui elements.
#### preferences.ftl
In our running xhtml example, we have a string id `data-l10n-id="librewolf-sync-checkbox"` that we can find in our`.ftl` file.
#### note: new files, these contain all the logic for the pref-pane:
* category-librewolf.svg -> browser/themes/shared/preferences/category-librewolf.svg
* librewolf.css -> browser/themes/shared/preferences/librewolf.css
* librewolf.inc.xhtml -> browser/components/preferences/librewolf.inc.xhtml
* librewolf.js -> browser/components/preferences/librewolf.js
#### note: appending these string values to the original preferences.ftl:
* preferences.ftl -- append to --> browser/locales/en-US/browser/preferences/preferences.ftl

View file

@ -0,0 +1,96 @@
<!-- 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/.
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" width="20" height="20" fill="context-fill" fill-opacity="context-fill-opacity">
<path d="M15.5 9 15 9l0-4A5 5 0 0 0 5 5l0 4-.5 0A2.5 2.5 0 0 0 2 11.5l0 6A2.5 2.5 0 0 0 4.5 20l11 0a2.5 2.5 0 0 0 2.5-2.5l0-6A2.5 2.5 0 0 0 15.5 9zm-9-4c0-1.93 1.57-3.5 3.5-3.5 1.93 0 3.5 1.57 3.5 3.5l0 4-7 0 0-4zm10 12.7-.8.8-11.4 0-.8-.8 0-6.4.8-.8 11.4 0 .8.8 0 6.4z"/>
</svg>
-->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="67.733337mm"
height="67.733337mm"
viewBox="0 0 67.733337 67.733337"
version="1.1"
id="svg8"
inkscape:version="0.92.4 5da689c313, 2019-01-14"
sodipodi:docname="LibreWolf.svg">
<defs
id="defs2" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.9899495"
inkscape:cx="-15.106575"
inkscape:cy="110.91343"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1366"
inkscape:window-height="711"
inkscape:window-x="0"
inkscape:window-y="30"
inkscape:window-maximized="1"
inkscape:showpageshadow="false"
units="px"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-42.106554,-153.8982)">
<circle
style="fill:#00acff;fill-opacity:1;stroke:none;stroke-width:0.53545821;stroke-miterlimit:4;stroke-dasharray:none"
id="path875"
cx="75.973221"
cy="187.76486"
r="33.866669" />
<path
style="fill:#ffffff;stroke-width:0.13229167"
d="m 72.543594,214.67719 c -4.744093,-0.60875 -9.281981,-2.49991 -13.241953,-5.51858 -1.29157,-0.98455 -3.714943,-3.42363 -4.772834,-4.80375 -2.96241,-3.86476 -4.804479,-8.2508 -5.41218,-12.88661 -0.260164,-1.98464 -0.258719,-5.63349 0.0029,-7.44738 1.308078,-9.0677 7.01463,-16.8454 15.20915,-20.72918 3.811512,-1.80647 7.300266,-2.57114 11.730683,-2.57114 7.165903,0 13.5265,2.56749 18.680882,7.54063 2.483054,2.39575 4.148141,4.66808 5.573968,7.60677 1.92868,3.9751 2.70979,7.43276 2.70979,11.99526 0,6.00619 -1.7345,11.24407 -5.336957,16.11672 -1.070527,1.44797 -3.161747,3.64749 -4.549468,4.78507 -3.806562,3.12041 -8.658642,5.23183 -13.473174,5.86296 -1.663528,0.21807 -5.593318,0.24524 -7.120854,0.0492 z m 10.041381,-4.86547 c 2.898391,-0.91366 5.260364,-2.14146 7.540624,-3.91979 1.212494,-0.9456 3.308223,-3.06144 4.186916,-4.22711 2.38328,-3.16162 4.004927,-7.12196 4.482067,-10.94597 0.229814,-1.84182 0.09634,-5.73827 -0.2545,-7.4296 -0.9294,-4.48046 -2.931647,-8.26499 -6.086007,-11.50342 -1.966575,-2.01898 -3.756882,-3.34972 -6.060203,-4.50458 -3.495001,-1.75236 -6.489835,-2.46043 -10.423481,-2.46442 -4.164073,-0.004 -7.815325,0.95024 -11.429055,2.98766 -3.289753,1.85476 -6.690628,5.25952 -8.553227,8.563 -1.371786,2.43299 -2.37583,5.32029 -2.767595,7.95869 -0.256867,1.72991 -0.261933,5.16508 -0.01006,6.82145 0.504067,3.31489 1.761474,6.59111 3.584314,9.33904 0.995409,1.50058 0.964154,1.48393 1.842248,0.98153 1.570774,-0.8987 1.980396,-1.33342 2.836087,-3.00984 1.000624,-1.96036 2.070459,-3.6735 3.037094,-4.86332 1.115822,-1.37347 1.269228,-1.61793 1.828988,-2.9147 0.281654,-0.65249 0.786977,-1.61074 1.122938,-2.12943 l 0.61084,-0.94309 -0.79023,-0.77671 c -1.049647,-1.03168 -1.922751,-2.2016 -2.087012,-2.79651 -0.167761,-0.60758 0.03021,-0.9466 0.818744,-1.40207 0.797354,-0.46057 1.367585,-0.5929 3.498657,-0.81193 1.037629,-0.10665 2.164153,-0.30199 2.518962,-0.43681 0.353024,-0.13414 1.407825,-0.70824 2.344001,-1.27579 2.702947,-1.63863 2.931619,-1.72344 4.552111,-1.68831 1.368686,0.0297 1.371262,0.0291 2.182813,-0.46143 1.700674,-1.02802 4.14305,-2.88289 7.357044,-5.58733 0.61632,-0.5186 1.21002,-0.92569 1.31934,-0.90464 0.45462,0.0876 1.289567,2.13636 1.416407,3.47562 0.07693,0.81225 -0.08023,1.6155 -0.562014,2.87261 -0.13146,0.34301 -0.19208,0.67043 -0.134706,0.7276 0.13774,0.13726 0.610706,-0.4535 0.610706,-0.76279 0,-0.39435 0.261127,-0.43936 0.616327,-0.10623 0.258235,0.24218 0.480842,0.31151 1.000202,0.31151 0.567073,0 0.707447,0.0526 0.928773,0.3479 0.375574,0.50112 0.463647,1.86688 0.176201,2.73231 -0.279641,0.84191 -1.124801,1.81287 -1.891829,2.17341 -0.686334,0.32262 -2.075841,1.67928 -2.726081,2.66164 -0.248906,0.37604 -0.715586,1.15995 -1.037066,1.74204 -0.321487,0.58208 -0.86074,1.46154 -1.19834,1.95436 -0.664294,0.96972 -1.233147,2.3224 -1.782214,4.23798 -0.322553,1.1253 -0.34962,1.41826 -0.362953,3.92797 -0.01613,3.0317 -0.172894,3.77561 -0.9925,4.7091 -0.931805,1.06126 -1.861937,3.39186 -1.940127,4.8613 -0.04935,0.92751 -0.192246,1.83164 -0.395304,2.50122 -0.08942,0.29484 0.07752,0.2914 1.072102,-0.0221 z"
id="path847"
inkscape:connector-curvature="0" />
<path
sodipodi:type="star"
style="fill:#00acff;fill-opacity:1;stroke:none;stroke-width:1.5;stroke-miterlimit:4;stroke-dasharray:none"
id="path814"
sodipodi:sides="4"
sodipodi:cx="18.854025"
sodipodi:cy="172.98837"
sodipodi:r1="1.6036172"
sodipodi:r2="1.1339285"
sodipodi:arg1="1.5707963"
sodipodi:arg2="2.3561945"
inkscape:flatsided="true"
inkscape:rounded="0"
inkscape:randomized="0"
d="m 18.854025,174.59199 -1.603617,-1.60362 1.603617,-1.60361 1.603617,1.60361 z"
transform="matrix(0.23203125,0.40188991,-0.99392962,0.57384553,246.21921,73.888081)" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.3 KiB

View file

@ -0,0 +1,23 @@
.librewolf-collapse > input {
display: none;
}
.librewolf-collapse > input ~ .librewolf-collapsed {
display: none;
/* max-height: 0; */
transition: max-height 0.25s ease-in-out;
}
.librewolf-collapse > input:checked ~ .librewolf-collapsed {
display: block;
/* max-height: 20rem; */
}
.librewolf-warning {
display: inline;
font-size: 0.8em;
}
.librewolf-button-icon {
width: 16px;
height: 16px;
margin-right: 8px;
-moz-context-properties: fill, fill-opacity;
fill: currentColor;
}

View file

@ -0,0 +1,254 @@
# 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/.
<script src="chrome://browser/content/preferences/librewolf.js"/>
<html:template id="template-paneLibrewolf">
<hbox class="subcategory" hidden="true" data-category="paneLibrewolf">
<html:h1 data-l10n-id="librewolf-header"/>
</hbox>
<groupbox hidden="true" data-category="paneLibrewolf">
<html:h2 data-l10n-id="librewolf-general-heading"/>
<!-- TEMPLATE FOR A NEW PREFERENCE
<hbox>
<checkbox id="librewolf-LABEL-checkbox" data-l10n-id="librewolf-LABEL-checkbox" preference="PREF" flex="1" />
<html:label for="librewolf-LABEL-collapse" class="sidebar-footer-link" pack="end"> <image class="sidebar-footer-icon help-icon"/> </html:label>
</hbox>
<vbox class="librewolf-collapse indent">
<html:input type="checkbox" id="librewolf-LABEL-collapse" />
<vbox class="librewolf-collapsed tracking-protection-ui content-blocking-category">
<label data-l10n-id="librewolf-LABEL-description" />
<html:div> <image src="chrome://browser/skin/warning.svg" /> <label data-l10n-id="librewolf-LABEL-warning1" class="librewolf-warning" /> </html:div>
<checkbox preference="PREF" label="PREF" />
</vbox>
</vbox>
-->
<hbox>
<checkbox id="librewolf-extension-update-checkbox" data-l10n-id="librewolf-extension-update-checkbox" preference="extensions.update.autoUpdateDefault" flex="1" />
<html:label for="librewolf-extension-update-collapse" class="sidebar-footer-link" pack="end"> <image class="sidebar-footer-icon help-icon"/> </html:label>
</hbox>
<vbox class="librewolf-collapse indent">
<html:input type="checkbox" id="librewolf-extension-update-collapse" />
<vbox class="librewolf-collapsed tracking-protection-ui content-blocking-category">
<label data-l10n-id="librewolf-extension-update-description" />
<html:div> <image src="chrome://browser/skin/warning.svg" /> <label data-l10n-id="librewolf-extension-update-warning1" class="librewolf-warning" /> </html:div>
<checkbox preference="extensions.update.autoUpdateDefault" label="extensions.update.autoUpdateDefault" />
<checkbox preference="extensions.update.enabled" label="extensions.update.enabled" />
</vbox>
</vbox>
<hbox>
<checkbox id="librewolf-sync-checkbox" data-l10n-id="librewolf-sync-checkbox" preference="identity.fxaccounts.enabled" flex="1" />
<html:label for="librewolf-sync-collapse" class="sidebar-footer-link" pack="end"> <image class="sidebar-footer-icon help-icon"/> </html:label>
</hbox>
<vbox class="librewolf-collapse indent">
<html:input type="checkbox" id="librewolf-sync-collapse" />
<vbox class="librewolf-collapsed tracking-protection-ui content-blocking-category">
<label data-l10n-id="librewolf-sync-description" />
<html:div> <image src="chrome://browser/skin/warning.svg" /> <label data-l10n-id="librewolf-sync-warning1" class="librewolf-warning" /> </html:div>
<checkbox preference="identity.fxaccounts.enabled" label="identity.fxaccounts.enabled" />
</vbox>
</vbox>
<hbox>
<checkbox id="librewolf-autocopy-checkbox" data-l10n-id="librewolf-autocopy-checkbox" preference="clipboard.autocopy" flex="1" />
<html:label for="librewolf-autocopy-collapse" class="sidebar-footer-link" pack="end"> <image class="sidebar-footer-icon help-icon"/> </html:label>
</hbox>
<vbox class="librewolf-collapse indent">
<html:input type="checkbox" id="librewolf-autocopy-collapse" />
<vbox class="librewolf-collapsed tracking-protection-ui content-blocking-category">
<label data-l10n-id="librewolf-autocopy-description" />
<checkbox preference="clipboard.autocopy" label="clipboard.autocopy" />
<checkbox preference="middlemouse.paste" label="middlemouse.paste" />
</vbox>
</vbox>
<hbox>
<checkbox id="librewolf-styling-checkbox" data-l10n-id="librewolf-styling-checkbox" preference="toolkit.legacyUserProfileCustomizations.stylesheets" flex="1" />
<html:label for="librewolf-styling-collapse" class="sidebar-footer-link" pack="end"> <image class="sidebar-footer-icon help-icon"/> </html:label>
</hbox>
<vbox class="librewolf-collapse indent">
<html:input type="checkbox" id="librewolf-styling-collapse" />
<vbox class="librewolf-collapsed tracking-protection-ui content-blocking-category">
<label data-l10n-id="librewolf-styling-description" />
<html:div> <image src="chrome://browser/skin/warning.svg" /> <label data-l10n-id="librewolf-styling-warning1" class="librewolf-warning" /> </html:div>
<checkbox preference="toolkit.legacyUserProfileCustomizations.stylesheets" label="toolkit.legacyUserProfileCustomizations.stylesheets" />
</vbox>
</vbox>
</groupbox>
<groupbox hidden="true" data-category="paneLibrewolf">
<html:h2 data-l10n-id="librewolf-network-heading" />
<hbox>
<checkbox id="librewolf-ipv6-checkbox" data-l10n-id="librewolf-ipv6-checkbox" preference="network.dns.disableIPv6" flex="1" />
<html:label for="librewolf-ipv6-collapse" class="sidebar-footer-link" pack="end"> <image class="sidebar-footer-icon help-icon"/> </html:label>
</hbox>
<vbox class="librewolf-collapse indent">
<html:input type="checkbox" id="librewolf-ipv6-collapse" />
<vbox class="librewolf-collapsed tracking-protection-ui content-blocking-category">
<label data-l10n-id="librewolf-ipv6-description" />
<html:div> <image src="chrome://browser/skin/warning.svg" /> <label data-l10n-id="librewolf-ipv6-warning1" class="librewolf-warning" /> </html:div>
<checkbox preference="network.dns.disableIPv6" label="network.dns.disableIPv6" />
</vbox>
</vbox>
</groupbox>
<groupbox hidden="true" data-category="paneLibrewolf">
<html:h2 data-l10n-id="librewolf-privacy-heading" />
<hbox>
<checkbox id="librewolf-xorigin-ref-checkbox" data-l10n-id="librewolf-xorigin-ref-checkbox" preference="network.http.referer.XOriginPolicy" flex="1" />
<html:label for="librewolf-xorigin-ref-collapse" class="sidebar-footer-link" pack="end"> <image class="sidebar-footer-icon help-icon"/> </html:label>
</hbox>
<vbox class="librewolf-collapse indent">
<html:input type="checkbox" id="librewolf-xorigin-ref-collapse" />
<vbox class="librewolf-collapsed tracking-protection-ui content-blocking-category">
<label data-l10n-id="librewolf-xorigin-ref-description" />
<html:div> <image src="chrome://browser/skin/warning.svg" /> <label data-l10n-id="librewolf-xorigin-ref-warning1" class="librewolf-warning" /> </html:div>
<checkbox disabled="true" preference="network.http.referer.XOriginPolicy" label="network.http.referer.XOriginPolicy" />
</vbox>
</vbox>
</groupbox>
<groupbox hidden="true" data-category="paneLibrewolf">
<html:h2 data-l10n-id="librewolf-broken-heading" />
<hbox>
<checkbox id="librewolf-rfp-checkbox" data-l10n-id="librewolf-rfp-checkbox" preference="privacy.resistFingerprinting" flex="1" />
<html:label for="librewolf-rfp-collapse" class="sidebar-footer-link" pack="end"> <image class="sidebar-footer-icon help-icon"/> </html:label>
</hbox>
<vbox class="librewolf-collapse indent">
<html:input type="checkbox" id="librewolf-rfp-collapse" />
<vbox class="librewolf-collapsed tracking-protection-ui content-blocking-category">
<label data-l10n-id="librewolf-rfp-description" />
<html:div> <image src="chrome://browser/skin/warning.svg" /> <label data-l10n-id="librewolf-rfp-warning1" class="librewolf-warning" /> </html:div>
<checkbox preference="privacy.resistFingerprinting" label="privacy.resistFingerprinting" />
</vbox>
</vbox>
<vbox class="indent">
<hbox>
<checkbox id="librewolf-letterboxing-checkbox" data-l10n-id="librewolf-letterboxing-checkbox" preference="privacy.resistFingerprinting.letterboxing" flex="1" />
<html:label for="librewolf-letterboxing-collapse" class="sidebar-footer-link" pack="end"> <image class="sidebar-footer-icon help-icon"/> </html:label>
</hbox>
<vbox class="librewolf-collapse indent">
<html:input type="checkbox" id="librewolf-letterboxing-collapse" />
<vbox class="librewolf-collapsed tracking-protection-ui content-blocking-category">
<label data-l10n-id="librewolf-letterboxing-description" />
<checkbox preference="privacy.resistFingerprinting.letterboxing" label="privacy.resistFingerprinting.letterboxing" />
</vbox>
</vbox>
<hbox>
<checkbox id="librewolf-auto-decline-canvas-checkbox" data-l10n-id="librewolf-auto-decline-canvas-checkbox" preference="privacy.resistFingerprinting.autoDeclineNoUserInputCanvasPrompts" flex="1" />
<html:label for="librewolf-auto-decline-canvas-collapse" class="sidebar-footer-link" pack="end"> <image class="sidebar-footer-icon help-icon"/> </html:label>
</hbox>
<vbox class="librewolf-collapse indent">
<html:input type="checkbox" id="librewolf-auto-decline-canvas-collapse" />
<vbox class="librewolf-collapsed tracking-protection-ui content-blocking-category">
<label data-l10n-id="librewolf-auto-decline-canvas-description" />
<html:div> <label data-l10n-id="librewolf-auto-decline-canvas-warning1" class="librewolf-warning" /> </html:div>
<checkbox preference="privacy.resistFingerprinting.autoDeclineNoUserInputCanvasPrompts" label="privacy.resistFingerprinting.autoDeclineNoUserInputCanvasPrompts" />
</vbox>
</vbox>
</vbox>
<hbox>
<checkbox id="librewolf-webgl-checkbox" data-l10n-id="librewolf-webgl-checkbox" preference="webgl.disabled" flex="1" />
<html:label for="librewolf-webgl-collapse" class="sidebar-footer-link" pack="end"> <image class="sidebar-footer-icon help-icon"/> </html:label>
</hbox>
<vbox class="librewolf-collapse indent">
<html:input type="checkbox" id="librewolf-webgl-collapse" />
<vbox class="librewolf-collapsed tracking-protection-ui content-blocking-category">
<label data-l10n-id="librewolf-webgl-description" />
<html:div> <image src="chrome://browser/skin/warning.svg" /> <label data-l10n-id="librewolf-webgl-warning1" class="librewolf-warning" /> </html:div>
<checkbox preference="webgl.disabled" label="webgl.disabled" />
</vbox>
</vbox>
</groupbox>
<groupbox hidden="true" data-category="paneLibrewolf">
<html:h2 data-l10n-id="librewolf-security-heading" />
<hbox>
<checkbox id="librewolf-ocsp-checkbox" data-l10n-id="librewolf-ocsp-checkbox" preference="security.OCSP.require" flex="1" />
<html:label for="librewolf-ocsp-collapse" class="sidebar-footer-link" pack="end"> <image class="sidebar-footer-icon help-icon"/> </html:label>
</hbox>
<vbox class="librewolf-collapse indent">
<html:input type="checkbox" id="librewolf-ocsp-collapse" />
<vbox class="librewolf-collapsed tracking-protection-ui content-blocking-category">
<label data-l10n-id="librewolf-ocsp-description" />
<html:div> <image src="chrome://browser/skin/warning.svg" /> <label data-l10n-id="librewolf-ocsp-warning1" class="librewolf-warning" /> </html:div>
<checkbox preference="security.OCSP.require" label="security.OCSP.require" />
</vbox>
</vbox>
<hbox>
<checkbox id="librewolf-goog-safe-checkbox" data-l10n-id="librewolf-goog-safe-checkbox" preference="browser.safebrowsing.malware.enabled" flex="1" />
<html:label for="librewolf-goog-safe-collapse" class="sidebar-footer-link" pack="end"> <image class="sidebar-footer-icon help-icon"/> </html:label>
</hbox>
<vbox class="librewolf-collapse indent">
<html:input type="checkbox" id="librewolf-goog-safe-collapse" />
<vbox class="librewolf-collapsed tracking-protection-ui content-blocking-category">
<label data-l10n-id="librewolf-goog-safe-description" />
<html:div> <image src="chrome://browser/skin/warning.svg" /> <label data-l10n-id="librewolf-goog-safe-warning1" class="librewolf-warning" /> </html:div>
<checkbox preference="browser.safebrowsing.malware.enabled" label="browser.safebrowsing.malware.enabled" />
<checkbox preference="browser.safebrowsing.phishing.enabled" label="browser.safebrowsing.phishing.enabled" />
<checkbox preference="browser.safebrowsing.blockedURIs.enabled" label="browser.safebrowsing.blockedURIs.enabled" />
<checkbox preference="browser.safebrowsing.provider.google4.gethashURL" label="browser.safebrowsing.provider.google4.gethashURL" id="librewolf-goog-safe-hash4"/>
<checkbox preference="browser.safebrowsing.provider.google4.updateURL" label="browser.safebrowsing.provider.google4.updateURL" id="librewolf-goog-safe-up4"/>
<checkbox preference="browser.safebrowsing.provider.google.gethashURL" label="browser.safebrowsing.provider.google.gethashURL" id="librewolf-goog-safe-hash"/>
<checkbox preference="browser.safebrowsing.provider.google.updateURL" label="browser.safebrowsing.provider.google.updateURL" id="librewolf-goog-safe-up"/>
</vbox>
</vbox>
<vbox class="indent">
<hbox>
<checkbox id="librewolf-goog-safe-download-checkbox" data-l10n-id="librewolf-goog-safe-download-checkbox" preference="browser.safebrowsing.downloads.enabled" flex="1" />
<html:label for="librewolf-goog-safe-download-collapse" class="sidebar-footer-link" pack="end"> <image class="sidebar-footer-icon help-icon"/> </html:label>
</hbox>
<vbox class="librewolf-collapse indent">
<html:input type="checkbox" id="librewolf-goog-safe-download-collapse" />
<vbox class="librewolf-collapsed tracking-protection-ui content-blocking-category">
<label data-l10n-id="librewolf-goog-safe-download-description" />
<html:div> <image src="chrome://browser/skin/warning.svg" /> <label data-l10n-id="librewolf-goog-safe-download-warning1" class="librewolf-warning" /> </html:div>
<checkbox preference="browser.safebrowsing.downloads.enabled" label="browser.safebrowsing.downloads.enabled" />
</vbox>
</vbox>
</vbox>
</groupbox>
<hbox class="subcategory" hidden="true" data-category="paneLibrewolf">
<html:h1 data-l10n-id="librewolf-footer"/>
</hbox>
<groupbox data-category="paneLibrewolf" hidden="true">
<vbox align="start">
<hbox>
<button id="librewolf-config-link" is="highlightable-button" flex="1">
<image class="librewolf-button-icon" src="chrome://browser/skin/ion.svg" /> <!-- TODO not the typical way a picture is defined I think, and also we should copy the svg file in case they change it -->
<label data-l10n-id="librewolf-config-link"></label>
</button>
<button id="librewolf-open-profile" is="highlightable-button" flex="1">
<image class="librewolf-button-icon" src="chrome://browser/skin/open.svg" />
<label data-l10n-id="librewolf-open-profile"></label>
</button>
</hbox>
</vbox>
</groupbox>
</html:template>

View file

@ -0,0 +1,287 @@
/* 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/. */
/* import-globals-from extensionControlled.js */
/* import-globals-from preferences.js */
var { AppConstants } = ChromeUtils.import( "resource://gre/modules/AppConstants.jsm");
XPCOMUtils.defineLazyGetter(this, "L10n", () => {
return new Localization([
"branding/brand.ftl",
"browser/preferences/preferences.ftl",
]);
});
Preferences.addAll([
// IPv6
{ id: "network.dns.disableIPv6", type: "bool" },
// ocsp hard-fail
{ id: "security.OCSP.require", type: "bool" },
// ocsp hard-fail
{ id: "identity.fxaccounts.enabled", type: "bool" },
// WebGL
{ id: "webgl.disabled", type: "bool" },
// RFP
{ id: "privacy.resistFingerprinting", type: "bool" },
// Automatically Update Extensions
{ id: "extensions.update.enabled", type: "bool" },
{ id: "extensions.update.autoUpdateDefault", type: "bool" },
// Clipboard autocopy/paste
{ id: "clipboard.autocopy", type: "bool" },
{ id: "middlemouse.paste", type: "bool" },
// XOrigin referrers
{ id: "network.http.referer.XOriginPolicy", type: "int" },
// Harden
{ id: "privacy.resistFingerprinting.letterboxing", type: "bool" },
// Google Safe Browsing
//{ id: "browser.safebrowsing.malware.enabled", type: "bool" }, // Already loaded
//{ id: "browser.safebrowsing.phishing.enabled", type: "bool" },
{ id: "browser.safebrowsing.blockedURIs.enabled", type: "bool" },
{ id: "browser.safebrowsing.provider.google4.gethashURL", type: "string" },
{ id: "browser.safebrowsing.provider.google4.updateURL", type: "string" },
{ id: "browser.safebrowsing.provider.google.gethashURL", type: "string" },
{ id: "browser.safebrowsing.provider.google.updateURL", type: "string" },
/**** Prefs that require changing a lockPref ****/
// Google safe browsing check downloads
//{ id: "browser.safebrowsing.downloads.enabled", type: "bool" }, //Also already added
{ id: "toolkit.legacyUserProfileCustomizations.stylesheets", type: "bool" },
// Canvas UI when blocked
{
id: "privacy.resistFingerprinting.autoDeclineNoUserInputCanvasPrompts",
type: "bool",
},
]);
var gLibrewolfPane = {
_pane: null,
// called when the document is first parsed
init() {
this._pane = document.getElementById("paneLibrewolf");
// Set all event listeners on checkboxes
setBoolSyncListeners(
"librewolf-extension-update-checkbox",
["extensions.update.autoUpdateDefault", "extensions.update.enabled"],
[true, true ],
);
setBoolSyncListeners(
"librewolf-ipv6-checkbox",
["network.dns.disableIPv6"],
[false, ],
);
setBoolSyncListeners(
"librewolf-ocsp-checkbox",
["security.OCSP.require"],
[true, ],
);
setBoolSyncListeners(
"librewolf-sync-checkbox",
["identity.fxaccounts.enabled"],
[true, ],
);
setBoolSyncListeners(
"librewolf-autocopy-checkbox",
["clipboard.autocopy", "middlemouse.paste"],
[true, true ],
);
setBoolSyncListeners(
"librewolf-styling-checkbox",
["toolkit.legacyUserProfileCustomizations.stylesheets"],
[true, ],
);
setBoolSyncListeners(
"librewolf-webgl-checkbox",
["webgl.disabled"],
[false ],
);
setBoolSyncListeners(
"librewolf-rfp-checkbox",
["privacy.resistFingerprinting"],
[true ],
);
setBoolSyncListeners(
"librewolf-auto-decline-canvas-checkbox",
["privacy.resistFingerprinting.autoDeclineNoUserInputCanvasPrompts"],
[true ],
);
setBoolSyncListeners(
"librewolf-letterboxing-checkbox",
["privacy.resistFingerprinting.letterboxing"],
[true ],
);
setSyncListeners(
"librewolf-goog-safe-checkbox",
[
"browser.safebrowsing.malware.enabled",
"browser.safebrowsing.phishing.enabled",
"browser.safebrowsing.blockedURIs.enabled",
"browser.safebrowsing.provider.google4.gethashURL",
"browser.safebrowsing.provider.google4.updateURL",
"browser.safebrowsing.provider.google.gethashURL",
"browser.safebrowsing.provider.google.updateURL",
],
[
true,
true,
true,
"https://safebrowsing.googleapis.com/v4/fullHashes:find?$ct=application/x-protobuf&key=%GOOGLE_SAFEBROWSING_API_KEY%&$httpMethod=POST",
"https://safebrowsing.googleapis.com/v4/threatListUpdates:fetch?$ct=application/x-protobuf&key=%GOOGLE_SAFEBROWSING_API_KEY%&$httpMethod=POST",
"https://safebrowsing.google.com/safebrowsing/gethash?client=SAFEBROWSING_ID&appver=%MAJOR_VERSION%&pver=2.2",
"https://safebrowsing.google.com/safebrowsing/downloads?client=SAFEBROWSING_ID&appver=%MAJOR_VERSION%&pver=2.2&key=%GOOGLE_SAFEBROWSING_API_KEY%",
],
[
false,
false,
false,
"",
"",
"",
"",
]
);
setXOriginPolicySyncListeners(
"librewolf-xorigin-ref-checkbox",
"network.http.referer.XOriginPolicy",
[1, 2],
[0]
);
// Set event listener on open profile directory button
setEventListener("librewolf-open-profile", "command", openProfileDirectory);
// Set event listener on open about:config button
setEventListener("librewolf-config-link", "click", openAboutConfig);
// Notify observers that the UI is now ready
Services.obs.notifyObservers(window, "librewolf-pane-loaded");
},
};
function setXOriginPolicySyncListeners(checkboxid, pref, onVals, offVals) {
setSyncFromPrefListener(checkboxid, () => onVals.includes(getPref(pref)));
setSyncToPrefListener(checkboxid, () =>
writeGenericPrefs([pref], [2], [0], document.getElementById(checkboxid).checked)
);
Preferences.get(pref).on("change", () =>
makeMasterCheckboxesReactive(checkboxid, () =>
onVals.includes(getPref(pref))
)
);
}
function openProfileDirectory() {
// Get the profile directory.
let currProfD = Services.dirsvc.get("ProfD", Ci.nsIFile);
let profileDir = currProfD.path;
// Show the profile directory.
let nsLocalFile = Components.Constructor(
"@mozilla.org/file/local;1",
"nsIFile",
"initWithPath"
);
new nsLocalFile(profileDir).reveal();
}
function openAboutConfig() {
window.open("about:config", "_blank");
}
function setBoolSyncListeners(checkboxid, opts, vals) {
setSyncFromPrefListener(checkboxid, () => readGenericBoolPrefs(opts, vals));
setSyncToPrefListener(checkboxid, () => writeGenericBoolPrefs(opts, vals, document.getElementById(checkboxid).checked));
for (let i = 1; i < opts.length; i++) {
Preferences.get(opts[i]).on("change", () => makeMasterCheckboxesReactive(checkboxid, () => readGenericBoolPrefs(opts, vals)));
}
}
function setSyncListeners(checkboxid, opts, onVals, offVals) {
setSyncFromPrefListener(checkboxid, () => readGenericPrefs(opts, onVals, offVals));
setSyncToPrefListener(checkboxid, () => writeGenericPrefs(opts, onVals, offVals, document.getElementById(checkboxid).checked));
for (let i = 1; i < opts.length; i++) {
Preferences.get(opts[i]).on("change", () => makeMasterCheckboxesReactive(checkboxid, () => readGenericPrefs(opts, onVals, offVals)));
}
}
function makeMasterCheckboxesReactive(checkboxid, func) {
const shouldBeChecked = func();
document.getElementById(checkboxid).checked = shouldBeChecked;
}
// Wrapper function in case something more is required (as I suspected in the first iteration of this)
function getPref(pref) {
const retval = Preferences.get(pref);
/* if (retval === undefined) {
return defaultValue;
} */
return retval._value;
}
// Returns true if all the preferences in prefs are equal to onVals, false otherwise TODO may need a third array for their default values because mozilla is dumb, after testing though pretty sure this was misinformation being spread by comments in default FF code that has long since been fixed
function readGenericBoolPrefs(prefs, onVals) {
for (let i = 0; i < prefs.length; i++) {
if (getPref(prefs[i]) != onVals[i]) {
return false;
}
}
return true;
}
function writeGenericBoolPrefs(opts, vals, changeToOn) {
valsCopy = [...vals];
if (!changeToOn) {
for (let i = 0; i < vals.length; i++) {
valsCopy[i] = !vals[i];
}
}
// Start at 1 because returning sets the last one
for (let i = 1; i < vals.length; i++) {
Services.prefs.setBoolPref(opts[i], valsCopy[i]);
}
return valsCopy[0];
}
// Returns true if all the preferences in prefs are equal to onVals, false otherwise... currently the same as for Bool as offVals is ignored
function readGenericPrefs(prefs, onVals, offVals) {
for (let i = 0; i < prefs.length; i ++) {
let temp = getPref(prefs[i]);
if (getPref(prefs[i]) != onVals[i]) {
return false;
}
}
return true;
}
function writeGenericPrefs(opts, onVals, offVals, changeToOn) {
let writeArr = (changeToOn) ? onVals : offVals;
for (let i = 1; i < opts.length; i++) {
let type = typeof(writeArr[i]);
if (type == "number") {
Services.prefs.setIntPref(opts[i], writeArr[i]);
} else if (type == "boolean") {
Services.prefs.setBoolPref(opts[i], writeArr[i]);
} else if (type == "string") {
Services.prefs.setCharPref(opts[i], writeArr[i]);
} else {
console.log("BADNESS 10000");
}
}
return writeArr[0];
}
Preferences.get("identity.fxaccounts.enabled").on("change", () => {
confirmRestartPrompt(
Services.prefs.getBoolPref("identity.fxaccounts.enabled"), // Restart is required to *enable* / *disable* the pref
1, // Default Button Index
true, // Cancel instead of Revert Button
false // No Restart Later button
).then(buttonIndex => {
if (buttonIndex == CONFIRM_RESTART_PROMPT_RESTART_NOW) {
Services.startup.quit(
Ci.nsIAppStartup.eAttemptQuit | Ci.nsIAppStartup.eRestart
);
return;
}
});
});

View file

@ -0,0 +1,108 @@
diff --git a/browser/components/preferences/jar.mn b/browser/components/preferences/jar.mn
index 2131a15ceef7..0b97dc14b42e 100644
--- a/browser/components/preferences/jar.mn
+++ b/browser/components/preferences/jar.mn
@@ -11,6 +11,7 @@ browser.jar:
content/browser/preferences/home.js
content/browser/preferences/search.js
content/browser/preferences/privacy.js
+ content/browser/preferences/librewolf.js
content/browser/preferences/containers.js
content/browser/preferences/sync.js
content/browser/preferences/experimental.js
diff --git a/browser/components/preferences/preferences.js b/browser/components/preferences/preferences.js
index 19dda7cf39eb..f5e67b637b49 100644
--- a/browser/components/preferences/preferences.js
+++ b/browser/components/preferences/preferences.js
@@ -8,6 +8,7 @@
/* import-globals-from search.js */
/* import-globals-from containers.js */
/* import-globals-from privacy.js */
+/* import-globals-from librewolf.js */
/* import-globals-from sync.js */
/* import-globals-from experimental.js */
/* import-globals-from moreFromMozilla.js */
@@ -196,6 +197,7 @@ function init_all() {
register_module("paneHome", gHomePane);
register_module("paneSearch", gSearchPane);
register_module("panePrivacy", gPrivacyPane);
+ register_module("paneLibrewolf", gLibrewolfPane);
register_module("paneContainers", gContainersPane);
if (Services.prefs.getBoolPref("browser.preferences.experimental")) {
// Set hidden based on previous load's hidden value.
diff --git a/browser/components/preferences/preferences.xhtml b/browser/components/preferences/preferences.xhtml
index 6ee14eec9b2e..a0d768dce307 100644
--- a/browser/components/preferences/preferences.xhtml
+++ b/browser/components/preferences/preferences.xhtml
@@ -13,6 +13,7 @@
<?xml-stylesheet href="chrome://browser/skin/preferences/search.css"?>
<?xml-stylesheet href="chrome://browser/skin/preferences/containers.css"?>
<?xml-stylesheet href="chrome://browser/skin/preferences/privacy.css"?>
+<?xml-stylesheet href="chrome://browser/skin/preferences/librewolf.css"?>
<!DOCTYPE html>
@@ -129,6 +130,17 @@
<label class="category-name" flex="1" data-l10n-id="pane-privacy-title"></label>
</richlistitem>
+ <richlistitem id="category-librewolf"
+ class="category"
+ value="paneLibrewolf"
+ helpTopic="prefs-librewolf"
+ data-l10n-id="category-librewolf"
+ data-l10n-attrs="tooltiptext"
+ align="center">
+ <image class="category-icon"/>
+ <label class="category-name" flex="1" data-l10n-id="pane-librewolf-title"></label>
+ </richlistitem>
+
<richlistitem id="category-sync"
class="category"
hidden="true"
@@ -207,6 +219,7 @@
#include home.inc.xhtml
#include search.inc.xhtml
#include privacy.inc.xhtml
+#include librewolf.inc.xhtml
#include containers.inc.xhtml
#include sync.inc.xhtml
#include experimental.inc.xhtml
diff --git a/browser/themes/shared/jar.inc.mn b/browser/themes/shared/jar.inc.mn
index 146764d56081..52326c00bdfe 100644
--- a/browser/themes/shared/jar.inc.mn
+++ b/browser/themes/shared/jar.inc.mn
@@ -108,6 +108,7 @@
skin/classic/browser/preferences/android-menu.svg (../shared/preferences/android-menu.svg)
skin/classic/browser/preferences/category-general.svg (../shared/preferences/category-general.svg)
skin/classic/browser/preferences/category-privacy-security.svg (../shared/preferences/category-privacy-security.svg)
+ skin/classic/browser/preferences/category-librewolf.svg (../shared/preferences/category-librewolf.svg)
skin/classic/browser/preferences/category-search.svg (../shared/preferences/category-search.svg)
skin/classic/browser/preferences/category-sync.svg (../shared/preferences/category-sync.svg)
skin/classic/browser/preferences/containers.css (../shared/preferences/containers.css)
@@ -127,6 +128,7 @@
skin/classic/browser/preferences/vpn-logo.svg (../shared/preferences/vpn-logo.svg)
skin/classic/browser/preferences/search.css (../shared/preferences/search.css)
skin/classic/browser/preferences/siteDataSettings.css (../shared/preferences/siteDataSettings.css)
+ skin/classic/browser/preferences/librewolf.css (../shared/preferences/librewolf.css)
skin/classic/browser/translations/panel.css (../shared/translations/panel.css)
skin/classic/browser/fxa/fxa-spinner.svg (../shared/fxa/fxa-spinner.svg)
skin/classic/browser/fxa/sync-illustration.svg (../shared/fxa/sync-illustration.svg)
diff --git a/browser/themes/shared/preferences/preferences.css b/browser/themes/shared/preferences/preferences.css
index 1968b68a1245..d0da141868e2 100644
--- a/browser/themes/shared/preferences/preferences.css
+++ b/browser/themes/shared/preferences/preferences.css
@@ -206,6 +206,10 @@ checkbox {
list-style-image: url("chrome://browser/skin/preferences/category-privacy-security.svg");
}
+#category-librewolf > .category-icon {
+ list-style-image: url("chrome://browser/skin/preferences/category-librewolf.svg");
+}
+
#category-sync > .category-icon {
list-style-image: url("chrome://browser/skin/preferences/category-sync.svg");
}
--
2.37.3

View file

@ -0,0 +1,89 @@
## LibreWolf preferences
# Sidebar
pane-librewolf-title = LibreWolf
category-librewolf =
.tooltiptext = about:config changes, logically grouped and easily accessible
# Main content
librewolf-header = LibreWolf Preferences
librewolf-warning-title = Heads up!
librewolf-warning-description = We carefully choose default settings to focus on privacy and security. When changing these settings, read the descriptions to understand the implications of those changes.
# Page Layout
librewolf-general-heading = Browser Behavior
librewolf-extension-update-checkbox =
.label = Update add-ons automatically
librewolf-sync-checkbox =
.label = Enable Firefox Sync
librewolf-autocopy-checkbox =
.label = Enable middle click paste
librewolf-styling-checkbox =
.label = Allow userChrome.css customization
librewolf-network-heading = Networking
librewolf-ipv6-checkbox =
.label = Enable IPv6
librewolf-privacy-heading = Privacy
librewolf-xorigin-ref-checkbox =
.label = Limit cross-origin referrers
librewolf-broken-heading = Fingerprinting
librewolf-webgl-checkbox =
.label = Enable WebGL
librewolf-rfp-checkbox =
.label = Enable ResistFingerprinting
librewolf-auto-decline-canvas-checkbox =
.label = Silently block canvas access requests
librewolf-letterboxing-checkbox =
.label = Enable letterboxing
librewolf-security-heading = Security
librewolf-ocsp-checkbox =
.label = Enforce OCSP hard-fail
librewolf-goog-safe-checkbox =
.label = Enable Google Safe Browsing
librewolf-goog-safe-download-checkbox =
.label = Scan downloads
# In-depth descriptions
librewolf-extension-update-description = Keep extensions up to date without manual intervention. A good choice for your security.
librewolf-extension-update-warning1 = If you don't review the code of your extensions before every update, you should enable this option.
librewolf-ipv6-description = Allow { -brand-short-name } to connect using IPv6.
librewolf-ipv6-warning1 = Instead of blocking IPv6 in the browser, we suggest enabling the IPv6 privacy extension in your OS.
librewolf-ocsp-description = Prevent connecting to a website if the OCSP check cannot be performed.
librewolf-ocsp-warning1 = This increases security, but it will cause breakage when an OCSP server is down.
librewolf-sync-description = Sync your data with other browsers. Requires restart.
librewolf-sync-warning1 = Firefox Sync encrypts data locally before transmitting it to the server.
librewolf-autocopy-description = Select some text to copy it, then paste it with a middle-mouse click.
librewolf-styling-description = Enable this if you want to customize the UI with a manually loaded theme.
librewolf-styling-warning1 = Make sure you trust the provider of the theme.
librewolf-xorigin-ref-description = Send a referrer only on same-origin.
librewolf-xorigin-ref-warning1 = This causes breakage. Additionally, even when sent referrers will still be trimmed.
librewolf-webgl-description = WebGL is a strong fingerprinting vector.
librewolf-webgl-warning1 = If you need to enable it, consider using an extension like Canvas Blocker.
librewolf-rfp-description = ResistFingerprinting is the best in class anti-fingerprinting tool.
librewolf-rfp-warning1 = If you need to disable it, consider using an extension like Canvas Blocker.
librewolf-auto-decline-canvas-description = Automatically deny canvas access to websites, without prompting the user.
librewolf-auto-decline-canvas-warning1 = It is still possible to allow canvas access from the urlbar.
librewolf-letterboxing-description = Letterboxing applies margins around your windows, in order to return a limited set of rounded resolutions.
librewolf-goog-safe-description = If you are worried about malware and phishing, consider enabling it.
librewolf-goog-safe-warning1 = Disabled over censorship concerns but recommended for less advanced users. All the checks happen locally.
librewolf-goog-safe-download-description = Allow Safe Browsing to scan your downloads to identify suspicious files.
librewolf-goog-safe-download-warning1 = All the checks happen locally.
# Footer
librewolf-footer = Useful links
librewolf-config-link = All advanced settings (about:config)
librewolf-open-profile = Open user profile directory

View file

@ -123,7 +123,24 @@ def librewolf_patches():
leave_srcdir();
#
# pref-pane patches
#
# 1) patch it in
patch('../patches/pref-pane/pref-pane-small.patch')
# 2) new files
exec('cp ../patches/pref-pane/category-librewolf.svg browser/themes/shared/preferences/category-librewolf.svg')
exec('cp ../patches/pref-pane/librewolf.css browser/themes/shared/preferences/librewolf.css')
exec('cp ../patches/pref-pane/librewolf.inc.xhtml browser/components/preferences/librewolf.inc.xhtml')
exec('cp ../patches/pref-pane/librewolf.js browser/components/preferences/librewolf.js')
# 3) append our locale string values to preferences.ftl
exec('cat browser/locales/en-US/browser/preferences/preferences.ftl ../patches/pref-pane/preferences.ftl > preferences.ftl')
exec('mv preferences.ftl browser/locales/en-US/browser/preferences/preferences.ftl')
# provide a script that fetches and bootstraps Nightly and some mozconfigs
exec('cp -v ../scripts/mozfetch.sh lw/')
exec('cp -v ../assets/mozconfig.new ../assets/mozconfig.new.without-bootstrap ../scripts/setup-wasi-linux.sh lw/')