From 3f05530d6f155fffb61b977d26b30016d56d9ba1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Guzm=C3=A1n?= Date: Thu, 17 Oct 2024 23:35:02 +0000 Subject: [PATCH] firefox: prepare security 131.0.2 release for testing --- ...emove_moreFromMozilla_Focus_and_Klar.patch | 50 ++--- helpers/DATA/firefox/process-json-files.py | 200 +++++++++++++----- .../settings/dumps/main/top-sites.json | 61 ++++++ .../search-custom/tippytop/top_sites.json | 52 +++++ .../searchplugins/trisquel-packages-v2.json | 30 +++ .../searchplugins/trisquel-packages.json | 15 -- .../firefox/searchplugins/trisquel-v2.json | 30 +++ .../DATA/firefox/searchplugins/trisquel.json | 15 -- helpers/DATA/firefox/settings.js | 7 + helpers/make-firefox | 183 ++++------------ 10 files changed, 398 insertions(+), 245 deletions(-) create mode 100644 helpers/DATA/firefox/search-custom/services/settings/dumps/main/top-sites.json create mode 100644 helpers/DATA/firefox/search-custom/tippytop/top_sites.json create mode 100644 helpers/DATA/firefox/searchplugins/trisquel-packages-v2.json delete mode 100644 helpers/DATA/firefox/searchplugins/trisquel-packages.json create mode 100644 helpers/DATA/firefox/searchplugins/trisquel-v2.json delete mode 100644 helpers/DATA/firefox/searchplugins/trisquel.json diff --git a/helpers/DATA/firefox/patch_changes/Remove_moreFromMozilla_Focus_and_Klar.patch b/helpers/DATA/firefox/patch_changes/Remove_moreFromMozilla_Focus_and_Klar.patch index 4e47879..c10138d 100644 --- a/helpers/DATA/firefox/patch_changes/Remove_moreFromMozilla_Focus_and_Klar.patch +++ b/helpers/DATA/firefox/patch_changes/Remove_moreFromMozilla_Focus_and_Klar.patch @@ -3,32 +3,33 @@ Based on https://git.parabola.nu/abslibre.git/diff/libre/iceweasel/9004-FSDG-mis - Remove 'More from Mozilla' section in Preferences - Remove promos of Firefox Focus and Klar from Private Browsing -diff -Nru a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js ---- a/browser/app/profile/firefox.js 2022-05-22 09:35:55.500675021 +0000 -+++ b/browser/app/profile/firefox.js 2022-05-22 21:54:34.961904349 +0000 -@@ -1007,11 +1007,11 @@ - // Toggling Search bar on and off in about:preferences - pref("browser.preferences.search", true); - #if defined(NIGHTLY_BUILD) +diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js +index c5f7cf3a..f0124235 100644 +--- a/browser/app/profile/firefox.js ++++ b/browser/app/profile/firefox.js +@@ -1251,11 +1251,11 @@ pref("accessibility.typeaheadfind.linksonly", false); + pref("accessibility.typeaheadfind.flashBar", 1); + + // Whether we can show the "Firefox Labs" section. -pref("browser.preferences.experimental", true); +pref("browser.preferences.experimental", false); - #else - pref("browser.preferences.experimental", false); - #endif + // Whether we had to hide the "Firefox Labs" section because it would be empty. + pref("browser.preferences.experimental.hidden", false); + // Whether we show the "More from Mozilla" section. -pref("browser.preferences.moreFromMozilla", true); +pref("browser.preferences.moreFromMozilla", false); - pref("browser.preferences.experimental.hidden", false); - pref("browser.preferences.defaultPerformanceSettings.enabled", true); -@@ -1907,7 +1907,7 @@ + // Used by settings to track whether the user customized advanced + // performance settings. Not used directly elsewhere. +@@ -2281,7 +2281,7 @@ pref("browser.contentblocking.report.vpn_regions", "ca,my,nz,sg,gb,gg,im,io,je,u pref("browser.promo.focus.disallowed_regions", "cn"); // Default to enabling focus promos to be shown where allowed. -pref("browser.promo.focus.enabled", true); +pref("browser.promo.focus.enabled", false); - // Comma separated string of mozilla vpn supported platforms. - pref("browser.contentblocking.report.vpn_platforms", "win,mac,linux"); + // Default to enabling pin promos to be shown where allowed. + pref("browser.promo.pin.enabled", true); diff -Nru a/browser/base/content/test/static/browser_all_files_referenced.js b/browser/base/content/test/static/browser_all_files_referenced.js --- a/browser/base/content/test/static/browser_all_files_referenced.js 2022-05-22 09:35:55.336673325 +0000 +++ b/browser/base/content/test/static/browser_all_files_referenced.js 2022-05-22 21:50:33.783348501 +0000 @@ -477,23 +478,24 @@ diff -Nru a/browser/components/preferences/jar.mn b/browser/components/preferenc - content/browser/preferences/more-from-mozilla-qr-code-simple-cn.svg content/browser/preferences/web-appearance-dark.svg content/browser/preferences/web-appearance-light.svg -diff -Nru a/browser/components/preferences/more-from-mozilla-qr-code-simple-cn.svg b/browser/components/preferences/more-from-mozilla-qr-code-simple-cn.svg ---- a/browser/components/preferences/more-from-mozilla-qr-code-simple-cn.svg 2022-05-22 09:35:55.400673986 +0000 -+++ b/browser/components/preferences/more-from-mozilla-qr-code-simple-cn.svg 1970-01-01 00:00:00.000000000 +0000 +diff --git a/browser/components/preferences/more-from-mozilla-qr-code-simple-cn.svg b/browser/components/preferences/more-from-mozilla-qr-code-simple-cn.svg +index edcad0f3..e69de29b 100644 +--- a/browser/components/preferences/more-from-mozilla-qr-code-simple-cn.svg ++++ b/browser/components/preferences/more-from-mozilla-qr-code-simple-cn.svg @@ -1,4 +0,0 @@ - -- -diff -Nru a/browser/components/preferences/more-from-mozilla-qr-code-simple.svg b/browser/components/preferences/more-from-mozilla-qr-code-simple.svg ---- a/browser/components/preferences/more-from-mozilla-qr-code-simple.svg 2022-05-22 09:35:55.404674027 +0000 -+++ b/browser/components/preferences/more-from-mozilla-qr-code-simple.svg 1970-01-01 00:00:00.000000000 +0000 +- +diff --git a/browser/components/preferences/more-from-mozilla-qr-code-simple.svg b/browser/components/preferences/more-from-mozilla-qr-code-simple.svg +index bb847abd..e69de29b 100644 +--- a/browser/components/preferences/more-from-mozilla-qr-code-simple.svg ++++ b/browser/components/preferences/more-from-mozilla-qr-code-simple.svg @@ -1,4 +0,0 @@ - -- -\ No newline at end of file +- diff --git a/browser/components/preferences/moreFromMozilla.js b/browser/components/preferences/moreFromMozilla.js index bf97580d..31017a6f 100644 --- a/browser/components/preferences/moreFromMozilla.js diff --git a/helpers/DATA/firefox/process-json-files.py b/helpers/DATA/firefox/process-json-files.py index aa7e832..992cb45 100644 --- a/helpers/DATA/firefox/process-json-files.py +++ b/helpers/DATA/firefox/process-json-files.py @@ -1,6 +1,9 @@ #! /usr/bin/python3 - -# Copyright (C) 2020, 2021 grizzlyuser +# Copyright (C) 2024 Luis Guzmán +# Copyright (C) 2020, 2021, 2022, 2023, 2024 grizzlyuser +# Based on: https://gitlab.trisquel.org/trisquel/wrapage-helpers/-/blob/81881d89b2bf7d502dd14fcccdb471fec6f6b206/helpers/DATA/firefox/reprocess-search-config.py +# Below is the notice from the original author: +# # Copyright (C) 2020, 2021 Ruben Rodriguez # # This program is free software; you can redistribute it and/or modify @@ -23,6 +26,7 @@ import time import copy import argparse import pathlib +import logging from collections import namedtuple from jsonschema import validate @@ -41,12 +45,42 @@ parser.add_argument( type=int, default=2, help='indent for pretty printing of output files') +parser.add_argument( + '-l', + '--loglevel', + choices=logging._nameToLevel.keys(), + default=logging.INFO, + help='logging level') arguments = parser.parse_args() +logging.basicConfig(level=arguments.loglevel) +logger = logging.getLogger(str(pathlib.Path(__file__).name)) + File = namedtuple('File', ['path', 'content']) -class RemoteSettings: +class JsonProcessor: + @classmethod + def process(cls): + parsed_jsons = [] + for json_path in cls.JSON_PATHS: + logger.info('Reading input: ' + str(json_path) + '...') + with json_path.open(encoding='utf-8') as file: + parsed_jsons.append(File(json_path, json.load(file))) + + parsed_schema = None + if hasattr(cls, "SCHEMA_PATH"): + logger.info('Reading schema: ' + str(json_path) + '...') + with cls.SCHEMA_PATH.open() as file: + parsed_schema = json.load(file) + + processed = cls.process_parsed(parsed_jsons, parsed_schema) + with processed.path.open('w') as file: + json.dump(processed.content, file, indent=arguments.indent) + logger.info('Wrote: ' + str(processed.path)) + + +class RemoteSettings(JsonProcessor): DUMPS_PATH_RELATIVE = 'services/settings/dumps' DUMPS_PATH_ABSOLUTE = arguments.MAIN_PATH / DUMPS_PATH_RELATIVE @@ -75,11 +109,12 @@ class RemoteSettings: @classmethod def now(cls): - return int(round(time.time() / 10 ** 6)) + return int(round(time.time() * 1000)) @classmethod def process_raw(cls, unwrapped_jsons, parsed_schema): timestamps, result = [], [] + for collection in unwrapped_jsons: should_modify_collection = cls.should_modify_collection(collection) for record in collection.content: @@ -110,13 +145,23 @@ class RemoteSettings: return File(cls.OUTPUT_PATH, result) @classmethod - def process(cls, parsed_jsons, parsed_schema): + def process_parsed(cls, parsed_jsons, parsed_schema): return cls.wrap( cls.process_raw( cls.unwrap(parsed_jsons), parsed_schema)) +class EmptyRemoteSettings(RemoteSettings): + @classmethod + def should_drop_record(cls, search_engine): + return True + + @classmethod + def process_record(cls, record): + return record + + class Changes(RemoteSettings): JSON_PATHS = tuple(RemoteSettings.DUMPS_PATH_ABSOLUTE.glob('*/*.json')) OUTPUT_PATH = RemoteSettings.DUMPS_PATH_ABSOLUTE / 'monitor/changes' @@ -132,7 +177,7 @@ class Changes(RemoteSettings): changes = [] for collection in unwrapped_jsons: - if collection.path not in (RemoteSettings.DUMPS_PATH_ABSOLUTE / 'main/example.json', RemoteSettings.DUMPS_PATH_ABSOLUTE / 'main/search-config-v2.json'): + if collection.path != RemoteSettings.DUMPS_PATH_ABSOLUTE / 'main/example.json': latest_change = {} latest_change[cls._LAST_MODIFIED_KEY_NAME] = cls.get_collection_timestamp( collection) @@ -145,53 +190,108 @@ class Changes(RemoteSettings): return File(cls.OUTPUT_PATH, changes) -class SearchConfig(RemoteSettings): +class SearchConfigV2(RemoteSettings): JSON_PATHS = ( RemoteSettings.DUMPS_PATH_ABSOLUTE / - 'main/search-config.json', + 'main/search-config-v2.json', ) SCHEMA_PATH = arguments.MAIN_PATH / \ - 'toolkit/components/search/schema/search-config-schema.json' + 'toolkit/components/search/schema/search-config-v2-schema.json' OUTPUT_PATH = JSON_PATHS[0] - _DUCKDUCKGO_SEARCH_ENGINE_ID = 'ddg@search.mozilla.org' + _DUCKDUCKGO_SEARCH_ENGINE_IDENTIFIER = 'ddg' @classmethod - def should_drop_record(cls, search_engine): - return search_engine['webExtension']['id'] not in ( - cls._DUCKDUCKGO_SEARCH_ENGINE_ID, 'wikipedia@search.mozilla.org', - 'trisquel@search.mozilla.org', 'trisquel-packages@@search.mozilla.org', - 'qwant@search.mozilla.org', 'ecosia@search.mozilla.org') + def should_drop_record(cls, record): + if record['recordType'] != 'engine': + return False + + identifier = record['identifier'] + excluded_identifiers = ['ecosia', 'qwant', 'trisquel', 'trisquel-packages'] + + return ( + identifier != cls._DUCKDUCKGO_SEARCH_ENGINE_IDENTIFIER and + not (identifier.startswith('wikipedia') or identifier in excluded_identifiers) + ) @classmethod - def process_record(cls, search_engine): - [search_engine.pop(key, None) - for key in ['extraParams', 'telemetryId']] + def process_record(cls, record): + if record['recordType'] == 'defaultEngines': + return cls.process_default_engines(record) + elif record['recordType'] == 'engine': + return cls.process_engine(record) + elif record['recordType'] == 'engineOrders': + return cls.process_engine_orders(record) + else: + return record - general_specifier = {} - for specifier in search_engine['appliesTo'].copy(): - if 'application' in specifier: - if 'distributions' in specifier['application']: - search_engine['appliesTo'].remove(specifier) - continue - specifier['application'].pop('extraParams', None) + @classmethod + def process_default_engines(cls, default_engines): + default_engines['globalDefault'] = cls._DUCKDUCKGO_SEARCH_ENGINE_IDENTIFIER + default_engines['specificDefaults'] = [] + return default_engines - if 'included' in specifier and 'everywhere' in specifier[ - 'included'] and specifier['included']['everywhere']: - if search_engine['webExtension']['id'] == cls._DUCKDUCKGO_SEARCH_ENGINE_ID: - specifier['default'] = 'yes' - general_specifier = specifier + @classmethod + def process_engine(cls, engine): + engine['base'].pop('partnerCode', None) + engine['base']['urls']['search'].pop('params', None) - if not general_specifier: - general_specifier = {'included': {'everywhere': True}} - search_engine['appliesTo'].insert(0, general_specifier) - if search_engine['webExtension']['id'] == cls._DUCKDUCKGO_SEARCH_ENGINE_ID: - general_specifier['default'] = 'yes' + if engine['identifier'] == cls._DUCKDUCKGO_SEARCH_ENGINE_IDENTIFIER: + engine['base']['name'] += ' HTML' + engine['base']['urls']['search']['base'] = 'https://html.duckduckgo.com/html' - return search_engine + allRegions_prefixes = ['ecosia', 'qwant', 'trisquel'] + + if any(engine['identifier'].startswith(prefix) for prefix in allRegions_prefixes) or \ + engine['identifier'] == cls._DUCKDUCKGO_SEARCH_ENGINE_IDENTIFIER: + engine['variants'] = [{'environment': {'allRegionsAndLocales': True}}] + + return engine + + @classmethod + def process_engine_orders(cls, engine_orders): + engine_orders['orders'] = [] + return engine_orders + +class SearchConfigOverridesV2(EmptyRemoteSettings): + JSON_PATHS = ( + RemoteSettings.DUMPS_PATH_ABSOLUTE / + 'main/search-config-overrides-v2.json', + ) + SCHEMA_PATH = arguments.MAIN_PATH / \ + 'toolkit/components/search/schema/search-config-overrides-v2-schema.json' + OUTPUT_PATH = JSON_PATHS[0] -class TippyTopSites: +class SearchDefaultOverrideAllowlist(EmptyRemoteSettings): + JSON_PATHS = ( + RemoteSettings.DUMPS_PATH_ABSOLUTE / + 'main/search-default-override-allowlist.json', + ) + SCHEMA_PATH = arguments.MAIN_PATH / \ + 'toolkit/components/search/schema/search-default-override-allowlist-schema.json' + OUTPUT_PATH = JSON_PATHS[0] + + +class SearchTelemetryV2(EmptyRemoteSettings): + JSON_PATHS = ( + RemoteSettings.DUMPS_PATH_ABSOLUTE / + 'main/search-telemetry-v2.json', + ) + SCHEMA_PATH = arguments.MAIN_PATH / \ + 'browser/components/search/schema/search-telemetry-v2-schema.json' + OUTPUT_PATH = JSON_PATHS[0] + + +class UrlClassifierSkipUrls(EmptyRemoteSettings): + JSON_PATHS = ( + RemoteSettings.DUMPS_PATH_ABSOLUTE / + 'main/url-classifier-skip-urls.json', + ) + OUTPUT_PATH = JSON_PATHS[0] + + +class TippyTopSites(JsonProcessor): JSON_PATHS = ( arguments.MAIN_PATH / 'browser/components/newtab/data/content/tippytop/top_sites.json', @@ -199,7 +299,7 @@ class TippyTopSites: 'tippytop/top_sites.json') @classmethod - def process(cls, parsed_jsons, parsed_schema): + def process_parsed(cls, parsed_jsons, parsed_schema): tippy_top_sites_main = parsed_jsons[0] tippy_top_sites_branding = parsed_jsons[1] result = tippy_top_sites_branding.content + \ @@ -234,19 +334,15 @@ class TopSites(RemoteSettings): # To reflect the latest timestamps, Changes class should always come after # all other RemoteSettings subclasses -processors = (SearchConfig, Changes) +processors = ( + SearchConfigV2, + SearchConfigOverridesV2, + SearchDefaultOverrideAllowlist, + SearchTelemetryV2, + UrlClassifierSkipUrls, + TopSites, + Changes, + TippyTopSites) for processor in processors: - parsed_jsons = [] - for json_path in processor.JSON_PATHS: - with json_path.open(encoding='utf-8') as file: - parsed_jsons.append(File(json_path, json.load(file))) - - parsed_schema = None - if hasattr(processor, "SCHEMA_PATH"): - with processor.SCHEMA_PATH.open() as file: - parsed_schema = json.load(file) - - processed = processor.process(parsed_jsons, parsed_schema) - with processed.path.open('w') as file: - json.dump(processed.content, file, indent=arguments.indent) + processor.process() diff --git a/helpers/DATA/firefox/search-custom/services/settings/dumps/main/top-sites.json b/helpers/DATA/firefox/search-custom/services/settings/dumps/main/top-sites.json new file mode 100644 index 0000000..3f8d0ff --- /dev/null +++ b/helpers/DATA/firefox/search-custom/services/settings/dumps/main/top-sites.json @@ -0,0 +1,61 @@ +{ + "data": [ + { + "url": "https://trisquel.info/", + "order": 0, + "title": "Trisquel", + "id": "ec7f4843-6be5-5e86-870a-1c8383500a4b", + "last_modified": 1715345084783 + }, + { + "url": "https://packages.trisquel.org/", + "order": 1, + "title": "Trisquel Packages", + "id": "27a9b035-0b8b-4472-97cb-b1866aba0740", + "last_modified": 1715345084786 + }, + { + "url": "https://www.gnu.org/", + "order": 2, + "title": "GNU", + "id": "1baee931-751c-5993-b6fe-d86fbf78f9b0", + "last_modified": 1715345084789 + }, + { + "url": "https://www.fsf.org/", + "order": 3, + "title": "FSF", + "id": "fcc60dd8-4d97-5aca-8e5d-784652c75818", + "last_modified": 1715345084792 + }, + { + "url": "https://directory.fsf.org/", + "order": 4, + "title": "FSF Directory", + "id": "abe5bfb2-9487-5697-9f27-e0b782dfe006", + "last_modified": 1715345084796 + }, + { + "url": "https://libreplanet.org/", + "order": 5, + "title": "LibrePlanet", + "id": "e3d2cf88-a4dc-5d2e-9f9a-f3ea241d17d8", + "last_modified": 1715345084800 + }, + { + "url": "https://www.wikipedia.org/", + "order": 6, + "title": "Wikipedia", + "id": "02c295f5-54a8-5d29-8d1f-b619216b20c0", + "last_modified": 1715345084803 + }, + { + "url": "https://h-node.org/", + "order": 7, + "title": "h-node", + "id": "c426481f-8c3f-53b8-b23a-431a91a1c7b4", + "last_modified": 1715345084807 + } + ], + "timestamp": 1715345084810 +} diff --git a/helpers/DATA/firefox/search-custom/tippytop/top_sites.json b/helpers/DATA/firefox/search-custom/tippytop/top_sites.json new file mode 100644 index 0000000..68433f9 --- /dev/null +++ b/helpers/DATA/firefox/search-custom/tippytop/top_sites.json @@ -0,0 +1,52 @@ +[ + { + "domains": ["duckduckgo.com"], + "image_url": "images/duckduckgo-com@2x.svg", + "favicon_url": "favicons/duckduckgo-com.ico" + }, + { + "domains": ["trisquel.info"], + "image_url": "images/trisquel.png", + "favicon_url": "favicons/trisquel.ico" + }, + { + "domains": ["packages.trisquel.org"], + "image_url": "images/trisquel-packages.png", + "favicon_url": "favicons/trisquel-packages.ico" + }, + { + "domains": ["gnu.org"], + "image_url": "images/gnu.png", + "favicon_url": "favicons/gnu.ico" + }, + { + "domains": ["fsf.org"], + "image_url": "images/fsf.png", + "favicon_url": "favicons/fsf.ico" + }, + { + "domains": ["directory.fsf.org"], + "image_url": "images/directory.png", + "favicon_url": "favicons/fsf.ico" + }, + { + "domains": ["libreplanet.org"], + "image_url": "images/libreplanet.png", + "favicon_url": "favicons/libreplanet.ico" + }, + { + "domains": ["fsfe.org"], + "image_url": "images/fsfe.png", + "favicon_url": "favicons/fsfe.ico" + }, + { + "domains": ["wikipedia.org"], + "image_url": "images/wikipedia.png", + "favicon_url": "favicons/wikipedia.ico" + }, + { + "domains": ["h-node.org"], + "image_url": "images/hnode.png", + "favicon_url": "favicons/hnode.ico" + } +] diff --git a/helpers/DATA/firefox/searchplugins/trisquel-packages-v2.json b/helpers/DATA/firefox/searchplugins/trisquel-packages-v2.json new file mode 100644 index 0000000..bdfbe63 --- /dev/null +++ b/helpers/DATA/firefox/searchplugins/trisquel-packages-v2.json @@ -0,0 +1,30 @@ + { + "base": { + "aliases": [ + "packages", + "p" + ], + "classification": "unknown", + "name": "Trisquel Packages", + "urls": { + "search": { + "base": "https://packages.trisquel.org/search", + "params": [], + "searchTermParamName": "keywords" + } + } + }, + "id": "b5fd21a8-e369-477f-a3f2-b47a370f9030", + "identifier": "trisquel-packages", + "last_modified": 1678, + "recordType": "engine", + "schema": "defaultEngines", + "variants": [ + { + "environment": { + "allRegionsAndLocales": true + }, + "optional": false + } + ] + }, diff --git a/helpers/DATA/firefox/searchplugins/trisquel-packages.json b/helpers/DATA/firefox/searchplugins/trisquel-packages.json deleted file mode 100644 index c52066d..0000000 --- a/helpers/DATA/firefox/searchplugins/trisquel-packages.json +++ /dev/null @@ -1,15 +0,0 @@ - { - "schema": 1674147734592, - "appliesTo": [ - { - "included": { - "everywhere": true - } - } - ], - "webExtension": { - "id": "trisquel-packages@search.mozilla.org" - }, - "id": "b5fd21a8-e369-477f-a3f2-b47a370f9030", - "last_modified": 1678 - }, diff --git a/helpers/DATA/firefox/searchplugins/trisquel-v2.json b/helpers/DATA/firefox/searchplugins/trisquel-v2.json new file mode 100644 index 0000000..dffbbd5 --- /dev/null +++ b/helpers/DATA/firefox/searchplugins/trisquel-v2.json @@ -0,0 +1,30 @@ + { + "base": { + "aliases": [ + "trisquel", + "t" + ], + "classification": "unknown", + "name": "Trisquel", + "urls": { + "search": { + "base": "https://trisquel.info/search/node", + "params": [], + "searchTermParamName": "q" + } + } + }, + "id": "b99ed276-9557-4492-8bbb-d59826381893", + "identifier": "trisquel", + "last_modified": 1678, + "recordType": "engine", + "schema": "defaultEngines", + "variants": [ + { + "environment": { + "allRegionsAndLocales": true + }, + "optional": false + } + ] + }, diff --git a/helpers/DATA/firefox/searchplugins/trisquel.json b/helpers/DATA/firefox/searchplugins/trisquel.json deleted file mode 100644 index 5f093ba..0000000 --- a/helpers/DATA/firefox/searchplugins/trisquel.json +++ /dev/null @@ -1,15 +0,0 @@ - { - "schema": 1674147734535, - "appliesTo": [ - { - "included": { - "everywhere": true - } - } - ], - "webExtension": { - "id": "trisquel@search.mozilla.org" - }, - "id": "b99ed276-9557-4492-8bbb-d59826381893", - "last_modified": 1678 - }, diff --git a/helpers/DATA/firefox/settings.js b/helpers/DATA/firefox/settings.js index e621609..4514a4d 100644 --- a/helpers/DATA/firefox/settings.js +++ b/helpers/DATA/firefox/settings.js @@ -294,3 +294,10 @@ defaultPref("browser.search.serpEventTelemetry.enabled",false); // Disable Privacy-Preserving Attribution submition pref("dom.private-attribution.submission.enabled", false); + +// Disable Machine Learning +defaultPref("browser.ml.enabled", false); +defaultPref("browser.ml.chat.enabled", false); +// Hide from UI +defaultPref("browser.ml.chat.hideFromLabs", true); +defaultPref("browser.ml.chat.hideLabsShortcuts", true); diff --git a/helpers/make-firefox b/helpers/make-firefox index ea67ce1..3038683 100644 --- a/helpers/make-firefox +++ b/helpers/make-firefox @@ -19,12 +19,18 @@ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # -VERSION=112 +VERSION=115 EXTERNAL='deb-src http://ppa.launchpadcontent.net/mozillateam/ppa/ubuntu $UPSTREAM main' REPOKEY=9BDB3D89CE49EC21 . ./config +# SHA256 HASHES UPDATES +GLEAN_CONF_RS_INITIAL=$(sha256sum third_party/rust/glean/src/configuration.rs|awk '{print$1}') +# GNUZILLA ADDON REPLACEMENT +OLD_WEB_DEV_URL="https://addons.mozilla.org/firefox/collections/mozilla/webdeveloper/" +WEB_DEV_URL="https://gnuzilla.gnu.org/mozzarella/category.php?id=web-development" + rm debian/control # Disable remote settings antifeature. @@ -34,6 +40,7 @@ sed '/async download.*/areturn;' -i services/settings/RemoteSettingsClient.sys.m # Disable activity-stream antifeatures. # These are not condensed into a single sed script to make it fail on individual commands that didn't change the source ActivityStream=browser/components/newtab/lib/ActivityStream.sys.mjs +BAP_FirefoxJs=browser/app/profile/firefox.js sed '/^const DEFAULT_SITES/,/^])\;/c const DEFAULT_SITES = new Map\([[""]]\);' -i browser/components/newtab/lib/DefaultSites.sys.mjs sed '/"showSponsored"/,/value/s/value: true/value: false/' -i $ActivityStream sed '/"telemetry"/,/value/s/value: true/value: false/' -i $ActivityStream @@ -44,33 +51,33 @@ sed '/stories_endpoint/s/getpocket.cdn.mozilla.net/127.0.0.1/' -i $ActivityStrea sed '/stories_referrer/s/http.*/",/' -i $ActivityStream sed '/topics_endpoint/s/getpocket.cdn.mozilla.net/127.0.0.1/' -i $ActivityStream sed 's/preffedRegions.includes.geo. .. ..locales .. locales.includes.locale./false/' -i $ActivityStream -sed 's/Ubuntu, //' -i browser/components/newtab/css/activity-stream*.css -echo "#header-asrouter-container{display: none!important;}" >> browser/components/newtab/css/activity-stream-linux.css +#sed 's/Ubuntu, //' -i browser/components/newtab/css/activity-stream*.css +#echo "#header-asrouter-container{display: none!important;}" >> browser/components/newtab/css/activity-stream-linux.css #Disable «Sponsored tiles on the New Tab page» - firefox 92+94 sed '/"showSponsoredTopSites"/,/value/s/value: true/value: false/' -i $ActivityStream -sed -i '/activity-stream.showSponsored/s|true|false|g' browser/app/profile/firefox.js +sed -i '/activity-stream.showSponsored/s|true|false|g' $BAP_FirefoxJs #Disable «Mozilla VPN» - firefox 94 -sed '/"browser.privatebrowsing.vpnpromourl"/s/https.*"/"/' -i browser/app/profile/firefox.js +sed '/"browser.privatebrowsing.vpnpromourl"/s/https.*"/"/' -i $BAP_FirefoxJs grep -rl browser.vpn_promo.enabled | xargs -r sed -i '/browser.vpn_promo.enabled/s|true|false|' sed '/network.connectivity-service.IPv/s/http.*success.txt?ipv[46]//' -i modules/libpref/init/all.js sed 's/accounts-static.cdn.mozilla.net.*sync.services.mozilla.com//' -i modules/libpref/init/all.js # Disable 106 firefox-view and other firefox-branded popups -sed -i '/browser.urlbar.quicksuggest.shouldShowOnboardingDialog/s|true|false|' browser/app/profile/firefox.js -sed -i '/services.sync.prefs.sync.browser.firefox-view.feature-tour/s|true|false|' browser/app/profile/firefox.js +sed -i '/browser.urlbar.quicksuggest.shouldShowOnboardingDialog/s|true|false|' $BAP_FirefoxJs +sed -i '/services.sync.prefs.sync.browser.firefox-view.feature-tour/s|true|false|' $BAP_FirefoxJs ##disable firefox-view ##sed -i '/"browser.tabs.firefox-view"/s|true|false|' browser/app/profile/firefox.js #deprecated -v127 ##disable ui tour -sed -i '/browser.uitour.enabled/s|true|false|' browser/app/profile/firefox.js +sed -i '/browser.uitour.enabled/s|true|false|' $BAP_FirefoxJs ##disable colorways closet -sed -i '/browser.theme.colorway-closet/s|true|false|' browser/app/profile/firefox.js +sed -i '/browser.theme.colorway-closet/s|true|false|' $BAP_FirefoxJs ##disable newtab intro - check adjustment for versions greater than 106 #grep -rl browser.newtabpage.introShown |xargs -r sed -i '/browser.newtabpage.introShown/s|true|false|' ##Remove mailto handlers. 110 sed -i '/kHandlerList = {/,/^ };/{/^ /d}' uriloader/exthandler/HandlerList.sys.mjs # keep contectRelevancy disabled (first appearence is false thus using /bin/sed) -/bin/sed -i '/"toolkit.contentRelevancy.ingestEnabled"/s|,.*)|, false)|' browser/app/profile/firefox.js +/bin/sed -i '/"toolkit.contentRelevancy.ingestEnabled"/s|,.*)|, false)|' $BAP_FirefoxJs # Replace ubufox recommendation sed 's/xul-ext-ubufox/xul-ext-youtube-html5-video-player/' -i debian/control.in @@ -106,19 +113,27 @@ grep -rl toolkit.telemetry.bhrPing.enabled | xargs -r sed -i '/toolkit.telemetr grep -rl security.certerrors.recordEventTelemetry | xargs -r sed -i '/security.certerrors.recordEventTelemetry/s|true|false|' grep -rl services.sync.telemetry.maxPayloadCount modules/ | xargs -r sed -i '/services.sync.telemetry.maxPayloadCount/s|500|-1|' grep -rl services.sync.telemetry.submissionInterval modules/ | xargs -r sed -i '/services.sync.telemetry.submissionInterval/s|43200|-1|' -echo 'pref("dom.security.unexpected_system_load_telemetry_enabled", false);' | tee -a browser/app/profile/firefox.js -echo 'pref("toolkit.telemetry.hybridContent.enabled", false);' | tee -a browser/app/profile/firefox.js +echo 'pref("dom.security.unexpected_system_load_telemetry_enabled", false);' | tee -a $BAP_FirefoxJs +echo 'pref("toolkit.telemetry.hybridContent.enabled", false);' | tee -a $BAP_FirefoxJs # GPC opt-out entry added on 120 (not enabled yet). -echo '//pref("privacy.globalprivacycontrol.enabled", true);' | tee -a browser/app/profile/firefox.js +echo '//pref("privacy.globalprivacycontrol.enabled", true);' | tee -a $BAP_FirefoxJs +# Disable translataion popup +grep -rl browser.translations.automaticallyPopup modules/ | xargs -r sed -i '/browser.translations.automaticallyPopup/s|true|false|' +# Disable Firefox Relay +sed -i '/signon.firefoxRelay.feature/c pref("signon.firefoxRelay.feature", "disabled");' $BAP_FirefoxJs # Update third_party/rust/glean/src/configuration.rs sha256sum at third_party/rust/glean/.cargo-checksum.json -sed_csum 27075b12236021c54d0c99427bcbd417933ca02545275604d3c13f32ca25af13 \ - f354c756cb723a386263a3ad4669a1d5cc743379c7c620b14f894f505cf83500 +GLEAN_CONF_RS_MODIFIED=$(sha256sum third_party/rust/glean/src/configuration.rs|awk '{print$1}') +sed_csum $GLEAN_CONF_RS_INITIAL \ + $GLEAN_CONF_RS_MODIFIED # Remove Google API key and calls sed '/Google API/,/google-api-keyfile/ d' debian/config/mozconfig.in -i sed '/"geo.provider.network.url"/s|https.*"|"|' -i modules/libpref/init/all.js +# Disable save password in browser suggestion. +#grep -lr '^pref("signon.rememberSignons"'| xargs sed -i "/^pref(\"signon.rememberSignons\"/s|true|false|" modules/libpref/init/all.js + # Org branding sed 's/com.ubuntu/org.trisquel/' -i debian/config/mozconfig.in @@ -151,123 +166,7 @@ sed "s/iceweasel,/iceweasel, firefox,/" -i debian/control.in sed -i /ubuntu-bookmarks/d debian/patches/series rm debian/patches/ubuntu-bookmarks* -# Custom newtab images -sed '/^]$/d' -i browser/components/newtab/data/content/tippytop/top_sites.json -sed 's/}$/},/' -i browser/components/newtab/data/content/tippytop/top_sites.json - -cat << EOF >> browser/components/newtab/data/content/tippytop/top_sites.json - { - "domains": ["trisquel.info"], - "image_url": "images/trisquel.png", - "favicon_url": "favicons/trisquel.ico" - }, - { - "domains": ["packages.trisquel.org"], - "image_url": "images/trisquel-packages.png", - "favicon_url": "favicons/trisquel-packages.ico" - }, - { - "domains": ["gnu.org"], - "image_url": "images/gnu.png", - "favicon_url": "favicons/gnu.ico" - }, - { - "domains": ["fsf.org"], - "image_url": "images/fsf.png", - "favicon_url": "favicons/fsf.ico" - }, - { - "domains": ["directory.fsf.org"], - "image_url": "images/directory.png", - "favicon_url": "favicons/fsf.ico" - }, - { - "domains": ["libreplanet.org"], - "image_url": "images/libreplanet.png", - "favicon_url": "favicons/libreplanet.ico" - }, - { - "domains": ["fsfe.org"], - "image_url": "images/fsfe.png", - "favicon_url": "favicons/fsfe.ico" - }, - { - "domains": ["wikipedia.org"], - "image_url": "images/wikipedia.png", - "favicon_url": "favicons/wikipedia.ico" - }, - { - "domains": ["h-node.org"], - "image_url": "images/hnode.png", - "favicon_url": "favicons/hnode.ico" - } -] -EOF - -#uuidgen --sha1 --namespace @dns --name "trisquel.info" -cat << TOP_JSON > services/settings/dumps/main/top-sites.json -{ - "data": [ - { - "url": "https://trisquel.info/", - "order": 0, - "title": "Trisquel", - "id": "ec7f4843-6be5-5e86-870a-1c8383500a4b", - "last_modified": $(date +%s%N | cut -b1-13) - }, - { - "url": "https://packages.trisquel.org/", - "order": 1, - "title": "Trisquel Packages", - "id": "27a9b035-0b8b-4472-97cb-b1866aba0740", - "last_modified": $(date +%s%N | cut -b1-13) - }, - { - "url": "https://www.gnu.org/", - "order": 2, - "title": "GNU", - "id": "1baee931-751c-5993-b6fe-d86fbf78f9b0", - "last_modified": $(date +%s%N | cut -b1-13) - }, - { - "url": "https://www.fsf.org/", - "order": 3, - "title": "FSF", - "id": "fcc60dd8-4d97-5aca-8e5d-784652c75818", - "last_modified": $(date +%s%N | cut -b1-13) - }, - { - "url": "https://directory.fsf.org/", - "order": 4, - "title": "FSF Directory", - "id": "abe5bfb2-9487-5697-9f27-e0b782dfe006", - "last_modified": $(date +%s%N | cut -b1-13) - }, - { - "url": "https://libreplanet.org/", - "order": 5, - "title": "LibrePlanet", - "id": "e3d2cf88-a4dc-5d2e-9f9a-f3ea241d17d8", - "last_modified": $(date +%s%N | cut -b1-13) - }, - { - "url": "https://www.wikipedia.org/", - "order": 6, - "title": "Wikipedia", - "id": "02c295f5-54a8-5d29-8d1f-b619216b20c0", - "last_modified": $(date +%s%N | cut -b1-13) - }, - { - "url": "https://h-node.org/", - "order": 7, - "title": "h-node", - "id": "c426481f-8c3f-53b8-b23a-431a91a1c7b4", - "last_modified": $(date +%s%N | cut -b1-13) - } - ], - "timestamp": $(date +%s%N | cut -b1-13) -} -TOP_JSON +# Custom newtab images at DATA/firefox/search-custom/ cp $DATA/newtab/*.ico browser/components/newtab/data/content/tippytop/favicons/ cp $DATA/newtab/*.png browser/components/newtab/data/content/tippytop/images/ @@ -277,20 +176,17 @@ cp browser/components/search/extensions/ddg browser/components/search/extensions sed 's|/duckduckgo.com/|/html.duckduckgo.com/html/|' -i browser/components/search/extensions/ddg-html/manifest.json sed 's|DuckDuckGo|DuckDuckGo (HTML)|' -i browser/components/search/extensions/ddg-html/manifest.json sed 's|ddg@|ddg-html@|' -i browser/components/search/extensions/ddg-html/manifest.json -patch_p1 $DATA/rollback_ddg_firefox_partnership_codes.patch # disable ads, disable redirect #sed '/search/s|q=|k1=-1\&kd=-1\&ko=1\&q=|' -i browser/components/search/extensions/ddg/manifest.json #Trisquel custom search engines cp -a $DATA/searchplugins/* browser/components/search/extensions/ -/bin/sed "/\"data\": \[/ r $DATA/searchplugins/trisquel.json" -i ./services/settings/dumps/main/search-config.json -/bin/sed "/\"data\": \[/ r $DATA/searchplugins/trisquel-packages.json" -i ./services/settings/dumps/main/search-config.json +/bin/sed "/\"data\": \[/ r $DATA/searchplugins/trisquel-v2.json" -i ./services/settings/dumps/main/search-config-v2.json +/bin/sed "/\"data\": \[/ r $DATA/searchplugins/trisquel-packages-v2.json" -i ./services/settings/dumps/main/search-config-v2.json echo "Customizing search engines..." # Reprocess search preconfiguration dump -python3 $DATA/process-json-files.py . browser/components/extensions/schemas/ -# Disable new search config 'til new one gets figured out (ref: https://hg.mozilla.org/mozilla-central/rev/bad743156b30) -patch_Rp1 $DATA/firefox_permanently_enable_new_search_engine_config.patch +python3 $DATA/process-json-files.py . $DATA/search-custom/ cat << EOF > debian/distribution.ini [Global] @@ -318,6 +214,13 @@ cp -a $DATA/branding/* browser/branding/unofficial cp -a $DATA/branding/* browser/branding/nightly cp -a $DATA/branding/* browser/branding/aurora +# Replace/remove brand name on used view(s) to avoid branding issues. +for i in $(find . -name brandings.ftl) +do + /bin/sed -i '/firefoxview-brand-name/s|Firefox View|Abrowser View|' $i + sed -i 's|= Firefox |= |' $i +done + sed '/about-wordmark.svg/d' -i browser/base/content/aboutDialog.css echo '#warningDesc, #communityExperimentalDesc, #communityDesc, #contributeDesc {display:none!important}' >> browser/base/content/aboutDialog.css # Disable preprocessor @@ -351,6 +254,7 @@ s|Sign in to Firefox|Sign in to Sync|; s|Search addons.mozilla.org|Search|g; s|firefox.settings.services.mozilla.com|127.0.0.1|g; s|this-firefox|this-abrowser|g; +s|firefox-help|abrowser-help|g; " echo "Running batch replace operation" @@ -468,6 +372,7 @@ find browser/branding/ -name PrivateBrowsing_150.png | xargs -n1 cp $DATA/debug_ # Replace addons placeholder for the gnuzilla mozzarella. find l10n/ -name aboutAddons.ftl | xargs -r sed -i '/.placeholder/s|addons.mozilla.org|gnuzilla.gnu.org|g' +sed -i "s|$OLD_WEB_DEV_URL|$WEB_DEV_URL|" devtools/client/menus.js #Fixes by patch on source, see DATA/firefox/patches for more info. for patch in $(ls -v ${DATA}/patch_changes/*.patch) @@ -488,7 +393,7 @@ do [ -d $HOMEDIR/.mozilla/firefox ] || continue echo Linking $HOMEDIR/.mozilla/firefox into $HOMEDIR/.mozilla/abrowser ln -s $HOMEDIR/.mozilla/firefox $HOMEDIR/.mozilla/abrowser -done +done fi exit 0 ' >> debian/abrowser.postinst.in