Pier Angelo Vendrame pushed to branch mullvad-browser-140.5.0esr-15.0-1 at The Tor Project / Applications / Mullvad Browser
Commits:
-
d20043d4
by Pier Angelo Vendrame at 2025-11-26T17:30:13+01:00
7 changed files:
- dom/l10n/DOMLocalization.cpp
- dom/l10n/DOMLocalization.h
- dom/l10n/DocumentL10n.cpp
- dom/l10n/DocumentL10n.h
- dom/xml/nsXMLPrettyPrinter.cpp
- intl/l10n/Localization.cpp
- intl/l10n/Localization.h
Changes:
| ... | ... | @@ -47,6 +47,12 @@ DOMLocalization::DOMLocalization(nsIGlobalObject* aGlobal, bool aIsSync, |
| 47 | 47 | mMutations = new L10nMutations(this);
|
| 48 | 48 | }
|
| 49 | 49 | |
| 50 | +DOMLocalization::DOMLocalization(nsIGlobalObject* aGlobal, bool aIsSync,
|
|
| 51 | + const nsTArray<nsCString>& aLocales)
|
|
| 52 | + : Localization(aGlobal, aIsSync, aLocales) {
|
|
| 53 | + mMutations = new L10nMutations(this);
|
|
| 54 | +}
|
|
| 55 | + |
|
| 50 | 56 | already_AddRefed<DOMLocalization> DOMLocalization::Constructor(
|
| 51 | 57 | const GlobalObject& aGlobal,
|
| 52 | 58 | const Sequence<dom::OwningUTF8StringOrResourceId>& aResourceIds,
|
| ... | ... | @@ -118,6 +118,8 @@ class DOMLocalization : public intl::Localization { |
| 118 | 118 | DOMLocalization(nsIGlobalObject* aGlobal, bool aSync);
|
| 119 | 119 | DOMLocalization(nsIGlobalObject* aGlobal, bool aIsSync,
|
| 120 | 120 | const intl::ffi::LocalizationRc* aRaw);
|
| 121 | + DOMLocalization(nsIGlobalObject* aGlobal, bool aSync,
|
|
| 122 | + const nsTArray<nsCString>& aLocales);
|
|
| 121 | 123 | |
| 122 | 124 | protected:
|
| 123 | 125 | virtual ~DOMLocalization();
|
| ... | ... | @@ -47,6 +47,19 @@ RefPtr<DocumentL10n> DocumentL10n::Create(Document* aDocument, bool aSync) { |
| 47 | 47 | return l10n.forget();
|
| 48 | 48 | }
|
| 49 | 49 | |
| 50 | +RefPtr<DocumentL10n> DocumentL10n::Create(Document* aDocument, bool aSync,
|
|
| 51 | + const nsTArray<nsCString>& aLocales) {
|
|
| 52 | + RefPtr<DocumentL10n> l10n = new DocumentL10n(aDocument, aSync, aLocales);
|
|
| 53 | + |
|
| 54 | + IgnoredErrorResult rv;
|
|
| 55 | + l10n->mReady = Promise::Create(l10n->mGlobal, rv);
|
|
| 56 | + if (NS_WARN_IF(rv.Failed())) {
|
|
| 57 | + return nullptr;
|
|
| 58 | + }
|
|
| 59 | + |
|
| 60 | + return l10n.forget();
|
|
| 61 | +}
|
|
| 62 | + |
|
| 50 | 63 | DocumentL10n::DocumentL10n(Document* aDocument, bool aSync)
|
| 51 | 64 | : DOMLocalization(aDocument->GetScopeObject(), aSync),
|
| 52 | 65 | mDocument(aDocument),
|
| ... | ... | @@ -54,6 +67,14 @@ DocumentL10n::DocumentL10n(Document* aDocument, bool aSync) |
| 54 | 67 | mContentSink = do_QueryInterface(aDocument->GetCurrentContentSink());
|
| 55 | 68 | }
|
| 56 | 69 | |
| 70 | +DocumentL10n::DocumentL10n(Document* aDocument, bool aSync,
|
|
| 71 | + const nsTArray<nsCString>& aLocales)
|
|
| 72 | + : DOMLocalization(aDocument->GetScopeObject(), aSync, aLocales),
|
|
| 73 | + mDocument(aDocument),
|
|
| 74 | + mState(DocumentL10nState::Constructed) {
|
|
| 75 | + mContentSink = do_QueryInterface(aDocument->GetCurrentContentSink());
|
|
| 76 | +}
|
|
| 77 | + |
|
| 57 | 78 | JSObject* DocumentL10n::WrapObject(JSContext* aCx,
|
| 58 | 79 | JS::Handle<JSObject*> aGivenProto) {
|
| 59 | 80 | return DocumentL10n_Binding::Wrap(aCx, this, aGivenProto);
|
| ... | ... | @@ -47,9 +47,13 @@ class DocumentL10n final : public DOMLocalization { |
| 47 | 47 | NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(DocumentL10n, DOMLocalization)
|
| 48 | 48 | |
| 49 | 49 | static RefPtr<DocumentL10n> Create(Document* aDocument, bool aSync);
|
| 50 | + static RefPtr<DocumentL10n> Create(Document* aDocument, bool aSync,
|
|
| 51 | + const nsTArray<nsCString>& aLocales);
|
|
| 50 | 52 | |
| 51 | 53 | protected:
|
| 52 | 54 | explicit DocumentL10n(Document* aDocument, bool aSync);
|
| 55 | + explicit DocumentL10n(Document* aDocument, bool aSync,
|
|
| 56 | + const nsTArray<nsCString>& aLocales);
|
|
| 53 | 57 | virtual ~DocumentL10n() = default;
|
| 54 | 58 | |
| 55 | 59 | RefPtr<Document> mDocument;
|
| ... | ... | @@ -100,7 +100,13 @@ nsresult nsXMLPrettyPrinter::PrettyPrint(Document* aDocument, |
| 100 | 100 | |
| 101 | 101 | // Create a DocumentL10n, as the XML document is not allowed to have one.
|
| 102 | 102 | // Make it sync so that the test for bug 590812 does not require a setTimeout.
|
| 103 | - RefPtr<DocumentL10n> l10n = DocumentL10n::Create(aDocument, true);
|
|
| 103 | + RefPtr<DocumentL10n> l10n;
|
|
| 104 | + if (aDocument->ShouldResistFingerprinting(RFPTarget::JSLocale)) {
|
|
| 105 | + AutoTArray<nsCString, 1> langs = {nsRFPService::GetSpoofedJSLocale()};
|
|
| 106 | + l10n = DocumentL10n::Create(aDocument, true, langs);
|
|
| 107 | + } else {
|
|
| 108 | + l10n = DocumentL10n::Create(aDocument, true);
|
|
| 109 | + }
|
|
| 104 | 110 | NS_ENSURE_TRUE(l10n, NS_ERROR_UNEXPECTED);
|
| 105 | 111 | l10n->AddResourceId("dom/XMLPrettyPrint.ftl"_ns);
|
| 106 | 112 |
| ... | ... | @@ -164,6 +164,14 @@ Localization::Localization(nsIGlobalObject* aGlobal, bool aIsSync, |
| 164 | 164 | RegisterObservers();
|
| 165 | 165 | }
|
| 166 | 166 | |
| 167 | +Localization::Localization(nsIGlobalObject* aGlobal, bool aIsSync,
|
|
| 168 | + const nsTArray<nsCString>& aLocales)
|
|
| 169 | + : mGlobal(aGlobal) {
|
|
| 170 | + nsTArray<ffi::GeckoResourceId> resIds;
|
|
| 171 | + ffi::localization_new_with_locales(&resIds, aIsSync, nullptr, &aLocales,
|
|
| 172 | + getter_AddRefs(mRaw));
|
|
| 173 | +}
|
|
| 174 | + |
|
| 167 | 175 | /* static */
|
| 168 | 176 | bool Localization::IsAPIEnabled(JSContext* aCx, JSObject* aObject) {
|
| 169 | 177 | JS::Rooted<JSObject*> obj(aCx, aObject);
|
| ... | ... | @@ -156,6 +156,9 @@ class Localization : public nsIObserver, |
| 156 | 156 | Localization(nsIGlobalObject* aGlobal, bool aIsSync,
|
| 157 | 157 | const ffi::LocalizationRc* aRaw);
|
| 158 | 158 | |
| 159 | + Localization(nsIGlobalObject* aGlobal, bool aIsSync,
|
|
| 160 | + const nsTArray<nsCString>& aLocales);
|
|
| 161 | + |
|
| 159 | 162 | virtual ~Localization();
|
| 160 | 163 | |
| 161 | 164 | void RegisterObservers();
|