commit 6e0872f9537bd251abaa397bf818be97ba63b445 parent d8e526c7b71d9e29b68bb61ccfcd3318e75e4aa1 Author: Lando <lando@lando.test> Date: Mon, 13 Oct 2025 14:18:58 +0000 Merge autoland to mozilla-central Diffstat:
76 files changed, 568 insertions(+), 420 deletions(-)
diff --git a/browser/app/winlauncher/LaunchUnelevated.h b/browser/app/winlauncher/LaunchUnelevated.h @@ -9,7 +9,6 @@ #include "LauncherProcessWin.h" #include "mozilla/WinHeaderOnlyUtils.h" -#include "mozilla/Maybe.h" #include "nsWindowsHelpers.h" namespace mozilla { diff --git a/browser/app/winlauncher/ProcThreadAttributes.h b/browser/app/winlauncher/ProcThreadAttributes.h @@ -12,7 +12,6 @@ #include <utility> #include "mozilla/Attributes.h" -#include "mozilla/Maybe.h" #include "mozilla/UniquePtr.h" #include "mozilla/Vector.h" diff --git a/browser/locales/l10n-changesets.json b/browser/locales/l10n-changesets.json @@ -15,7 +15,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "af": { "pin": false, @@ -33,7 +33,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "an": { "pin": false, @@ -51,7 +51,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "ar": { "pin": false, @@ -69,7 +69,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "ast": { "pin": false, @@ -87,7 +87,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "az": { "pin": false, @@ -105,7 +105,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "be": { "pin": false, @@ -123,7 +123,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "bg": { "pin": false, @@ -141,7 +141,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "bn": { "pin": false, @@ -159,7 +159,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "bo": { "pin": false, @@ -177,7 +177,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "br": { "pin": false, @@ -195,7 +195,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "brx": { "pin": false, @@ -213,7 +213,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "bs": { "pin": false, @@ -231,7 +231,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "ca": { "pin": false, @@ -249,7 +249,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "ca-valencia": { "pin": false, @@ -267,7 +267,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "cak": { "pin": false, @@ -285,7 +285,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "ckb": { "pin": false, @@ -303,7 +303,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "cs": { "pin": false, @@ -321,7 +321,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "cy": { "pin": false, @@ -339,7 +339,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "da": { "pin": false, @@ -357,7 +357,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "de": { "pin": false, @@ -375,7 +375,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "dsb": { "pin": false, @@ -393,7 +393,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "el": { "pin": false, @@ -411,7 +411,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "en-CA": { "pin": false, @@ -429,7 +429,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "en-GB": { "pin": false, @@ -447,7 +447,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "eo": { "pin": false, @@ -465,7 +465,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "es-AR": { "pin": false, @@ -483,7 +483,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "es-CL": { "pin": false, @@ -501,7 +501,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "es-ES": { "pin": false, @@ -519,7 +519,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "es-MX": { "pin": false, @@ -537,7 +537,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "et": { "pin": false, @@ -555,7 +555,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "eu": { "pin": false, @@ -573,7 +573,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "fa": { "pin": false, @@ -591,7 +591,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "ff": { "pin": false, @@ -609,7 +609,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "fi": { "pin": false, @@ -627,7 +627,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "fr": { "pin": false, @@ -645,7 +645,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "fur": { "pin": false, @@ -663,7 +663,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "fy-NL": { "pin": false, @@ -681,7 +681,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "ga-IE": { "pin": false, @@ -699,7 +699,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "gd": { "pin": false, @@ -717,7 +717,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "gl": { "pin": false, @@ -735,7 +735,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "gn": { "pin": false, @@ -753,7 +753,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "gu-IN": { "pin": false, @@ -771,7 +771,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "he": { "pin": false, @@ -789,7 +789,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "hi-IN": { "pin": false, @@ -807,7 +807,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "hr": { "pin": false, @@ -825,7 +825,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "hsb": { "pin": false, @@ -843,7 +843,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "hu": { "pin": false, @@ -861,7 +861,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "hy-AM": { "pin": false, @@ -879,7 +879,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "hye": { "pin": false, @@ -897,7 +897,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "ia": { "pin": false, @@ -915,7 +915,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "id": { "pin": false, @@ -933,7 +933,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "is": { "pin": false, @@ -951,7 +951,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "it": { "pin": false, @@ -969,7 +969,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "ja": { "pin": false, @@ -985,7 +985,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "ja-JP-mac": { "pin": false, @@ -993,7 +993,7 @@ "macosx64", "macosx64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "ka": { "pin": false, @@ -1011,7 +1011,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "kab": { "pin": false, @@ -1029,7 +1029,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "kk": { "pin": false, @@ -1047,7 +1047,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "km": { "pin": false, @@ -1065,7 +1065,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "kn": { "pin": false, @@ -1083,7 +1083,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "ko": { "pin": false, @@ -1101,7 +1101,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "lij": { "pin": false, @@ -1119,7 +1119,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "lo": { "pin": false, @@ -1137,7 +1137,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "lt": { "pin": false, @@ -1155,7 +1155,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "ltg": { "pin": false, @@ -1173,7 +1173,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "lv": { "pin": false, @@ -1191,7 +1191,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "meh": { "pin": false, @@ -1209,7 +1209,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "mk": { "pin": false, @@ -1227,7 +1227,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "ml": { "pin": false, @@ -1245,7 +1245,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "mr": { "pin": false, @@ -1263,7 +1263,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "ms": { "pin": false, @@ -1281,7 +1281,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "my": { "pin": false, @@ -1299,7 +1299,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "nb-NO": { "pin": false, @@ -1317,7 +1317,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "ne-NP": { "pin": false, @@ -1335,7 +1335,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "nl": { "pin": false, @@ -1353,7 +1353,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "nn-NO": { "pin": false, @@ -1371,7 +1371,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "oc": { "pin": false, @@ -1389,7 +1389,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "pa-IN": { "pin": false, @@ -1407,7 +1407,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "pl": { "pin": false, @@ -1425,7 +1425,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "pt-BR": { "pin": false, @@ -1443,7 +1443,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "pt-PT": { "pin": false, @@ -1461,7 +1461,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "rm": { "pin": false, @@ -1479,7 +1479,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "ro": { "pin": false, @@ -1497,7 +1497,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "ru": { "pin": false, @@ -1515,7 +1515,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "sat": { "pin": false, @@ -1533,7 +1533,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "sc": { "pin": false, @@ -1551,7 +1551,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "scn": { "pin": false, @@ -1569,7 +1569,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "sco": { "pin": false, @@ -1587,7 +1587,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "si": { "pin": false, @@ -1605,7 +1605,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "sk": { "pin": false, @@ -1623,7 +1623,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "skr": { "pin": false, @@ -1641,7 +1641,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "sl": { "pin": false, @@ -1659,7 +1659,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "son": { "pin": false, @@ -1677,7 +1677,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "sq": { "pin": false, @@ -1695,7 +1695,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "sr": { "pin": false, @@ -1713,7 +1713,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "sv-SE": { "pin": false, @@ -1731,7 +1731,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "szl": { "pin": false, @@ -1749,7 +1749,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "ta": { "pin": false, @@ -1767,7 +1767,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "te": { "pin": false, @@ -1785,7 +1785,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "tg": { "pin": false, @@ -1803,7 +1803,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "th": { "pin": false, @@ -1821,7 +1821,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "tl": { "pin": false, @@ -1839,7 +1839,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "tr": { "pin": false, @@ -1857,7 +1857,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "trs": { "pin": false, @@ -1875,7 +1875,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "uk": { "pin": false, @@ -1893,7 +1893,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "ur": { "pin": false, @@ -1911,7 +1911,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "uz": { "pin": false, @@ -1929,7 +1929,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "vi": { "pin": false, @@ -1947,7 +1947,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "wo": { "pin": false, @@ -1965,7 +1965,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "xh": { "pin": false, @@ -1983,7 +1983,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "zh-CN": { "pin": false, @@ -2001,7 +2001,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "zh-TW": { "pin": false, @@ -2019,6 +2019,6 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" } } \ No newline at end of file diff --git a/client.mk b/client.mk @@ -54,7 +54,7 @@ ifdef MOZBUILD_MANAGE_SCCACHE_DAEMON # from make (but don't use the + prefix when make -n is used, so that # the command doesn't run in that case) mkdir -p $(UPLOAD_PATH) - $(if $(findstring n,$(filter-out --%, $(MAKEFLAGS))),,+)env SCCACHE_LOG=sccache=debug SCCACHE_ERROR_LOG=$(UPLOAD_PATH)/sccache.log $(MOZBUILD_MANAGE_SCCACHE_DAEMON) --start-server + $(if $(findstring n,$(filter-out --%, $(MAKEFLAGS))),,+)env SCCACHE_LOG=sccache=debug SCCACHE_ERROR_LOG=$(UPLOAD_PATH)/sccache.log SCCACHE_LOG_MILLIS=true $(MOZBUILD_MANAGE_SCCACHE_DAEMON) --start-server endif ### Build it +$(MOZ_MAKE) $(SCCACHE_STOP_ON_FAILURE) diff --git a/docshell/base/BrowsingContext.cpp b/docshell/base/BrowsingContext.cpp @@ -2128,6 +2128,7 @@ nsresult BrowsingContext::LoadURI(nsDocShellLoadState* aLoadState, if (mDocShell) { nsCOMPtr<nsIDocShell> docShell = mDocShell; + return docShell->LoadURI(aLoadState, aSetNavigating); } @@ -2438,7 +2439,7 @@ BrowsingContext::CheckURLAndCreateLoadState(nsIURI* aURI, void BrowsingContext::Navigate(nsIURI* aURI, nsIPrincipal& aSubjectPrincipal, ErrorResult& aRv, NavigationHistoryBehavior aHistoryHandling, - bool aShouldNotForceReplaceInOnLoad) { + bool aNeedsCompletelyLoadedDocument) { MOZ_LOG_FMT(gNavigationAPILog, LogLevel::Debug, "Navigate to {} as {}", *aURI, aHistoryHandling); CallerType callerType = aSubjectPrincipal.IsSystemPrincipal() @@ -2457,27 +2458,12 @@ void BrowsingContext::Navigate(nsIURI* aURI, nsIPrincipal& aSubjectPrincipal, return; } - loadState->SetShouldNotForceReplaceInOnLoad(aShouldNotForceReplaceInOnLoad); - - // Step 12 - NavigationHistoryBehavior historyHandling = aHistoryHandling; - if (aHistoryHandling == NavigationHistoryBehavior::Auto) { - if (auto* document = GetExtantDocument()) { - bool equals = false; - aURI->Equals(document->GetDocumentURI(), &equals); - if (equals && document->GetPrincipal()) { - document->GetPrincipal()->Equals(&aSubjectPrincipal, &equals); - } - if (equals) { - historyHandling = NavigationHistoryBehavior::Replace; - } else { - historyHandling = NavigationHistoryBehavior::Push; - } - } + if (mozilla::SessionHistoryInParent()) { + loadState->SetNeedsCompletelyLoadedDocument(aNeedsCompletelyLoadedDocument); + loadState->SetHistoryBehavior(aHistoryHandling); } - // Step 13 of #navigate are handled later in nsDocShell::InternalLoad(). - if (historyHandling == NavigationHistoryBehavior::Replace) { + if (aHistoryHandling == NavigationHistoryBehavior::Replace) { loadState->SetLoadType(LOAD_STOP_CONTENT_AND_REPLACE); } else { loadState->SetLoadType(LOAD_STOP_CONTENT); diff --git a/docshell/base/BrowsingContext.h b/docshell/base/BrowsingContext.h @@ -459,7 +459,7 @@ class BrowsingContext : public nsILoadContext, public nsWrapperCache { void Navigate(nsIURI* aURI, nsIPrincipal& aSubjectPrincipal, ErrorResult& aRv, NavigationHistoryBehavior aHistoryHandling = NavigationHistoryBehavior::Auto, - bool aShouldNotForceReplaceInOnLoad = false); + bool aNeedsCompletelyLoadedDocument = false); // Removes the root document for this BrowsingContext tree from the BFCache, // if it is cached, and returns true if it was. diff --git a/docshell/base/nsDocShell.cpp b/docshell/base/nsDocShell.cpp @@ -72,6 +72,7 @@ #include "mozilla/dom/Navigation.h" #include "mozilla/dom/NavigationBinding.h" #include "mozilla/dom/NavigationHistoryEntry.h" +#include "mozilla/dom/NavigationUtils.h" #include "mozilla/dom/PerformanceNavigation.h" #include "mozilla/dom/PermissionMessageUtils.h" #include "mozilla/dom/PolicyContainer.h" @@ -981,7 +982,8 @@ bool nsDocShell::MaybeHandleSubframeHistory( nsCOMPtr<nsIDocShell> parentDS(do_QueryInterface(parentAsItem)); if (!parentDS || parentDS == static_cast<nsIDocShell*>(this)) { - if (mBrowsingContext && mBrowsingContext->IsTop()) { + if (mBrowsingContext && mBrowsingContext->IsTop() && + !aLoadState->HistoryBehavior()) { // This is the root docshell. If we got here while // executing an onLoad Handler,this load will not go // into session history. @@ -1137,7 +1139,7 @@ bool nsDocShell::MaybeHandleSubframeHistory( if (mCurrentURI && (!NS_IsAboutBlank(mCurrentURI) || currentChildEntry || mLoadingEntry || mActiveEntry) && - !aLoadState->ShouldNotForceReplaceInOnLoad()) { + !aLoadState->HistoryBehavior()) { // This is a pre-existing subframe. If // 1. The load of this frame was not originally initiated by session // history directly (i.e. (!shEntry) condition succeeded, but it can @@ -8742,6 +8744,7 @@ struct SameDocumentNavigationState { bool mSameExceptHashes = false; bool mSecureUpgradeURI = false; bool mHistoryNavBetweenSameDoc = false; + bool mIdentical = false; }; bool nsDocShell::IsSameDocumentNavigation(nsDocShellLoadState* aLoadState, @@ -8847,6 +8850,12 @@ bool nsDocShell::IsSameDocumentNavigation(nsDocShellLoadState* aLoadState, } } + // Two URIs are identical if they're same except hashes, they both have + // hashes, and their hashes are the same. + aState.mIdentical = aState.mSameExceptHashes && + (aState.mNewURIHasRef == aState.mCurrentURIHasRef) && + aState.mCurrentHash.Equals(aState.mNewHash); + // A same document navigation happens when we navigate between two SHEntries // for the same document. We do a same document navigation under two // circumstances. Either @@ -9394,10 +9403,8 @@ nsresult nsDocShell::HandleSameDocumentNavigation( // https://html.spec.whatwg.org/multipage/browsing-the-web.html#updating-the-document navigation->UpdateEntriesForSameDocumentNavigation( mActiveEntry.get(), - LOAD_TYPE_HAS_FLAGS(mLoadType, LOAD_FLAGS_REPLACE_HISTORY) - ? NavigationType::Replace - : aLoadState->LoadIsFromSessionHistory() ? NavigationType::Traverse - : NavigationType::Push); + NavigationUtils::NavigationTypeFromLoadType(mLoadType).valueOr( + NavigationType::Push)); } // Fire a hashchange event URIs differ, and only in their hashes. @@ -9478,6 +9485,59 @@ uint32_t nsDocShell::GetLoadTypeForFormSubmission( : LOAD_LINK; } +static void MaybeConvertToReplaceLoad(nsDocShellLoadState* aLoadState, + Document* aExtantDocument, + bool aIdenticalURI, + bool aHasActiveEntry) { + // MaybeConvertToReplaceLoad implements steps 12 and 13 of #navigate, but + // since we're not yet using historyBehavior for all types of loads and + // configurations, we need to sometimes bail and revert to the old way of + // handling push to replace load conversion. The different cases we can't + // handle are: + // + // * When we don't have an active document + // * When a document doesn't yet have a session history entry + // * When we don't use SHIP + // * When we don't use historyBehavior + if (!aExtantDocument || !aHasActiveEntry || + !mozilla::SessionHistoryInParent() || !aLoadState->HistoryBehavior()) { + aLoadState->ResetHistoryBehavior(); + return; + } + + bool convertToReplaceLoad = aLoadState->NeedsCompletelyLoadedDocument() && + !aExtantDocument->IsCompletelyLoaded(); + if (const auto& historyBehavior = aLoadState->HistoryBehavior(); + !convertToReplaceLoad && historyBehavior && + *historyBehavior == NavigationHistoryBehavior::Auto) { + convertToReplaceLoad = aIdenticalURI; + if (convertToReplaceLoad && aExtantDocument->GetPrincipal()) { + aExtantDocument->GetPrincipal()->Equals(aLoadState->TriggeringPrincipal(), + &convertToReplaceLoad); + } + } + + convertToReplaceLoad = + convertToReplaceLoad || nsContentUtils::NavigationMustBeAReplace( + *aLoadState->URI(), *aExtantDocument); + + if (convertToReplaceLoad) { + MOZ_LOG_FMT(gNavigationAPILog, LogLevel::Debug, + "Convert to replace when navigating from {} to {}, {}", + *aExtantDocument->GetDocumentURI(), *aLoadState->URI(), + (aLoadState->NeedsCompletelyLoadedDocument() && + !nsContentUtils::NavigationMustBeAReplace(*aLoadState->URI(), + *aExtantDocument)) + ? "needs completely loaded document" + : "navigation must be a replace"); + aLoadState->SetLoadType(MaybeAddLoadFlags( + aLoadState->LoadType(), nsIWebNavigation::LOAD_FLAGS_REPLACE_HISTORY)); + aLoadState->SetHistoryBehavior(NavigationHistoryBehavior::Replace); + } else { + aLoadState->SetHistoryBehavior(NavigationHistoryBehavior::Push); + } +} + // InternalLoad performs several of the steps from // https://html.spec.whatwg.org/#navigate. nsresult nsDocShell::InternalLoad(nsDocShellLoadState* aLoadState, @@ -9538,6 +9598,13 @@ nsresult nsDocShell::InternalLoad(nsDocShellLoadState* aLoadState, IsSameDocumentNavigation(aLoadState, sameDocumentNavigationState) && !aLoadState->GetPendingRedirectedChannel(); + if (mLoadType != LOAD_ERROR_PAGE && + !aLoadState->HasLoadFlags(LOAD_FLAGS_FROM_EXTERNAL)) { + MaybeConvertToReplaceLoad(aLoadState, GetExtantDocument(), + sameDocumentNavigationState.mIdentical, + !!mActiveEntry); + } + // Note: We do this check both here and in BrowsingContext:: // LoadURI/InternalLoad, since document-specific sandbox flags are only // available in the process triggering the load, and we don't want the target diff --git a/docshell/base/nsDocShellLoadState.cpp b/docshell/base/nsDocShellLoadState.cpp @@ -51,7 +51,6 @@ nsDocShellLoadState::nsDocShellLoadState( const DocShellLoadStateInit& aLoadState, mozilla::ipc::IProtocol* aActor, bool* aReadSuccess) : mNotifiedBeforeUnloadListeners(false), - mShouldNotForceReplaceInOnLoad(false), mLoadIdentifier(aLoadState.LoadIdentifier()) { // If we return early, we failed to read in the data. *aReadSuccess = false; @@ -71,6 +70,8 @@ nsDocShellLoadState::nsDocShellLoadState( mOriginalFrameSrc = aLoadState.OriginalFrameSrc(); mShouldCheckForRecursion = aLoadState.ShouldCheckForRecursion(); mIsFormSubmission = aLoadState.IsFormSubmission(); + mNeedsCompletelyLoadedDocument = aLoadState.NeedsCompletelyLoadedDocument(); + mHistoryBehavior = aLoadState.HistoryBehavior(); mLoadType = aLoadState.LoadType(); mTarget = aLoadState.Target(); mTargetBrowsingContext = aLoadState.TargetBrowsingContext(); @@ -172,7 +173,6 @@ nsDocShellLoadState::nsDocShellLoadState(const nsDocShellLoadState& aOther) mInheritPrincipal(aOther.mInheritPrincipal), mPrincipalIsExplicit(aOther.mPrincipalIsExplicit), mNotifiedBeforeUnloadListeners(aOther.mNotifiedBeforeUnloadListeners), - mShouldNotForceReplaceInOnLoad(aOther.mShouldNotForceReplaceInOnLoad), mPrincipalToInherit(aOther.mPrincipalToInherit), mPartitionedPrincipalToInherit(aOther.mPartitionedPrincipalToInherit), mForceAllowDataURI(aOther.mForceAllowDataURI), @@ -181,6 +181,8 @@ nsDocShellLoadState::nsDocShellLoadState(const nsDocShellLoadState& aOther) mOriginalFrameSrc(aOther.mOriginalFrameSrc), mShouldCheckForRecursion(aOther.mShouldCheckForRecursion), mIsFormSubmission(aOther.mIsFormSubmission), + mNeedsCompletelyLoadedDocument(aOther.mNeedsCompletelyLoadedDocument), + mHistoryBehavior(aOther.mHistoryBehavior), mLoadType(aOther.mLoadType), mSHEntry(aOther.mSHEntry), mTarget(aOther.mTarget), @@ -235,12 +237,13 @@ nsDocShellLoadState::nsDocShellLoadState(nsIURI* aURI, uint64_t aLoadIdentifier) mInheritPrincipal(false), mPrincipalIsExplicit(false), mNotifiedBeforeUnloadListeners(false), - mShouldNotForceReplaceInOnLoad(false), mForceAllowDataURI(false), mIsExemptFromHTTPSFirstMode(false), mOriginalFrameSrc(false), mShouldCheckForRecursion(false), mIsFormSubmission(false), + mNeedsCompletelyLoadedDocument(false), + mHistoryBehavior(Nothing()), mLoadType(LOAD_NORMAL), mSrcdocData(VoidString()), mLoadFlags(0), @@ -670,15 +673,6 @@ void nsDocShellLoadState::SetNotifiedBeforeUnloadListeners( mNotifiedBeforeUnloadListeners = aNotifiedBeforeUnloadListeners; } -bool nsDocShellLoadState::ShouldNotForceReplaceInOnLoad() const { - return mShouldNotForceReplaceInOnLoad; -} - -void nsDocShellLoadState::SetShouldNotForceReplaceInOnLoad( - bool aShouldNotForceReplaceInOnLoad) { - mShouldNotForceReplaceInOnLoad = aShouldNotForceReplaceInOnLoad; -} - bool nsDocShellLoadState::ForceAllowDataURI() const { return mForceAllowDataURI; } @@ -727,6 +721,29 @@ void nsDocShellLoadState::SetIsFormSubmission(bool aIsFormSubmission) { mIsFormSubmission = aIsFormSubmission; } +bool nsDocShellLoadState::NeedsCompletelyLoadedDocument() const { + return mNeedsCompletelyLoadedDocument; +} + +void nsDocShellLoadState::SetNeedsCompletelyLoadedDocument( + bool aNeedsCompletelyLoadedDocument) { + mNeedsCompletelyLoadedDocument = aNeedsCompletelyLoadedDocument; +} + +Maybe<mozilla::dom::NavigationHistoryBehavior> +nsDocShellLoadState::HistoryBehavior() const { + return mHistoryBehavior; +} + +void nsDocShellLoadState::SetHistoryBehavior( + mozilla::dom::NavigationHistoryBehavior aHistoryBehavior) { + mHistoryBehavior = Some(aHistoryBehavior); +} + +void nsDocShellLoadState::ResetHistoryBehavior() { + mHistoryBehavior = Nothing(); +} + uint32_t nsDocShellLoadState::LoadType() const { return mLoadType; } void nsDocShellLoadState::SetLoadType(uint32_t aLoadType) { @@ -1377,6 +1394,8 @@ DocShellLoadStateInit nsDocShellLoadState::Serialize( loadState.OriginalFrameSrc() = mOriginalFrameSrc; loadState.ShouldCheckForRecursion() = mShouldCheckForRecursion; loadState.IsFormSubmission() = mIsFormSubmission; + loadState.NeedsCompletelyLoadedDocument() = mNeedsCompletelyLoadedDocument; + loadState.HistoryBehavior() = mHistoryBehavior; loadState.LoadType() = mLoadType; loadState.userNavigationInvolvement() = mUserNavigationInvolvement; loadState.Target() = mTarget; diff --git a/docshell/base/nsDocShellLoadState.h b/docshell/base/nsDocShellLoadState.h @@ -149,10 +149,6 @@ class nsDocShellLoadState final { void SetNotifiedBeforeUnloadListeners(bool aNotifiedBeforeUnloadListeners); - bool ShouldNotForceReplaceInOnLoad() const; - - void SetShouldNotForceReplaceInOnLoad(bool aShouldNotForceReplaceInOnLoad); - bool ForceAllowDataURI() const; void SetForceAllowDataURI(bool aForceAllowDataURI); @@ -178,6 +174,18 @@ class nsDocShellLoadState final { void SetIsFormSubmission(bool aIsFormSubmission); + bool NeedsCompletelyLoadedDocument() const; + + void SetNeedsCompletelyLoadedDocument(bool aNeedsCompletelyLoadedDocument); + + mozilla::Maybe<mozilla::dom::NavigationHistoryBehavior> HistoryBehavior() + const; + + void SetHistoryBehavior( + mozilla::dom::NavigationHistoryBehavior aHistoryBehavior); + + void ResetHistoryBehavior(); + uint32_t LoadType() const; void SetLoadType(uint32_t aLoadType); @@ -542,10 +550,6 @@ class nsDocShellLoadState final { // notified if applicable. bool mNotifiedBeforeUnloadListeners; - // If this attribute is true, navigations for subframes taking place inside of - // an onload handler will not be changed to replace loads. - bool mShouldNotForceReplaceInOnLoad; - // Principal we're inheriting. If null, this means the principal should be // inherited from the current document. If set to NullPrincipal, the channel // will fill in principal information later in the load. See internal comments @@ -585,6 +589,14 @@ class nsDocShellLoadState final { // form submission. bool mIsFormSubmission; + // If this attribute is true, we need to check if the current document is + // completely loaded to determine if we should perform a push or replace load. + bool mNeedsCompletelyLoadedDocument; + + // If this attribute is `Auto`, we should determine if this should be a push + // or replace load when actually loading. + mozilla::Maybe<mozilla::dom::NavigationHistoryBehavior> mHistoryBehavior; + // Contains a load type as specified by the nsDocShellLoadTypes::load* // constants uint32_t mLoadType; diff --git a/docshell/base/nsDocShellLoadTypes.h b/docshell/base/nsDocShellLoadTypes.h @@ -21,6 +21,7 @@ # define MAKE_LOAD_TYPE(type, flags) ((type) | ((flags) << 16)) # define LOAD_TYPE_HAS_FLAGS(type, flags) ((type) & ((flags) << 16)) +# define LOAD_TYPE_SET_FLAGS(type, flags) ((type) | ((flags) << 16)) /** * These are flags that confuse ConvertLoadTypeToDocShellLoadInfo and should @@ -201,5 +202,17 @@ inline nsDOMNavigationTiming::Type ConvertLoadTypeToNavigationType( return result; } +static inline uint32_t MaybeAddLoadFlags(uint32_t aLoadType, uint32_t aFlags) { + uint32_t loadType = LOAD_TYPE_SET_FLAGS(aLoadType, aFlags); + if (IsValidLoadType(loadType)) { + return loadType; + } + + NS_WARNING("Adjusting load flags results in an invalid load type."); + return aLoadType; +} + +# undef LOAD_TYPE_SET_FLAGS + #endif // MOZILLA_INTERNAL_API #endif diff --git a/docshell/test/chrome/bug311007_window.xhtml b/docshell/test/chrome/bug311007_window.xhtml @@ -114,6 +114,13 @@ function step2A() { } function step2B(aWebProgress, aRequest, aLocation, aFlags) { + content.addEventListener( + 'load', + () => step2C(aWebProgress, aRequest, aLocation, aFlags), + {once: true}); +} + +function step2C(aWebProgress, aRequest, aLocation, aFlags) { is(aLocation.spec, kSecureURI, "A URI on HTTPS (2)"); ok(!(aFlags & Ci.nsIWebProgressListener diff --git a/dom/base/AbstractRange.h b/dom/base/AbstractRange.h @@ -12,7 +12,6 @@ #include "ErrorList.h" #include "js/RootingAPI.h" -#include "mozilla/Maybe.h" #include "mozilla/RangeBoundary.h" #include "mozilla/RefPtr.h" #include "mozilla/WeakPtr.h" diff --git a/dom/base/Document.cpp b/dom/base/Document.cpp @@ -1390,6 +1390,7 @@ Document::Document(const char* aContentType) mHaveFiredTitleChange(false), mIsShowing(false), mVisible(true), + mIsCompletelyLoaded(false), mRemovedFromDocShell(false), // mAllowDNSPrefetch starts true, so that we can always reliably && it // with various values that might disable it. Since we never prefetch @@ -12572,6 +12573,8 @@ void Document::OnPageShow(bool aPersisted, EventTarget* aDispatchStartTarget, if (auto* wgc = GetWindowGlobalChild()) { wgc->UnblockBFCacheFor(BFCacheStatus::PAGE_LOADING); } + + mIsCompletelyLoaded = true; } static void DispatchFullscreenChange(Document& aDocument, nsINode* aTarget) { diff --git a/dom/base/Document.h b/dom/base/Document.h @@ -2676,12 +2676,20 @@ class Document : public nsINode, * called yet. */ bool IsShowing() const { return mIsShowing; } + /** * Return whether the document is currently visible (in the sense of * OnPageHide having been called and OnPageShow not yet having been called) */ bool IsVisible() const { return mVisible; } + /** + * Return whether the document has completely finished loading, in the spec + * sense. We only store a bool though, whereas spec stores when loading + * finished. See https://html.spec.whatwg.org/#completely-loaded-time + */ + bool IsCompletelyLoaded() const { return mIsCompletelyLoaded; } + void SetSuppressedEventListener(EventListener* aListener); EventListener* GetSuppressedEventListener() { @@ -4842,6 +4850,10 @@ class Document : public nsINode, // it's false only when we're in bfcache or unloaded. bool mVisible : 1; + // State for IsCompletelyLoaded. Starts off false and becomes true after + // pageshow has fired. Doesn't reset after that. + bool mIsCompletelyLoaded : 1; + // True if our content viewer has been removed from the docshell // (it may still be displayed, but in zombie state). Form control data // has been saved. diff --git a/dom/base/IdleDeadline.h b/dom/base/IdleDeadline.h @@ -9,7 +9,6 @@ #include "js/TypeDecls.h" #include "mozilla/Attributes.h" -#include "mozilla/Maybe.h" #include "mozilla/dom/BindingDeclarations.h" #include "nsCOMPtr.h" #include "nsCycleCollectionParticipant.h" diff --git a/dom/base/Location.cpp b/dom/base/Location.cpp @@ -173,7 +173,7 @@ void Location::SetHash(const nsACString& aHash, nsIPrincipal& aSubjectPrincipal, return; } - SetURI(uri, aSubjectPrincipal, aRv); + Navigate(uri, aSubjectPrincipal, aRv); } void Location::GetHost(nsACString& aHost, nsIPrincipal& aSubjectPrincipal, @@ -211,7 +211,7 @@ void Location::SetHost(const nsACString& aHost, nsIPrincipal& aSubjectPrincipal, return; } - SetURI(uri, aSubjectPrincipal, aRv); + Navigate(uri, aSubjectPrincipal, aRv); } void Location::GetHostname(nsACString& aHostname, @@ -248,7 +248,7 @@ void Location::SetHostname(const nsACString& aHostname, return; } - SetURI(uri, aSubjectPrincipal, aRv); + Navigate(uri, aSubjectPrincipal, aRv); } nsresult Location::GetHref(nsACString& aHref) { @@ -328,7 +328,7 @@ void Location::SetPathname(const nsACString& aPathname, return; } - SetURI(uri, aSubjectPrincipal, aRv); + Navigate(uri, aSubjectPrincipal, aRv); } void Location::GetPort(nsACString& aPort, nsIPrincipal& aSubjectPrincipal, @@ -387,7 +387,7 @@ void Location::SetPort(const nsACString& aPort, nsIPrincipal& aSubjectPrincipal, return; } - SetURI(uri, aSubjectPrincipal, aRv); + Navigate(uri, aSubjectPrincipal, aRv); } void Location::GetProtocol(nsACString& aProtocol, @@ -462,7 +462,7 @@ void Location::SetProtocol(const nsACString& aProtocol, return; } - SetURI(uri, aSubjectPrincipal, aRv); + Navigate(uri, aSubjectPrincipal, aRv); } void Location::GetSearch(nsACString& aSearch, nsIPrincipal& aSubjectPrincipal, @@ -513,7 +513,7 @@ void Location::SetSearch(const nsACString& aSearch, return; } - SetURI(uri, aSubjectPrincipal, aRv); + Navigate(uri, aSubjectPrincipal, aRv); } void Location::Reload(JSContext* aCx, bool aForceget, diff --git a/dom/base/LocationBase.cpp b/dom/base/LocationBase.cpp @@ -12,6 +12,7 @@ #include "mozilla/dom/WindowContext.h" #include "nsCOMPtr.h" #include "nsContentUtils.h" +#include "nsDocLoader.h" #include "nsDocShellLoadState.h" #include "nsError.h" #include "nsGlobalWindowInner.h" @@ -23,16 +24,28 @@ namespace mozilla::dom { -void LocationBase::SetURI(nsIURI* aURI, nsIPrincipal& aSubjectPrincipal, - ErrorResult& aRv, bool aReplace) { - RefPtr<BrowsingContext> bc = GetBrowsingContext(); - if (!bc || bc->IsDiscarded()) { +static bool IncumbentGlobalHasTransientActivation() { + nsGlobalWindowInner* window = nsContentUtils::IncumbentInnerWindow(); + return window && window->GetWindowContext() && window->GetWindowContext() && + window->GetWindowContext()->HasValidTransientUserGestureActivation(); +} + +// https://html.spec.whatwg.org/#location-object-navigate +void LocationBase::Navigate(nsIURI* aURI, nsIPrincipal& aSubjectPrincipal, + ErrorResult& aRv, + NavigationHistoryBehavior aHistoryHandling) { + // Step 1 + RefPtr<BrowsingContext> navigable = GetBrowsingContext(); + if (!navigable || navigable->IsDiscarded()) { return; } - bc->Navigate(aURI, aSubjectPrincipal, aRv, - aReplace ? NavigationHistoryBehavior::Replace - : NavigationHistoryBehavior::Auto); + // Step 2-3, except the check for if document is completely loaded. + bool needsCompletelyLoadedDocument = !IncumbentGlobalHasTransientActivation(); + + // Step 4 + navigable->Navigate(aURI, aSubjectPrincipal, aRv, aHistoryHandling, + needsCompletelyLoadedDocument); } void LocationBase::SetHref(const nsACString& aHref, @@ -94,7 +107,12 @@ void LocationBase::SetHrefWithBase(const nsACString& aHref, nsIURI* aBase, } } - SetURI(newUri, aSubjectPrincipal, aRv, aReplace || inScriptTag); + NavigationHistoryBehavior historyHandling = NavigationHistoryBehavior::Auto; + if (aReplace || inScriptTag) { + historyHandling = NavigationHistoryBehavior::Replace; + } + + Navigate(newUri, aSubjectPrincipal, aRv, historyHandling); } void LocationBase::Replace(const nsACString& aUrl, diff --git a/dom/base/LocationBase.h b/dom/base/LocationBase.h @@ -7,6 +7,7 @@ #ifndef mozilla_dom_LocationBase_h #define mozilla_dom_LocationBase_h +#include "mozilla/dom/NavigationBinding.h" #include "nsStringFwd.h" class nsIDocShell; @@ -37,8 +38,9 @@ class LocationBase { virtual BrowsingContext* GetBrowsingContext() = 0; virtual nsIDocShell* GetDocShell() = 0; - void SetURI(nsIURI* aURI, nsIPrincipal& aSubjectPrincipal, ErrorResult& aRv, - bool aReplace = false); + void Navigate(nsIURI* aURI, nsIPrincipal& aSubjectPrincipal, ErrorResult& aRv, + NavigationHistoryBehavior aHistoryHandling = + NavigationHistoryBehavior::Auto); void SetHrefWithBase(const nsACString& aHref, nsIURI* aBase, nsIPrincipal& aSubjectPrincipal, bool aReplace, ErrorResult& aRv); diff --git a/dom/base/nsContentUtils.cpp b/dom/base/nsContentUtils.cpp @@ -7816,16 +7816,10 @@ nsIWidget* nsContentUtils::WidgetForDocument(const Document* aDocument) { nsIWidget* nsContentUtils::WidgetForContent(const nsIContent* aContent) { nsIFrame* frame = aContent->GetPrimaryFrame(); - if (frame) { - frame = nsLayoutUtils::GetDisplayRootFrame(frame); - - nsView* view = frame->GetView(); - if (view) { - return view->GetWidget(); - } + if (!frame) { + return nullptr; } - - return nullptr; + return frame->GetNearestWidget(); } WindowRenderer* nsContentUtils::WindowRendererForContent( @@ -7840,11 +7834,9 @@ WindowRenderer* nsContentUtils::WindowRendererForContent( WindowRenderer* nsContentUtils::WindowRendererForDocument( const Document* aDoc) { - nsIWidget* widget = nsContentUtils::WidgetForDocument(aDoc); - if (widget) { + if (nsIWidget* widget = nsContentUtils::WidgetForDocument(aDoc)) { return widget->GetWindowRenderer(); } - return nullptr; } @@ -9430,7 +9422,8 @@ nsIWidget* nsContentUtils::GetWidget(PresShell* aPresShell, nsPoint* aOffset) { if (!frame) { return nullptr; } - return frame->GetView()->GetNearestWidget(aOffset); + return aOffset ? frame->GetNearestWidget(*aOffset) + : frame->GetNearestWidget(); } int16_t nsContentUtils::GetButtonsFlagForButton(int32_t aButton) { diff --git a/dom/base/nsGlobalWindowOuter.cpp b/dom/base/nsGlobalWindowOuter.cpp @@ -6769,7 +6769,7 @@ nsresult nsGlobalWindowOuter::OpenInternal( // BrowsingContext::RevisePopupAbuseLevel() below. RefPtr<nsDocShellLoadState> loadState = aLoadState; if (!loadState && aNavigate && uri) { - loadState = nsWindowWatcher::CreateLoadState(uri, this); + loadState = nsWindowWatcher::CreateLoadState(uri, this, aDoJSFixups); } PopupBlocker::PopupControlState abuseLevel = diff --git a/dom/base/nsTreeSanitizer.h b/dom/base/nsTreeSanitizer.h @@ -5,7 +5,6 @@ #ifndef nsTreeSanitizer_h_ #define nsTreeSanitizer_h_ -#include "mozilla/Maybe.h" #include "mozilla/dom/NameSpaceConstants.h" #include "mozilla/dom/StaticAtomSet.h" #include "nsAtom.h" diff --git a/dom/bindings/ProxyHandlerUtils.h b/dom/bindings/ProxyHandlerUtils.h @@ -14,7 +14,6 @@ #include "js/TypeDecls.h" #include "jsfriendapi.h" // js::StringIsArrayIndex #include "mozilla/Likely.h" -#include "mozilla/Maybe.h" #include "mozilla/TextUtils.h" namespace mozilla::dom { diff --git a/dom/ipc/DOMTypes.ipdlh b/dom/ipc/DOMTypes.ipdlh @@ -64,6 +64,7 @@ using mozilla::dom::NotificationDirection from "mozilla/dom/NotificationBinding. using mozilla::dom::UserNavigationInvolvement from "mozilla/dom/UserNavigationInvolvement.h"; using mozilla::net::ClassificationFlags from "nsIClassifiedChannel.h"; using mozilla::dom::ForceMediaDocument from "mozilla/dom/LoadURIOptionsBinding.h"; +using mozilla::dom::NavigationHistoryBehavior from "mozilla/dom/NavigationBinding.h"; namespace mozilla { namespace dom { @@ -226,6 +227,10 @@ struct DocShellLoadStateInit bool TextDirectiveUserActivation; bool AllowFocusMove; bool IsFromProcessingFrameAttributes; + bool NeedsCompletelyLoadedDocument; + bool ShouldNotForceReplaceInOnLoad; + NavigationHistoryBehavior? HistoryBehavior; + SchemelessInputType SchemelessInput; ForceMediaDocument forceMediaDocument; HTTPSUpgradeTelemetryType HttpsUpgradeTelemetry; diff --git a/dom/ipc/NavigationAPIIPCUtils.h b/dom/ipc/NavigationAPIIPCUtils.h @@ -23,5 +23,10 @@ template <> struct ParamTraits<mozilla::dom::NavigationType> : public mozilla::dom::WebIDLEnumSerializer<mozilla::dom::NavigationType> { }; + +template <> +struct ParamTraits<mozilla::dom::NavigationHistoryBehavior> + : public mozilla::dom::WebIDLEnumSerializer< + mozilla::dom::NavigationHistoryBehavior> {}; } // namespace IPC #endif diff --git a/dom/navigation/Navigation.cpp b/dom/navigation/Navigation.cpp @@ -564,7 +564,7 @@ void Navigation::Navigate(JSContext* aCx, const nsAString& aUrl, MOZ_DIAGNOSTIC_ASSERT(bc); bc->Navigate(urlRecord, *document->NodePrincipal(), /* per spec, error handling defaults to false */ IgnoreErrors(), - aOptions.mHistory, /* aShouldNotForceReplaceInOnLoad */ true); + aOptions.mHistory); // 13. If this's upcoming non-traverse API method tracker is apiMethodTracker, // then: diff --git a/dom/security/test/sec-fetch/file_no_cache.sjs b/dom/security/test/sec-fetch/file_no_cache.sjs @@ -2,7 +2,7 @@ const MESSAGE_PAGE = function (msg) { return ` <html> <script type="text/javascript"> -window.parent.postMessage({test : "${msg}"},"*"); +onload = () => window.parent.postMessage({test : "${msg}"},"*"); </script> <script> addEventListener("back", () => { diff --git a/dom/security/test/sec-fetch/test_iframe_history_manipulation.html b/dom/security/test/sec-fetch/test_iframe_history_manipulation.html @@ -78,7 +78,7 @@ SimpleTest.waitForExplicitFinish(); testFrame = document.createElement('iframe'); testFrame.src = `https://example.org/${REQUEST_PATH}?test`; -document.body.appendChild(testFrame); +onload = () => setTimeout(() => document.body.appendChild(testFrame), 0); </script> </body> diff --git a/mfbt/Maybe.h b/mfbt/Maybe.h @@ -34,9 +34,7 @@ namespace mozilla { struct Nothing {}; -inline constexpr bool operator==(const Nothing&, const Nothing&) { - return true; -} +constexpr bool operator==(const Nothing&, const Nothing&) { return true; } template <class T> class Maybe; @@ -303,8 +301,7 @@ using IsMaybe = IsMaybeImpl<std::decay_t<T>>; } // namespace detail -template <typename T, typename U = typename std::remove_cv< - typename std::remove_reference<T>::type>::type> +template <typename T, typename U = std::remove_cv_t<std::remove_reference_t<T>>> constexpr Maybe<U> Some(T&& aValue); /* diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/address/ui/edit/DeleteAddressDialog.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/address/ui/edit/DeleteAddressDialog.kt @@ -44,14 +44,14 @@ internal fun DeleteAddressDialog(store: AddressStore) { onDismissRequest = { store.dispatch(DeleteDialogAction.CancelTapped) }, confirmButton = { TextButton( - text = stringResource(R.string.addressess_confirm_dialog_ok_button).uppercase(), + text = stringResource(R.string.addressess_confirm_dialog_ok_button), onClick = { store.dispatch(DeleteDialogAction.DeleteTapped) }, modifier = Modifier.testTag(EditAddressTestTag.DIALOG_DELETE_BUTTON), ) }, dismissButton = { TextButton( - text = stringResource(R.string.addressess_confirm_dialog_cancel_button).uppercase(), + text = stringResource(R.string.addressess_confirm_dialog_cancel_button), onClick = { store.dispatch(DeleteDialogAction.CancelTapped) }, modifier = Modifier.testTag(EditAddressTestTag.DIALOG_CANCEL_BUTTON), ) diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/logins/ui/LoginDetailsScreen.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/logins/ui/LoginDetailsScreen.kt @@ -378,7 +378,7 @@ private fun LoginDeletionDialog( onClick = onDeleteTapped, ) { Text( - text = stringResource(R.string.bookmark_menu_delete_button).uppercase(), + text = stringResource(R.string.bookmark_menu_delete_button), ) } }, @@ -387,7 +387,7 @@ private fun LoginDeletionDialog( onClick = onCancelTapped, ) { Text( - text = stringResource(R.string.bookmark_delete_negative).uppercase(), + text = stringResource(R.string.bookmark_delete_negative), ) } }, diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tabstray/ui/banner/TabsTrayBanner.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tabstray/ui/banner/TabsTrayBanner.kt @@ -314,6 +314,9 @@ private fun TabPageBanner( } }, expandedHeight = ROW_HEIGHT_DP.dp, + colors = TopAppBarDefaults.centerAlignedTopAppBarColors( + scrolledContainerColor = MaterialTheme.colorScheme.surfaceContainerHigh, + ), scrollBehavior = scrollBehavior, ) } diff --git a/mobile/android/fenix/app/src/main/res/values/styles.xml b/mobile/android/fenix/app/src/main/res/values/styles.xml @@ -261,6 +261,7 @@ <style name="PrivateThemeBase" parent="Theme.Material3.DayNight.NoActionBar"> <!-- Android system styling --> <item name="searchViewStyle">@style/SearchViewStyle</item> + <item name="android:textColorLink">@color/fx_mobile_private_text_color_accent</item> <item name="autoCompleteTextViewStyle">@style/AutoCompleteTextViewStyle</item> <item name="android:textAlignment">viewStart</item> <item name="android:datePickerDialogTheme">@style/PrivateDatePickerDialogStyle</item> diff --git a/mobile/locales/l10n-changesets.json b/mobile/locales/l10n-changesets.json @@ -6,7 +6,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "an": { "pin": false, @@ -15,7 +15,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "ar": { "pin": false, @@ -24,7 +24,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "ast": { "pin": false, @@ -33,7 +33,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "az": { "pin": false, @@ -42,7 +42,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "be": { "pin": false, @@ -51,7 +51,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "bg": { "pin": false, @@ -60,7 +60,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "bn": { "pin": false, @@ -69,7 +69,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "br": { "pin": false, @@ -78,7 +78,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "bs": { "pin": false, @@ -87,7 +87,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "ca": { "pin": false, @@ -96,7 +96,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "cak": { "pin": false, @@ -105,7 +105,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "cs": { "pin": false, @@ -114,7 +114,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "cy": { "pin": false, @@ -123,7 +123,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "da": { "pin": false, @@ -132,7 +132,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "de": { "pin": false, @@ -141,7 +141,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "dsb": { "pin": false, @@ -150,7 +150,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "el": { "pin": false, @@ -159,7 +159,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "en-CA": { "pin": false, @@ -168,7 +168,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "en-GB": { "pin": false, @@ -177,7 +177,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "eo": { "pin": false, @@ -186,7 +186,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "es-AR": { "pin": false, @@ -195,7 +195,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "es-CL": { "pin": false, @@ -204,7 +204,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "es-ES": { "pin": false, @@ -213,7 +213,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "es-MX": { "pin": false, @@ -222,7 +222,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "et": { "pin": false, @@ -231,7 +231,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "eu": { "pin": false, @@ -240,7 +240,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "fa": { "pin": false, @@ -249,7 +249,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "ff": { "pin": false, @@ -258,7 +258,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "fi": { "pin": false, @@ -267,7 +267,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "fr": { "pin": false, @@ -276,7 +276,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "fy-NL": { "pin": false, @@ -285,7 +285,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "ga-IE": { "pin": false, @@ -294,7 +294,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "gd": { "pin": false, @@ -303,7 +303,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "gl": { "pin": false, @@ -312,7 +312,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "gn": { "pin": false, @@ -321,7 +321,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "gu-IN": { "pin": false, @@ -330,7 +330,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "he": { "pin": false, @@ -339,7 +339,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "hi-IN": { "pin": false, @@ -348,7 +348,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "hr": { "pin": false, @@ -357,7 +357,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "hsb": { "pin": false, @@ -366,7 +366,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "hu": { "pin": false, @@ -375,7 +375,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "hy-AM": { "pin": false, @@ -384,7 +384,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "ia": { "pin": false, @@ -393,7 +393,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "id": { "pin": false, @@ -402,7 +402,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "is": { "pin": false, @@ -411,7 +411,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "it": { "pin": false, @@ -420,7 +420,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "ja": { "pin": false, @@ -429,7 +429,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "ka": { "pin": false, @@ -438,7 +438,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "kab": { "pin": false, @@ -447,7 +447,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "kk": { "pin": false, @@ -456,7 +456,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "km": { "pin": false, @@ -465,7 +465,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "kn": { "pin": false, @@ -474,7 +474,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "ko": { "pin": false, @@ -483,7 +483,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "lij": { "pin": false, @@ -492,7 +492,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "lo": { "pin": false, @@ -501,7 +501,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "lt": { "pin": false, @@ -510,7 +510,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "ltg": { "pin": false, @@ -519,7 +519,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "lv": { "pin": false, @@ -528,7 +528,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "meh": { "pin": false, @@ -537,7 +537,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "mix": { "pin": false, @@ -546,7 +546,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "ml": { "pin": false, @@ -555,7 +555,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "mr": { "pin": false, @@ -564,7 +564,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "ms": { "pin": false, @@ -573,7 +573,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "my": { "pin": false, @@ -582,7 +582,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "nb-NO": { "pin": false, @@ -591,7 +591,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "ne-NP": { "pin": false, @@ -600,7 +600,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "nl": { "pin": false, @@ -609,7 +609,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "nn-NO": { "pin": false, @@ -618,7 +618,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "oc": { "pin": false, @@ -627,7 +627,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "pa-IN": { "pin": false, @@ -636,7 +636,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "pl": { "pin": false, @@ -645,7 +645,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "pt-BR": { "pin": false, @@ -654,7 +654,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "pt-PT": { "pin": false, @@ -663,7 +663,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "rm": { "pin": false, @@ -672,7 +672,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "ro": { "pin": false, @@ -681,7 +681,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "ru": { "pin": false, @@ -690,7 +690,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "sk": { "pin": false, @@ -699,7 +699,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "sl": { "pin": false, @@ -708,7 +708,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "son": { "pin": false, @@ -717,7 +717,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "sq": { "pin": false, @@ -726,7 +726,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "sr": { "pin": false, @@ -735,7 +735,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "sv-SE": { "pin": false, @@ -744,7 +744,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "ta": { "pin": false, @@ -753,7 +753,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "te": { "pin": false, @@ -762,7 +762,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "th": { "pin": false, @@ -771,7 +771,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "tl": { "pin": false, @@ -780,7 +780,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "tr": { "pin": false, @@ -789,7 +789,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "trs": { "pin": false, @@ -798,7 +798,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "uk": { "pin": false, @@ -807,7 +807,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "ur": { "pin": false, @@ -816,7 +816,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "uz": { "pin": false, @@ -825,7 +825,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "vi": { "pin": false, @@ -834,7 +834,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "wo": { "pin": false, @@ -843,7 +843,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "xh": { "pin": false, @@ -852,7 +852,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "zam": { "pin": false, @@ -861,7 +861,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "zh-CN": { "pin": false, @@ -870,7 +870,7 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" }, "zh-TW": { "pin": false, @@ -879,6 +879,6 @@ "android-arm", "android-multilocale" ], - "revision": "7a1e3cecf05293e3a459ef840401fb33b8cd55c7" + "revision": "37179a39d86b83a0268fc364242a73d6b9e3621e" } } \ No newline at end of file diff --git a/modules/libpref/init/StaticPrefList.yaml b/modules/libpref/init/StaticPrefList.yaml @@ -13521,7 +13521,7 @@ # Include an idempotency-key header for POST requests - name: network.http.idempotencyKey.enabled type: RelaxedAtomicBool - value: true + value: @IS_NIGHTLY_BUILD@ mirror: always # Whether to respect the redirected-tainted origin flag diff --git a/security/sandbox/chromium-shim/patches/50_more_resilient_initialization_for_sandboxed_children.patch b/security/sandbox/chromium-shim/patches/50_more_resilient_initialization_for_sandboxed_children.patch @@ -0,0 +1,45 @@ +Use a more resilient initialization for sandboxed children. + +If commiting RWX memory fails, we fall back to RW instead, which is +enough to initialize the thunks. In that case, we make sure that the +later transition to RX permission succeeds. +--- + sandbox/win/src/interception.cc | 16 +++++++++++++--- + 1 file changed, 13 insertions(+), 3 deletions(-) + +diff --git a/security/sandbox/chromium/sandbox/win/src/interception.cc b/security/sandbox/chromium/sandbox/win/src/interception.cc +index 04f32b099646..c78d56e17abc 100644 +--- a/security/sandbox/chromium/sandbox/win/src/interception.cc ++++ b/security/sandbox/chromium/sandbox/win/src/interception.cc +@@ -386,9 +386,16 @@ ResultCode InterceptionManager::PatchNtdll(bool hot_patch_needed) { + + // Make an aligned, padded allocation, and move the pointer to our chunk. + size_t thunk_bytes_padded = base::bits::AlignUp(thunk_bytes, kPageSize); +- thunk_base = reinterpret_cast<BYTE*>( ++ BYTE* thunk_base_rwx = reinterpret_cast<BYTE*>( + ::VirtualAllocEx(child, thunk_base, thunk_bytes_padded, MEM_COMMIT, + PAGE_EXECUTE_READWRITE)); ++ bool rwx_commit_succeeded = static_cast<bool>(thunk_base_rwx); ++ if (rwx_commit_succeeded) { ++ thunk_base = thunk_base_rwx; ++ } else { ++ thunk_base = reinterpret_cast<BYTE*>(::VirtualAllocEx( ++ child, thunk_base, thunk_bytes_padded, MEM_COMMIT, PAGE_READWRITE)); ++ } + CHECK(thunk_base); // If this fails we'd crash anyway on an invalid access. + DllInterceptionData* thunks = + reinterpret_cast<DllInterceptionData*>(thunk_base + thunk_offset); +@@ -418,8 +425,11 @@ ResultCode InterceptionManager::PatchNtdll(bool hot_patch_needed) { + + // Attempt to protect all the thunks, but ignore failure + DWORD old_protection; +- ::VirtualProtectEx(child, thunks, thunk_bytes, PAGE_EXECUTE_READ, +- &old_protection); ++ bool rx_update_succeeded = static_cast<bool>(::VirtualProtectEx( ++ child, thunks, thunk_bytes, PAGE_EXECUTE_READ, &old_protection)); ++ ++ // We need the EXECUTE permission on the thunks, one way or the other ++ CHECK(rwx_commit_succeeded || rx_update_succeeded); + + ResultCode ret = + child_->TransferVariable("g_originals", g_originals, sizeof(g_originals)); diff --git a/security/sandbox/chromium/sandbox/win/src/interception.cc b/security/sandbox/chromium/sandbox/win/src/interception.cc @@ -386,9 +386,16 @@ ResultCode InterceptionManager::PatchNtdll(bool hot_patch_needed) { // Make an aligned, padded allocation, and move the pointer to our chunk. size_t thunk_bytes_padded = base::bits::AlignUp(thunk_bytes, kPageSize); - thunk_base = reinterpret_cast<BYTE*>( + BYTE* thunk_base_rwx = reinterpret_cast<BYTE*>( ::VirtualAllocEx(child, thunk_base, thunk_bytes_padded, MEM_COMMIT, PAGE_EXECUTE_READWRITE)); + bool rwx_commit_succeeded = static_cast<bool>(thunk_base_rwx); + if (rwx_commit_succeeded) { + thunk_base = thunk_base_rwx; + } else { + thunk_base = reinterpret_cast<BYTE*>(::VirtualAllocEx( + child, thunk_base, thunk_bytes_padded, MEM_COMMIT, PAGE_READWRITE)); + } CHECK(thunk_base); // If this fails we'd crash anyway on an invalid access. DllInterceptionData* thunks = reinterpret_cast<DllInterceptionData*>(thunk_base + thunk_offset); @@ -418,8 +425,11 @@ ResultCode InterceptionManager::PatchNtdll(bool hot_patch_needed) { // Attempt to protect all the thunks, but ignore failure DWORD old_protection; - ::VirtualProtectEx(child, thunks, thunk_bytes, PAGE_EXECUTE_READ, - &old_protection); + bool rx_update_succeeded = static_cast<bool>(::VirtualProtectEx( + child, thunks, thunk_bytes, PAGE_EXECUTE_READ, &old_protection)); + + // We need the EXECUTE permission on the thunks, one way or the other + CHECK(rwx_commit_succeeded || rx_update_succeeded); ResultCode ret = child_->TransferVariable("g_originals", g_originals, sizeof(g_originals)); diff --git a/taskcluster/kinds/fetch/toolchains.yml b/taskcluster/kinds/fetch/toolchains.yml @@ -338,8 +338,8 @@ sccache: fetch: type: git repo: https://github.com/mozilla/sccache - # 0.9.1 release - revision: 77f67d73445a383ffd8af095fb7a8e41f258e80f + # 0.11.0 release + revision: 5709f069514a775ddb6604a6e9f5f5c91c0e9821 fxc2: description: fxc2 source code diff --git a/testing/web-platform/meta/html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/location-assign-user-click.html.ini b/testing/web-platform/meta/html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/location-assign-user-click.html.ini @@ -2,4 +2,5 @@ expected: if (processor == "x86") and (os == "linux"): [OK, ERROR] [NO replace before load, triggered by location.assign()] - expected: FAIL + expected: + if (os == "android") and not sessionHistoryInParent: FAIL diff --git a/testing/web-platform/meta/html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/location-setter-user-click.html.ini b/testing/web-platform/meta/html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/location-setter-user-click.html.ini @@ -2,10 +2,16 @@ expected: if (processor == "x86") and (os == "linux"): [OK, CRASH] [href] - expected: FAIL + expected: + if (os == "android") and not sessionHistoryInParent: FAIL + if (os == "mac"): [PASS, FAIL] [search] - expected: FAIL + expected: + if (os == "android") and not sessionHistoryInParent: FAIL + if (os == "mac"): [PASS, FAIL] [hash] - expected: FAIL + expected: + if (os == "android") and not sessionHistoryInParent: FAIL + if (os == "mac"): [PASS, FAIL] diff --git a/testing/web-platform/meta/html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/location-setter-user-mouseup.html.ini b/testing/web-platform/meta/html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/location-setter-user-mouseup.html.ini @@ -2,10 +2,13 @@ expected: if (os == "android") and fission: [OK, TIMEOUT] [href] - expected: FAIL + expected: + if (os == "android") and not sessionHistoryInParent: FAIL [search] - expected: FAIL + expected: + if (os == "android") and not sessionHistoryInParent: FAIL [hash] - expected: FAIL + expected: + if (os == "android") and not sessionHistoryInParent: FAIL diff --git a/testing/web-platform/meta/html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/window-open-self-during-load.html.ini b/testing/web-platform/meta/html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/window-open-self-during-load.html.ini @@ -2,4 +2,5 @@ expected: if (os == "android") and fission: [OK, TIMEOUT] [No replace during load, triggered by window.open(_self) on an iframe] - expected: FAIL + expected: + if (os == "android") and not sessionHistoryInParent: FAIL diff --git a/testing/web-platform/meta/html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/window-open-self-during-pageshow.html.ini b/testing/web-platform/meta/html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/window-open-self-during-pageshow.html.ini @@ -2,4 +2,5 @@ expected: if (os == "android") and fission: [OK, TIMEOUT] [No replace during pageshow, triggered by window.open(_self) on an iframe] - expected: FAIL + expected: + if (os == "android") and not sessionHistoryInParent: FAIL diff --git a/testing/web-platform/meta/html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/window-open-self.html.ini b/testing/web-platform/meta/html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/window-open-self.html.ini @@ -2,4 +2,5 @@ expected: if (os == "android") and fission: [OK, TIMEOUT] [No replace before load, triggered by window.open(_self) on an iframe] - expected: FAIL + expected: + if (os == "android") and not sessionHistoryInParent: FAIL diff --git a/testing/web-platform/meta/html/browsers/history/the-history-interface/traverse-during-beforeunload.html.ini b/testing/web-platform/meta/html/browsers/history/the-history-interface/traverse-during-beforeunload.html.ini @@ -1,4 +1,4 @@ [traverse-during-beforeunload.html] [Traversing the history during beforeunload] - expected: FAIL - + expected: + if (os == "android") and not sessionHistoryInParent: FAIL diff --git a/testing/web-platform/meta/navigation-api/currententrychange-event/location-api.html.ini b/testing/web-platform/meta/navigation-api/currententrychange-event/location-api.html.ini @@ -1,3 +0,0 @@ -[location-api.html] - [currententrychange fires for location API navigations] - expected: FAIL diff --git a/testing/web-platform/meta/navigation-api/navigate-event/cross-window/location-crossdocument-crossorigin-sameorigindomain.sub.html.ini b/testing/web-platform/meta/navigation-api/navigate-event/cross-window/location-crossdocument-crossorigin-sameorigindomain.sub.html.ini @@ -1,3 +0,0 @@ -[location-crossdocument-crossorigin-sameorigindomain.sub.html] - [using location.href to navigate cross-document targeting a same-origin-domain (but cross-origin) window] - expected: FAIL diff --git a/testing/web-platform/meta/navigation-api/navigate-event/cross-window/location-crossdocument-sameorigin.html.ini b/testing/web-platform/meta/navigation-api/navigate-event/cross-window/location-crossdocument-sameorigin.html.ini @@ -1,3 +0,0 @@ -[location-crossdocument-sameorigin.html] - [using location.href to navigate cross-document targeting a same-origin window] - expected: FAIL diff --git a/testing/web-platform/meta/navigation-api/navigate-event/cross-window/location-samedocument-crossorigin-sameorigindomain.sub.html.ini b/testing/web-platform/meta/navigation-api/navigate-event/cross-window/location-samedocument-crossorigin-sameorigindomain.sub.html.ini @@ -1,12 +0,0 @@ -[location-samedocument-crossorigin-sameorigindomain.sub.html] - expected: - if (os == "win") and debug and (processor == "x86_64"): [OK, CRASH, FAIL, ERROR] - if (os == "win") and debug and (processor == "x86"): [OK, FAIL, ERROR, CRASH] - if (os == "linux") and asan and fission: [CRASH, OK, FAIL] - if (os == "linux") and asan and not fission: [OK, CRASH, FAIL] - if (os == "linux") and not asan and (processor == "x86"): [OK, CRASH, FAIL] - if (os == "mac") and not debug: [OK, ERROR, FAIL, CRASH] - if (os == "android") and debug: [CRASH, OK, FAIL] - [OK, FAIL, CRASH] - [using location.href to navigate same-document targeting a same-origin-domain (but cross-origin) window] - expected: FAIL diff --git a/testing/web-platform/meta/navigation-api/navigate-event/cross-window/location-samedocument-crossorigin.html.ini b/testing/web-platform/meta/navigation-api/navigate-event/cross-window/location-samedocument-crossorigin.html.ini @@ -1,3 +0,0 @@ -[location-samedocument-crossorigin.html] - [using location.href to navigate same-document targeting a cross-origin window] - expected: FAIL diff --git a/testing/web-platform/meta/navigation-api/navigate-event/cross-window/location-samedocument-sameorigin.html.ini b/testing/web-platform/meta/navigation-api/navigate-event/cross-window/location-samedocument-sameorigin.html.ini @@ -1,3 +0,0 @@ -[location-samedocument-sameorigin.html] - [using location.href to navigate same-document targeting a same-origin window] - expected: FAIL diff --git a/testing/web-platform/meta/navigation-api/navigate-event/cross-window/open-crossdocument-crossorigin-sameorigindomain.sub.html.ini b/testing/web-platform/meta/navigation-api/navigate-event/cross-window/open-crossdocument-crossorigin-sameorigindomain.sub.html.ini @@ -1,3 +0,0 @@ -[open-crossdocument-crossorigin-sameorigindomain.sub.html] - [using window.open() to navigate cross-document targeting a same-origin-domain (but cross-origin) window] - expected: FAIL diff --git a/testing/web-platform/meta/navigation-api/navigate-event/cross-window/open-crossdocument-sameorigin.html.ini b/testing/web-platform/meta/navigation-api/navigate-event/cross-window/open-crossdocument-sameorigin.html.ini @@ -1,3 +0,0 @@ -[open-crossdocument-sameorigin.html] - [using window.open() to navigate cross-document targeting a same-origin window] - expected: FAIL diff --git a/testing/web-platform/meta/navigation-api/navigate-event/cross-window/open-samedocument-crossorigin-sameorigindomain.sub.html.ini b/testing/web-platform/meta/navigation-api/navigate-event/cross-window/open-samedocument-crossorigin-sameorigindomain.sub.html.ini @@ -1,3 +0,0 @@ -[open-samedocument-crossorigin-sameorigindomain.sub.html] - [using window.open() to navigate same-document targeting a same-origin-domain (but cross-origin) window] - expected: FAIL diff --git a/testing/web-platform/meta/navigation-api/navigate-event/cross-window/open-samedocument-crossorigin.html.ini b/testing/web-platform/meta/navigation-api/navigate-event/cross-window/open-samedocument-crossorigin.html.ini @@ -1,3 +0,0 @@ -[open-samedocument-crossorigin.html] - [using window.open() to navigate same-document targeting a cross-origin window] - expected: FAIL diff --git a/testing/web-platform/meta/navigation-api/navigate-event/cross-window/open-samedocument-sameorigin.html.ini b/testing/web-platform/meta/navigation-api/navigate-event/cross-window/open-samedocument-sameorigin.html.ini @@ -1,3 +0,0 @@ -[open-samedocument-sameorigin.html] - [using window.open() to navigate same-document targeting a same-origin window] - expected: FAIL diff --git a/testing/web-platform/meta/navigation-api/navigate-event/navigate-iframe-location.html.ini b/testing/web-platform/meta/navigation-api/navigate-event/navigate-iframe-location.html.ini @@ -1,3 +0,0 @@ -[navigate-iframe-location.html] - [location API on another window fires navigate event in the target window only] - expected: FAIL diff --git a/testing/web-platform/meta/navigation-api/navigate-event/navigate-navigation-navigate.html.ini b/testing/web-platform/meta/navigation-api/navigate-event/navigate-navigation-navigate.html.ini @@ -1,3 +0,0 @@ -[navigate-navigation-navigate.html] - [navigate event for navigation.navigate()] - expected: FAIL diff --git a/testing/web-platform/meta/navigation-api/navigate-event/navigate-window-open-self.html.ini b/testing/web-platform/meta/navigation-api/navigate-event/navigate-window-open-self.html.ini @@ -1,3 +0,0 @@ -[navigate-window-open-self.html] - [window.open() fires navigate event when targeting self] - expected: FAIL diff --git a/testing/web-platform/meta/navigation-api/navigate-event/navigate-window-open.html.ini b/testing/web-platform/meta/navigation-api/navigate-event/navigate-window-open.html.ini @@ -1,5 +0,0 @@ -[navigate-window-open.html] - expected: - if os == "mac": [OK, ERROR, CRASH] - [window.open() fires navigate event in target window but not source] - expected: FAIL diff --git a/testing/web-platform/meta/navigation-api/navigation-history-entry/current-basic.html.ini b/testing/web-platform/meta/navigation-api/navigation-history-entry/current-basic.html.ini @@ -1,3 +0,0 @@ -[current-basic.html] - [Basic tests for navigation.currentEntry] - expected: FAIL diff --git a/testing/web-platform/meta/navigation-api/navigation-methods/sandboxing-back-parent.html.ini b/testing/web-platform/meta/navigation-api/navigation-methods/sandboxing-back-parent.html.ini @@ -1,3 +1,6 @@ [sandboxing-back-parent.html] + expected: + OK [A sandboxed iframe cannot navigate its parent via its own navigation object by using back()] - expected: FAIL + expected: + FAIL diff --git a/testing/web-platform/meta/navigation-api/precommit-handler/precommitHandler-push.html.ini b/testing/web-platform/meta/navigation-api/precommit-handler/precommitHandler-push.html.ini @@ -3,4 +3,4 @@ expected: FAIL [precommitHandler for a push navigation, reject after commit] - expected: FAIL + expected: [PASS, FAIL] diff --git a/testing/web-platform/meta/navigation-api/state/cross-document-getState-undefined.html.ini b/testing/web-platform/meta/navigation-api/state/cross-document-getState-undefined.html.ini @@ -1,3 +0,0 @@ -[cross-document-getState-undefined.html] - [Default behavior for entry.getState() for a non-current cross-document entry] - expected: FAIL diff --git a/testing/web-platform/meta/navigation-api/state/cross-document-location-api.html.ini b/testing/web-platform/meta/navigation-api/state/cross-document-location-api.html.ini @@ -1,15 +0,0 @@ -[cross-document-location-api.html?method=navigate] - expected: - if (os == "linux") and not tsan and (processor == "x86_64") and debug and not fission: [CRASH, OK] - if (os == "win") and not debug and (processor == "x86"): [CRASH, OK] - if (os == "mac") and not debug: [ERROR, CRASH, OK] - if (os == "linux") and tsan: [CRASH, OK] - if (os == "android") and not debug: [CRASH, OK] - [OK, CRASH] - [entry.getState() behavior after cross-document location API navigation] - expected: FAIL - - -[cross-document-location-api.html?method=updateCurrentEntry] - [entry.getState() behavior after cross-document location API navigation] - expected: FAIL diff --git a/testing/web-platform/meta/webdriver/tests/bidi/browsing_context/navigation_started/navigation_interrupted.py.ini b/testing/web-platform/meta/webdriver/tests/bidi/browsing_context/navigation_started/navigation_interrupted.py.ini @@ -1,3 +1,4 @@ [navigation_interrupted.py] [test_multiple_events_for_interrupted_navigation[Interrupted on load\]] - expected: FAIL + expected: + if not sessionHistoryInParent: FAIL diff --git a/testing/web-platform/tests/css/cssom-view/scroll-behavior-smooth-navigation.html b/testing/web-platform/tests/css/cssom-view/scroll-behavior-smooth-navigation.html @@ -70,7 +70,6 @@ }); location.hash = "foo"; }; - instant(); function smooth() { document.documentElement.className = ""; @@ -110,4 +109,9 @@ }; testContainer.style.display = "none"; + + // Setting location.hash while loading results in a replace load, which we don't want. + window.onload = () => { + step_timeout(instant, 0); + } </script> diff --git a/testing/web-platform/tests/html/browsers/history/the-location-interface/scripted_form_submit_assign_during_load-1.html b/testing/web-platform/tests/html/browsers/history/the-location-interface/scripted_form_submit_assign_during_load-1.html @@ -1,6 +1,6 @@ <!doctype html> <script> -opener.history_length = history.length; +opener.test_initial_history_length(history.length); </script> <form onsubmit="location = 'scripted_form_submit_assign_during_load-2.html'; return false;"> <input type=submit value="Click Me"> diff --git a/testing/web-platform/tests/html/browsers/history/the-location-interface/scripted_form_submit_assign_during_load-2.html b/testing/web-platform/tests/html/browsers/history/the-location-interface/scripted_form_submit_assign_during_load-2.html @@ -2,6 +2,6 @@ <p>This window should close itself and the test result appear in the original window <script> onload = function() { - setTimeout(function() {opener.do_test(history.length); window.close();}, 100); + setTimeout(function() {opener.test_assign_during_load(history.length); window.close();}, 100); } </script> diff --git a/testing/web-platform/tests/html/browsers/history/the-location-interface/scripted_form_submit_assign_during_load.html b/testing/web-platform/tests/html/browsers/history/the-location-interface/scripted_form_submit_assign_during_load.html @@ -10,8 +10,12 @@ var t = async_test(); var win = window.open("scripted_form_submit_assign_during_load-1.html"); var history_length; -do_test = t.step_func(function(new_length) { - assert_equals(new_length, history_length); +test_initial_history_length = t.step_func(function(new_length) { + history_length = new_length; + assert_equals(history_length, 1, "Should have inital history"); +}); +test_assign_during_load = t.step_func(function(new_length) { + assert_equals(new_length, history_length, "Assigning to Location during load should replace"); t.done(); }); </script> diff --git a/testing/web-platform/tests/html/browsers/the-window-object/open-close/self-close.html b/testing/web-platform/tests/html/browsers/the-window-object/open-close/self-close.html @@ -2,7 +2,7 @@ <p>self-close.html?navs=n&channel=name will navigate n times, then close and notify the channel.</p> <script> -window.onload = setTimeout(() => { +window.onload = () => setTimeout(() => { const urlParams = new URLSearchParams(window.location.search); let n = parseInt(urlParams.get('navs')) || 0; diff --git a/testing/web-platform/tests/navigation-api/navigate-event/navigate-navigation-navigate.html b/testing/web-platform/tests/navigation-api/navigate-event/navigate-navigation-navigate.html @@ -4,7 +4,7 @@ <script> async_test(t => { navigation.onnavigate = t.step_func_done(e => { - assert_equals(e.navigationType, "replace"); + assert_equals(e.navigationType, "push"); assert_true(e.cancelable); assert_true(e.canIntercept); assert_false(e.userInitiated); diff --git a/toolkit/components/windowwatcher/nsWindowWatcher.cpp b/toolkit/components/windowwatcher/nsWindowWatcher.cpp @@ -2064,7 +2064,7 @@ bool nsWindowWatcher::HaveSpecifiedSize(const WindowFeatures& features) { /* static */ already_AddRefed<nsDocShellLoadState> nsWindowWatcher::CreateLoadState( - nsIURI* aUri, nsPIDOMWindowOuter* aParent) { + nsIURI* aUri, nsPIDOMWindowOuter* aParent, bool aIsWindowOpen) { MOZ_ASSERT(aUri); RefPtr<nsDocShellLoadState> loadState = new nsDocShellLoadState(aUri); @@ -2094,6 +2094,12 @@ already_AddRefed<nsDocShellLoadState> nsWindowWatcher::CreateLoadState( } } + // If we're called from JS, i.e window.open, we need to set history handling + // behavior here to be able to do push to replace conversion if needed. + if (aIsWindowOpen && mozilla::SessionHistoryInParent()) { + loadState->SetHistoryBehavior(NavigationHistoryBehavior::Auto); + } + return loadState.forget(); } diff --git a/toolkit/components/windowwatcher/nsWindowWatcher.h b/toolkit/components/windowwatcher/nsWindowWatcher.h @@ -71,6 +71,7 @@ class nsWindowWatcher : public nsIWindowWatcher, * - the user gesture activation flag based on the parent document * - the text directive user activation flag; this will consume the parent * document's flag and OR's it with the user gesture activation flag. + * If `aIsWindowOpen` is true, history handling will be set to "auto". * * Currently, the returned load state is intended to be passed into * `OpenWindowInternal()`. @@ -78,7 +79,7 @@ class nsWindowWatcher : public nsIWindowWatcher, * function. */ static already_AddRefed<nsDocShellLoadState> CreateLoadState( - nsIURI* aUri, nsPIDOMWindowOuter* aParent); + nsIURI* aUri, nsPIDOMWindowOuter* aParent, bool aIsWindowOpen = false); protected: virtual ~nsWindowWatcher(); diff --git a/xpcom/docs/fmt-in-gecko.md b/xpcom/docs/fmt-in-gecko.md @@ -65,7 +65,7 @@ auto [out, size] = fmt::format_to(bufFmt, "{}", p); assert(!strcmp("POD: mA: 4.3, mB: 8", bufFmt)); fmt::println(FMT_STRING("### debug: {}"), p); fmt::print(stderr, FMT_STRING("### debug to stderr {}\n"), p); -MOZ_LOG_FMT(gLogModule, "Important: {}", p); +MOZ_LOG_FMT(gLogModule, LogLevel::Warning, "Important: {}", p); ``` # Formatting sequences @@ -87,7 +87,7 @@ ASSERT_STREQ("0x69, 0xd2, 0x3c, 0xa5", bufFmt); `MOZ_LOG_FMT` is like `MOZ_LOG`, but takes an `{fmt}`-style format string: ```c++ -MOZ_LOG_FMT(gLogModule, "{}x{} = {}", 3, 3, 3*3); +MOZ_LOG_FMT(gLogModule, LogLevel::Verbose, "{}x{} = {}", 3, 3, 3*3); ``` Unlike with `MOZ_LOG`, it is unnecessary to put an extra pair of parenthesis around the format and argument list. diff --git a/xpcom/ds/Tokenizer.cpp b/xpcom/ds/Tokenizer.cpp @@ -785,7 +785,8 @@ TChar TokenizerBase<TChar>::Token::AsChar() const { } template <typename TChar> -auto TokenizerBase<TChar>::Token::AsString() const -> TDependentSubstring { +auto TokenizerBase<TChar>::Token::AsString() const + -> const TDependentSubstring& { MOZ_ASSERT(mType == TOKEN_WORD); return mWord; } diff --git a/xpcom/ds/Tokenizer.h b/xpcom/ds/Tokenizer.h @@ -91,10 +91,10 @@ class TokenizerBase { TokenType Type() const { return mType; } TChar AsChar() const; - TDependentSubstring AsString() const; + TDependentSubstring const& AsString() const; uint64_t AsInteger() const; - TDependentSubstring Fragment() const { return mFragment; } + TDependentSubstring const& Fragment() const { return mFragment; } }; /**