Commit 7e37f635 authored by Alex Catarineu's avatar Alex Catarineu Committed by Pier Angelo Vendrame
Browse files

BB 30605: Honor privacy.spoof_english in Android

This checks `privacy.spoof_english` whenever `setLocales` is
called from Fenix side and sets `intl.accept_languages`
accordingly.

Bug 40198: Expose privacy.spoof_english pref in GeckoView
parent 5c602012
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -975,6 +975,7 @@ package org.mozilla.geckoview {
    method @NonNull public boolean getSameDocumentNavigationOverridesLoadType();
    method @NonNull public String getSameDocumentNavigationOverridesLoadTypeForceDisable();
    method @Nullable public Rect getScreenSizeOverride();
    method public boolean getSpoofEnglish();
    method public boolean getTranslationsOfferPopup();
    method @NonNull public List<String> getTrustedRecursiveResolverExcludedDomains();
    method @NonNull public String getTrustedRecursiveResolverUri();
@@ -1022,6 +1023,7 @@ package org.mozilla.geckoview {
    method @NonNull public GeckoRuntimeSettings setRemoteDebuggingEnabled(boolean);
    method @NonNull public GeckoRuntimeSettings setSameDocumentNavigationOverridesLoadType(boolean);
    method @NonNull public GeckoRuntimeSettings setSameDocumentNavigationOverridesLoadTypeForceDisable(@NonNull String);
    method @NonNull public GeckoRuntimeSettings setSpoofEnglish(boolean);
    method @NonNull public GeckoRuntimeSettings setTranslationsOfferPopup(boolean);
    method @NonNull public GeckoRuntimeSettings setTrustedRecursiveResolverExcludedDomains(@NonNull List<String>);
    method @NonNull public GeckoRuntimeSettings setTrustedRecursiveResolverMode(int);
@@ -1087,6 +1089,7 @@ package org.mozilla.geckoview {
    method @NonNull public GeckoRuntimeSettings.Builder screenSizeOverride(int, int);
    method @NonNull public GeckoRuntimeSettings.Builder setSameDocumentNavigationOverridesLoadType(boolean);
    method @NonNull public GeckoRuntimeSettings.Builder setSameDocumentNavigationOverridesLoadTypeForceDisable(@NonNull String);
    method @NonNull public GeckoRuntimeSettings.Builder spoofEnglish(boolean);
    method @NonNull public GeckoRuntimeSettings.Builder translationsOfferPopup(boolean);
    method @NonNull public GeckoRuntimeSettings.Builder trustedRecursiveResolverMode(int);
    method @NonNull public GeckoRuntimeSettings.Builder trustedRecursiveResolverUri(@NonNull String);
+32 −0
Original line number Diff line number Diff line
@@ -640,6 +640,17 @@ public final class GeckoRuntimeSettings extends RuntimeSettings {
      getSettings().setSameDocumentNavigationOverridesLoadTypeForceDisable(uri);
      return this;
    }

    /**
     * Sets whether we should spoof locale to English for webpages.
     *
     * @param flag True if we should spoof locale to English for webpages, false otherwise.
     * @return This Builder instance.
     */
    public @NonNull Builder spoofEnglish(final boolean flag) {
      getSettings().mSpoofEnglish.set(flag ? 2 : 1);
      return this;
    }
  }

  private GeckoRuntime mRuntime;
@@ -752,6 +763,7 @@ public final class GeckoRuntimeSettings extends RuntimeSettings {
          "docshell.shistory.sameDocumentNavigationOverridesLoadType.forceDisable", "");
  /* package */ final Pref<String> mBannedPorts =
      new Pref<String>("network.security.ports.banned", "");
  /* package */ final Pref<Integer> mSpoofEnglish = new Pref<>("privacy.spoof_english", 0);
  /* package */ int mPreferredColorScheme = COLOR_SCHEME_SYSTEM;

  /* package */ boolean mForceEnableAccessibility;
@@ -2206,6 +2218,26 @@ public final class GeckoRuntimeSettings extends RuntimeSettings {
    return mSameDocumentNavigationOverridesLoadTypeForceDisable.get();
  }

  /**
   * Get whether we should spoof locale to English for webpages.
   *
   * @return Whether we should spoof locale to English for webpages.
   */
  public boolean getSpoofEnglish() {
    return mSpoofEnglish.get() == 2;
  }

  /**
   * Set whether we should spoof locale to English for webpages.
   *
   * @param flag A flag determining whether we should locale to English for webpages.
   * @return This GeckoRuntimeSettings instance.
   */
  public @NonNull GeckoRuntimeSettings setSpoofEnglish(final boolean flag) {
    mSpoofEnglish.commit(flag ? 2 : 1);
    return this;
  }

  @Override // Parcelable
  public void writeToParcel(final Parcel out, final int flags) {
    super.writeToParcel(out, flags);
+5 −0
Original line number Diff line number Diff line
@@ -12,6 +12,7 @@ ChromeUtils.defineESModuleGetters(lazy, {
  DoHController: "resource://gre/modules/DoHController.sys.mjs",
  EventDispatcher: "resource://gre/modules/Messaging.sys.mjs",
  PdfJs: "resource://pdf.js/PdfJs.sys.mjs",
  RFPHelper: "resource://gre/modules/RFPHelper.sys.mjs",
});

const { debug, warn } = GeckoViewUtils.initLogging("Startup");
@@ -369,6 +370,10 @@ export class GeckoViewStartup {
        if (aData.requestedLocales) {
          Services.locale.requestedLocales = aData.requestedLocales;
        }
        lazy.RFPHelper._handleSpoofEnglishChanged();
        if (Services.prefs.getIntPref("privacy.spoof_english", 0) === 2) {
          break;
        }
        const pls = Cc["@mozilla.org/pref-localizedstring;1"].createInstance(
          Ci.nsIPrefLocalizedString
        );