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 Bug 1985996 - Check spoof english in XMLPrettyPrinter. r=eemeli,smaug Differential Revision: https://phabricator.services.mozilla.com/D263100 - - - - - 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: ===================================== dom/l10n/DOMLocalization.cpp ===================================== @@ -47,6 +47,12 @@ DOMLocalization::DOMLocalization(nsIGlobalObject* aGlobal, bool aIsSync, mMutations = new L10nMutations(this); } +DOMLocalization::DOMLocalization(nsIGlobalObject* aGlobal, bool aIsSync, + const nsTArray<nsCString>& aLocales) + : Localization(aGlobal, aIsSync, aLocales) { + mMutations = new L10nMutations(this); +} + already_AddRefed<DOMLocalization> DOMLocalization::Constructor( const GlobalObject& aGlobal, const Sequence<dom::OwningUTF8StringOrResourceId>& aResourceIds, ===================================== dom/l10n/DOMLocalization.h ===================================== @@ -118,6 +118,8 @@ class DOMLocalization : public intl::Localization { DOMLocalization(nsIGlobalObject* aGlobal, bool aSync); DOMLocalization(nsIGlobalObject* aGlobal, bool aIsSync, const intl::ffi::LocalizationRc* aRaw); + DOMLocalization(nsIGlobalObject* aGlobal, bool aSync, + const nsTArray<nsCString>& aLocales); protected: virtual ~DOMLocalization(); ===================================== dom/l10n/DocumentL10n.cpp ===================================== @@ -47,6 +47,19 @@ RefPtr<DocumentL10n> DocumentL10n::Create(Document* aDocument, bool aSync) { return l10n.forget(); } +RefPtr<DocumentL10n> DocumentL10n::Create(Document* aDocument, bool aSync, + const nsTArray<nsCString>& aLocales) { + RefPtr<DocumentL10n> l10n = new DocumentL10n(aDocument, aSync, aLocales); + + IgnoredErrorResult rv; + l10n->mReady = Promise::Create(l10n->mGlobal, rv); + if (NS_WARN_IF(rv.Failed())) { + return nullptr; + } + + return l10n.forget(); +} + DocumentL10n::DocumentL10n(Document* aDocument, bool aSync) : DOMLocalization(aDocument->GetScopeObject(), aSync), mDocument(aDocument), @@ -54,6 +67,14 @@ DocumentL10n::DocumentL10n(Document* aDocument, bool aSync) mContentSink = do_QueryInterface(aDocument->GetCurrentContentSink()); } +DocumentL10n::DocumentL10n(Document* aDocument, bool aSync, + const nsTArray<nsCString>& aLocales) + : DOMLocalization(aDocument->GetScopeObject(), aSync, aLocales), + mDocument(aDocument), + mState(DocumentL10nState::Constructed) { + mContentSink = do_QueryInterface(aDocument->GetCurrentContentSink()); +} + JSObject* DocumentL10n::WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) { return DocumentL10n_Binding::Wrap(aCx, this, aGivenProto); ===================================== dom/l10n/DocumentL10n.h ===================================== @@ -47,9 +47,13 @@ class DocumentL10n final : public DOMLocalization { NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(DocumentL10n, DOMLocalization) static RefPtr<DocumentL10n> Create(Document* aDocument, bool aSync); + static RefPtr<DocumentL10n> Create(Document* aDocument, bool aSync, + const nsTArray<nsCString>& aLocales); protected: explicit DocumentL10n(Document* aDocument, bool aSync); + explicit DocumentL10n(Document* aDocument, bool aSync, + const nsTArray<nsCString>& aLocales); virtual ~DocumentL10n() = default; RefPtr<Document> mDocument; ===================================== dom/xml/nsXMLPrettyPrinter.cpp ===================================== @@ -100,7 +100,13 @@ nsresult nsXMLPrettyPrinter::PrettyPrint(Document* aDocument, // Create a DocumentL10n, as the XML document is not allowed to have one. // Make it sync so that the test for bug 590812 does not require a setTimeout. - RefPtr<DocumentL10n> l10n = DocumentL10n::Create(aDocument, true); + RefPtr<DocumentL10n> l10n; + if (aDocument->ShouldResistFingerprinting(RFPTarget::JSLocale)) { + AutoTArray<nsCString, 1> langs = {nsRFPService::GetSpoofedJSLocale()}; + l10n = DocumentL10n::Create(aDocument, true, langs); + } else { + l10n = DocumentL10n::Create(aDocument, true); + } NS_ENSURE_TRUE(l10n, NS_ERROR_UNEXPECTED); l10n->AddResourceId("dom/XMLPrettyPrint.ftl"_ns); ===================================== intl/l10n/Localization.cpp ===================================== @@ -164,6 +164,14 @@ Localization::Localization(nsIGlobalObject* aGlobal, bool aIsSync, RegisterObservers(); } +Localization::Localization(nsIGlobalObject* aGlobal, bool aIsSync, + const nsTArray<nsCString>& aLocales) + : mGlobal(aGlobal) { + nsTArray<ffi::GeckoResourceId> resIds; + ffi::localization_new_with_locales(&resIds, aIsSync, nullptr, &aLocales, + getter_AddRefs(mRaw)); +} + /* static */ bool Localization::IsAPIEnabled(JSContext* aCx, JSObject* aObject) { JS::Rooted<JSObject*> obj(aCx, aObject); ===================================== intl/l10n/Localization.h ===================================== @@ -156,6 +156,9 @@ class Localization : public nsIObserver, Localization(nsIGlobalObject* aGlobal, bool aIsSync, const ffi::LocalizationRc* aRaw); + Localization(nsIGlobalObject* aGlobal, bool aIsSync, + const nsTArray<nsCString>& aLocales); + virtual ~Localization(); void RegisterObservers(); View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/commit/d200... -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/commit/d200... You're receiving this email because of your account on gitlab.torproject.org.
participants (1)
-
Pier Angelo Vendrame (@pierov)