v88.0-1; switch to bionic as base to build on, xenial is EOS/EOL
This commit is contained in:
parent
062a454cf3
commit
9e90fb3a9b
|
@ -27,7 +27,7 @@ variables:
|
|||
- "LibreWolf-${pkgver}-${pkgrel}.${CARCH}.tar.bz2"
|
||||
|
||||
tarball_x86_64:
|
||||
image: ubuntu:16.04
|
||||
image: ubuntu:18.04
|
||||
tags: [x86_64b]
|
||||
<<: *carch_x86_64
|
||||
<<: *tarball_build_config
|
||||
|
@ -36,7 +36,7 @@ tarball_x86_64:
|
|||
- $X86_64
|
||||
|
||||
tarball_aarch64:
|
||||
image: arm64v8/ubuntu:16.04
|
||||
image: arm64v8/ubuntu:18.04
|
||||
tags: [aarch64b]
|
||||
<<: *carch_aarch64
|
||||
<<: *tarball_build_config
|
||||
|
|
10
CHANGELOG.md
10
CHANGELOG.md
|
@ -7,6 +7,16 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
|||
This project follows the official Firefox releases, but also uses
|
||||
[Arch Linux Package Versioning](https://wiki.archlinux.org/index.php/Arch_package_guidelines#Package_versioning) to mark individual releases in between versions.
|
||||
|
||||
## [88.0-1] - TBD
|
||||
|
||||
### Changed
|
||||
|
||||
- New upstream release 88.0-1
|
||||
- Several yet-to-be documented changes from previous updates that are not yet added to the changelog (tbd)
|
||||
- Switched to building on Ubuntu Bionic (18.04) from Xenial (16.04) as the latter is now EOL/EOS
|
||||
- Releases can from now on be found in the specific subprojects (debian, windows, flatpak, appimage, arch, macos) for consistency; this project will only hold the tarball used for the flatpak and appimage releases
|
||||
|
||||
|
||||
## [85.0.2-2] – 2021-02-15
|
||||
|
||||
### Changed
|
||||
|
|
|
@ -1,54 +0,0 @@
|
|||
Description: point clang to the toolchain provided by the gcc-mozilla package (version 7 required for C++ 17), and statically link against libstdc++
|
||||
Author: Olivier Tilloy <olivier.tilloy@canonical.com>
|
||||
Bug-Ubuntu: https://launchpad.net/bugs/1856861
|
||||
|
||||
--- a/build/moz.configure/toolchain.configure
|
||||
+++ b/build/moz.configure/toolchain.configure
|
||||
@@ -1252,6 +1252,7 @@ try_compile(includes=['cstddef'],
|
||||
"#endif",
|
||||
]
|
||||
),
|
||||
+ flags=["--gcc-toolchain=/usr/lib/gcc-mozilla"],
|
||||
check_msg="for new enough STL headers from libstdc++",
|
||||
when=needs_libstdcxx_newness_check,
|
||||
onerror=die_on_old_libstdcxx,
|
||||
@@ -1433,6 +1434,10 @@ set_config('_DEPEND_CFLAGS', depend_cfla
|
||||
set_config("_HOST_DEPEND_CFLAGS", depend_cflags(host_c_compiler))
|
||||
|
||||
|
||||
+add_old_configure_assignment("CFLAGS", ["--gcc-toolchain=/usr/lib/gcc-mozilla"])
|
||||
+add_old_configure_assignment("CXXFLAGS", ["--gcc-toolchain=/usr/lib/gcc-mozilla"])
|
||||
+
|
||||
+
|
||||
@depends(c_compiler)
|
||||
def preprocess_option(compiler):
|
||||
# The uses of PREPROCESS_OPTION depend on the spacing for -o/-Fi.
|
||||
@@ -2137,6 +2142,7 @@ def linker_ldflags(linker, macos_sdk, ho
|
||||
if host.cpu == "arm":
|
||||
flags.append("-Wl,--no-keep-memory")
|
||||
|
||||
+ flags.append("-static-libstdc++")
|
||||
if sysroot_path and multiarch_dir:
|
||||
# Non-Debian-patched binutils linkers (both BFD and gold) don't lookup
|
||||
# in multi-arch directories.
|
||||
--- a/servo/components/style/build_gecko.rs
|
||||
+++ b/servo/components/style/build_gecko.rs
|
||||
@@ -149,6 +149,8 @@ impl BuilderExt for Builder {
|
||||
builder = builder.with_rustfmt(path);
|
||||
}
|
||||
|
||||
+ builder = builder.clang_arg("--gcc-toolchain=/usr/lib/gcc-mozilla");
|
||||
+
|
||||
for dir in SEARCH_PATHS.iter() {
|
||||
builder = builder.clang_arg("-I").clang_arg(dir.to_str().unwrap());
|
||||
}
|
||||
--- a/layout/style/test/moz.build
|
||||
+++ b/layout/style/test/moz.build
|
||||
@@ -18,6 +18,7 @@ DIRS += ['gtest']
|
||||
"host_ListCSSProperties",
|
||||
]
|
||||
)
|
||||
+HOST_CXXFLAGS += ["--gcc-toolchain=/usr/lib/gcc-mozilla"]
|
||||
|
||||
MOCHITEST_MANIFESTS += [
|
||||
"mochitest.ini",
|
|
@ -1,71 +0,0 @@
|
|||
# Revert 6700a8dfaeb1e303955acc05dabd245b9ae3c97e
|
||||
|
||||
Bug 1622963 - Require python 3.6 for the build system. r=firefox-build-system-reviewers,rstewart
|
||||
|
||||
Differential Revision: https://phabricator.services.mozilla.com/D77754
|
||||
|
||||
diff -r 81f3a9d8e5f4 build/moz.configure/init.configure
|
||||
--- a/build/moz.configure/init.configure Tue Nov 17 21:27:44 2020 +0000
|
||||
+++ b/build/moz.configure/init.configure Wed Nov 18 08:22:17 2020 +0100
|
||||
@@ -216,7 +216,7 @@
|
||||
# Python 3
|
||||
# ========
|
||||
|
||||
-option(env="PYTHON3", nargs=1, help="Python 3 interpreter (3.6 or later)")
|
||||
+option(env="PYTHON3", nargs=1, help="Python 3 interpreter (3.5 or later)")
|
||||
|
||||
option(
|
||||
env="VIRTUALENV_NAME",
|
||||
@@ -327,7 +327,7 @@
|
||||
)
|
||||
else:
|
||||
# Fall back to the search routine.
|
||||
- python, version = find_python3_executable(min_version="3.6.0")
|
||||
+ python, version = find_python3_executable(min_version="3.5.0")
|
||||
|
||||
# The API returns a bytes whereas everything in configure is unicode.
|
||||
if python:
|
||||
@@ -335,15 +335,15 @@
|
||||
|
||||
if not python:
|
||||
raise FatalCheckError(
|
||||
- "Python 3.6 or newer is required to build. "
|
||||
+ "Python 3.5 or newer is required to build. "
|
||||
"Ensure a `python3.x` executable is in your "
|
||||
"PATH or define PYTHON3 to point to a Python "
|
||||
- "3.6 executable."
|
||||
+ "3.5 executable."
|
||||
)
|
||||
|
||||
- if version < (3, 6, 0):
|
||||
+ if version < (3, 5, 0):
|
||||
raise FatalCheckError(
|
||||
- "Python 3.6 or newer is required to build; "
|
||||
+ "Python 3.5 or newer is required to build; "
|
||||
"%s is Python %d.%d" % (python, version[0], version[1])
|
||||
)
|
||||
|
||||
diff -r 81f3a9d8e5f4 python/mozbuild/mozbuild/pythonutil.py
|
||||
--- a/python/mozbuild/mozbuild/pythonutil.py Tue Nov 17 21:27:44 2020 +0000
|
||||
+++ b/python/mozbuild/mozbuild/pythonutil.py Wed Nov 18 08:22:17 2020 +0100
|
||||
@@ -44,7 +44,7 @@
|
||||
def _find_python_executable(major):
|
||||
if major not in (2, 3):
|
||||
raise ValueError("Expected a Python major version of 2 or 3")
|
||||
- min_versions = {2: "2.7.0", 3: "3.6.0"}
|
||||
+ min_versions = {2: "2.7.0", 3: "3.5.0"}
|
||||
|
||||
def ret(min_version=min_versions[major]):
|
||||
from mozfile import which
|
||||
diff -r 81f3a9d8e5f4 python/mozbuild/mozbuild/virtualenv.py
|
||||
--- a/python/mozbuild/mozbuild/virtualenv.py Tue Nov 17 21:27:44 2020 +0000
|
||||
+++ b/python/mozbuild/mozbuild/virtualenv.py Wed Nov 18 08:22:17 2020 +0100
|
||||
@@ -691,7 +691,7 @@
|
||||
major, minor, micro = sys.version_info[:3]
|
||||
minimum_python_versions = {
|
||||
2: LooseVersion("2.7.3"),
|
||||
- 3: LooseVersion("3.6.0"),
|
||||
+ 3: LooseVersion("3.5.0"),
|
||||
}
|
||||
our = LooseVersion("%d.%d.%d" % (major, minor, micro))
|
||||
|
|
@ -1,432 +0,0 @@
|
|||
Description: remove f-strings that require Python 3.6 (https://docs.python.org/3/whatsnew/3.6.html#whatsnew36-pep498)
|
||||
Author: Olivier Tilloy <olivier.tilloy@canonical.com>
|
||||
|
||||
--- a/third_party/python/glean_parser/glean_parser/lint.py
|
||||
+++ b/third_party/python/glean_parser/glean_parser/lint.py
|
||||
@@ -42,10 +42,10 @@ def _english_list(items: List[str]) -> s
|
||||
if len(items) == 0:
|
||||
return ""
|
||||
elif len(items) == 1:
|
||||
- return f"'{items[0]}'"
|
||||
+ return "'{}'".format(items[0])
|
||||
else:
|
||||
return "{}, or '{}'".format(
|
||||
- ", ".join([f"'{x}'" for x in items[:-1]]), items[-1]
|
||||
+ ", ".join(["'{}'".format(x) for x in items[:-1]]), items[-1]
|
||||
)
|
||||
|
||||
|
||||
@@ -88,10 +88,11 @@ def check_common_prefix(
|
||||
if i > 0:
|
||||
common_prefix = "_".join(first[:i])
|
||||
yield (
|
||||
- f"Within category '{category_name}', all metrics begin with "
|
||||
- f"prefix '{common_prefix}'."
|
||||
+ "Within category '{}', all metrics begin with "
|
||||
+ "prefix '{}'."
|
||||
"Remove the prefixes on the metric names and (possibly) "
|
||||
"rename the category."
|
||||
+ .format(category_name, common_prefix)
|
||||
)
|
||||
|
||||
|
||||
@@ -131,17 +132,19 @@ def check_unit_in_name(
|
||||
or unit_in_name == time_unit.name
|
||||
):
|
||||
yield (
|
||||
- f"Suffix '{unit_in_name}' is redundant with time_unit "
|
||||
- f"'{time_unit.name}'. Only include time_unit."
|
||||
+ "Suffix '{}' is redundant with time_unit "
|
||||
+ "'{}'. Only include time_unit."
|
||||
+ .format(unit_in_name, time_unit.name)
|
||||
)
|
||||
elif (
|
||||
unit_in_name in TIME_UNIT_ABBREV.keys()
|
||||
or unit_in_name in TIME_UNIT_ABBREV.values()
|
||||
):
|
||||
yield (
|
||||
- f"Suffix '{unit_in_name}' doesn't match time_unit "
|
||||
- f"'{time_unit.name}'. "
|
||||
+ "Suffix '{}' doesn't match time_unit "
|
||||
+ "'{}'. "
|
||||
"Confirm the unit is correct and only include time_unit."
|
||||
+ .format(unit_in_name, time_unit.name)
|
||||
)
|
||||
|
||||
elif memory_unit is not None:
|
||||
@@ -150,26 +153,29 @@ def check_unit_in_name(
|
||||
or unit_in_name == memory_unit.name
|
||||
):
|
||||
yield (
|
||||
- f"Suffix '{unit_in_name}' is redundant with memory_unit "
|
||||
- f"'{memory_unit.name}'. "
|
||||
+ "Suffix '{}' is redundant with memory_unit "
|
||||
+ "'{}'. "
|
||||
"Only include memory_unit."
|
||||
+ .format(unit_in_name, memory_unit.name)
|
||||
)
|
||||
elif (
|
||||
unit_in_name in MEMORY_UNIT_ABBREV.keys()
|
||||
or unit_in_name in MEMORY_UNIT_ABBREV.values()
|
||||
):
|
||||
yield (
|
||||
- f"Suffix '{unit_in_name}' doesn't match memory_unit "
|
||||
- f"{memory_unit.name}'. "
|
||||
+ "Suffix '{}' doesn't match memory_unit "
|
||||
+ "{}'. "
|
||||
"Confirm the unit is correct and only include memory_unit."
|
||||
+ .format(unit_in_name, memory_unit.name)
|
||||
)
|
||||
|
||||
elif unit is not None:
|
||||
if unit_in_name == unit:
|
||||
yield (
|
||||
- f"Suffix '{unit_in_name}' is redundant with unit param "
|
||||
- f"'{unit}'. "
|
||||
+ "Suffix '{}' is redundant with unit param "
|
||||
+ "'{}'. "
|
||||
"Only include unit."
|
||||
+ .format(unit_in_name, unit)
|
||||
)
|
||||
|
||||
|
||||
@@ -183,8 +189,9 @@ def check_category_generic(
|
||||
|
||||
if category_name in GENERIC_CATEGORIES:
|
||||
yield (
|
||||
- f"Category '{category_name}' is too generic. "
|
||||
- f"Don't use {_english_list(GENERIC_CATEGORIES)} for category names"
|
||||
+ "Category '{}' is too generic. "
|
||||
+ "Don't use {} for category names"
|
||||
+ .format(category_name, _english_list(GENERIC_CATEGORIES))
|
||||
)
|
||||
|
||||
|
||||
@@ -195,9 +202,10 @@ def check_bug_number(
|
||||
|
||||
if len(number_bugs):
|
||||
yield (
|
||||
- f"For bugs {', '.join(number_bugs)}: "
|
||||
+ "For bugs {}: "
|
||||
"Bug numbers are deprecated and should be changed to full URLs. "
|
||||
"For example, use 'http://bugzilla.mozilla.org/12345' instead of '12345'."
|
||||
+ .format(', '.join(number_bugs))
|
||||
)
|
||||
|
||||
|
||||
@@ -220,7 +228,7 @@ def check_misspelled_pings(
|
||||
for builtin in pings.RESERVED_PING_NAMES:
|
||||
distance = _hamming_distance(ping, builtin)
|
||||
if distance == 1:
|
||||
- yield f"Ping '{ping}' seems misspelled. Did you mean '{builtin}'?"
|
||||
+ yield "Ping '{}' seems misspelled. Did you mean '{}'?".format(ping, builtin)
|
||||
|
||||
|
||||
def check_user_lifetime_expiration(
|
||||
@@ -281,8 +289,9 @@ class GlinterNit:
|
||||
|
||||
def format(self):
|
||||
return (
|
||||
- f"{self.check_type.name.upper()}: {self.check_name}: "
|
||||
- f"{self.name}: {self.msg}"
|
||||
+ "{}: {}: "
|
||||
+ "{}: {}"
|
||||
+ .format(self.check_type.name.upper(), self.check_name, self.name, self.msg)
|
||||
)
|
||||
|
||||
|
||||
@@ -374,7 +383,7 @@ def lint_yaml_files(input_filepaths: Ite
|
||||
if len(nits):
|
||||
print("Sorry, Glean found some glinter nits:", file=file)
|
||||
for (path, p) in nits:
|
||||
- print(f"{path} ({p.line}:{p.column}) - {p.message}")
|
||||
+ print("{} ({}:{}) - {}".format(path, p.line, p.column, p.message))
|
||||
print("", file=file)
|
||||
print("Please fix the above nits to continue.", file=file)
|
||||
|
||||
--- a/third_party/python/glean_parser/glean_parser/markdown.py
|
||||
+++ b/third_party/python/glean_parser/glean_parser/markdown.py
|
||||
@@ -73,7 +73,7 @@ def metrics_docs(obj_name: str) -> str:
|
||||
if obj_name.startswith("labeled_"):
|
||||
fixedup_name += "s"
|
||||
|
||||
- return f"https://mozilla.github.io/glean/book/user/metrics/{fixedup_name}.html"
|
||||
+ return "https://mozilla.github.io/glean/book/user/metrics/{}.html".format(fixedup_name)
|
||||
|
||||
|
||||
def ping_docs(ping_name: str) -> str:
|
||||
@@ -84,7 +84,7 @@ def ping_docs(ping_name: str) -> str:
|
||||
if ping_name not in pings.RESERVED_PING_NAMES:
|
||||
return ""
|
||||
|
||||
- return f"https://mozilla.github.io/glean/book/user/pings/{ping_name}.html"
|
||||
+ return "https://mozilla.github.io/glean/book/user/pings/{}.html".format(ping_name)
|
||||
|
||||
|
||||
def if_empty(
|
||||
--- a/third_party/python/glean_parser/glean_parser/parser.py
|
||||
+++ b/third_party/python/glean_parser/glean_parser/parser.py
|
||||
@@ -46,7 +46,8 @@ def _update_validator(validator):
|
||||
if len(missing_properties):
|
||||
missing_properties = sorted(list(missing_properties))
|
||||
yield ValidationError(
|
||||
- f"Missing required properties: {', '.join(missing_properties)}"
|
||||
+ "Missing required properties: {}"
|
||||
+ .format(', '.join(missing_properties))
|
||||
)
|
||||
|
||||
validator.VALIDATORS["required"] = required
|
||||
@@ -65,7 +66,7 @@ def _load_file(
|
||||
return {}, None
|
||||
|
||||
if content is None:
|
||||
- yield util.format_error(filepath, "", f"'{filepath}' file can not be empty.")
|
||||
+ yield util.format_error(filepath, "", "'{}' file can not be empty.".format(filepath))
|
||||
return {}, None
|
||||
|
||||
if not isinstance(content, dict):
|
||||
@@ -76,7 +77,7 @@ def _load_file(
|
||||
|
||||
schema_key = content.get("$schema")
|
||||
if not isinstance(schema_key, str):
|
||||
- raise TypeError(f"Invalid schema key {schema_key}")
|
||||
+ raise TypeError("Invalid schema key {}".format(schema_key))
|
||||
|
||||
filetype = FILE_TYPES.get(schema_key)
|
||||
|
||||
@@ -117,7 +118,7 @@ def _get_schema(
|
||||
util.format_error(
|
||||
filepath,
|
||||
"",
|
||||
- f"$schema key must be one of {', '.join(schemas.keys())}",
|
||||
+ "$schema key must be one of {}".format(', '.join(schemas.keys())),
|
||||
)
|
||||
)
|
||||
return schemas[schema_id]
|
||||
@@ -189,7 +190,7 @@ def _instantiate_metrics(
|
||||
if not config.get("allow_reserved") and category_key.split(".")[0] == "glean":
|
||||
yield util.format_error(
|
||||
filepath,
|
||||
- f"For category '{category_key}'",
|
||||
+ "For category '{}'".format(category_key),
|
||||
"Categories beginning with 'glean' are reserved for "
|
||||
"Glean internal use.",
|
||||
)
|
||||
@@ -197,7 +198,7 @@ def _instantiate_metrics(
|
||||
all_objects.setdefault(category_key, OrderedDict())
|
||||
|
||||
if not isinstance(category_val, dict):
|
||||
- raise TypeError(f"Invalid content for {category_key}")
|
||||
+ raise TypeError("Invalid content for {}".format(category_key))
|
||||
|
||||
for metric_key, metric_val in category_val.items():
|
||||
try:
|
||||
@@ -207,7 +208,7 @@ def _instantiate_metrics(
|
||||
except Exception as e:
|
||||
yield util.format_error(
|
||||
filepath,
|
||||
- f"On instance {category_key}.{metric_key}",
|
||||
+ "On instance {}.{}".format(category_key, metric_key),
|
||||
str(e),
|
||||
)
|
||||
metric_obj = None
|
||||
@@ -218,7 +219,7 @@ def _instantiate_metrics(
|
||||
):
|
||||
yield util.format_error(
|
||||
filepath,
|
||||
- f"On instance {category_key}.{metric_key}",
|
||||
+ "On instance {}.{}".format(category_key, metric_key),
|
||||
'Only internal metrics may specify "all-pings" '
|
||||
'in "send_in_pings"',
|
||||
)
|
||||
@@ -234,8 +235,9 @@ def _instantiate_metrics(
|
||||
filepath,
|
||||
"",
|
||||
(
|
||||
- f"Duplicate metric name '{category_key}.{metric_key}' "
|
||||
- f"already defined in '{already_seen}'"
|
||||
+ "Duplicate metric name '{}.{}' "
|
||||
+ "already defined in '{}'"
|
||||
+ .format(category_key, metric_key, already_seen)
|
||||
),
|
||||
)
|
||||
else:
|
||||
@@ -261,17 +263,17 @@ def _instantiate_pings(
|
||||
if ping_key in RESERVED_PING_NAMES:
|
||||
yield util.format_error(
|
||||
filepath,
|
||||
- f"For ping '{ping_key}'",
|
||||
- f"Ping uses a reserved name ({RESERVED_PING_NAMES})",
|
||||
+ "For ping '{}'".format(ping_key),
|
||||
+ "Ping uses a reserved name ({})".format(RESERVED_PING_NAMES),
|
||||
)
|
||||
continue
|
||||
if not isinstance(ping_val, dict):
|
||||
- raise TypeError(f"Invalid content for ping {ping_key}")
|
||||
+ raise TypeError("Invalid content for ping {}".format(ping_key))
|
||||
ping_val["name"] = ping_key
|
||||
try:
|
||||
ping_obj = Ping(**ping_val)
|
||||
except Exception as e:
|
||||
- yield util.format_error(filepath, f"On instance '{ping_key}'", str(e))
|
||||
+ yield util.format_error(filepath, "On instance '{}'".format(ping_key), str(e))
|
||||
continue
|
||||
|
||||
already_seen = sources.get(ping_key)
|
||||
@@ -280,8 +282,9 @@ def _instantiate_pings(
|
||||
yield util.format_error(
|
||||
filepath,
|
||||
"",
|
||||
- f"Duplicate ping name '{ping_key}' "
|
||||
- f"already defined in '{already_seen}'",
|
||||
+ "Duplicate ping name '{}' "
|
||||
+ "already defined in '{}'"
|
||||
+ .format(ping_key, already_seen),
|
||||
)
|
||||
else:
|
||||
all_objects.setdefault("pings", {})[ping_key] = ping_obj
|
||||
--- a/third_party/python/glean_parser/glean_parser/util.py
|
||||
+++ b/third_party/python/glean_parser/glean_parser/util.py
|
||||
@@ -132,7 +132,7 @@ def load_yaml_or_json(path: Path, ordere
|
||||
else:
|
||||
return yaml.load(fd, Loader=_NoDatesSafeLoader)
|
||||
else:
|
||||
- raise ValueError(f"Unknown file extension {path.suffix}")
|
||||
+ raise ValueError("Unknown file extension {}".format(path.suffix))
|
||||
|
||||
|
||||
def ensure_list(value: Any) -> Sequence[Any]:
|
||||
@@ -331,9 +331,9 @@ def format_error(filepath: Union[str, Pa
|
||||
else:
|
||||
filepath = "<string>"
|
||||
if header:
|
||||
- return f"{filepath}: {header}\n{_utils.indent(content)}"
|
||||
+ return "{}: {}\n{}".format(filepath, header, _utils.indent(content))
|
||||
else:
|
||||
- return f"{filepath}:\n{_utils.indent(content)}"
|
||||
+ return "{}:\n{}".format(filepath, _utils.indent(content))
|
||||
|
||||
|
||||
def parse_expires(expires: str) -> datetime.date:
|
||||
@@ -351,8 +351,8 @@ def parse_expires(expires: str) -> datet
|
||||
return datetime.date.fromisoformat(expires)
|
||||
except ValueError:
|
||||
raise ValueError(
|
||||
- f"Invalid expiration date '{expires}'. "
|
||||
- "Must be of the form yyyy-mm-dd in UTC."
|
||||
+ "Invalid expiration date '{}'. "
|
||||
+ "Must be of the form yyyy-mm-dd in UTC.".format(expires)
|
||||
)
|
||||
|
||||
|
||||
@@ -382,7 +382,7 @@ def validate_expires(expires: str) -> No
|
||||
max_date = datetime.datetime.now() + datetime.timedelta(days=730)
|
||||
if date > max_date.date():
|
||||
raise ValueError(
|
||||
- f"'{expires}' is more than 730 days (~2 years) in the future.",
|
||||
+ "'{}' is more than 730 days (~2 years) in the future.".format(expires),
|
||||
"Please make sure this is intentional.",
|
||||
"You can supress this warning by adding EXPIRATION_DATE_TOO_FAR to no_lint",
|
||||
"See: https://mozilla.github.io/glean_parser/metrics-yaml.html#no_lint",
|
||||
--- a/third_party/python/glean_parser/tools/extract_data_categories.py
|
||||
+++ b/third_party/python/glean_parser/tools/extract_data_categories.py
|
||||
@@ -62,7 +62,7 @@ def fetch_url(url: str) -> str:
|
||||
if content is not None:
|
||||
return content
|
||||
|
||||
- print(f"Fetching {url}")
|
||||
+ print("Fetching {}".format(url))
|
||||
content = urlopen(url).read()
|
||||
cache[url] = content
|
||||
time.sleep(0.5)
|
||||
@@ -97,7 +97,7 @@ def categories_as_strings(categories: Se
|
||||
"""
|
||||
if len(categories):
|
||||
return [
|
||||
- CATEGORY_MAP.get(x, f"!!!UNKNOWN CATEGORY {x}")
|
||||
+ CATEGORY_MAP.get(x, "!!!UNKNOWN CATEGORY {}".format(x))
|
||||
for x in sorted(list(categories))
|
||||
]
|
||||
else:
|
||||
@@ -119,24 +119,24 @@ def update_lines(
|
||||
|
||||
for line in lines_iter:
|
||||
output.append(line)
|
||||
- if line.startswith(f"{category_name}:"):
|
||||
+ if line.startswith("{}:".format(category_name)):
|
||||
break
|
||||
|
||||
for line in lines_iter:
|
||||
output.append(line)
|
||||
- if line.startswith(f" {metric_name}:"):
|
||||
+ if line.startswith(" {}:".format(metric_name)):
|
||||
break
|
||||
|
||||
for line in lines_iter:
|
||||
output.append(line)
|
||||
- if line.startswith(f" data_reviews:"):
|
||||
+ if line.startswith(" data_reviews:"):
|
||||
break
|
||||
|
||||
for line in lines_iter:
|
||||
if not line.strip().startswith("- "):
|
||||
output.append(" data_sensitivity:\n")
|
||||
for data_sensitivity in data_sensitivity_values:
|
||||
- output.append(f" - {data_sensitivity}\n")
|
||||
+ output.append(" - {}\n".format(data_sensitivity))
|
||||
output.append(line)
|
||||
break
|
||||
else:
|
||||
--- a/third_party/python/glean_parser/glean_parser/metrics.py
|
||||
+++ b/third_party/python/glean_parser/glean_parser/metrics.py
|
||||
@@ -138,7 +138,7 @@ class Metric:
|
||||
|
||||
metric_type = metric_info["type"]
|
||||
if not isinstance(metric_type, str):
|
||||
- raise TypeError(f"Unknown metric type {metric_type}")
|
||||
+ raise TypeError("Unknown metric type {}".format(metric_type))
|
||||
return cls.metric_types[metric_type](
|
||||
category=category,
|
||||
name=name,
|
||||
--- a/third_party/python/glean_parser/glean_parser/translate.py
|
||||
+++ b/third_party/python/glean_parser/glean_parser/translate.py
|
||||
@@ -112,7 +112,7 @@ def translate_metrics(
|
||||
for filepath in output_dir.glob(clear_pattern):
|
||||
filepath.unlink()
|
||||
if len(list(output_dir.iterdir())):
|
||||
- print(f"Extra contents found in '{output_dir}'.")
|
||||
+ print("Extra contents found in '{}'.".format(output_dir))
|
||||
|
||||
# We can't use shutil.copytree alone if the directory already exists.
|
||||
# However, if it doesn't exist, make sure to create one otherwise
|
||||
@@ -146,7 +146,7 @@ def translate(
|
||||
format_desc = OUTPUTTERS.get(output_format, None)
|
||||
|
||||
if format_desc is None:
|
||||
- raise ValueError(f"Unknown output format '{output_format}'")
|
||||
+ raise ValueError("Unknown output format '{}'".format(output_format))
|
||||
|
||||
return translate_metrics(
|
||||
input_filepaths,
|
||||
--- a/toolkit/components/glean/build_scripts/glean_parser_ext/js.py Tue Nov 17 21:27:44 2020 +0000
|
||||
+++ b/toolkit/components/glean/build_scripts/glean_parser_ext/js.py Wed Nov 18 10:51:04 2020 +0100
|
||||
@@ -57,7 +57,7 @@
|
||||
"""
|
||||
The metric's unique identifier, including the category and name
|
||||
"""
|
||||
- return f"{category}.{util.camelize(metric_name)}"
|
||||
+ return "{}.{}".format(category, util.camelize(metric_name))
|
||||
|
||||
|
||||
def type_name(obj):
|
||||
--- a/toolkit/components/glean/build_scripts/glean_parser_ext/rust.py Tue Nov 17 21:27:44 2020 +0000
|
||||
+++ b/toolkit/components/glean/build_scripts/glean_parser_ext/rust.py Wed Nov 18 10:51:04 2020 +0100
|
||||
@@ -175,7 +175,7 @@
|
||||
|
||||
metric_name = util.snake_case(metric.name)
|
||||
category_name = util.snake_case(category_name)
|
||||
- full_path = f"{category_name}::{metric_name}"
|
||||
+ full_path = "{}::{}".format(category_name, metric_name)
|
||||
|
||||
if metric.type == "event":
|
||||
events_by_id[get_metric_id(metric)] = full_path
|
|
@ -1,23 +0,0 @@
|
|||
Description: revert a change that requires Python 3.6 (https://docs.python.org/3/whatsnew/3.6.html#whatsnew36-pep487)
|
||||
Author: Olivier Tilloy <olivier.tilloy@canonical.com>
|
||||
|
||||
--- a/third_party/python/glean_parser/glean_parser/metrics.py
|
||||
+++ b/third_party/python/glean_parser/glean_parser/metrics.py
|
||||
@@ -15,6 +15,8 @@ from typing import Any, Dict, List, Opti
|
||||
from . import pings
|
||||
from . import util
|
||||
|
||||
+import pep487
|
||||
+
|
||||
|
||||
# Important: if the values are ever changing here, make sure
|
||||
# to also fix mozilla/glean. Otherwise language bindings may
|
||||
@@ -32,7 +34,7 @@ class DataSensitivity(enum.Enum):
|
||||
highly_sensitive = 4
|
||||
|
||||
|
||||
-class Metric:
|
||||
+class Metric(pep487.PEP487Object):
|
||||
typename = "ERROR"
|
||||
glean_internal_metric_cat = "glean.internal.metrics"
|
||||
metric_types = {}
|
|
@ -1,148 +0,0 @@
|
|||
Description: remove variable annotations that require Python 3.6 (https://docs.python.org/3/whatsnew/3.6.html#whatsnew36-pep526)
|
||||
Author: Olivier Tilloy <olivier.tilloy@canonical.com>
|
||||
|
||||
--- a/xpcom/ds/tools/incremental_dafsa.py
|
||||
+++ b/xpcom/ds/tools/incremental_dafsa.py
|
||||
@@ -14,12 +14,6 @@ from typing import List, Dict, Optional,
|
||||
|
||||
|
||||
class Node:
|
||||
- children: Dict[str, "Node"]
|
||||
- parents: Dict[str, List["Node"]]
|
||||
- character: str
|
||||
- is_root_node: bool
|
||||
- is_end_node: bool
|
||||
-
|
||||
def __init__(self, character, is_root_node=False, is_end_node=False):
|
||||
self.children = {}
|
||||
self.parents = {}
|
||||
@@ -156,9 +150,6 @@ class Node:
|
||||
|
||||
|
||||
class SuffixCursor:
|
||||
- index: int # Current position of the cursor within the DAFSA.
|
||||
- node: Node
|
||||
-
|
||||
def __init__(self, index, node):
|
||||
self.index = index
|
||||
self.node = node
|
||||
@@ -227,15 +218,6 @@ class DafsaAppendStateMachine:
|
||||
The next suffix node we'll attempt to find is at index "9".
|
||||
"""
|
||||
|
||||
- root_node: Node
|
||||
- prefix_index: int
|
||||
- suffix_cursor: SuffixCursor
|
||||
- stack: List[Node]
|
||||
- word: str
|
||||
- suffix_overlaps_prefix: bool
|
||||
- first_fork_index: Optional[int]
|
||||
- _state: Callable
|
||||
-
|
||||
def __init__(self, word, root_node, end_node):
|
||||
self.root_node = root_node
|
||||
self.prefix_index = 0
|
||||
@@ -471,9 +453,6 @@ def _duplicate_fork_nodes(stack, fork_in
|
||||
|
||||
|
||||
class Dafsa:
|
||||
- root_node: Node
|
||||
- end_node: Node
|
||||
-
|
||||
def __init__(self):
|
||||
self.root_node = Node(None, is_root_node=True)
|
||||
self.end_node = Node(None, is_end_node=True)
|
||||
--- a/third_party/python/glean_parser/glean_parser/lint.py
|
||||
+++ b/third_party/python/glean_parser/glean_parser/lint.py
|
||||
@@ -237,9 +237,7 @@ def check_user_lifetime_expiration(
|
||||
|
||||
# The checks that operate on an entire category of metrics:
|
||||
# {NAME: (function, is_error)}
|
||||
-CATEGORY_CHECKS: Dict[
|
||||
- str, Tuple[Callable[[str, Iterable[metrics.Metric]], LintGenerator], CheckType]
|
||||
-] = {
|
||||
+CATEGORY_CHECKS = {
|
||||
"COMMON_PREFIX": (check_common_prefix, CheckType.error),
|
||||
"CATEGORY_GENERIC": (check_category_generic, CheckType.error),
|
||||
}
|
||||
@@ -247,9 +245,7 @@ CATEGORY_CHECKS: Dict[
|
||||
|
||||
# The checks that operate on individual metrics:
|
||||
# {NAME: (function, is_error)}
|
||||
-INDIVIDUAL_CHECKS: Dict[
|
||||
- str, Tuple[Callable[[metrics.Metric, dict], LintGenerator], CheckType]
|
||||
-] = {
|
||||
+INDIVIDUAL_CHECKS = {
|
||||
"UNIT_IN_NAME": (check_unit_in_name, CheckType.error),
|
||||
"BUG_NUMBER": (check_bug_number, CheckType.error),
|
||||
"BASELINE_PING": (check_valid_in_baseline, CheckType.error),
|
||||
@@ -282,7 +278,7 @@ def lint_metrics(
|
||||
if parser_config is None:
|
||||
parser_config = {}
|
||||
|
||||
- nits: List[GlinterNit] = []
|
||||
+ nits = []
|
||||
for (category_name, category) in sorted(list(objs.items())):
|
||||
if category_name == "pings":
|
||||
continue
|
||||
@@ -363,7 +359,7 @@ def lint_yaml_files(input_filepaths: Ite
|
||||
|
||||
# Generic type since the actual type comes from yamllint, which we don't
|
||||
# control.
|
||||
- nits: List = []
|
||||
+ nits = []
|
||||
for path in input_filepaths:
|
||||
if not path.is_file() and parser_config.get("allow_missing_files", False):
|
||||
continue
|
||||
--- a/third_party/python/glean_parser/glean_parser/metrics.py
|
||||
+++ b/third_party/python/glean_parser/glean_parser/metrics.py
|
||||
@@ -33,10 +33,10 @@ class DataSensitivity(enum.Enum):
|
||||
|
||||
|
||||
class Metric:
|
||||
- typename: str = "ERROR"
|
||||
- glean_internal_metric_cat: str = "glean.internal.metrics"
|
||||
- metric_types: Dict[str, Any] = {}
|
||||
- default_store_names: List[str] = ["metrics"]
|
||||
+ typename = "ERROR"
|
||||
+ glean_internal_metric_cat = "glean.internal.metrics"
|
||||
+ metric_types = {}
|
||||
+ default_store_names = ["metrics"]
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
--- a/third_party/python/glean_parser/glean_parser/pings.py
|
||||
+++ b/third_party/python/glean_parser/glean_parser/pings.py
|
||||
@@ -49,7 +49,7 @@ class Ping:
|
||||
# _validated indicates whether this metric has already been jsonschema
|
||||
# validated (but not any of the Python-level validation).
|
||||
if not _validated:
|
||||
- data: Dict[str, util.JSONType] = {
|
||||
+ data = {
|
||||
"$schema": parser.PINGS_ID,
|
||||
self.name: self.serialize(),
|
||||
}
|
||||
--- a/third_party/python/glean_parser/glean_parser/util.py
|
||||
+++ b/third_party/python/glean_parser/glean_parser/util.py
|
||||
@@ -269,7 +269,7 @@ def fetch_remote_url(url: str, cache: bo
|
||||
if key in dc:
|
||||
return dc[key]
|
||||
|
||||
- contents: str = urllib.request.urlopen(url).read()
|
||||
+ contents = urllib.request.urlopen(url).read()
|
||||
|
||||
if cache:
|
||||
with diskcache.Cache(cache_dir) as dc:
|
||||
--- a/third_party/python/glean_parser/glean_parser/parser.py
|
||||
+++ b/third_party/python/glean_parser/glean_parser/parser.py
|
||||
@@ -339,8 +339,8 @@ def parse_objects(
|
||||
if config is None:
|
||||
config = {}
|
||||
|
||||
- all_objects: ObjectTree = OrderedDict()
|
||||
- sources: Dict[Any, Path] = {}
|
||||
+ all_objects = OrderedDict()
|
||||
+ sources = {}
|
||||
filepaths = util.ensure_list(filepaths)
|
||||
for filepath in filepaths:
|
||||
content, filetype = yield from _load_file(filepath, config)
|
|
@ -1,42 +0,0 @@
|
|||
Description: silence GTK style-related assertions caused by the lack of a "selection" CSS node on GtkTextView in the version of gtk3 in xenial.
|
||||
These assertions were caused by the fix for https://bugzilla.mozilla.org/1654323.
|
||||
Author: Olivier Tilloy <olivier.tilloy@canonical.com>
|
||||
|
||||
--- a/widget/gtk/nsLookAndFeel.cpp
|
||||
+++ b/widget/gtk/nsLookAndFeel.cpp
|
||||
@@ -1216,7 +1216,7 @@ void nsLookAndFeel::EnsureInit() {
|
||||
&color);
|
||||
mTextSelectedText = GDK_RGBA_TO_NS_RGBA(color);
|
||||
};
|
||||
- GrabSelectionColors(selectionStyle);
|
||||
+ GrabSelectionColors(selectionStyle ? selectionStyle : style);
|
||||
if (mTextSelectedBackground == mTextSelectedText) {
|
||||
// Some old distros/themes don't properly use the .selection style, so
|
||||
// fall back to the regular text view style.
|
||||
@@ -1413,6 +1413,7 @@ bool nsLookAndFeel::WidgetUsesImage(Widg
|
||||
GTK_STATE_FLAG_BACKDROP, GTK_STATE_FLAG_INSENSITIVE};
|
||||
|
||||
GtkStyleContext* style = GetStyleContext(aNodeType);
|
||||
+ if (!style) return false;
|
||||
|
||||
GValue value = G_VALUE_INIT;
|
||||
for (GtkStateFlags state : sFlagsToCheck) {
|
||||
--- a/widget/gtk/WidgetStyleCache.cpp
|
||||
+++ b/widget/gtk/WidgetStyleCache.cpp
|
||||
@@ -933,7 +933,7 @@ static GtkStyleContext* GetWidgetRootSty
|
||||
default:
|
||||
GtkWidget* widget = GetWidget(aNodeType);
|
||||
MOZ_ASSERT(widget);
|
||||
- return gtk_widget_get_style_context(widget);
|
||||
+ return (widget ? gtk_widget_get_style_context(widget) : nullptr);
|
||||
}
|
||||
|
||||
MOZ_ASSERT(style);
|
||||
@@ -1356,6 +1356,7 @@ GtkStyleContext* GetStyleContext(WidgetN
|
||||
style = GetCssNodeStyleInternal(aNodeType);
|
||||
StyleContextSetScale(style, aScale);
|
||||
}
|
||||
+ if (!style) return nullptr;
|
||||
bool stateChanged = false;
|
||||
bool stateHasDirection = gtk_get_minor_version() >= 8;
|
||||
GtkStateFlags oldState = gtk_style_context_get_state(style);
|
|
@ -26,7 +26,6 @@ _DEPENDENCIES="wget git xvfb \
|
|||
libasound2-dev \
|
||||
libcurl4-openssl-dev \
|
||||
libdbus-glib-1-dev \
|
||||
hardening-wrapper \
|
||||
lsb-release \
|
||||
libiw-dev \
|
||||
mesa-common-dev \
|
||||
|
@ -38,9 +37,9 @@ _DEPENDENCIES="wget git xvfb \
|
|||
unzip \
|
||||
dbus-x11 \
|
||||
python \
|
||||
libffi-dev \
|
||||
nodejs-mozilla \
|
||||
nasm-mozilla \
|
||||
gcc-mozilla"
|
||||
nasm-mozilla"
|
||||
|
||||
# cargo \
|
||||
# rustc \
|
||||
|
@ -55,12 +54,16 @@ apt-get -y -qq install $_DEPENDENCIES;
|
|||
if [[ $CARCH == 'x86_64' ]];then
|
||||
# Installs (non-ancient) clang
|
||||
apt install -y software-properties-common apt-transport-https ca-certificates
|
||||
apt-add-repository "deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-11 main"
|
||||
apt-add-repository "deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic-11 main"
|
||||
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add
|
||||
apt-get update
|
||||
apt-get -y install clang-11 libclang-11-dev
|
||||
else
|
||||
apt-get -y install clang-8 libclang-8-dev
|
||||
apt install -y software-properties-common apt-transport-https ca-certificates
|
||||
apt-add-repository "deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic-11 main"
|
||||
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add
|
||||
apt-get update
|
||||
apt-get -y install clang-10 libclang-10-dev
|
||||
fi
|
||||
|
||||
# we need a more recent rust
|
||||
|
|
|
@ -73,15 +73,11 @@ if [[ $CARCH == 'aarch64' ]]; then
|
|||
# taken from manjaro build:
|
||||
ac_add_options --enable-optimize="-g0 -O2"
|
||||
|
||||
# from ALARM
|
||||
# should only fail on armv7x
|
||||
# ac_add_options --disable-webrtc
|
||||
|
||||
export CC='clang-8'
|
||||
export CXX='clang++-8'
|
||||
export AR=llvm-ar-8
|
||||
export NM=llvm-nm-8
|
||||
export RANLIB=llvm-ranlib-8
|
||||
export CC='clang-10'
|
||||
export CXX='clang++-10'
|
||||
export AR=llvm-ar-10
|
||||
export NM=llvm-nm-10
|
||||
export RANLIB=llvm-ranlib-10
|
||||
END
|
||||
|
||||
export MOZ_DEBUG_FLAGS=" "
|
||||
|
@ -112,18 +108,12 @@ END
|
|||
fi
|
||||
|
||||
# hopefully the magic sauce that makes things build on 16.04 and later on work "everywhere":
|
||||
patch -p1 -i "${CI_PROJECT_DIR}/deb_patches/lower-python3-requirement.patch"
|
||||
patch -p1 -i "${CI_PROJECT_DIR}/deb_patches/armhf-reduce-linker-memory-use.patch"
|
||||
patch -p1 -i "${CI_PROJECT_DIR}/deb_patches/build-with-libstdc++-7.patch"
|
||||
patch -p1 -i "${CI_PROJECT_DIR}/deb_patches/fix-armhf-webrtc-build.patch"
|
||||
patch -p1 -i "${CI_PROJECT_DIR}/deb_patches/webrtc-fix-compiler-flags-for-armhf.patch"
|
||||
patch -p1 -i "${CI_PROJECT_DIR}/deb_patches/reduce-rust-debuginfo.patch"
|
||||
patch -p1 -i "${CI_PROJECT_DIR}/deb_patches/relax-cargo-dep.patch"
|
||||
patch -p1 -i "${CI_PROJECT_DIR}/deb_patches/use-system-icupkg.patch"
|
||||
patch -p1 -i "${CI_PROJECT_DIR}/deb_patches/python3-remove-variable-annotations.patch"
|
||||
patch -p1 -i "${CI_PROJECT_DIR}/deb_patches/python3-remove-fstrings.patch"
|
||||
patch -p1 -i "${CI_PROJECT_DIR}/deb_patches/python3-remove-pep487.patch"
|
||||
patch -p1 -i "${CI_PROJECT_DIR}/deb_patches/silence-gtk-style-assertions.patch"
|
||||
patch -p1 -i "${CI_PROJECT_DIR}/deb_patches/sandbox-update-arm-syscall-numbers.patch"
|
||||
|
||||
# Remove some pre-installed addons that might be questionable
|
||||
|
@ -143,7 +133,7 @@ fi
|
|||
|
||||
# Disabling Pocket
|
||||
printf "\nDisabling Pocket\n";
|
||||
sed -i "s/'pocket'/#'pocket'/g" browser/components/moz.build
|
||||
sed -i 's/"pocket"/# "pocket"/g' browser/components/moz.build
|
||||
|
||||
patch -Np1 -i "${CI_PROJECT_DIR}/context-menu.patch"
|
||||
|
||||
|
|
|
@ -66,7 +66,7 @@ rm -f mozconfig
|
|||
# source /root/.cargo/env
|
||||
|
||||
# install cbindgen
|
||||
cargo install --version 0.18.0 cbindgen
|
||||
cargo install --version 0.19.0 cbindgen
|
||||
|
||||
if [[ $CARCH == 'aarch64' ]]; then
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@ LAUNCHER_SCRIPT=$3;
|
|||
CI_PROJECT_DIR=${CI_PROJECT_DIR:-$(realpath $(dirname $0)/../)}
|
||||
_SCRIPT_FOLDER=$(realpath $(dirname $0));
|
||||
_EXTRACTED_TARBALL_FOLDER=$_SCRIPT_FOLDER/librewolf;
|
||||
_SETTINGS_COMMIT=241e6f4d73e6f2de37537cf4473612ae9f8ad81e
|
||||
_SETTINGS_COMMIT=1b9cc88ccf64993951fe28cf426cf883e37e1b4d
|
||||
_SETTINGS_REPO='https://gitlab.com/librewolf-community/settings.git';
|
||||
|
||||
# Extracts the binary tarball
|
||||
|
|
|
@ -1,20 +1,22 @@
|
|||
--- a/browser/base/content/browser-menubar.inc
|
||||
+++ b/browser/base/content/browser-menubar.inc
|
||||
@@ -5,7 +5,11 @@
|
||||
|
||||
<menubar id="main-menubar"
|
||||
onpopupshowing="if (event.target.parentNode.parentNode == this &&
|
||||
@@ -7,7 +7,12 @@
|
||||
# On macOS, we don't track whether activation of the native menubar happened
|
||||
# with the keyboard.
|
||||
#ifndef XP_MACOSX
|
||||
- onpopupshowing="if (event.target.parentNode.parentNode == this)
|
||||
+ onpopupshowing="if (event.target.parentNode.parentNode == this &&
|
||||
+#ifdef MOZ_WIDGET_GTK
|
||||
+ document.documentElement.getAttribute('shellshowingmenubar') != 'true')
|
||||
+#else
|
||||
!('@mozilla.org/widget/nativemenuservice;1' in Cc))
|
||||
+ true)
|
||||
+#endif
|
||||
this.setAttribute('openedwithkey',
|
||||
event.target.parentNode.openedWithKey);">
|
||||
<menu id="file-menu" data-l10n-id="menu-file">
|
||||
event.target.parentNode.openedWithKey);"
|
||||
#endif
|
||||
--- a/browser/base/content/browser.js
|
||||
+++ b/browser/base/content/browser.js
|
||||
@@ -6231,11 +6231,18 @@ function onViewToolbarsPopupShowing(aEve
|
||||
@@ -6291,11 +6291,18 @@ function onViewToolbarsPopupShowing(aEve
|
||||
MozXULElement.insertFTLIfNeeded("browser/toolbarContextMenu.ftl");
|
||||
let firstMenuItem = aInsertPoint || popup.firstElementChild;
|
||||
let toolbarNodes = gNavToolbox.querySelectorAll("toolbar");
|
||||
|
@ -98,7 +100,7 @@
|
|||
"components.conf",
|
||||
--- a/modules/libpref/init/all.js
|
||||
+++ b/modules/libpref/init/all.js
|
||||
@@ -305,6 +305,9 @@ pref("dom.mouseevent.click.hack.use_lega
|
||||
@@ -301,6 +301,9 @@ pref("dom.mouseevent.click.hack.use_lega
|
||||
// Fastback caching - if this pref is negative, then we calculate the number
|
||||
// of content viewers to cache based on the amount of available memory.
|
||||
pref("browser.sessionhistory.max_total_viewers", -1);
|
||||
|
@ -110,7 +112,7 @@
|
|||
|
||||
--- a/toolkit/content/xul.css
|
||||
+++ b/toolkit/content/xul.css
|
||||
@@ -221,6 +221,13 @@ toolbar[type="menubar"] {
|
||||
@@ -230,6 +230,13 @@ toolbar[type="menubar"] {
|
||||
}
|
||||
%endif
|
||||
|
||||
|
@ -4292,7 +4294,7 @@
|
|||
+ MOZ_ASSERT(!mContentToObserverTable.Get(aContent, &old) || old == aObserver,
|
||||
+ "Multiple observers for the same content node are not supported");
|
||||
+
|
||||
+ mContentToObserverTable.Put(aContent, aObserver);
|
||||
+ mContentToObserverTable.InsertOrUpdate(aContent, aObserver);
|
||||
+}
|
||||
+
|
||||
+void
|
||||
|
@ -4352,7 +4354,7 @@
|
|||
+#include "mozilla/Attributes.h"
|
||||
+#include "mozilla/RefPtr.h"
|
||||
+#include "mozilla/UniquePtr.h"
|
||||
+#include "nsDataHashtable.h"
|
||||
+#include "nsTHashMap.h"
|
||||
+#include "nsStubMutationObserver.h"
|
||||
+#include "nsTArray.h"
|
||||
+
|
||||
|
@ -4459,7 +4461,7 @@
|
|||
+ nsIContent *mLastSource;
|
||||
+ nsNativeMenuChangeObserver *mLastTarget;
|
||||
+ nsTArray<mozilla::UniquePtr<MutationRecord> > mPendingMutations;
|
||||
+ nsDataHashtable<nsPtrHashKey<nsIContent>, nsNativeMenuChangeObserver *> mContentToObserverTable;
|
||||
+ nsTHashMap<nsPtrHashKey<nsIContent>, nsNativeMenuChangeObserver *> mContentToObserverTable;
|
||||
+
|
||||
+ static uint32_t sUpdateBlockersCount;
|
||||
+};
|
||||
|
@ -4737,7 +4739,7 @@
|
|||
+ }
|
||||
+
|
||||
+ GCancellable *cancellable = g_cancellable_new();
|
||||
+ mMenuBarRegistrationCancellables.Put(aMenuBar, cancellable);
|
||||
+ mMenuBarRegistrationCancellables.InsertOrUpdate(aMenuBar, cancellable);
|
||||
+
|
||||
+ // We keep a weak ref because we can't assume that GDBus cancellation
|
||||
+ // is reliable (see https://launchpad.net/bugs/953562)
|
||||
|
@ -4987,7 +4989,7 @@
|
|||
+
|
||||
+#include "mozilla/Attributes.h"
|
||||
+#include "nsCOMPtr.h"
|
||||
+#include "nsDataHashtable.h"
|
||||
+#include "nsTHashMap.h"
|
||||
+#include "nsINativeMenuService.h"
|
||||
+#include "nsTArray.h"
|
||||
+
|
||||
|
@ -5053,7 +5055,7 @@
|
|||
+ GDBusProxy *mDbusProxy;
|
||||
+ bool mOnline;
|
||||
+ nsTArray<nsMenuBar *> mMenuBars;
|
||||
+ nsDataHashtable<nsPtrHashKey<nsMenuBar>, GCancellable*> mMenuBarRegistrationCancellables;
|
||||
+ nsTHashMap<nsPtrHashKey<nsMenuBar>, GCancellable*> mMenuBarRegistrationCancellables;
|
||||
+
|
||||
+ static bool sShutdown;
|
||||
+ static nsNativeMenuService *sService;
|
||||
|
@ -5062,7 +5064,7 @@
|
|||
+#endif /* __nsNativeMenuService_h__ */
|
||||
--- a/widget/gtk/nsWindow.cpp
|
||||
+++ b/widget/gtk/nsWindow.cpp
|
||||
@@ -6386,6 +6386,10 @@ void nsWindow::HideWindowChrome(bool aSh
|
||||
@@ -6409,6 +6409,10 @@ void nsWindow::HideWindowChrome(bool aSh
|
||||
SetWindowDecoration(aShouldHide ? eBorderStyle_none : mBorderStyle);
|
||||
}
|
||||
|
||||
|
@ -5093,7 +5095,7 @@
|
|||
/**
|
||||
* GetLastUserInputTime returns a timestamp for the most recent user input
|
||||
* event. This is intended for pointer grab requests (including drags).
|
||||
@@ -719,6 +723,8 @@ class nsWindow final : public nsBaseWidg
|
||||
@@ -722,6 +726,8 @@ class nsWindow final : public nsBaseWidg
|
||||
static GtkWindowDecoration sGtkWindowDecoration;
|
||||
|
||||
static bool sTransparentMainWindow;
|
||||
|
@ -5124,7 +5126,7 @@
|
|||
import sys
|
||||
|
||||
# Static atom definitions, used to generate nsGkAtomList.h.
|
||||
@@ -2508,7 +2509,7 @@ STATIC_ATOMS = [
|
||||
@@ -2507,7 +2508,7 @@ STATIC_ATOMS = [
|
||||
InheritingAnonBoxAtom("AnonBox_mozSVGForeignContent", ":-moz-svg-foreign-content"),
|
||||
InheritingAnonBoxAtom("AnonBox_mozSVGText", ":-moz-svg-text"),
|
||||
# END ATOMS
|
||||
|
@ -5279,3 +5281,20 @@
|
|||
+NS_DEFINE_STATIC_IID_ACCESSOR(nsINativeMenuService, NS_INATIVEMENUSERVICE_IID)
|
||||
+
|
||||
+#endif // nsINativeMenuService_h_
|
||||
--- a/widget/nsWidgetsCID.h
|
||||
+++ b/widget/nsWidgetsCID.h
|
||||
@@ -66,6 +66,14 @@
|
||||
// Menus
|
||||
//-----------------------------------------------------------
|
||||
|
||||
+// {0B3FE5AA-BC72-4303-85AE-76365DF1251D}
|
||||
+#define NS_NATIVEMENUSERVICE_CID \
|
||||
+ { \
|
||||
+ 0x0B3FE5AA, 0xBC72, 0x4303, { \
|
||||
+ 0x85, 0xAE, 0x76, 0x36, 0x5D, 0xF1, 0x25, 0x1D \
|
||||
+ } \
|
||||
+ }
|
||||
+
|
||||
// {F6CD4F21-53AF-11d2-8DC4-00609703C14E}
|
||||
#define NS_POPUPMENU_CID \
|
||||
{ \
|
||||
|
|
Loading…
Reference in a new issue