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