diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-21 11:44:51 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-21 11:44:51 +0000 |
commit | 9e3c08db40b8916968b9f30096c7be3f00ce9647 (patch) | |
tree | a68f146d7fa01f0134297619fbe7e33db084e0aa /modules/libpref/init/StaticPrefList.yaml | |
parent | Initial commit. (diff) | |
download | thunderbird-upstream.tar.xz thunderbird-upstream.zip |
Adding upstream version 1:115.7.0.upstream/1%115.7.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'modules/libpref/init/StaticPrefList.yaml')
-rw-r--r-- | modules/libpref/init/StaticPrefList.yaml | 15812 |
1 files changed, 15812 insertions, 0 deletions
diff --git a/modules/libpref/init/StaticPrefList.yaml b/modules/libpref/init/StaticPrefList.yaml new file mode 100644 index 0000000000..ba2705ddc3 --- /dev/null +++ b/modules/libpref/init/StaticPrefList.yaml @@ -0,0 +1,15812 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +# This file defines static prefs, i.e. those that are defined at startup and +# used entirely or mostly from C++ and/or Rust code. +# +# The file is separated into sections, where each section contains a group of +# prefs that all share the same first segment of their name -- all the "gfx.*" +# prefs are together, all the "network.*" prefs are together, etc. Sections +# must be kept in alphabetical order, but prefs within sections need not be. +# +# Basics +# ------ +# Any pref defined in one of the files included here should *not* be defined +# in a data file such as all.js; that would just be useless duplication. +# +# (Except under unusual circumstances where the value defined here must be +# overridden, e.g. for some Thunderbird prefs. In those cases the default +# value from the data file will override the static default value defined +# here.) +# +# Please follow the existing prefs naming convention when considering adding a +# new pref, and don't create a new pref group unless it's appropriate and there +# are likely to be multiple prefs within that group. (If you do, you'll need to +# update the `pref_groups` variable in modules/libpref/moz.build.) +# +# Definitions +# ----------- +# A pref definition looks like this: +# +# - name: <pref-name> # mandatory +# type: <cpp-type> # mandatory +# value: <default-value> # mandatory +# mirror: <never | once | always> # mandatory +# do_not_use_directly: <true | false> # optional +# include: <header-file> # optional +# rust: <true | false> # optional +# +# - `name` is the name of the pref, without double-quotes, as it appears +# in about:config. It is used in most libpref API functions (from both C++ +# and JS code). +# +# - `type` is one of `bool`, `int32_t`, `uint32_t`, `float`, an atomic version +# of one of those, `String` or `DataMutexString`. Note that float prefs are +# stored internally as strings. The C++ preprocessor doesn't like template +# syntax in a macro argument, so use the typedefs defined in +# StaticPrefsBase.h; for example, use `RelaxedAtomicBool` instead of +# `Atomic<bool, Relaxed>`. +# +# - `value` is the default value. Its type should be appropriate for +# <cpp-type>, otherwise the generated code will fail to compile. A complex +# C++ numeric expressions like `60 * 60` (which the YAML parser cannot treat +# as an integer or float) is treated as a string and passed through without +# change, which is useful. +# +# - `mirror` indicates how the pref value is mirrored into a C++ variable. +# +# * `never`: There is no C++ mirror variable. The pref value can only be +# accessed via the standard libpref API functions. +# +# * `once`: The pref value is mirrored into a variable at startup; the +# mirror variable is left unchanged after that. (The exact point at which +# all `once` mirror variables are set is when the first `once` mirror +# variable is accessed, via its getter function.) This is mostly useful for +# graphics prefs where we often don't want a new pref value to apply until +# restart. Otherwise, this update policy is best avoided because its +# behaviour can cause confusion and bugs. +# +# * `always`: The mirror variable is always kept in sync with the pref value. +# This is the most common choice. +# +# When a mirror variable is present, a getter will be created that can access +# it. Using the getter function to read the pref's value has the two +# following advantages over the normal API functions. +# +# * A direct variable access is faster than a hash table lookup. +# +# * A mirror variable can be accessed off the main thread. If a pref *is* +# accessed off the main thread, it should have an atomic type. Assertions +# enforce this. +# +# Note that Rust code must access the mirror variable directly, rather than +# via the getter function. +# +# - `do_not_use_directly` indicates if `_DoNotUseDirectly` should be appended to +# the name of the getter function. This is simply a naming convention +# indicating that there is some other wrapper getter function that should be +# used in preference to the normal static pref getter. Defaults to `false` if +# not present. Cannot be used with a `never` mirror value, because there is +# no getter function in that case. +# +# - `include` names a header file that must be included for the pref value to +# compile correctly, e.g. because it refers to a code constant. System +# headers should be surrounded with angle brackets, e.g. `<cmath>`. +# +# - `rust` indicates if the mirror variable is used by Rust code. If so, it +# will be usable via the `static_prefs::pref!` macro, e.g. +# `static_prefs::pref!("layout.css.font-display.enabled")`. +# +# The getter function's base name is the same as the pref's name, but with +# '.' or '-' chars converted to '_', to make a valid identifier. For example, +# the getter for `foo.bar_baz` is `foo_bar_baz()`. This is ugly but clear, +# and you can search for both the pref name and the getter using the regexp +# /foo.bar.baz/. Suffixes are added as follows: +# +# - If the `mirror` value is `once`, `_AtStartup` is appended, to indicate the +# value was obtained at startup. +# +# - If the `do_not_use_directly` value is true, `_DoNotUseDirectly` is +# appended. +# +# Preprocessor +# ------------ +# Note finally that this file is preprocessed by preprocessor.py, not the C++ +# preprocessor. As a result, the following things may be surprising. +# +# - YAML comments start with a '#', so putting a comment on the same line as a +# preprocessor directive is dubious. E.g. avoid lines like `#define X 3 # +# three` because the ` # three` will be part of `X`. +# +# - '@' use is required for substitutions to occur. E.g. with `#define FOO 1`, +# `FOO` won't be replaced with `1` unless it has '@' chars around it. +# +# - Spaces aren't permitted between the leading '#' and the name of a +# directive, e.g. `#ifdef XYZ` works but `# ifdef XYZ` does not. +# +# Please indent all prefs defined within #ifdef/#ifndef conditions. This +# improves readability, particular for conditional blocks that exceed a single +# screen. But note that the leading '-' in a definition must remain in the +# first column for it to be valid YAML. + +#ifdef RELEASE_OR_BETA +#define IS_NOT_RELEASE_OR_BETA false +#else +#define IS_NOT_RELEASE_OR_BETA true +#endif + +#ifdef NIGHTLY_BUILD +#define IS_NIGHTLY_BUILD true +#define IS_NOT_NIGHTLY_BUILD false +#else +#define IS_NIGHTLY_BUILD false +#define IS_NOT_NIGHTLY_BUILD true +#endif + +#if defined(NIGHTLY_BUILD) || defined(MOZ_DEV_EDITION) +#define IS_NIGHTLY_OR_DEV_EDITION true +#else +#define IS_NIGHTLY_OR_DEV_EDITION false +#endif + +#ifdef MOZILLA_OFFICIAL +#define IS_NOT_MOZILLA_OFFICIAL false +#else +#define IS_NOT_MOZILLA_OFFICIAL true +#endif + +#ifdef EARLY_BETA_OR_EARLIER +#define IS_EARLY_BETA_OR_EARLIER true +#define IS_NOT_EARLY_BETA_OR_EARLIER false +#else +#define IS_EARLY_BETA_OR_EARLIER false +#define IS_NOT_EARLY_BETA_OR_EARLIER true +#endif + +#ifdef ANDROID +#define IS_ANDROID true +#define IS_NOT_ANDROID false +#else +#define IS_ANDROID false +#define IS_NOT_ANDROID true +#endif + +#ifdef XP_WIN +#define IS_XP_WIN true +#define IS_NOT_XP_WIN false +#else +#define IS_XP_WIN false +#define IS_NOT_XP_WIN true +#endif + +#--------------------------------------------------------------------------- +# Prefs starting with "accessibility." +#--------------------------------------------------------------------------- + +- name: accessibility.accesskeycausesactivation + type: bool + value: true + mirror: always + +- name: accessibility.monoaudio.enable + type: RelaxedAtomicBool + value: false + mirror: always + +- name: accessibility.browsewithcaret + type: RelaxedAtomicBool + value: false + mirror: always + +- name: accessibility.AOM.enabled + type: bool + value: false + mirror: always + +- name: accessibility.ARIAReflection.enabled + type: bool + value: @IS_NIGHTLY_BUILD@ + mirror: always + +# Whether form controls and images should be focusable with mouse, in content +# documents. +# +# This matches historical macOS / Safari behavior. +# +# * 0: never +# * 1: always +# * 2: on content documents +- name: accessibility.mouse_focuses_formcontrol + type: int32_t +#ifdef XP_MACOSX + value: 2 +#else + value: 1 +#endif + mirror: always + +# Whether to avoid accessibility activation on Windows shortly after clipboard +# copy. +# +# Possible values are: +# * 0: never +# * 1: always +# * 2 (or others): when needed +- name: accessibility.windows.suppress-after-clipboard-copy + type: uint32_t + value: 2 + mirror: always + +#--------------------------------------------------------------------------- +# Prefs starting with "alerts." +#--------------------------------------------------------------------------- + +# Whether to use platform-specific backends for showing desktop notifications. +# If no such backend is available, or if the pref is false, then XUL +# notifications are used. +- name: alerts.useSystemBackend + type: bool + value: true + mirror: always + +#if defined(XP_WIN) + # On Windows, a COM Surrogate notification server receives notification events + # and can relaunch the application after it has been closed. +- name: alerts.useSystemBackend.windows.notificationserver.enabled + type: bool + value: true + mirror: never +#endif + +#ifdef ANDROID + #--------------------------------------------------------------------------- + # Prefs starting with "android." + #--------------------------------------------------------------------------- + + # On Android, we want an opaque background to be visible under the page, + # so layout should not force a default background. +- name: android.widget_paints_background + type: RelaxedAtomicBool + value: true + mirror: always + +- name: android.touch_resampling.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +#endif + +#--------------------------------------------------------------------------- +# Prefs starting with "apz." +# The apz prefs are explained in AsyncPanZoomController.cpp +#--------------------------------------------------------------------------- + +# amount we zoom in for a double tap gesture if we couldn't find any content +# based rect to zoom to +- name: apz.doubletapzoom.defaultzoomin + type: AtomicFloat + value: 1.2f + mirror: always + +- name: apz.scrollbarbuttonrepeat.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +- name: apz.scrollend-event.content.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# After a user has executed a pan gesture, we may receive momentum phase pan +# gestures from the OS. This specifies how long we should wait following the +# pan end gesture for possible momentum phase pan gestures before sending the +# TransformEnd notification. +- name: apz.scrollend-event.content.delay_ms + type: RelaxedAtomicInt32 + value: 100 + mirror: always + +- name: apz.wr.activate_all_scroll_frames + type: RelaxedAtomicBool + value: false + mirror: always + +- name: apz.wr.activate_all_scroll_frames_when_fission + type: RelaxedAtomicBool + value: true + mirror: always + +- name: apz.prefer_jank_minimal_displayports + type: RelaxedAtomicBool + value: true + mirror: always + +- name: apz.allow_double_tap_zooming + type: RelaxedAtomicBool + value: true + mirror: always + +- name: apz.mac.enable_double_tap_zoom_touchpad_gesture + type: RelaxedAtomicBool + value: true + mirror: always + +- name: apz.allow_immediate_handoff + type: RelaxedAtomicBool + value: false + mirror: always + +- name: apz.allow_zooming + type: RelaxedAtomicBool + value: true + mirror: always + +- name: apz.max_zoom + type: AtomicFloat + value: 10.0f + mirror: always + +- name: apz.min_zoom + type: AtomicFloat + value: 0.25f + mirror: always + +- name: apz.allow_zooming_out + type: RelaxedAtomicBool + value: false + mirror: always + +- name: apz.android.chrome_fling_physics.friction + type: AtomicFloat + value: 0.015f + mirror: always + +- name: apz.android.chrome_fling_physics.inflexion + type: AtomicFloat + value: 0.35f + mirror: always + +- name: apz.android.chrome_fling_physics.stop_threshold + type: AtomicFloat + value: 0.1f + mirror: always + +- name: apz.autoscroll.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +- name: apz.axis_lock.breakout_angle + type: AtomicFloat + value: float(M_PI / 8.0) # 22.5 degrees + mirror: always + include: <cmath> + +- name: apz.axis_lock.breakout_threshold + type: AtomicFloat + value: 1.0f / 32.0f + mirror: always + +- name: apz.axis_lock.direct_pan_angle + type: AtomicFloat + value: float(M_PI / 3.0) # 60 degrees + mirror: always + include: <cmath> + +- name: apz.axis_lock.lock_angle + type: AtomicFloat + value: float(M_PI / 6.0) # 30 degrees + mirror: always + include: <cmath> + +# Whether to lock touch scrolling to one axis at a time. When a new +# axis lock mode is added, the APZCAxisLockCompatTester GTest shoud +# be updated to include the lock mode value. +# 0 = FREE (No locking at all) +# 1 = STANDARD (Once locked, remain locked until scrolling ends) +# 2 = STICKY (Allow lock to be broken, with hysteresis) +# 3 = DOMINANT_AXIS (Only allow movement on one axis at a time, only +# applies to touchpad scrolling) +- name: apz.axis_lock.mode + type: RelaxedAtomicInt32 +#if defined(XP_MACOSX) + value: 3 +#else + value: 2 +#endif + mirror: always + +- name: apz.content_response_timeout + type: RelaxedAtomicInt32 + value: 400 + mirror: always + +- name: apz.danger_zone_x + type: RelaxedAtomicInt32 + value: 50 + mirror: always + +- name: apz.danger_zone_y + type: RelaxedAtomicInt32 + value: 100 + mirror: always + +- name: apz.disable_for_scroll_linked_effects + type: RelaxedAtomicBool + value: false + mirror: always + +- name: apz.displayport_expiry_ms + type: RelaxedAtomicUint32 + value: 15000 + mirror: always + +- name: apz.drag.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +- name: apz.drag.initial.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +- name: apz.drag.touch.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +- name: apz.enlarge_displayport_when_clipped + type: RelaxedAtomicBool + value: @IS_ANDROID@ + mirror: always + +# Test only. +- name: apz.fixed-margin-override.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +# Test only. +- name: apz.fixed-margin-override.bottom + type: RelaxedAtomicInt32 + value: 0 + mirror: always + +# Test only. +- name: apz.fixed-margin-override.top + type: RelaxedAtomicInt32 + value: 0 + mirror: always + +- name: apz.fling_accel_base_mult + type: AtomicFloat + value: 1.0f + mirror: always + +- name: apz.fling_accel_supplemental_mult + type: AtomicFloat + value: 1.0f + mirror: always + +- name: apz.fling_accel_min_fling_velocity + type: AtomicFloat + value: 1.5f + mirror: always + +- name: apz.fling_accel_min_pan_velocity + type: AtomicFloat + value: 0.8f + mirror: always + +- name: apz.fling_accel_max_pause_interval_ms + type: RelaxedAtomicInt32 + value: 50 + mirror: always + +- name: apz.fling_curve_function_x1 + type: float + value: 0.0f + mirror: once + +- name: apz.fling_curve_function_x2 + type: float + value: 1.0f + mirror: once + +- name: apz.fling_curve_function_y1 + type: float + value: 0.0f + mirror: once + +- name: apz.fling_curve_function_y2 + type: float + value: 1.0f + mirror: once + +- name: apz.fling_curve_threshold_inches_per_ms + type: AtomicFloat + value: -1.0f + mirror: always + +- name: apz.fling_friction + type: AtomicFloat + value: 0.002f + mirror: always + +- name: apz.fling_min_velocity_threshold + type: AtomicFloat + value: 0.5f + mirror: always + +- name: apz.fling_stop_on_tap_threshold + type: AtomicFloat + value: 0.05f + mirror: always + +- name: apz.fling_stopped_threshold + type: AtomicFloat + value: 0.01f + mirror: always + +- name: apz.touch_acceleration_factor_x + type: float + value: 1.0f + mirror: always + +- name: apz.touch_acceleration_factor_y + type: float + value: 1.0f + mirror: always + +# new scrollbar code for desktop zooming +- name: apz.force_disable_desktop_zooming_scrollbars + type: RelaxedAtomicBool + value: false + mirror: always + +#ifdef MOZ_WIDGET_GTK +- name: apz.gtk.kinetic_scroll.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +- name: apz.gtk.pangesture.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# Mode to use when receiving pan gesture input. +# +# * 0: Auto mode (uses the default behavior, subject to change). +# * 1: Page mode: Uses gtk deltas as a percentage of the page size to scroll. This mode matches: +# +# https://gitlab.gnome.org/GNOME/gtk/blob/c734c7e9188b56f56c3a504abee05fa40c5475ac/gtk/gtkrange.c#L3063-3074 +# +# * 2: Pixel mode: Uses gtk deltas as a fixed pixel multiplier. This mode matches e.g. GNOME web. +# +# https://webkit-search.igalia.com/webkit/rev/215039ef09d6bfd6e088175bfe30788d95b9705d/Source/WebKit/Shared/gtk/WebEventFactory.cpp#265-296 +# (multiplied then by pixelsPerLineStep which in GNOME-web is 40). +- name: apz.gtk.pangesture.delta_mode + type: uint32_t + value: 0 + mirror: always + +- name: apz.gtk.pangesture.page_delta_mode_multiplier + type: float + value: 1.0f + mirror: always + +- name: apz.gtk.pangesture.pixel_delta_mode_multiplier + type: float + value: 40.0f + mirror: always + +- name: apz.gtk.touchpad_pinch.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +- name: apz.gtk.touchpad_pinch.three_fingers.enabled + type: RelaxedAtomicBool + value: false + mirror: always +#endif + +- name: apz.keyboard.enabled + type: bool + value: @IS_NOT_ANDROID@ + mirror: once + +- name: apz.keyboard.passive-listeners + type: RelaxedAtomicBool + value: @IS_NOT_ANDROID@ + mirror: always + +- name: apz.max_tap_time + type: RelaxedAtomicInt32 + value: 300 + mirror: always + +- name: apz.max_velocity_inches_per_ms + type: AtomicFloat + value: -1.0f + mirror: always + +- name: apz.max_velocity_queue_size + type: uint32_t + value: 5 + mirror: once + +- name: apz.min_skate_speed + type: AtomicFloat + value: 1.0f + mirror: always + +- name: apz.mvm.force-enabled + type: RelaxedAtomicBool + value: true + mirror: always + +- name: apz.one_touch_pinch.enabled + type: RelaxedAtomicBool + value: @IS_ANDROID@ + mirror: always + +- name: apz.overscroll.enabled + type: RelaxedAtomicBool +#if defined(XP_MACOSX) || defined(XP_WIN) + value: true +#else + value: false +#endif + mirror: always + +# The "test async scroll offset" (used via reftest-async-scroll +# or nsIDOMWindowUtils.setAsyncScrollOffset()) can be used to +# trigger overscroll. Used for tests only. +- name: apz.overscroll.test_async_scroll_offset.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +- name: apz.overscroll.min_pan_distance_ratio + type: AtomicFloat + value: 1.0f + mirror: always + +- name: apz.overscroll.stop_distance_threshold + type: AtomicFloat + value: 5.0f + mirror: always + +- name: apz.overscroll.spring_stiffness + type: AtomicFloat + value: 200 + mirror: always + +- name: apz.overscroll.damping + type: AtomicFloat + value: 1.1 + mirror: always + +- name: apz.overscroll.max_velocity + type: AtomicFloat + value: 10 + mirror: always + +- name: apz.paint_skipping.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# Fetch displayport updates early from the message queue. +- name: apz.pinch_lock.mode + type: RelaxedAtomicInt32 + value: 2 + mirror: always + +- name: apz.pinch_lock.scroll_lock_threshold + type: AtomicFloat + value: 1.0f / 16.0f # 1/16 inches + mirror: always + +- name: apz.pinch_lock.span_breakout_threshold + type: AtomicFloat + value: 1.0f / 32.0f # 1/32 inches + mirror: always + +- name: apz.pinch_lock.span_lock_threshold + type: AtomicFloat + value: 1.0f / 32.0f # 1/32 inches + mirror: always + +- name: apz.pinch_lock.buffer_max_age + type: int32_t + value: 80 # milliseconds + mirror: once + +- name: apz.popups.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# Whether to print the APZC tree for debugging. +- name: apz.printtree + type: RelaxedAtomicBool + value: false + mirror: always + +- name: apz.record_checkerboarding + type: RelaxedAtomicBool + value: @IS_NIGHTLY_BUILD@ + mirror: always + +- name: apz.second_tap_tolerance + type: AtomicFloat + value: 0.5f + mirror: always + +# If this is true, APZ fully recalculates the scroll thumb size and +# position in the compositor. This leads to the size and position +# being more accurate in scenarios such as async zooming, but the +# recalculation code is error-prone so it's nightly-only for now +# to give it more baking time. +- name: apz.scrollthumb.recalc + type: RelaxedAtomicBool + value: @IS_NIGHTLY_BUILD@ + mirror: always + +- name: apz.test.fails_with_native_injection + type: RelaxedAtomicBool + value: false + mirror: always + +- name: apz.test.logging_enabled + type: RelaxedAtomicBool + value: false + mirror: always + +- name: apz.touch_move_tolerance + type: AtomicFloat + value: 0.1f + mirror: always + +- name: apz.touch_start_tolerance + type: AtomicFloat + value: 0.1f + mirror: always + +- name: apz.velocity_bias + type: AtomicFloat + value: 0.0f + mirror: always + +- name: apz.velocity_relevance_time_ms + type: RelaxedAtomicUint32 + value: 100 + mirror: always + +- name: apz.windows.force_disable_direct_manipulation + type: RelaxedAtomicBool + value: false + mirror: always + +- name: apz.windows.use_direct_manipulation + type: RelaxedAtomicBool + value: true + mirror: always + +- name: apz.windows.check_for_pan_gesture_conversion + type: RelaxedAtomicBool + value: true + mirror: always + +- name: apz.x_skate_highmem_adjust + type: AtomicFloat + value: 0.0f + mirror: always + +- name: apz.x_skate_size_multiplier + type: AtomicFloat + value: 1.25f + mirror: always + +- name: apz.x_stationary_size_multiplier + type: AtomicFloat + value: 1.5f + mirror: always + +- name: apz.y_skate_highmem_adjust + type: AtomicFloat + value: 0.0f + mirror: always + +- name: apz.y_skate_size_multiplier + type: AtomicFloat +#if defined(MOZ_WIDGET_ANDROID) + value: 1.5f +#else + value: 3.5f +#endif + mirror: always + +- name: apz.y_stationary_size_multiplier + type: AtomicFloat +#if defined(MOZ_WIDGET_ANDROID) + value: 1.5f +#else + value: 3.5f +#endif + mirror: always + +- name: apz.zoom_animation_duration_ms + type: RelaxedAtomicInt32 +#if defined(MOZ_WIDGET_ANDROID) + value: 250 +#else + value: 350 +#endif + mirror: always + +- name: apz.scale_repaint_delay_ms + type: RelaxedAtomicInt32 + value: 500 + mirror: always + +# Whether to use rounded external scroll offsets. +- name: apz.rounded_external_scroll_offset + type: bool + value: false + mirror: always + +#--------------------------------------------------------------------------- +# Prefs starting with "beacon." +#--------------------------------------------------------------------------- + +# Is support for Navigator.sendBeacon enabled? +- name: beacon.enabled + type: bool + value: true + mirror: always + +#--------------------------------------------------------------------------- +# Prefs starting with "bidi." +#--------------------------------------------------------------------------- + +# Whether delete and backspace should immediately delete characters not +# visually adjacent to the caret, or adjust the visual position of the caret +# on the first keypress and delete the character on a second keypress +- name: bidi.edit.delete_immediately + type: bool + value: true + mirror: always + +# Bidi caret movement style: +# 0 = logical +# 1 = visual +# 2 = visual, but logical during selection +- name: bidi.edit.caret_movement_style + type: int32_t +#if !defined(XP_LINUX) && defined(NIGHTLY_BUILD) + value: 1 +#else + value: 2 # See Bug 1638240 +#endif + mirror: always + +# Bidi numeral style: +# 0 = nominalnumeralBidi * +# 1 = regularcontextnumeralBidi +# 2 = hindicontextnumeralBidi +# 3 = arabicnumeralBidi +# 4 = hindinumeralBidi +# 5 = persiancontextnumeralBidi +# 6 = persiannumeralBidi +- name: bidi.numeral + type: RelaxedAtomicUint32 + value: 0 + mirror: always + +# Bidi text type +# 1 = charsettexttypeBidi * +# 2 = logicaltexttypeBidi +# 3 = visualtexttypeBidi +- name: bidi.texttype + type: RelaxedAtomicUint32 + value: 1 + mirror: always + +# Bidi direction +# 1 = directionLTRBidi * +# 2 = directionRTLBidi +- name: bidi.direction + type: RelaxedAtomicUint32 + value: 1 + mirror: always + +# Setting this pref to |true| forces Bidi UI menu items and keyboard shortcuts +# to be exposed, and enables the directional caret hook. By default, only +# expose it for bidi-associated system locales. +- name: bidi.browser.ui + type: bool + value: false + mirror: always + +#--------------------------------------------------------------------------- +# Prefs starting with "browser." +#--------------------------------------------------------------------------- + +- name: browser.active_color + type: String + value: "#EE0000" + mirror: never + +- name: browser.active_color.dark + type: String + value: "#FF6666" + mirror: never + +- name: browser.anchor_color + type: String + value: "#0000EE" + mirror: never + +# If you change this, you probably also want to change +# nsXPLookAndFeel::GenericDarkColor for MozNativehyperlinktext. +- name: browser.anchor_color.dark + type: String + value: "#8C8CFF" + mirror: never + +# See http://dev.w3.org/html5/spec/forms.html#attr-fe-autofocus +- name: browser.autofocus + type: bool + value: true + mirror: always + +- name: browser.cache.disk.enable + type: RelaxedAtomicBool + value: true + mirror: always + +- name: browser.cache.memory.enable + type: RelaxedAtomicBool + value: true + mirror: always + +# Limit of recent metadata we keep in memory for faster access, in KB. +- name: browser.cache.disk.metadata_memory_limit + type: RelaxedAtomicUint32 + value: 250 # 0.25 MB + mirror: always + +# Does the user want smart-sizing? +- name: browser.cache.disk.smart_size.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# Disk cache capacity in kilobytes. It's used only when +# browser.cache.disk.smart_size.enabled == false +- name: browser.cache.disk.capacity + type: RelaxedAtomicUint32 + value: 256000 + mirror: always + +# -1 = determine dynamically, 0 = none, n = memory capacity in kilobytes. +- name: browser.cache.memory.capacity + type: RelaxedAtomicInt32 + value: -1 + mirror: always + +# When smartsizing is disabled we could potentially fill all disk space by +# cache data when the disk capacity is not set correctly. To avoid that we +# check the free space every time we write some data to the cache. The free +# space is checked against two limits. Once the soft limit is reached we start +# evicting the least useful entries, when we reach the hard limit writing to +# the entry fails. +- name: browser.cache.disk.free_space_soft_limit + type: RelaxedAtomicUint32 + value: 5 * 1024 # 5MB + mirror: always + +- name: browser.cache.disk.free_space_hard_limit + type: RelaxedAtomicUint32 + value: 1024 # 1MB + mirror: always + +# The number of chunks we preload ahead of read. One chunk currently has +# 256kB. +- name: browser.cache.disk.preload_chunk_count + type: RelaxedAtomicUint32 + value: 4 # 1 MB of read ahead + mirror: always + +# Max-size (in KB) for entries in disk cache. Set to -1 for no limit. +# (Note: entries bigger than 1/8 of disk-cache are never cached) +- name: browser.cache.disk.max_entry_size + type: RelaxedAtomicUint32 + value: 50 * 1024 # 50 MB + mirror: always + +# Max-size (in KB) for entries in memory cache. Set to -1 for no limit. +# (Note: entries bigger than than 90% of the mem-cache are never cached.) +- name: browser.cache.memory.max_entry_size + type: RelaxedAtomicInt32 + value: 5 * 1024 + mirror: always + +# Memory limit (in kB) for new cache data not yet written to disk. Writes to +# the cache are buffered and written to disk on background with low priority. +# With a slow persistent storage these buffers may grow when data is coming +# fast from the network. When the amount of unwritten data is exceeded, new +# writes will simply fail. We have two buckets, one for important data +# (priority) like html, css, fonts and js, and one for other data like images, +# video, etc. +# Note: 0 means no limit. +- name: browser.cache.disk.max_chunks_memory_usage + type: RelaxedAtomicUint32 + value: 40 * 1024 + mirror: always +- name: browser.cache.disk.max_priority_chunks_memory_usage + type: RelaxedAtomicUint32 + value: 40 * 1024 + mirror: always + + +# Number of seconds the cache spends writing pending data and closing files +# after shutdown has been signalled. Past that time data is not written and +# files are left open for the OS to clean up. +- name: browser.cache.max_shutdown_io_lag + type: RelaxedAtomicUint32 + value: 2 + mirror: always + +# After the max_shutdown_io_lag has passed, we will attempt to cancel +# blocking IO (on windows). The CacheIOThread may pick up more blocking +# tasks so we want to cancel those too. The main thread will be woken +# up every shutdown_io_time_between_cancellations_ms to cancel the IO +# on the other thread. +- name: browser.cache.shutdown_io_time_between_cancellations_ms + type: RelaxedAtomicUint32 + value: 5 + mirror: always + +# A percentage limit for media content type in the disk cache. When some entries +# need to be evicted and media is over the limit, it's evicted first. +- name: browser.cache.disk.content_type_media_limit + type: RelaxedAtomicInt32 + value: 50 + mirror: always + +# How often to validate document in cache +# 0 = once-per-session, +# 1 = each-time, +# 2 = never, +# 3 = when-appropriate/automatically +- name: browser.cache.check_doc_frequency + type: RelaxedAtomicUint32 + value: 3 + mirror: always + +# Compression level for cached JavaScript bytecode +# 0 = do not compress, +# 1 = minimal compression, +# 9 = maximal compression +- name: browser.cache.jsbc_compression_level + type: RelaxedAtomicUint32 + value: 0 + mirror: always + +# Whether tooltips are enabled. +- name: browser.chrome.toolbar_tips + type: bool + value: true + mirror: always + +# Whether tooltips are hidden on keydown. +# 0: never +# 1: always +# 2: only on non-modifier keys +- name: browser.chrome.toolbar_tips.hide_on_keydown + type: uint32_t +#if defined(XP_WIN) + value: 0 +#else + value: 2 +#endif + mirror: always + +- name: browser.contentblocking.database.enabled + type: bool + value: false + mirror: always + +# How many recent block/unblock actions per origins we remember in the +# Content Blocking log for each top-level window. +- name: browser.contentblocking.originlog.length + type: uint32_t + value: 32 + mirror: always + +- name: browser.display.background_color + type: String + value: "#FFFFFF" + mirror: never + +- name: browser.display.background_color.dark + type: String + value: "#1C1B22" + mirror: never + +# This preference is a bit confusing because we use the opposite +# string value in the colors dialog to indicate to users how FF HCM +# will behave. +# With resect to document colors, these values mean: +# 0 = "default" = always, except in high contrast mode +# 1 = "always" +# 2 = "never" +# +# On windows, we set this to 0, which means FF HCM will mirror OS HCM. +# Everywhere else, we set this to 1, disabling FF HCM. +- name: browser.display.document_color_use + type: RelaxedAtomicUint32 +#if defined(XP_WIN) + value: 0 +#else + value: 1 +#endif + mirror: always + rust: true + +# 0 = always native +# 1 = never native +# other = default +- name: browser.display.windows.non_native_menus + type: RelaxedAtomicUint32 + value: 2 + mirror: always + rust: true + +# This pref dictates whether or not backplates and background images +# are to be drawn, when in high-contrast mode: +# false: do not draw backplates or render background images +# true: render background images and draw backplates +# This condition is only considered when high-contrast mode is enabled +# in Firefox, ie. when the user has: +# (1) mUseAccessibilityMode set to true (Widows high-contrast mode is on) +# AND browser.display.document_color_use set to 0 +# (only with high-contrast themes) OR +# (2) browser.display.document_color_use set to 2 (always) +- name: browser.display.permit_backplate + type: RelaxedAtomicBool + value: true + mirror: always + rust: true + +# Whether we should suppress the background-image of the canvas (the root +# frame) if we're in forced colors mode. +# +# This is important because some sites use background-image with a plain color +# and it causes undesirable results in high-contrast mode. +# +# See bug 1614921 for example. +- name: browser.display.suppress_canvas_background_image_on_forced_colors + type: bool + value: true + mirror: always + +- name: browser.display.focus_ring_on_anything + type: bool + value: false + mirror: always + +- name: browser.display.focus_ring_width + type: uint32_t + value: 1 + mirror: always + +- name: browser.display.focus_background_color + type: String + value: "#117722" + mirror: never + +# Focus ring border style. +# 0 = solid border, 1 = dotted border +- name: browser.display.focus_ring_style + type: uint32_t + value: 1 + mirror: always + +- name: browser.display.focus_text_color + type: String + value: "#ffffff" + mirror: never + +- name: browser.display.foreground_color + type: String + value: "#000000" + mirror: never + +- name: browser.display.foreground_color.dark + type: String + value: "#FBFBFE" + mirror: never + +# Determines the behavior of OS zoom settings. +# +# 0: doesn't affect rendering at all +# 1: affects full zoom (dpi, effectively). +# 2: affects text zoom. +# +# Default is (1): Historical behavior on Linux, matches other browsers on +# Windows, and generally creates more consistent rendering. +- name: browser.display.os-zoom-behavior + type: RelaxedAtomicInt32 + value: 1 + mirror: always + rust: true + +# Whether focus rings are always shown by default. +# +# This is the initial value of nsWindowRoot::mShowFocusRings, but it can be +# overridden by system preferences. +- name: browser.display.show_focus_rings + type: bool + value: false + mirror: always + +# Enable showing image placeholders while image is loading or when image is broken. +- name: browser.display.show_image_placeholders + type: bool + value: true + mirror: always + +# Whether we should always enable focus rings after focus was moved by keyboard. +# +# This behavior matches both historical and GTK / Windows focus behavior. +# +# :focus-visible is intended to provide better heuristics than this. +- name: browser.display.always_show_rings_after_key_focus + type: bool + value: false + mirror: always + +# In theory: 0 = never, 1 = quick, 2 = always, though we always just use it as +# a bool! +- name: browser.display.use_document_fonts + type: RelaxedAtomicInt32 + value: 1 + mirror: always + rust: true + +# font-family names for which we'll override use_document_fonts=0, and always +# use the specified font. +# This is to support ligature-icon fonts, which render literal strings like +# "arrow_drop_down" with an icon, even when use_document_fonts is disabled. +# If an author provides & uses such a font, and we decline to use it, we'll end +# up rendering these literal strings where the author intended an icon, which +# can cause all sorts of overlapping/unreadable content. +- name: browser.display.use_document_fonts.icon_font_allowlist + type: String + value: >- + Material Icons, + Material Icons Extended, + Material Icons Outlined, + Material Icons Round, + Material Icons Sharp, + Material Icons Two Tone, + Google Material Icons, + Material Symbols Outlined, + Material Symbols Round, + Material Symbols Rounded, + Material Symbols Sharp + mirror: never + +- name: browser.display.use_focus_colors + type: bool + value: false + mirror: always + +- name: browser.display.use_system_colors + type: RelaxedAtomicBool +#ifdef XP_WIN + value: true +#else + value: false +#endif + mirror: always + +- name: browser.dom.window.dump.enabled + type: RelaxedAtomicBool + value: @IS_NOT_MOZILLA_OFFICIAL@ + mirror: always + +# See bug 1738574 +- name: browser.download.start_downloads_in_tmp_dir + type: bool + value: false + mirror: always + +# See bug 1747343 +- name: browser.download.always_ask_before_handling_new_types + type: bool + value: false + mirror: always + +# See bug 1731668 +- name: browser.download.enable_spam_prevention + type: bool + value: false + mirror: always + +# See bug 1772569 +- name: browser.download.open_pdf_attachments_inline + type: bool + value: false + mirror: always + +# See bug 1811830 +- name: browser.download.force_save_internally_handled_attachments + type: bool + value: false + mirror: always + +- name: browser.download.sanitize_non_media_extensions + type: bool + value: true + mirror: always + +# Image document's automatic image sizing. +- name: browser.enable_automatic_image_resizing + type: bool + value: true + mirror: always + +# Image document's click-to-resize. +- name: browser.enable_click_image_resizing + type: bool + value: @IS_NOT_ANDROID@ + mirror: always + +- name: browser.find.ignore_ruby_annotations + type: bool + value: true + mirror: always + +#if defined(XP_MACOSX) +# Whether pressing Esc will exit fullscreen. +- name: browser.fullscreen.exit_on_escape + type: bool + value: true + mirror: always +#endif + +# The max url length we'll store in history. +# +# The default value is mostly a guess based on various facts: +# +# * IE didn't support urls longer than 2083 chars +# * Sitemaps protocol used to support a maximum of 2048 chars +# * Various SEO guides suggest to not go over 2000 chars +# * Various apps/services are known to have issues over 2000 chars +# * RFC 2616 - HTTP/1.1 suggests being cautious about depending +# on URI lengths above 255 bytes +# +- name: browser.history.maxUrlLength + type: uint32_t + value: 2000 + mirror: always + +# Max size of push/replaceState data parameter +- name: browser.history.maxStateObjectSize + type: int32_t + value: 16777216 + mirror: always + +# True to collect wireframes upon navigations / pushState +- name: browser.history.collectWireframes + type: bool + value: false + mirror: always + +# The minimum area for a rect to be included in a wireframe, in CSS pixels. +# +# The current value of 50 is pretty arbitrary, and will be tuned as we refine +# and test the wireframing capability. +- name: browser.history.wireframeAreaThreshold + type: uint32_t + value: 50 + mirror: always + +#if defined(XP_WIN) || defined(XP_LINUX) + # Notify TabUnloader or send the memory pressure if the memory resource + # notification is signaled AND the available commit space is lower than + # this value. +- name: browser.low_commit_space_threshold_mb + type: RelaxedAtomicUint32 + value: 200 + mirror: always +#endif + +#ifdef XP_LINUX + # On Linux we also check available memory in comparison to total memory, + # and use this percent value (out of 100) to determine if we are in a + # low memory scenario. +- name: browser.low_commit_space_threshold_percent + type: RelaxedAtomicUint32 + value: 5 + mirror: always +#endif + +# Render animations and videos as a solid color +- name: browser.measurement.render_anims_and_video_solid + type: RelaxedAtomicBool + value: false + mirror: always + +- name: browser.navigation.requireUserInteraction + type: bool + value: false + mirror: always + +# Indicates if about:newtab shows content (enabled) or just blank. +- name: browser.newtabpage.enabled + type: bool + value: true + mirror: always + +# Open PDFs in Edge with the --app flag if it is the default. +- name: browser.pdf.launchDefaultEdgeAsApp + type: bool + value: true + mirror: always + +# Maximium delay between keystrokes that will be considered typing (milliseconds). +- name: browser.places.interactions.typing_timeout_ms + type: RelaxedAtomicUint32 + value: 3000 + mirror: always + +# Maximum delay between scroll input events that will be considered a scrolling interaction (milliseconds). +- name: browser.places.interactions.scrolling_timeout_ms + type: RelaxedAtomicUint32 + value: 5000 + mirror: always + +# Number of seconds till the sponsored session is timeout. +- name: browser.places.sponsoredSession.timeoutSecs + type: RelaxedAtomicUint32 + value: 3600 + mirror: always + +# Whether to start the private browsing mode at application startup +- name: browser.privatebrowsing.autostart + type: bool + value: false + mirror: always + +# Force usage of in-memory (rather than file on disk) media cache for video streaming when private browsing +- name: browser.privatebrowsing.forceMediaMemoryCache + type: bool + value: false + mirror: always + +# Communicates the toolbar color to platform (for e.g., prefers-color-scheme). +# +# Returns whether the toolbar is dark (0), light (1), or system (2). +# +# Default to "light" on macOS / Windows, and "system" elsewhere. The theming +# code sets it appropriately. +- name: browser.theme.toolbar-theme + type: RelaxedAtomicUint32 +#if defined(XP_WIN) || defined(XP_MACOSX) + value: 1 +#else + value: 2 +#endif + mirror: always + +# Communicates the preferred content theme color to platform (for e.g., +# prefers-color-scheme). +# +# dark (0), light (1), system (2), or toolbar (3). +# +# Default to "toolbar", the theming code sets it appropriately. +- name: browser.theme.content-theme + type: RelaxedAtomicUint32 + value: 2 + mirror: always + rust: true + +# Blocked plugin content +- name: browser.safebrowsing.blockedURIs.enabled + type: bool + value: true + mirror: always + +# Malware protection +- name: browser.safebrowsing.malware.enabled + type: bool + value: true + mirror: always + +# Password protection +- name: browser.safebrowsing.passwords.enabled + type: bool + value: false + mirror: always + +# Phishing protection +- name: browser.safebrowsing.phishing.enabled + type: bool + value: true + mirror: always + +# Maximum size for an array to store the safebrowsing prefixset. +- name: browser.safebrowsing.prefixset_max_array_size + type: RelaxedAtomicUint32 + value: 512*1024 + mirror: always + +# SessionStore prefs +# Maximum number of bytes of DOMSessionStorage data we collect per origin. +- name: browser.sessionstore.dom_storage_limit + type: uint32_t + value: 2048 + mirror: always + +# Maximum number of characters of form field data per field we collect. +- name: browser.sessionstore.dom_form_limit + type: uint32_t + value: 1024*1024*2 + mirror: always + +# Maximum number of characters of form data we collect per origin. +- name: browser.sessionstore.dom_form_max_limit + type: uint32_t + value: 1024*1024*50 + mirror: always + +# Minimal interval between two save operations in milliseconds (while the user is active). +- name: browser.sessionstore.interval + type: RelaxedAtomicUint32 + value: 15000 + mirror: always + +# Platform collection of data for session store +- name: browser.sessionstore.platform_collection + type: bool +#if defined(ANDROID) || defined(MOZ_THUNDERBIRD) + value: false +#else + value: true +#endif + mirror: once + +# Platform collection of session storage data for session store +- name: browser.sessionstore.collect_session_storage + type: bool + value: @IS_NOT_ANDROID@ + mirror: once + +# Platform collection of zoom data for session store +- name: browser.sessionstore.collect_zoom + type: bool + value: @IS_NOT_ANDROID@ + mirror: once + +# Causes SessionStore to ignore non-final update messages from +# browser tabs that were not caused by a flush from the parent. +# This is a testing flag and should not be used by end-users. +- name: browser.sessionstore.debug.no_auto_updates + type: RelaxedAtomicBool + value: false + mirror: always + +# Whether we should draw the tabs on top of the titlebar. +# +# no (0), yes (1), or default (2), which is true everywhere except Linux. +- name: browser.tabs.inTitlebar + type: int32_t + value: 2 + mirror: always + +# If set, use DocumentChannel to directly initiate loads entirely +# from parent-process BrowsingContexts +- name: browser.tabs.documentchannel.parent-controlled + type: bool + value: false + mirror: always + +# Testing-only pref which makes data: URIs be loaded in a "web" content process +# instead of within a process based on the URI's loader. +- name: browser.tabs.remote.dataUriInDefaultWebProcess + type: bool + value: false + mirror: always + +# Testing-only pref to force system-triggered about:blank loads to not change +# content processes. This is used for performance tests which load an +# about:blank document between navigations for historical reasons to avoid +# unnecessary process switches. +- name: browser.tabs.remote.systemTriggeredAboutBlankAnywhere + type: bool + value: false + mirror: always + +# Testing-only pref to cause PBrowser creation for a specific BrowsingContext to +# fail, to test the errored codepath. +- name: browser.tabs.remote.testOnly.failPBrowserCreation.enabled + type: bool + value: false + mirror: always + +- name: browser.tabs.remote.desktopbehavior + type: bool + value: false + mirror: always + +- name: browser.tabs.remote.force-paint + type: bool + value: true + mirror: always + +# When this pref is enabled document loads with a mismatched +# Cross-Origin-Embedder-Policy header will fail to load +- name: browser.tabs.remote.useCrossOriginEmbedderPolicy + type: RelaxedAtomicBool + value: true + mirror: always + +# This pref makes `credentialless` a valid value for +# Cross-Origin-Embedder-Policy header +- name: browser.tabs.remote.coep.credentialless + type: RelaxedAtomicBool + value: @IS_NIGHTLY_BUILD@ + mirror: always + do_not_use_directly: true + +# When this pref is enabled top level loads with a mismatched +# Cross-Origin-Opener-Policy header will be loaded in a separate process. +- name: browser.tabs.remote.useCrossOriginOpenerPolicy + type: RelaxedAtomicBool + value: true + mirror: always + +# When this pref is enabled then we use a separate content process for +# top-level load of file:// URIs +- name: browser.tabs.remote.separateFileUriProcess + type: RelaxedAtomicBool +#if !defined(ANDROID) + value: true +#else + value: false +#endif + mirror: always + +# Pref to control whether we use a separate privileged content process +# for certain mozilla webpages (which are listed in the pref +# browser.tabs.remote.separatedMozillaDomains). +- name: browser.tabs.remote.separatePrivilegedMozillaWebContentProcess + type: bool + value: false + mirror: always + +# Whether or not process selection for subframes will prefer re-using an +# existing content process over creating a new one. Enabling this pref should +# reduce the number of processes allocated for non-first-party domains if +# dom.ipc.processCount.webIsolated > 1. +- name: browser.tabs.remote.subframesPreferUsed + type: bool + value: true + mirror: always + +# When this pref is enabled, opaque response is only allowed to enter the +# content process if it's a response for media (audio, image, video), CSS, or +# JavaScript. +- name: browser.opaqueResponseBlocking + type: RelaxedAtomicBool +#if defined(ANDROID) + value: false +#else + value: @IS_EARLY_BETA_OR_EARLIER@ +#endif + mirror: always + +# When this pref is enabled, the JS validator will be enabled for +# ORB. +- name: browser.opaqueResponseBlocking.javascriptValidator + type: bool + value: @IS_EARLY_BETA_OR_EARLIER@ + mirror: always + +# This pref controls how filtering of opaque responses for calls to `Window.fetch`. +# (and similar) is performed in the parent process. This is intended to make sure +# that data that would be filtered in a content process never actually reaches that +# content process. +# See https://fetch.spec.whatwg.org/#concept-filtered-response-opaque +# 0) Don't filter in the parent process at all, and let content processes handle +# opaque filtering. Regardless of if ORB is enabled or not. N.B. that if ORB +# is enabled opaque responses will be blocked. +# 1) If ORB is enabled, in the parent process, filter the responses that ORB allows. +# N.B. any responses ORB doesn't allow will not send data to a content process +# since they will return a NetworkError. If the request is allowed by ORB, the +# internal response will be intact and sent to the content process as is. +# 2) If ORB is enabled, in the parent process, filter the responses that ORB blocks, +# when they were issued by `Window.fetch` (and similar). +# 3) Filter all responses in the parent, regardless of if ORB is enabled or not. +# This means that opaque responses coming from `Window.fetch` won't even be +# considered for being blocked by ORB. +- name: browser.opaqueResponseBlocking.filterFetchResponse + type: uint32_t + value: 2 + mirror: always + do_not_use_directly: true + +# This pref controls how exceptions to opaque response blocking for the media MIME types +# `audio/*` and `video/*` are handled. This is because step 8 in the spec that performs +# audio or video type pattern matching cannot handle certain MIME types (yet). +# See https://whatpr.org/fetch/1442.html#orb-algorithm +# 0) No exceptions +# 1) Some exceptions, explicitly hard coded in `IsOpaqueSafeListedSpecBreakingMIMEType` +# 2) Allow all MIME types beginning with `audio/*` or `video/*`. +- name: browser.opaqueResponseBlocking.mediaExceptionsStrategy + type: uint32_t + value: 1 + mirror: always + do_not_use_directly: true + +# When this pref is enabled, <object> and <embed> elements will create +# synthetic documents when the resource type they're loading is an image. +- name: browser.opaqueResponseBlocking.syntheticBrowsingContext + type: bool + value: true + mirror: once + +# When this pref is enabled, <object> and <embed> elements will filter the +# browsing contexts created for the synthetic browsing contexts for the +# synthetic documents when browser.opaqueResponseBlocking.syntheticBrowsingContext +# is enabled from `Window.frames`, `Window.length` and named targeting. +- name: browser.opaqueResponseBlocking.syntheticBrowsingContext.filter + type: bool + value: true + mirror: once + do_not_use_directly: true + +# When true, zooming will be enabled on all sites, even ones that declare +# user-scalable=no. +- name: browser.ui.zoom.force-user-scalable + type: RelaxedAtomicBool + value: false + mirror: always + +- name: browser.underline_anchors + type: bool + value: true + mirror: always + +- name: browser.viewport.desktopWidth + type: RelaxedAtomicInt32 + value: 980 + mirror: always + +- name: browser.visited_color + type: String + value: "#551A8B" + mirror: never + +# If you change this, you probably also want to change +# nsXPLookAndFeel::GenericDarkColor for MozNativevisitedhyperlinktext. +- name: browser.visited_color.dark + type: String + value: "#FFADFF" + mirror: never + +# When true, soft reloads (including location.reload()) +# will only froce validate the top level document, subresources will +# be loaded normally as-if users normally navigated to the page. +- name: browser.soft_reload.only_force_validate_top_level_document + type: bool + value: true + mirror: always + +#--------------------------------------------------------------------------- +# Prefs starting with "canvas." +#--------------------------------------------------------------------------- + +# Limit for the canvas image cache. 0 means unlimited. +- name: canvas.image.cache.limit + type: int32_t + value: 0 + mirror: always + +# Add support for canvas path objects +- name: canvas.path.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +- name: canvas.capturestream.enabled + type: bool + value: true + mirror: always + +# Is support for CanvasRenderingContext2D.filter enabled? +- name: canvas.filters.enabled + type: bool + value: true + mirror: always + +# Provide ability to turn on support for canvas focus rings. +- name: canvas.focusring.enabled + type: bool + value: true + mirror: always + +# Is support for CanvasRenderingContext2D's createConicGradient API enabled? +- name: canvas.createConicGradient.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +#--------------------------------------------------------------------------- +# Prefs starting with "channelclassifier." +#--------------------------------------------------------------------------- + +- name: channelclassifier.allowlist_example + type: bool + value: false + mirror: always + +#--------------------------------------------------------------------------- +# Prefs starting with "clipboard." +#--------------------------------------------------------------------------- + +# Clipboard behavior. +- name: clipboard.autocopy + type: bool +#if !defined(ANDROID) && !defined(XP_MACOSX) && defined(XP_UNIX) + value: true +#else + value: false +#endif + mirror: always + +#ifdef XP_WIN + # allow to copy clipboard data to Clipboard History/Cloud + # (used on sensitive data in about:logins and Private Browsing) +- name: clipboard.copyPrivateDataToClipboardCloudOrHistory + type: bool + value: false + mirror: always +#endif + +#--------------------------------------------------------------------------- +# Prefs starting with "consoleservice." +#--------------------------------------------------------------------------- + +#if defined(ANDROID) + # Disable sending console to logcat on release builds. +- name: consoleservice.logcat + type: RelaxedAtomicBool + value: @IS_NOT_RELEASE_OR_BETA@ + mirror: always +#endif + +#--------------------------------------------------------------------------- +# Prefs starting with "content." +#--------------------------------------------------------------------------- + +- name: content.cors.disable + type: bool + value: false + mirror: always + +# Back off timer notification after count. +# -1 means never. +- name: content.notify.backoffcount + type: int32_t + value: -1 + mirror: always + +# Notification interval in microseconds. +# The notification interval has a dramatic effect on how long it takes to +# initially display content for slow connections. The current value +# provides good incremental display of content without causing an increase +# in page load time. If this value is set below 1/10 of a second it starts +# to impact page load performance. +# See bugzilla bug 72138 for more info. +- name: content.notify.interval + type: int32_t + value: 120000 + mirror: always + +# Do we notify based on time? +- name: content.notify.ontimer + type: bool + value: true + mirror: always + +# How many times to deflect in interactive mode. +- name: content.sink.interactive_deflect_count + type: int32_t + value: 0 + mirror: always + +# How many times to deflect in perf mode. +- name: content.sink.perf_deflect_count + type: int32_t + value: 200 + mirror: always + +# Parse mode for handling pending events. +# 0 = don't check for pending events +# 1 = don't deflect if there are pending events +# 2 = bail if there are pending events +- name: content.sink.pending_event_mode + type: int32_t +#ifdef XP_WIN + value: 1 +#else + value: 0 +#endif + mirror: always + +# How often to probe for pending events. 1 = every token. +- name: content.sink.event_probe_rate + type: int32_t + value: 1 + mirror: always + +# How long to stay off the event loop in interactive mode (microseconds). +- name: content.sink.interactive_parse_time + type: int32_t + value: 3000 + mirror: always + +# How long to stay off the event loop in perf mode. +- name: content.sink.perf_parse_time + type: int32_t + value: 30000 + mirror: always + +# How long to be in interactive mode after an event. +- name: content.sink.interactive_time + type: uint32_t + value: 750000 + mirror: always + +# How long to stay in perf mode after initial loading. +- name: content.sink.initial_perf_time + type: uint32_t + value: 2000000 + mirror: always + +# Should we switch between perf-mode and interactive-mode? +# 0 = Switch +# 1 = Interactive mode +# 2 = Perf mode +- name: content.sink.enable_perf_mode + type: int32_t + value: 0 + mirror: always + +#--------------------------------------------------------------------------- +# Prefs starting with "converter." +#--------------------------------------------------------------------------- + +# Whether we include ruby annotation in the text despite whether it +# is requested. This was true because we didn't explicitly strip out +# annotations. Set false by default to provide a better behavior, but +# we want to be able to pref-off it if user doesn't like it. +- name: converter.html2txt.always_include_ruby + type: bool + value: false + mirror: always + +#--------------------------------------------------------------------------- +# Prefs starting with "cookiebanners." +#--------------------------------------------------------------------------- + +# Controls the cookie banner handling mode in normal browsing. +# 0: Disables all cookie banner handling. +# 1: Reject-all if possible, otherwise do nothing. +# 2: Reject-all if possible, otherwise accept-all. +- name: cookiebanners.service.mode + type: uint32_t + value: 0 + mirror: always + +# When set to true, cookie banners are detected and detection events are +# dispatched, but they will not be handled. Requires the service to be enabled +# for the desired mode via pref cookiebanners.service.mode* +- name: cookiebanners.service.detectOnly + type: bool + value: false + mirror: always + +# Controls the cookie banner handling mode in private browsing. Same mode +# options as the normal browsing pref above. +- name: cookiebanners.service.mode.privateBrowsing + type: uint32_t + value: 0 + mirror: always + +# Enables use of global CookieBannerRules, which apply to all sites. This is +# used for click rules that can handle common Consent Management Providers +# (CMP). +# Enabling this (when the cookie handling feature is enabled) may negatively +# impact site performance since it requires us to run rule-defined query +# selectors for every page. +- name: cookiebanners.service.enableGlobalRules + type: bool + value: false + mirror: always + +# Enables the cookie banner cookie injector. The cookie banner cookie injector +# depends on the `cookiebanners.service.mode` pref above. +- name: cookiebanners.cookieInjector.enabled + type: bool + value: true + mirror: always + + +# By default, how many seconds in the future cookies should expire after they +# have been injected. Defaults to 12 months. Individual cookie rules may +# override this. +- name: cookiebanners.cookieInjector.defaultExpiryRelative + type: uint32_t + value: 31536000 + mirror: always + +# Enables the cookie banner auto clicking. The cookie banner auto clicking +# depends on the `cookiebanners.service.mode` pref above. +- name: cookiebanners.bannerClicking.enabled + type: bool + value: true + mirror: always + +# The maximum time in ms for detecting banner and button elements for cookie +# banner auto clicking. +- name: cookiebanners.bannerClicking.timeout + type: uint32_t + value: 3000 + mirror: always + +# Whether or not banner auto clicking test mode is enabled. +- name: cookiebanners.bannerClicking.testing + type: bool + value: false + mirror: always + +#--------------------------------------------------------------------------- +# Prefs starting with "datareporting." +#--------------------------------------------------------------------------- + +- name: datareporting.healthreport.uploadEnabled + type: RelaxedAtomicBool + value: false + mirror: always + rust: true + +#--------------------------------------------------------------------------- +# Prefs starting with "device." +#--------------------------------------------------------------------------- + +# Is support for the device sensors API enabled? +- name: device.sensors.enabled + type: bool + value: true + mirror: always + +# KaiOS-only, see https://bugzilla.mozilla.org/show_bug.cgi?id=1699707#c10 +- name: device.sensors.ambientLight.enabled + type: bool + value: false + mirror: always + +- name: device.sensors.motion.enabled + type: bool + value: true + mirror: always + +- name: device.sensors.orientation.enabled + type: bool + value: true + mirror: always + +# KaiOS-only, see https://bugzilla.mozilla.org/show_bug.cgi?id=1699707#c10 +- name: device.sensors.proximity.enabled + type: bool + value: false + mirror: always + +- name: device.sensors.test.events + type: bool + value: false + mirror: always + +#--------------------------------------------------------------------------- +# Prefs starting with "devtools." +#--------------------------------------------------------------------------- + +- name: devtools.console.stdout.chrome + type: RelaxedAtomicBool + value: @IS_NOT_MOZILLA_OFFICIAL@ + mirror: always + +- name: devtools.console.stdout.content + type: RelaxedAtomicBool + value: false + mirror: always + +- name: devtools.toolbox.force-chrome-prefs + type: RelaxedAtomicBool + value: true + mirror: always + +#--------------------------------------------------------------------------- +# Prefs starting with "docshell." +#--------------------------------------------------------------------------- + +# Used to indicate whether session history listeners should be notified +# about content viewer eviction. Used only for testing. +- name: docshell.shistory.testing.bfevict + type: bool + value: false + mirror: always + +# If true, pages with an opener won't be bfcached. +- name: docshell.shistory.bfcache.require_no_opener + type: bool + value: @IS_ANDROID@ + mirror: always + +# If true, page with beforeunload or unload event listeners can be bfcached. +- name: docshell.shistory.bfcache.allow_unload_listeners + type: bool + value: @IS_ANDROID@ + mirror: always + +# If true, page with beforeunload event listeners can be bfcached. +# This only works when sessionHistoryInParent is enabled. +- name: docshell.shistory.bfcache.ship_allow_beforeunload_listeners + type: bool + value: @IS_EARLY_BETA_OR_EARLIER@ + mirror: always + +#--------------------------------------------------------------------------- +# Prefs starting with "dom." +#--------------------------------------------------------------------------- + +# Allow cut/copy +- name: dom.allow_cut_copy + type: bool + value: true + mirror: always + +- name: dom.allow_XUL_XBL_for_file + type: bool + value: false + mirror: always + +# Checks if offscreen animation throttling is enabled. +- name: dom.animations.offscreen-throttling + type: bool + value: true + mirror: always + +# Is support for automatically removing replaced filling animations enabled? +- name: dom.animations-api.autoremove.enabled + type: bool + value: true + mirror: always + +# Is support for composite operations from the Web Animations API enabled? +- name: dom.animations-api.compositing.enabled + type: bool + value: true + mirror: always + +# Is support for the core interfaces of Web Animations API enabled? +- name: dom.animations-api.core.enabled + type: bool + value: true + mirror: always + +# Is support for Document.getAnimations() and Element.getAnimations() +# supported? +- name: dom.animations-api.getAnimations.enabled + type: bool + value: true + mirror: always + +# Is support for animations from the Web Animations API without 0%/100% +# keyframes enabled? +- name: dom.animations-api.implicit-keyframes.enabled + type: bool + value: true + mirror: always + +# Is support for timelines from the Web Animations API enabled? +- name: dom.animations-api.timelines.enabled + type: bool + value: true + mirror: always + +# Synchronize transform animations with geometric animations on the +# main thread. +- name: dom.animations.mainthread-synchronization-with-geometric-animations + type: bool + value: @IS_NOT_NIGHTLY_BUILD@ + mirror: always + +# Is support for AudioWorklet enabled? +- name: dom.audioworklet.enabled + type: bool + value: true + mirror: always + +# Is support for Navigator.getBattery enabled? +- name: dom.battery.enabled + type: bool + value: true + mirror: always + +# Block multiple external protocol URLs in iframes per single event. +- name: dom.block_external_protocol_in_iframes + type: bool + value: true + mirror: always + +# Block sandboxed BrowsingContexts from navigating to external protocols. +- name: dom.block_external_protocol_navigation_from_sandbox + type: bool + value: true + mirror: always + +# Block Insecure downloads from Secure Origins +- name: dom.block_download_insecure + type: bool + value: true + mirror: always + +# Block all downloads in iframes with the sandboxed attribute +- name: dom.block_download_in_sandboxed_iframes + type: bool + value: true + mirror: always + +# Block multiple window.open() per single event. +- name: dom.block_multiple_popups + type: bool + value: true + mirror: always + +# The maximum number of popup that is allowed to be opened. Set to -1 for no +# limit. +- name: dom.popup_maximum + type: int32_t + value: 20 + mirror: always + +# Whether Window.{inner,outer}{Width,Height} and screen{X,Y} +# behave as replaceable properties unconditionally. +- name: dom.window_position_size_properties_replaceable.enabled + type: bool + value: true + mirror: always + +# Whether window.location.reload() and window.history.go(0) should be blocked +# when called directly from a window resize event handler. +# +# This used to be necessary long ago to prevent terrible UX when using stuff +# like TypeAheadFind (bug 258917), but it also causes compat issues on mobile +# (bug 1570566). +- name: dom.block_reload_from_resize_event_handler + type: bool + value: false + mirror: always + +# SW Cache API +- name: dom.caches.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# Exposes window.caches and skips SecureContext check. +# dom.serviceWorkers.testing.enabled also includes the same effect. +- name: dom.caches.testing.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +# Disable capture attribute for input elements; only supported on GeckoView. +- name: dom.capture.enabled + type: bool + value: false + mirror: always + +# HTML specification says the level should be 5 +# https://html.spec.whatwg.org/#timer-initialisation-steps +- name: dom.clamp.timeout.nesting.level + type: uint32_t + value: 5 + mirror: once + +# Disable custom highlight API; implementation pending. +- name: dom.customHighlightAPI.enabled + type: RelaxedAtomicBool + value: false + mirror: always + rust: true + +# Allow control characters appear in composition string. +# When this is false, control characters except +# CHARACTER TABULATION (horizontal tab) are removed from +# both composition string and data attribute of compositionupdate +# and compositionend events. +- name: dom.compositionevent.allow_control_characters + type: bool + value: false + mirror: always + +# Compression Streams (CompressionStream/DecompressionStream) +- name: dom.compression_streams.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +- name: dom.crypto.randomUUID.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# Is support for CSSPseudoElement enabled? +- name: dom.css_pseudo_element.enabled + type: bool + value: false + mirror: always + +# After how many seconds we allow external protocol URLs in iframe when not in +# single events +- name: dom.delay.block_external_protocol_in_iframes + type: uint32_t + value: 10 # in seconds + mirror: always + +# Whether the above pref has any effect at all. +# Make sure cases like bug 1795380 work before trying to turn this off. See +# bug 1680721 for some other context that might be relevant. +- name: dom.delay.block_external_protocol_in_iframes.enabled + type: bool + value: true + mirror: always + +# HTML <dialog> element +- name: dom.dialog_element.enabled + type: bool + value: true + mirror: always + +# Only propagate the open window click permission if the setTimeout() is equal +# to or less than this value. +- name: dom.disable_open_click_delay + type: int32_t + value: 1000 + mirror: always + +- name: dom.disable_open_during_load + type: bool + value: false + mirror: always + +- name: dom.disable_beforeunload + type: bool + value: false + mirror: always + +- name: dom.require_user_interaction_for_beforeunload + type: bool + value: true + mirror: always + +# Enable/disable Gecko specific edit commands +- name: dom.document.edit_command.contentReadOnly.enabled + type: bool + value: @IS_NOT_EARLY_BETA_OR_EARLIER@ + mirror: always + +- name: dom.document.edit_command.insertBrOnReturn.enabled + type: bool + value: @IS_NOT_EARLY_BETA_OR_EARLIER@ + mirror: always + +# If set this to true, `Document.execCommand` may be performed nestedly. +# Otherwise, nested calls just return false. +- name: dom.document.exec_command.nested_calls_allowed + type: bool + value: false + mirror: always + +- name: dom.enable_window_print + type: bool + value: true + mirror: always + +# Only intended for fuzzing purposes, this will break mozPrintCallback, etc. +- name: dom.window_print.fuzzing.block_while_printing + type: bool + value: false + mirror: always + +- name: dom.element.transform-getters.enabled + type: bool + value: false + mirror: always + +# Whether the popover attribute implementation is enabled, +# see https://html.spec.whatwg.org/#the-popover-attribute +- name: dom.element.popover.enabled + type: RelaxedAtomicBool + value: false + mirror: always + rust: true + +# Controls whether the "focus fixup rule" is enabled. Subject to minor changes +# based on https://github.com/whatwg/html/pull/8392 and +# https://github.com/whatwg/html/issues/8225 +- name: dom.focus.fixup + type: bool + value: true + mirror: always + +- name: dom.mouse_capture.enabled + type: bool + value: true + mirror: always + +# Is support for Performance.mozMemory enabled? +- name: dom.enable_memory_stats + type: bool + value: false + mirror: always + +# Enable Performance API +# Whether nonzero values can be returned from performance.timing.* +- name: dom.enable_performance + type: RelaxedAtomicBool + value: true + mirror: always + +# Enable Performance Observer API +- name: dom.enable_performance_observer + type: RelaxedAtomicBool + value: true + mirror: always + +# Whether resource timing will be gathered and returned by performance.GetEntries* +- name: dom.enable_resource_timing + type: bool + value: true + mirror: always + +# Whether event timing will be gathered and returned by performance observer* +- name: dom.enable_event_timing + type: RelaxedAtomicBool + value: true + mirror: always + +# Whether the LargestContentfulPaint API will be gathered and returned by performance observer* +- name: dom.enable_largest_contentful_paint + type: RelaxedAtomicBool + value: false + mirror: always + +# Whether performance.GetEntries* will contain an entry for the active document +- name: dom.enable_performance_navigation_timing + type: bool + value: true + mirror: always + +# Whether the scheduler interface will be exposed +- name: dom.enable_web_task_scheduling + type: RelaxedAtomicBool + value: @IS_NIGHTLY_BUILD@ + mirror: always + +# If this is true, it's allowed to fire "cut", "copy" and "paste" events. +# Additionally, "input" events may expose clipboard content when inputType +# is "insertFromPaste" or something. +- name: dom.event.clipboardevents.enabled + type: bool + value: true + mirror: always + +# Whether touch event listeners are passive by default. +- name: dom.event.default_to_passive_touch_listeners + type: bool + value: true + mirror: always + +# Whether wheel listeners are passive by default. +- name: dom.event.default_to_passive_wheel_listeners + type: bool + value: true + mirror: always + +- name: dom.event.dragexit.enabled + type: bool + value: @IS_NOT_NIGHTLY_BUILD@ + mirror: always + +# Whether wheel event target's should be grouped. When enabled, all wheel +# events that occur in a given wheel transaction have the same event target. +- name: dom.event.wheel-event-groups.enabled + type: bool + value: @IS_EARLY_BETA_OR_EARLIER@ + mirror: always + +# Whether WheelEvent should return pixels instead of lines for +# WheelEvent.deltaX/Y/Z, when deltaMode hasn't been checked. +# +# Other browsers don't use line deltas and websites forget to check for it, see +# bug 1392460. +- name: dom.event.wheel-deltaMode-lines.disabled + type: bool + value: true + mirror: always + +# Mostly for debugging. Whether we should do the same as +# dom.event.wheel-deltaMode-lines.disabled, but unconditionally rather than +# only when deltaMode hasn't been checked. +- name: dom.event.wheel-deltaMode-lines.always-disabled + type: bool + value: false + mirror: always + +# A blocklist (list of domains) for the +# dom.event.wheel-deltaMode-lines.disabled behavior, in case potential +# unforeseen problems with it arrive. +- name: dom.event.wheel-deltaMode-lines.always-enabled + type: String + value: "" + mirror: never + +#if defined(XP_MACOSX) +# Whether to disable treating ctrl click as right click +- name: dom.event.treat_ctrl_click_as_right_click.disabled + type: bool + value: @IS_NIGHTLY_BUILD@ + mirror: always +#endif + +# Whether .offset{X,Y} for events targeted at SVG nodes returns bounds relative +# to the outer SVG. +- name: dom.events.offset-in-svg-relative-to-svg-root + type: bool + value: true + mirror: always + +# Disable clipboard.read(), clipboard.write() and ClipboardItem by default +- name: dom.events.asyncClipboard.clipboardItem + type: bool + value: false + mirror: always + +# Skips checking permission and user activation when accessing the clipboard. +# Should only be enabled in tests. +# Access with Clipboard::IsTestingPrefEnabled(). +- name: dom.events.testing.asyncClipboard + type: bool + value: false + mirror: always + do_not_use_directly: true + +# Control whether `navigator.clipboard.readText()` is exposed to content. +# Currently not supported by GeckoView, see bug 1776829. +- name: dom.events.asyncClipboard.readText + type: bool + value: false + mirror: always + do_not_use_directly: true + +# This pref controls whether or not the `protected` dataTransfer state is +# enabled. If the `protected` dataTransfer stae is disabled, then the +# DataTransfer will be read-only whenever it should be protected, and will not +# be disconnected after a drag event is completed. +- name: dom.events.dataTransfer.protected.enabled + type: bool + value: false + mirror: always + +# Whether to hide normal files (i.e. non-images) in dataTransfer inside +# the content process. +- name: dom.events.dataTransfer.mozFile.enabled + type: bool + value: @IS_NIGHTLY_BUILD@ + mirror: always + +- name: dom.events.dataTransfer.imageAsFile.enabled + type: bool + value: false + mirror: always + +# User interaction timer interval, in ms +- name: dom.events.user_interaction_interval + type: uint32_t + value: 5000 + mirror: always + +# Whether to try to compress touchmove events on IPC layer. +- name: dom.events.compress.touchmove + type: bool + value: true + mirror: always + +# In addition to the above IPC layer compresison, allow touchmove +# events to be further coalesced in the child side after they +# are sent. +- name: dom.events.coalesce.touchmove + type: bool + value: true + mirror: always + +# Allow mousemove events to be coalesced in the child side after they are sent. +- name: dom.events.coalesce.mousemove + type: bool + value: true + mirror: always + +# Whether to expose test interfaces of various sorts +- name: dom.expose_test_interfaces + type: bool + value: false + mirror: always + +- name: dom.fetchObserver.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +# Allow the content process to create a File from a path. This is allowed just +# on parent process, on 'file' Content process, or for testing. +- name: dom.file.createInChild + type: RelaxedAtomicBool + value: false + mirror: always + +# Support @autocomplete values for form autofill feature. +- name: dom.forms.autocomplete.formautofill + type: bool + value: false + mirror: always + +# Only trusted submit event could trigger form submission. +- name: dom.forms.submit.trusted_event_only + type: bool + value: false + mirror: always + +# This pref just controls whether we format the number with grouping separator +# characters when the internal value is set or updated. It does not stop the +# user from typing in a number and using grouping separators. +- name: dom.forms.number.grouping + type: bool + value: false + mirror: always + +# Whether fullscreen should make the rest of the document inert. +# This matches other browsers but historically not Gecko. +- name: dom.fullscreen.modal + type: bool + value: true + mirror: always + +# Whether the Gamepad API is enabled +- name: dom.gamepad.enabled + type: bool + value: true + mirror: always + +# Is Gamepad Extension API enabled? +- name: dom.gamepad.extensions.enabled + type: bool + value: true + mirror: always + +# Is LightIndicator API enabled in Gamepad Extension API? +- name: dom.gamepad.extensions.lightindicator + type: bool + value: false + mirror: always + +# Is MultiTouch API enabled in Gamepad Extension API? +- name: dom.gamepad.extensions.multitouch + type: bool + value: false + mirror: always + +# Is Gamepad vibrate haptic feedback function enabled? +- name: dom.gamepad.haptic_feedback.enabled + type: bool + value: true + mirror: always + +- name: dom.gamepad.non_standard_events.enabled + type: bool + value: @IS_NOT_RELEASE_OR_BETA@ + mirror: always + +- name: dom.gamepad.test.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +# W3C draft ImageCapture API +- name: dom.imagecapture.enabled + type: bool + value: false + mirror: always + +# <img loading="lazy"> +# +# See https://github.com/whatwg/html/pull/3752 +- name: dom.image-lazy-loading.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# The root margin for image lazy loading, defined as four (value, percentage) +# pairs. +- name: dom.image-lazy-loading.root-margin.top + type: float + value: 600 + mirror: always + +- name: dom.image-lazy-loading.root-margin.top.percentage + type: bool + value: false + mirror: always + +- name: dom.image-lazy-loading.root-margin.bottom + type: float + value: 600 + mirror: always + +- name: dom.image-lazy-loading.root-margin.bottom.percentage + type: bool + value: false + mirror: always + +- name: dom.image-lazy-loading.root-margin.left + type: float + value: 600 + mirror: always + +- name: dom.image-lazy-loading.root-margin.left.percentage + type: bool + value: false + mirror: always + +- name: dom.image-lazy-loading.root-margin.right + type: float + value: 600 + mirror: always + +- name: dom.image-lazy-loading.root-margin.right.percentage + type: bool + value: false + mirror: always + +# Enable indexedDB in private browsing mode with encryption +- name: dom.indexedDB.privateBrowsing.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# Whether or not indexedDB test mode is enabled. +- name: dom.indexedDB.testing + type: RelaxedAtomicBool + value: false + mirror: always + +# Whether or not indexedDB experimental features are enabled. +- name: dom.indexedDB.experimental + type: RelaxedAtomicBool + value: false + mirror: always + +# Whether or not indexedDB preprocessing is enabled. +- name: dom.indexedDB.preprocessing + type: RelaxedAtomicBool + value: false + mirror: always + +- name: dom.input_events.beforeinput.enabled + type: bool + value: true + mirror: always + +# Whether innerWidth / innerHeight return rounded or fractional sizes. +# +# NOTE(emilio): Fractional sizes are not web-compatible, see the regressions +# from bug 1676843, but we want to expose the fractional sizes (probably in +# another API) one way or another, see [1], so we're keeping the code for the +# time being. +# +# [1]: https://github.com/w3c/csswg-drafts/issues/5260 +- name: dom.innerSize.rounded + type: bool + value: true + mirror: always + +# Whether we conform to Input Events Level 1 or Input Events Level 2. +# true: conforming to Level 1 +# false: conforming to Level 2 +- name: dom.input_events.conform_to_level_1 + type: bool + value: true + mirror: always + +# Whether we allow BrowsingContextGroup to suspend input events +- name: dom.input_events.canSuspendInBCG.enabled + type: bool + value: false + mirror: always + +# The minimum number of ticks after page navigation +# that need to occur before user input events are allowed to be handled. +- name: dom.input_events.security.minNumTicks + type: uint32_t + value: 3 + mirror: always + +# The minimum elapsed time (in milliseconds) after page navigation +# for user input events are allowed to be handled. +- name: dom.input_events.security.minTimeElapsedInMS + type: uint32_t + value: 100 + mirror: always + +# By default user input handling delay is disabled (mostly) for testing , +# this is used for forcefully enable it for certain tests. +- name: dom.input_events.security.isUserInputHandlingDelayTest + type: bool + value: false + mirror: always + +# The maximum time (milliseconds) we reserve for handling input events in each +# frame. +- name: dom.input_event_queue.duration.max + type: uint32_t + value: 8 + mirror: always + +# Enable not moving the cursor to end when a text input or textarea has .value +# set to the value it already has. By default, enabled. +- name: dom.input.skip_cursor_move_for_same_value_set + type: bool + value: true + mirror: always + +- name: dom.ipc.cancel_content_js_when_navigating + type: bool + value: true + mirror: always + +# How often to check for CPOW timeouts (ms). CPOWs are only timed +# out by the hang monitor. +- name: dom.ipc.cpow.timeout + type: uint32_t + value: 500 + mirror: always + +#ifdef MOZ_ENABLE_FORKSERVER +- name: dom.ipc.forkserver.enable + type: bool + value: false + mirror: once +#endif + +#ifdef MOZ_WIDGET_GTK +# +# Avoid the use of GTK in content processes if possible, by running +# them in headless mode, to conserve resources (e.g., connections to +# the X server). See the usage in `ContentParent.cpp` for the full +# definition of "if possible". +# +# This does not affect sandbox policies; content processes may still +# dynamically connect to the display server for, e.g., WebGL. +- name: dom.ipc.avoid-gtk + type: bool + value: true + mirror: always +#endif + +# Whether or not to collect a paired minidump when force-killing a +# content process. +- name: dom.ipc.tabs.createKillHardCrashReports + type: bool + value: @IS_NOT_RELEASE_OR_BETA@ + mirror: once + +# Allow Flash async drawing mode in 64-bit release builds. +- name: dom.ipc.plugins.asyncdrawing.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# How long we wait before unloading an idle plugin process. +- name: dom.ipc.plugins.unloadTimeoutSecs + type: RelaxedAtomicUint32 + value: 30 + mirror: always + +- name: dom.ipc.plugins.allow_dxgi_surface + type: bool + value: true + mirror: always + +# Enable e10s hang monitoring (slow script checking and plugin hang detection). +- name: dom.ipc.processHangMonitor + type: bool + value: true + mirror: once + +# Whether we report such process hangs +- name: dom.ipc.reportProcessHangs + type: RelaxedAtomicBool +# Don't report hangs in DEBUG builds. They're too slow and often a +# debugger is attached. +#ifdef DEBUG + value: false +#else + value: true +#endif + mirror: always + +- name: dom.ipc.tabs.disabled + type: bool + value: false + mirror: always + +# Process launch delay (in milliseconds). +- name: dom.ipc.processPrelaunch.delayMs + type: uint32_t +# This number is fairly arbitrary ... the intention is to put off +# launching another app process until the last one has finished +# loading its content, to reduce CPU/memory/IO contention. + value: 1000 + mirror: always + +- name: dom.ipc.processPrelaunch.startupDelayMs + type: uint32_t +# delay starting content processes for a short time after browser start +# to provide time for the UI to come up + value: 1000 + mirror: always + +# Process preallocation cache +# Only used in fission; in e10s we use 1 always +- name: dom.ipc.processPrelaunch.fission.number + type: uint32_t + value: 3 + mirror: always + +# Limit preallocated processes below this memory size (in MB) +- name: dom.ipc.processPrelaunch.lowmem_mb + type: uint32_t + value: 4096 + mirror: always + +- name: dom.ipc.processPriorityManager.enabled + type: bool + value: false + mirror: always + +- name: dom.ipc.processPriorityManager.testMode + type: bool + value: false + mirror: always + +- name: dom.ipc.processPriorityManager.backgroundPerceivableGracePeriodMS + type: uint32_t +#if defined(MOZ_WIDGET_ANDROID) && defined(NIGHTLY_BUILD) + value: 3000 +#else + value: 0 +#endif + mirror: always + +- name: dom.ipc.processPriorityManager.backgroundGracePeriodMS + type: uint32_t +#if defined(MOZ_WIDGET_ANDROID) && defined(NIGHTLY_BUILD) + value: 3000 +#else + value: 0 +#endif + mirror: always + +#ifdef XP_WIN +- name: dom.ipc.processPriorityManager.backgroundUsesEcoQoS + type: bool + value: false + mirror: always +#endif + +# Is support for HTMLElement.autocapitalize enabled? +- name: dom.forms.autocapitalize + type: bool + value: true + mirror: always + +# Support for input type=month, type=week. By default, disabled. +- name: dom.forms.datetime.others + type: bool + value: @IS_ANDROID@ + mirror: always + +# Is support for HTMLElement.enterKeyHint enabled? +- name: dom.forms.enterkeyhint + type: bool + value: true + mirror: always + +# Is support for HTMLElement.inputMode enabled? +- name: dom.forms.inputmode + type: bool + value: true + mirror: always + +- name: dom.forms.always_allow_pointer_events.enabled + type: bool + value: @IS_NIGHTLY_BUILD@ + mirror: always + +# Is support for key events and focus events on disabled elements enabled? +- name: dom.forms.always_allow_key_and_focus_events.enabled + type: bool + value: @IS_NIGHTLY_BUILD@ + mirror: always + +# Is support for HTMLInputElement.showPicker enabled? +- name: dom.input.showPicker + type: bool + value: true + mirror: always + +# Whether to allow or disallow web apps to cancel `beforeinput` events caused +# by MozEditableElement#setUserInput() which is used by autocomplete, autofill +# and password manager. +- name: dom.input_event.allow_to_cancel_set_user_input + type: bool + value: false + mirror: always + +# How long a content process can take before closing its IPC channel +# after shutdown is initiated. If the process exceeds the timeout, +# we fear the worst and kill it. +- name: dom.ipc.tabs.shutdownTimeoutSecs + type: RelaxedAtomicUint32 +#if !defined(DEBUG) && !defined(MOZ_ASAN) && !defined(MOZ_VALGRIND) && !defined(MOZ_TSAN) + value: 20 +#else + value: 0 +#endif + mirror: always + +# Whether a native event loop should be used in the content process. +- name: dom.ipc.useNativeEventProcessing.content + type: RelaxedAtomicBool +#if defined(XP_WIN) || defined(XP_MACOSX) + value: false +#else + value: true +#endif + mirror: always + +# If this is true, TextEventDispatcher dispatches keydown and keyup events +# even during composition (keypress events are never fired during composition +# even if this is true). +- name: dom.keyboardevent.dispatch_during_composition + type: bool + value: true + mirror: always + +# Enable/disable KeyboardEvent.initKeyEvent function +- name: dom.keyboardevent.init_key_event.enabled + type: bool + value: false + mirror: always + +# Enable/disable KeyboardEvent.initKeyEvent function in addons even if it's +# disabled. +- name: dom.keyboardevent.init_key_event.enabled_in_addons + type: bool + value: true + mirror: always + +# If this is true, keypress events for non-printable keys are dispatched only +# for event listeners of the system event group in web content. +- name: dom.keyboardevent.keypress.dispatch_non_printable_keys_only_system_group_in_content + type: bool + value: true + mirror: always + +# If this is true, "keypress" event's keyCode value and charCode value always +# become same if the event is not created/initialized by JS. +- name: dom.keyboardevent.keypress.set_keycode_and_charcode_to_same_value + type: bool + value: true + mirror: always + +# Whether "W3C Web Manifest" processing is enabled +- name: dom.manifest.enabled + type: bool + value: true + mirror: always + +# Enable mapped array buffer by default. +- name: dom.mapped_arraybuffer.enabled + type: bool + value: true + mirror: always + +# Autoplay Policy Detection https://w3c.github.io/autoplay/ +- name: dom.media.autoplay-policy-detection.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# Media Session API +- name: dom.media.mediasession.enabled + type: bool + value: true + mirror: always + +# Whether HTMLMediaElement.mozPreservesPitch is enabled. +- name: dom.media.mozPreservesPitch.enabled + type: bool + value: false + mirror: always + +# WebCodecs API +- name: dom.media.webcodecs.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +# Number of seconds of very quiet or silent audio before considering the audio +# inaudible. +- name: dom.media.silence_duration_for_audibility + type: AtomicFloat + value: 2.0f + mirror: always + +# Inform mozjemalloc that the foreground content processes can keep more dirty +# pages in memory. +- name: dom.memory.foreground_content_processes_have_larger_page_cache + type: bool + value: true + mirror: always + +# Enable meta-viewport support in remote APZ-enabled frames. +- name: dom.meta-viewport.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +# Timeout clamp in ms for timeouts we clamp. +- name: dom.min_timeout_value + type: RelaxedAtomicInt32 + value: 4 + mirror: always + +# Timeout clamp in ms for background windows. +- name: dom.min_background_timeout_value + type: int32_t + value: 1000 + mirror: always + +# Timeout clamp in ms for background windows when throttling isn't enabled. +- name: dom.min_background_timeout_value_without_budget_throttling + type: int32_t + value: 1000 + mirror: always + +# Are missing-property use counters for certain DOM attributes enabled? +- name: dom.missing_prop_counters.enabled + type: bool + value: true + mirror: always + +# Is support for module scripts (<script type="module">) enabled for content? +- name: dom.moduleScripts.enabled + type: bool + value: true + mirror: always + +# Is support for import maps (<script type="importmap">) enabled for content? +- name: dom.importMaps.enabled + type: bool + value: true + mirror: always + +# Whether we disable triggering mutation events for changes to style +# attribute via CSSOM. +# NOTE: This preference is used in unit tests. If it is removed or its default +# value changes, please update test_sharedMap_static_prefs.js accordingly. +- name: dom.mutation-events.cssom.disabled + type: bool + value: true + mirror: always + +# Limit of location change caused by content scripts in a time span per +# BrowsingContext. This includes calls to History and Location APIs. +- name: dom.navigation.locationChangeRateLimit.count + type: uint32_t + value: 200 + mirror: always + +# Time span in seconds for location change rate limit. +- name: dom.navigation.locationChangeRateLimit.timespan + type: uint32_t + value: 10 + mirror: always + +# Network Information API +# This feature is not available on Firefox desktop. It exposes too much +# user information. Let's be consistent and disable it on Android. +# But let's keep it around in case it becomes necessary for webcompat +# reasons +# https://bugzilla.mozilla.org/show_bug.cgi?id=1637922 +- name: dom.netinfo.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +# Whether we should open noopener links in a new process. +- name: dom.noopener.newprocess.enabled + type: bool + value: true + mirror: always + +# Whether we shouldn't show an error page for unknown protocols (and should +# show a console warning instead). +- name: dom.no_unknown_protocol_error.enabled + type: bool + value: true + mirror: always + +# Whether origin trials are enabled. +- name: dom.origin-trials.enabled + type: bool + value: true + mirror: always + +# Whether we use the test key to verify tokens. +- name: dom.origin-trials.test-key.enabled + type: bool + value: false + mirror: always + +# Origin trial state for "TestTrial". +# 0: normal, 1: always-enabled, 2: always-disabled +- name: dom.origin-trials.test-trial.state + type: RelaxedAtomicInt32 + value: 0 + mirror: always + +# Origin trial state for COEP: Credentialless. +# 0: normal, 1: always-enabled, 2: always-disabled +- name: dom.origin-trials.coep-credentialless.state + type: RelaxedAtomicInt32 + value: 0 + mirror: always + +# Is support for Window.paintWorklet enabled? +- name: dom.paintWorklet.enabled + type: bool + value: false + mirror: always + +# Enable/disable the PaymentRequest API +- name: dom.payments.request.enabled + type: bool + value: false + mirror: always + +# Whether a user gesture is required to call PaymentRequest.prototype.show(). +- name: dom.payments.request.user_interaction_required + type: bool + value: true + mirror: always + +# Time in milliseconds for PaymentResponse to wait for +# the Web page to call complete(). +- name: dom.payments.response.timeout + type: uint32_t + value: 5000 + mirror: always + +# Enable printing performance marks/measures to log +- name: dom.performance.enable_user_timing_logging + type: RelaxedAtomicBool + value: false + mirror: always + +- name: dom.performance.children_results_ipc_timeout + type: uint32_t + value: 1000 + mirror: always + +# Enable notification of performance timing +- name: dom.performance.enable_notify_performance_timing + type: bool + value: false + mirror: always + +# Is support for PerformanceTiming.timeToContentfulPaint enabled? +- name: dom.performance.time_to_contentful_paint.enabled + type: bool + value: false + mirror: always + +# Is support for PerformanceTiming.timeToDOMContentFlushed enabled? +- name: dom.performance.time_to_dom_content_flushed.enabled + type: bool + value: false + mirror: always + +# Is support for PerformanceTiming.timeToFirstInteractive enabled? +- name: dom.performance.time_to_first_interactive.enabled + type: bool + value: false + mirror: always + +# Is support for PerformanceTiming.timeToNonBlankPaint enabled? +- name: dom.performance.time_to_non_blank_paint.enabled + type: bool + value: false + mirror: always + +# Is support for Permissions.revoke enabled? +- name: dom.permissions.revoke.enable + type: bool + value: false + mirror: always + +# This enables width and height attributes and map these attributes to img +# element's style. +- name: dom.picture_source_dimension_attributes.enabled + type: bool + value: true + mirror: always + +# Is support for Element.requestPointerLock enabled? +# This is added for accessibility purpose. When user has no way to exit +# pointer lock (e.g. no keyboard available), they can use this pref to +# disable the Pointer Lock API altogether. +- name: dom.pointer-lock.enabled + type: bool + value: true + mirror: always + +# re-SAB: Whether to allow postMessage of a SharedArrayBuffer if various +# preconditions related to COOP and COEP are met +- name: dom.postMessage.sharedArrayBuffer.withCOOP_COEP + type: bool + value: true + mirror: once + +# Overridden in all.js on RELEASE_OR_BETA in order to add the locked attribute. +- name: dom.postMessage.sharedArrayBuffer.bypassCOOP_COEP.insecure.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +# This currently only affects XHTML. For XUL the cache is always allowed. +- name: dom.prototype_document_cache.enabled + type: bool + value: true + mirror: always + +# Push +- name: dom.push.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +# This enables the SVGPathSeg APIs +- name: dom.svg.pathSeg.enabled + type: bool + value: false + mirror: always + +# Preference that is primarily used for testing of problematic file paths. +# It can also be used for switching between different storage directories, but +# such feature is not officially supported. +- name: dom.quotaManager.storageName + type: String + value: "storage" + mirror: never + +# An upper limit for the "age" of an origin. Any origin which is older than the +# threshold is considered as unaccessed. That doesn't necessarily mean that +# such origins will be immediatelly archived. They will be archived only when +# dom.quotaManager.checkQuotaInfoLoadTime is true and loading of quota info +# takes a long time (dom.quotaManager.longQuotaInfoLoadTimeThresholdMs is used +# to decide what is a long quota info load time). +- name: dom.quotaManager.unaccessedForLongTimeThresholdSec + type: RelaxedAtomicUint32 + value: 33696000 # 13 months + mirror: always + +# Should we try to load origin information from the cache? +# See bug 1563023 for more details. +- name: dom.quotaManager.loadQuotaFromCache + type: RelaxedAtomicBool + value: true + mirror: always + +# Should we check build ID as part of the cache validation? +# When enabled, the cache is invalidated on any upgrade (or downgrade), +# ensuring that changes in how quota usage is calculated can't cause +# inconsistencies at the cost of a slower initialization. Currently, this +# should only be set to false in tests using a packaged profile that inherently +# includes a build id different from the building running the tests. In the +# future this may be set to false if we are confident that we have sufficiently +# thorough schema versioning. +- name: dom.quotaManager.caching.checkBuildId + type: RelaxedAtomicBool + value: true + mirror: always + +# Should we check quota info load time and eventually archive some unaccessed +# origins if loading of quota info takes a long time ? +- name: dom.quotaManager.checkQuotaInfoLoadTime + type: RelaxedAtomicBool + value: true + mirror: always + +# An upper limit for quota info load time, anything which takes longer than the +# threshold is considered as long quota info load time. +- name: dom.quotaManager.longQuotaInfoLoadTimeThresholdMs + type: RelaxedAtomicUint32 + value: 21000 # 21 seconds + mirror: always + +# Preference that users can set to override temporary storage smart limit +# calculation. +- name: dom.quotaManager.temporaryStorage.fixedLimit + type: RelaxedAtomicInt32 + value: -1 + mirror: always + +# A pref that is used to enable testing features. +- name: dom.quotaManager.testing + type: SequentiallyConsistentAtomicBool + value: false + mirror: always + +#if defined(XP_WIN) + # Preference that is used to set nsILocalFileWin::useDOSDevicePathSyntax + # attribute for all local file instances created by QuotaManager and its + # clients. The value of this preference is cached so changing the preference + # during runtime has no effect. + # See bug 1626846 for setting this to false by default. +- name: dom.quotaManager.useDOSDevicePathSyntax + type: RelaxedAtomicBool + value: true + mirror: always + do_not_use_directly: true + + # Preference that is used to enable the hack for overrriding xFullPathname in + # QuotaVFS. +- name: dom.quotaManager.overrideXFullPathname + type: RelaxedAtomicBool + value: true + mirror: always +#elif defined(XP_UNIX) + # Preference that is used to enable the overriding of Unix xFullPathname + # implementation in QuotaVFS. +- name: dom.quotaManager.overrideXFullPathnameUnix + type: RelaxedAtomicBool + value: true + mirror: always +#endif + +# How many times we should retry directory removal or renaming if access was +# denied? +- name: dom.quotaManager.directoryRemovalOrRenaming.maxRetries + type: RelaxedAtomicUint32 +#ifdef XP_WIN + value: 10 +#else + value: 0 +#endif + mirror: always + +# How long we should wait between retries (in milliseconds)? +- name: dom.quotaManager.directoryRemovalOrRenaming.delayMs + type: RelaxedAtomicUint32 + value: 200 + mirror: always + +#ifdef MOZ_BACKGROUNDTASKS +# Use a Background Task to delete files at shutdown. +- name: dom.quotaManager.backgroundTask.enabled + type: bool +#ifdef XP_MACOSX +# Needs to figure out how to prevent bug 1827486. + value: false +#else + value: true +#endif + mirror: never +#endif + +# Use to control to dump CheckedUnsafePtr creation stack and assignment stacks. +- name: dom.checkedUnsafePtr.dumpStacks.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +# Determines within what distance of a tick mark, in pixels, dragging an input +# range range will snap the range's value to that tick mark. By default, this is +# half the default width of the range thumb. +- name: dom.range_element.magnet_effect_threshold + type: float + value: 10.0f + mirror: always + +# Reporting API. +- name: dom.reporting.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +- name: dom.reporting.testing.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +- name: dom.reporting.featurePolicy.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +- name: dom.reporting.crash.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +- name: dom.reporting.header.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +# In seconds. The timeout to remove not-active report-to endpoints. +- name: dom.reporting.cleanup.timeout + type: uint32_t + value: 3600 + mirror: always + +# Any X seconds the reports are dispatched to endpoints. +- name: dom.reporting.delivering.timeout + type: uint32_t + value: 5 + mirror: always + +# How many times the delivering of a report should be tried. +- name: dom.reporting.delivering.maxFailures + type: uint32_t + value: 3 + mirror: always + +# How many reports should be stored in the report queue before being delivered. +- name: dom.reporting.delivering.maxReports + type: uint32_t + value: 100 + mirror: always + +# Enable requestIdleCallback API +- name: dom.requestIdleCallback.enabled + type: bool + value: true + mirror: always + +# Enable Screen Orientation lock +- name: dom.screenorientation.allow-lock + type: bool + value: @IS_NIGHTLY_BUILD@ + mirror: always + +# Whether to enable the JavaScript start-up cache. This causes one of the first +# execution to record the bytecode of the JavaScript function used, and save it +# in the existing cache entry. On the following loads of the same script, the +# bytecode would be loaded from the cache instead of being generated once more. +- name: dom.script_loader.bytecode_cache.enabled + type: bool + value: true + mirror: always + +# Ignore the heuristics of the bytecode cache, and always record on the first +# visit. (used for testing purposes). + +# Choose one strategy to use to decide when the bytecode should be encoded and +# saved. The following strategies are available right now: +# * -2 : (reader mode) The bytecode cache would be read, but it would never +# be saved. +# * -1 : (eager mode) The bytecode would be saved as soon as the script is +# seen for the first time, independently of the size or last access +# time. +# * 0 : (default) The bytecode would be saved in order to minimize the +# page-load time. +# +# Other values might lead to experimental strategies. For more details, have a +# look at: ScriptLoader::ShouldCacheBytecode function. +- name: dom.script_loader.bytecode_cache.strategy + type: int32_t + value: 0 + mirror: always + +# Select which parse/delazification strategy should be used while parsing +# scripts off-main-thread. (see CompileOptions.h, DelazificationOption enum) +# +# 0: On-demand only. Delazification will be triggered only on the main thread +# before the execution of the function. +# +# 1: Compare on-demand delazification (= 0) with concurrent depth-first +# delazification (= 2). +# +# 2: Depth-first. Delazify all functions off-thread in the order of appearance +# in the source. +# +# 3: Large-first. Delazify all functions off-thread starting with the largest +# functions first, and the smallest as the last one to be delazified, where +# the size of function is measured in bytes between the start to the end of +# the function. +# +# 255: Parse everything eagerly, from the first parse. All functions are parsed +# at the same time as the top-level of a file. +- name: dom.script_loader.delazification.strategy + type: uint32_t + value: 255 + mirror: always + +# Maximum total size after which the delazification strategy, specified by +# `dom.script_loader.delazification.strategy`, is no longer applied, and the +# on-demand strategy is used by default. +# +# -1 disable the threshold, and delazification strategy is applied to all +# scripts. +# +# Default value is 10MB for utf8 scripts. +- name: dom.script_loader.delazification.max_size + type: int32_t + value: 10485760 + mirror: always + +# Minimum memory, in GB, required to enable delazification strategy, specified +# by `dom.script_loader.delazification.strategy`. Otherwise, the on-demand +# delazification strategy is used. +- name: dom.script_loader.delazification.min_mem + type: int32_t + value: 2 + mirror: always + +# Is support for decoding external (non-inline) classic or module DOM scripts +# (i.e. anything but workers) as UTF-8, then directly compiling without +# inflating to UTF-16, enabled? +- name: dom.script_loader.external_scripts.utf8_parsing.enabled + type: bool + value: true + mirror: always + +# Enable speculative off main thread parsing of external scripts as +# soon as they are fetched. +- name: dom.script_loader.external_scripts.speculative_omt_parse.enabled + type: bool + value: true + mirror: always + +# Speculatively compile non parser inserted scripts +- name: dom.script_loader.external_scripts.speculate_non_parser_inserted.enabled + type: bool + value: false + mirror: always + +# Speculatively compile async scripts +- name: dom.script_loader.external_scripts.speculate_async.enabled + type: bool + value: false + mirror: always + +# Speculatively compile link preload scripts +- name: dom.script_loader.external_scripts.speculate_link_preload.enabled + type: bool + value: false + mirror: always + +- name: dom.securecontext.allowlist_onions + type: bool + value: false + mirror: always + +# This pref enables the featurePolicy header support. +- name: dom.security.featurePolicy.header.enabled + type: bool + value: false + mirror: always + +- name: dom.security.featurePolicy.experimental.enabled + type: bool + value: false + mirror: always + +# Expose the 'featurePolicy' attribute in document and HTMLIFrameElement +- name: dom.security.featurePolicy.webidl.enabled + type: bool + value: false + mirror: always + +# Perform IPC based Principal vetting in ContentParent +- name: dom.security.enforceIPCBasedPrincipalVetting + type: RelaxedAtomicBool + value: true + mirror: always + +# For testing purposes only: Flipping this pref to true allows +# to skip the allowlist for about: pages and do not ship with a +# CSP and NS_ASSERT right away. +- name: dom.security.skip_about_page_csp_allowlist_and_assert + type: RelaxedAtomicBool + value: false + mirror: always + +# For testing purposes only: Flipping this pref to true allows +# to skip the assertion that every about page ships with a CSP. +- name: dom.security.skip_about_page_has_csp_assert + type: RelaxedAtomicBool + value: false + mirror: always + +# For testing purposes only: Flipping this pref to true allows +# to skip the assertion that HTML fragments (e.g. innerHTML) can +# not be used within chrome code or about: pages. +- name: dom.security.skip_html_fragment_assertion + type: RelaxedAtomicBool + value: false + mirror: always + +# For testing purposes only; Flipping this pref to true allows +# to skip the assertion that remote scripts can not be loaded +# in system privileged contexts. +- name: dom.security.skip_remote_script_assertion_in_system_priv_context + type: RelaxedAtomicBool + value: false + mirror: always + +# If true, all content requests will get upgraded to HTTPS:// +# (some Firefox functionality requests, like OCSP will not be affected) +- name: dom.security.https_only_mode + type: RelaxedAtomicBool + value: false + mirror: always + +# If true, all content requests in Private Browsing Mode will get +# upgraded to HTTPS://. (If dom.security.https_only_mode is set +# to true then this pref has no effect) +- name: dom.security.https_only_mode_pbm + type: RelaxedAtomicBool + value: false + mirror: always + +# If true, sends http background request for top-level sites to +# counter long timeouts. +- name: dom.security.https_only_mode_send_http_background_request + type: RelaxedAtomicBool + value: true + mirror: always + +# Time limit, in milliseconds, before sending the http background +# request for HTTPS-Only and HTTPS-First +- name: dom.security.https_only_fire_http_request_background_timer_ms + type: RelaxedAtomicUint32 + value: 3000 + mirror: always + +# If true, tries to break upgrade downgrade cycles where https-only tries +# to upgrad ethe connection, but the website tries to downgrade again. +- name: dom.security.https_only_mode_break_upgrade_downgrade_endless_loop + type: RelaxedAtomicBool + value: true + mirror: always + +# If true, when checking if it's upgrade downgrade cycles, the URI path will be +# also checked. +- name: dom.security.https_only_check_path_upgrade_downgrade_endless_loop + type: RelaxedAtomicBool + value: true + mirror: always + +# If true and HTTPS-only mode is enabled, requests +# to local IP addresses are also upgraded +- name: dom.security.https_only_mode.upgrade_local + type: RelaxedAtomicBool + value: false + mirror: always + +# If true and HTTPS-only mode is enabled, requests +# to .onion hosts are also upgraded +- name: dom.security.https_only_mode.upgrade_onion + type: RelaxedAtomicBool + value: false + mirror: always + +# WARNING: Don't ever update that pref manually! It is only used +# for telemetry purposes and allows to reason about retention of +# the pref dom.security.https_only_mode from above. +- name: dom.security.https_only_mode_ever_enabled + type: RelaxedAtomicBool + value: false + mirror: always + +# WARNING: Don't ever update that pref manually! It is only used +# for telemetry purposes and allows to reason about retention of +# the pref dom.security.https_only_mode_pbm from above. +- name: dom.security.https_only_mode_ever_enabled_pbm + type: RelaxedAtomicBool + value: false + mirror: always + +# If true checks for secure www connections when https fails +# and gives the user suggestions on the error page +- name: dom.security.https_only_mode_error_page_user_suggestions + type: RelaxedAtomicBool + value: false + mirror: always + +# If true, top-level request will get upgraded to HTTPS and +# downgraded again if the request failed. +- name: dom.security.https_first + type: RelaxedAtomicBool + value: false + mirror: always + +# If true, top-level requests in Private Browsing Mode will get +# upgraded to HTTPS. (If dom.security.https_first +# is set to true then this pref has no effect) +- name: dom.security.https_first_pbm + type: RelaxedAtomicBool + value: true + mirror: always + +- name: dom.security.unexpected_system_load_telemetry_enabled + type: bool + value: true + mirror: always + +# pref controls `Sanitizer` API being exposed +# https://wicg.github.io/sanitizer-api/ +- name: dom.security.sanitizer.enabled + type: bool + value: false + mirror: always + +# Pref that controls the Element.setHTML API idenpendetly of the sanitizer +# API. +- name: dom.security.setHTML.enabled + type: bool + value: false + mirror: always + +# Logs elements and attributes removed by the Sanitizer API to the console. +- name: dom.security.sanitizer.logging + type: bool + value: false + mirror: always + +# pref controls `identity` credentials being exposed +- name: dom.security.credentialmanagement.identity.enabled + type: bool + value: false + mirror: always + +# pref controls `identity` credential UI for testing. When true, UI is not shown and +# the first option in the account and provider lists are chosen +- name: dom.security.credentialmanagement.identity.select_first_in_ui_lists + type: bool + value: false + mirror: always + +# pref controls `identity` credential platform behavior for testing. When true, +# the .well-known file check is not performed. +- name: dom.security.credentialmanagement.identity.test_ignore_well_known + type: bool + value: false + mirror: always + +# pref controls whether we should delay identity credential rejections at all +- name: dom.security.credentialmanagement.identity.reject_delay.enabled + type: bool + value: true + mirror: always + +# pref controls how long we should delay identity credential rejections if enabled +- name: dom.security.credentialmanagement.identity.reject_delay.duration_ms + type: uint32_t + value: 120000 + mirror: always + +# Whether or not selection events on text controls are enabled. +- name: dom.select_events.textcontrols.selectionchange.enabled + type: bool + value: true + mirror: always + +- name: dom.select_events.textcontrols.selectstart.enabled + type: bool + value: false + mirror: always + +- name: dom.separate_event_queue_for_post_message.enabled + type: bool + value: true + mirror: always + +- name: dom.arena_allocator.enabled + type: bool + value: true + mirror: once + +- name: dom.serviceWorkers.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +- name: dom.serviceWorkers.navigationPreload.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# Mitigates ServiceWorker navigation faults by bypassing the ServiceWorker on +# navigation faults. This is more extensive than just resetting interception +# because we also mark the page as uncontrolled so that subresources will not +# go to the ServiceWorker either. +- name: dom.serviceWorkers.mitigations.bypass_on_fault + type: bool + value: true + mirror: always + +# Additional ServiceWorker navigation mitigation control to unregister the +# ServiceWorker after multiple faults are encountered. The mitigation is +# disabled when this is set to zero, otherwise this is the number of faults that +# need to occur for a specific ServiceWorker before it will be unregistered. +- name: dom.serviceWorkers.mitigations.navigation_fault_threshold + type: uint32_t + value: 3 + mirror: always + +# This is the group usage head room for service workers. +# The quota usage mitigation algorithm uses this preference to determine if the +# origin or also group data should be cleared or not. +# The default value is 400 MiB. +- name: dom.serviceWorkers.mitigations.group_usage_headroom_kb + type: uint32_t + value: 400 * 1024 + mirror: always + +- name: dom.serviceWorkers.testing.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +# Whether ServiceWorkerManager should persist the service worker +# registered by temporary installed extension (only meant to be used +# for testing purpose, to make it easier to test some particular scenario +# with a temporary installed addon, which doesn't need to be signed to be +# installed on release channel builds). +- name: dom.serviceWorkers.testing.persistTemporarilyInstalledAddons + type: RelaxedAtomicBool + value: false + mirror: always + +- name: dom.storage.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +- name: dom.workers.pFetch.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +- name: dom.workers.importScripts.enforceStrictMimeType + type: RelaxedAtomicBool + value: @IS_EARLY_BETA_OR_EARLIER@ + mirror: always + +# Is support for modules (new Worker(..., {type: "module"})) enabled for workers? +- name: dom.workers.modules.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +- name: dom.workers.requestAnimationFrame + type: RelaxedAtomicBool + value: true + mirror: always + +- name: dom.workers.serialized-sab-access + type: RelaxedAtomicBool + value: false + mirror: always + +- name: dom.sitepermsaddon-provider.enabled + type: bool + value: @IS_NOT_ANDROID@ + mirror: always + +# Whether automatic storage access granting heuristics should be turned on. +- name: dom.storage_access.auto_grants + type: bool + value: true + mirror: always + +- name: dom.storage_access.auto_grants.delayed + type: bool + value: true + mirror: always + +# Storage-access API. +- name: dom.storage_access.enabled + type: bool + value: false + mirror: always + +# Forward-Declared Storage-access API. +- name: dom.storage_access.forward_declared.enabled + type: bool + value: false + mirror: always + +# How long the Forward-Declared Storage-access API allows between pair requests +# in seconds +- name: dom.storage_access.forward_declared.lifetime + type: uint32_t + value: 15 * 60 + mirror: always + +# The maximum number of origins that a given third-party tracker is allowed +# to have concurrent access to before the user is presented with a storage +# access prompt. Only effective when the auto_grants pref is turned on. +- name: dom.storage_access.max_concurrent_auto_grants + type: int32_t + value: 5 + mirror: always + +# Whether the Storage API is enabled. +- name: dom.storageManager.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# Whether the File System API is enabled +- name: dom.fs.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# Whether the WritableFileStream is enabled or disabled. +- name: dom.fs.writable_file_stream.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# LocalStorage data limit as determined by summing up the lengths of all string +# keys and values. This is consistent with the legacy implementation and other +# browser engines. This value should really only ever change in unit testing +# where being able to lower it makes it easier for us to test certain edge +# cases. Measured in KiBs. +- name: dom.storage.default_quota + type: RelaxedAtomicUint32 + # Only allow relatively small amounts of data since performance of the + # synchronous IO is very bad. We are enforcing simple per-origin quota only. + value: 5 * 1024 + mirror: always + +# Per-site quota for legacy LocalStorage implementation. +- name: dom.storage.default_site_quota + type: RelaxedAtomicUint32 + value: 25 * 1024 + mirror: always + +# Whether or not the unsupported legacy implemenation should be enabled. Please +# don't advertise this pref as a way for disabling LSNG. This pref is intended +# for internal testing only and will be removed in near future. Accidental +# disabling of LSNG can lead to a data loss in a combination with disabled +# shadow writes. Disabling of shadow writes is the initial step towards +# removing legacy implementation and will be done soon. +- name: dom.storage.enable_unsupported_legacy_implementation + type: RelaxedAtomicBool + value: false + mirror: always + do_not_use_directly: true + +# The amount of snapshot peak usage which is attempted to be pre-incremented +# during snapshot creation. +- name: dom.storage.snapshot_peak_usage.initial_preincrement + type: RelaxedAtomicUint32 + value: 16384 + mirror: always + +# The amount of snapshot peak usage which is attempted to be pre-incremented +# during snapshot creation if the LocalStorage usage was already close to the +# limit (a fallback for dom.storage.snapshot_peak_usage.initial_preincrement). +- name: dom.storage.snapshot_peak_usage.reduced_initial_preincrement + type: RelaxedAtomicUint32 + value: 4096 + mirror: always + +# The amount of snapshot peak usage which is attempted to be pre-incremented +# beyond the specific values which are subsequently requested after snapshot +# creation. +- name: dom.storage.snapshot_peak_usage.gradual_preincrement + type: RelaxedAtomicUint32 + value: 4096 + mirror: always + +# The amount of snapshot peak usage which is attempted to be pre-incremented +# beyond the specific values which are subsequently requested after snapshot +# creation if the LocalStorage total usage was already close to the limit +# (a fallback for dom.storage.snapshot_peak_usage.gradual_preincrement). +- name: dom.storage.snapshot_peak_usage.reduced_gradual_preincrement + type: RelaxedAtomicUint32 + value: 1024 + mirror: always + +# How long between a snapshot becomes idle and when we actually finish the +# snapshot. This preference is only used when "dom.storage.snapshot_reusing" +# is true. +- name: dom.storage.snapshot_idle_timeout_ms + type: uint32_t + value: 5000 + mirror: always + +# Is support for Storage test APIs enabled? +- name: dom.storage.testing + type: bool + value: false + mirror: always + +# For area and anchor elements with target=_blank and no rel set to +# opener/noopener. +- name: dom.targetBlankNoOpener.enabled + type: bool + value: true + mirror: always + +# Is support for Selection.GetRangesForInterval enabled? +- name: dom.testing.selection.GetRangesForInterval + type: bool + value: false + mirror: always + +- name: dom.testing.structuredclonetester.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +- name: dom.testing.sync-content-blocking-notifications + type: bool + value: false + mirror: always + +# To enable TestUtils interface on WPT +- name: dom.testing.testutils.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +- name: dom.textMetrics.actualBoundingBox.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +- name: dom.textMetrics.baselines.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +- name: dom.textMetrics.emHeight.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +- name: dom.textMetrics.fontBoundingBox.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +# Time (in ms) that it takes to regenerate 1ms. +- name: dom.timeout.background_budget_regeneration_rate + type: int32_t + value: 100 + mirror: always + +# Time (in ms) that it takes to regenerate 1ms. +- name: dom.timeout.foreground_budget_regeneration_rate + type: int32_t + value: 1 + mirror: always + +# Maximum value (in ms) for the background budget. Only valid for +# values greater than 0. +- name: dom.timeout.background_throttling_max_budget + type: int32_t + value: 50 + mirror: always + +# Maximum value (in ms) for the foreground budget. Only valid for +# values greater than 0. +- name: dom.timeout.foreground_throttling_max_budget + type: int32_t + value: -1 + mirror: always + +# The maximum amount a timeout can be delayed by budget throttling. +- name: dom.timeout.budget_throttling_max_delay + type: int32_t + value: 15000 + mirror: always + +# Turn on budget throttling by default. +- name: dom.timeout.enable_budget_timer_throttling + type: bool + value: true + mirror: always + +# Should we defer timeouts and intervals while loading a page. Released +# on Idle or when the page is loaded. +- name: dom.timeout.defer_during_load + type: bool + value: true + mirror: always + +# Maximum amount of time in milliseconds consecutive setTimeout()/setInterval() +# callback are allowed to run before yielding the event loop. +- name: dom.timeout.max_consecutive_callbacks_ms + type: uint32_t + value: 4 + mirror: always + +# Maximum deferral time for setTimeout/Interval in milliseconds +- name: dom.timeout.max_idle_defer_ms + type: uint32_t + value: 10*1000 + mirror: always + +# Delay in ms from document load until we start throttling background timeouts. +- name: dom.timeout.throttling_delay + type: int32_t + value: 30000 + mirror: always + +# UDPSocket API +- name: dom.udpsocket.enabled + type: bool + value: false + mirror: always + +# Whether to dump worker use counters +- name: dom.use_counters.dump.worker + type: RelaxedAtomicBool + value: false + mirror: always + +# Whether to dump document use counters +- name: dom.use_counters.dump.document + type: bool + value: false + mirror: always + +# Whether to dump page use counters +- name: dom.use_counters.dump.page + type: bool + value: false + mirror: always + +# Time limit, in milliseconds, for user gesture transient activation. +- name: dom.user_activation.transient.timeout + type: uint32_t + value: 5000 + mirror: always + +# Whether to treat the clicks on scrollbars as user interaction with web content. +- name: dom.user_activation.ignore_scrollbars + type: bool + value: true + mirror: always + +# Whether to shim a Components object on untrusted windows. +- name: dom.use_components_shim + type: bool + value: @IS_NOT_NIGHTLY_BUILD@ + mirror: always + +- name: dom.vibrator.enabled + type: bool + value: true + mirror: always + +- name: dom.vibrator.max_vibrate_ms + type: RelaxedAtomicUint32 + value: 10000 + mirror: always + +- name: dom.vibrator.max_vibrate_list_len + type: RelaxedAtomicUint32 + value: 128 + mirror: always + +# Is support for Window.visualViewport enabled? +- name: dom.visualviewport.enabled + type: bool + value: true + mirror: always + +# Is support for WebVR APIs enabled? +# Disabled everywhere, but not removed. +- name: dom.vr.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +# Should VR sessions always be reported as supported, without first +# checking for VR runtimes? This will prevent permission prompts +# from being suppressed on machines without VR runtimes and cause +# navigator.xr.isSessionSupported to always report that immersive-vr +# is supported. +- name: dom.vr.always_support_vr + type: RelaxedAtomicBool + value: false + mirror: always + +# Should AR sessions always be reported as supported, without first +# checking for AR runtimes? This will prevent permission prompts +# from being suppressed on machines without AR runtimes and cause +# navigator.xr.isSessionSupported to always report that immersive-ar +# is supported. +- name: dom.vr.always_support_ar + type: RelaxedAtomicBool + value: false + mirror: always + +# It is often desirable to automatically start vr presentation when +# a user puts on the VR headset. This is done by emitting the +# Window.vrdisplayactivate event when the headset's sensors detect it +# being worn. This can result in WebVR content taking over the headset +# when the user is using it outside the browser or inadvertent start of +# presentation due to the high sensitivity of the proximity sensor in some +# headsets, so it is off by default. +- name: dom.vr.autoactivate.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +# Minimum number of milliseconds that the browser will wait before +# attempting to poll again for connected VR controllers. The browser +# will not attempt to poll for VR controllers until it needs to use them. +- name: dom.vr.controller.enumerate.interval + type: RelaxedAtomicInt32 + value: 1000 + mirror: always + +# The threshold value of trigger inputs for VR controllers. +- name: dom.vr.controller_trigger_threshold + type: AtomicFloat + value: 0.1f + mirror: always + +# Minimum number of milliseconds that the browser will wait before +# attempting to poll again for connected VR displays. The browser +# will not attempt to poll for VR displays until it needs to use +# them, such as when detecting a WebVR site. +- name: dom.vr.display.enumerate.interval + type: RelaxedAtomicInt32 + value: 5000 + mirror: always + +# The number of milliseconds since last frame start before triggering a new +# frame. When content is failing to submit frames on time or the lower level +# VR platform APIs are rejecting frames, it determines the rate at which RAF +# callbacks will be called. +- name: dom.vr.display.rafMaxDuration + type: RelaxedAtomicUint32 + value: 50 + mirror: always + +# Minimum number of milliseconds the browser will wait before attempting +# to re-start the VR service after an enumeration returned no devices. +- name: dom.vr.external.notdetected.timeout + type: RelaxedAtomicInt32 + value: 60000 + mirror: always + +# Minimum number of milliseconds the browser will wait before attempting +# to re-start the VR service after a VR API (eg, OpenVR or Oculus) +# requests that we shutdown and unload its libraries. +# To ensure that we don't interfere with VR runtime software auto-updates, +# we will not attempt to re-load the service until this timeout has elapsed. +- name: dom.vr.external.quit.timeout + type: RelaxedAtomicInt32 + value: 10000 + mirror: always + +# Minimum number of milliseconds that the VR session will be kept +# alive after the browser and content no longer are using the +# hardware. If a VR multitasking environment, this should be set +# very low or set to 0. +- name: dom.vr.inactive.timeout + type: RelaxedAtomicInt32 + value: 5000 + mirror: always + +# Maximum number of milliseconds the browser will wait for content to call +# VRDisplay.requestPresent after emitting vrdisplayactivate during VR +# link traversal. This prevents a long running event handler for +# vrdisplayactivate from later calling VRDisplay.requestPresent, which would +# result in a non-responsive browser in the VR headset. +- name: dom.vr.navigation.timeout + type: RelaxedAtomicInt32 + value: 5000 + mirror: always + +# Oculus device +- name: dom.vr.oculus.enabled + type: RelaxedAtomicBool +#if defined(HAVE_64BIT_BUILD) && !defined(ANDROID) + # We are only enabling WebVR by default on 64-bit builds (Bug 1384459). + value: true +#else + # On Android, this pref is irrelevant. + value: false +#endif + mirror: always + +# When enabled, Oculus sessions may be created with the ovrInit_Invisible +# flag if a page is using tracking but not presenting. When a page +# begins presenting VR frames, the session will be re-initialized without +# the flag. This eliminates the "Firefox not responding" warnings in +# the headset, but might not be compatible with all versions of the Oculus +# runtime. +- name: dom.vr.oculus.invisible.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# Minimum number of milliseconds after content has stopped VR presentation +# before the Oculus session is re-initialized to an invisible / tracking +# only mode. If this value is too high, users will need to wait longer +# after stopping WebVR presentation before automatically returning to the +# Oculus home interface. (They can immediately return to the Oculus Home +# interface through the Oculus HUD without waiting this duration) +# If this value is too low, the Oculus Home interface may be visible +# momentarily during VR link navigation. +- name: dom.vr.oculus.present.timeout + type: RelaxedAtomicInt32 + value: 500 + mirror: always + +# OpenVR device +- name: dom.vr.openvr.enabled + type: RelaxedAtomicBool +#if !defined(HAVE_64BIT_BUILD) && !defined(ANDROID) + # We are only enabling WebVR by default on 64-bit builds (Bug 1384459). + value: false +#elif defined(XP_WIN) || defined(XP_MACOSX) + # We enable OpenVR by default for Windows and macOS. + value: true +#else + # See Bug 1310663 (Linux). On Android, this pref is irrelevant. + value: false +#endif + mirror: always + +# OSVR device +- name: dom.vr.osvr.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +# Pose prediction reduces latency effects by returning future predicted HMD +# poses to callers of the WebVR API. This currently only has an effect for +# Oculus Rift on SDK 0.8 or greater. +- name: dom.vr.poseprediction.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# Enable a separate process for VR module. +- name: dom.vr.process.enabled + type: bool +#if defined(XP_WIN) + value: true +#else + value: false +#endif + mirror: once + +- name: dom.vr.process.startup_timeout_ms + type: int32_t + value: 5000 + mirror: once + +# Puppet device, used for simulating VR hardware within tests and dev tools. +- name: dom.vr.puppet.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +# Starting VR presentation is only allowed within a user gesture or event such +# as VRDisplayActivate triggered by the system. dom.vr.require-gesture allows +# this requirement to be disabled for special cases such as during automated +# tests or in a headless kiosk system. +- name: dom.vr.require-gesture + type: RelaxedAtomicBool + value: true + mirror: always + +# Is support for WebXR APIs enabled? +- name: dom.vr.webxr.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +# Points in the native bounds geometry are required to be quantized +# sufficiently to prevent fingerprinting. The WebXR spec suggests +# quantizing to the nearest 5 centimeters. +- name: dom.vr.webxr.quantization + type: AtomicFloat + value: 0.05f + mirror: always + +# Whether MouseEvent.region is exposed as a property. +- name: dom.mouse_event.region.enabled + type: bool + value: false + mirror: always + +#ifdef XP_WIN + # Control firing WidgetMouseEvent by handling Windows pointer messages or + # mouse messages. +- name: dom.w3c_pointer_events.dispatch_by_pointer_messages + type: bool + value: true + mirror: always + +- name: dom.w3c_pointer_events.scroll_by_pen.enabled + type: bool + value: true + mirror: always +#endif + +# If the value is >= 0, it will be used for max touch points in child processes. +- name: dom.maxtouchpoints.testing.value + type: int32_t + value: -1 + mirror: always + +# Maximum value of navigator.hardwareConcurrency. +- name: dom.maxHardwareConcurrency + type: RelaxedAtomicUint32 +#ifdef NIGHTLY_BUILD + value: 128 +#else + value: 16 +#endif + mirror: always + +# W3C pointer events draft. +- name: dom.w3c_pointer_events.implicit_capture + type: bool + value: true + mirror: always + +# In case Touch API is enabled, this pref controls whether to support +# ontouch* event handlers, document.createTouch, document.createTouchList and +# document.createEvent("TouchEvent"). +- name: dom.w3c_touch_events.legacy_apis.enabled + type: bool + value: @IS_ANDROID@ + mirror: always + +# W3C touch events +# 0 - disabled, 1 - enabled, 2 - autodetect +# Autodetection is currently only supported on Windows and GTK3 (and assumed on +# Android). +- name: dom.w3c_touch_events.enabled + type: int32_t +#if defined(XP_MACOSX) + value: 0 +#else + value: 2 +#endif + mirror: always + +# Is support for the Web Audio API enabled? +- name: dom.webaudio.enabled + type: bool + value: true + mirror: always + +- name: dom.webkitBlink.dirPicker.enabled + type: RelaxedAtomicBool + value: @IS_NOT_ANDROID@ + mirror: always + +# Is the 'delegatesFocus' attribute for shadow dom +- name: dom.shadowdom.delegatesFocus.enabled + type: bool + value: true + mirror: always + +# Is the 'assign' API for slot element enabled? +- name: dom.shadowdom.slot.assign.enabled + type: bool + value: true + mirror: always + +# NOTE: This preference is used in unit tests. If it is removed or its default +# value changes, please update test_sharedMap_static_prefs.js accordingly. +- name: dom.webcomponents.shadowdom.report_usage + type: bool + value: false + mirror: always + +# Is support for the Web GPU API enabled? +- name: dom.webgpu.enabled + type: RelaxedAtomicBool + value: @IS_NIGHTLY_BUILD@ + mirror: always + +# Are WebGPU indirect draws/dispatches enabled? +- name: dom.webgpu.indirect-dispatch.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +# Comma-separated list of wgpu backend names to permit in WebGPU adapters. +# +# If non-empty, this is parsed by `wgpu_core::instance::parse_backends_from_comma_list` to +# produce a `wgpu_types::Backends` bitset used to create a `wgpu_core::hub::Global`. As of +# 2023-3-22, recognized names are: +# +# "vulkan" | "vk" => Backends::VULKAN, +# "dx12" | "d3d12" => Backends::DX12, +# "dx11" | "d3d11" => Backends::DX11, +# "metal" | "mtl" => Backends::METAL, +# "opengl" | "gles" | "gl" => Backends::GL, +# "webgpu" => Backends::BROWSER_WEBGPU, +- name: dom.webgpu.wgpu-backend + type: DataMutexString + value: "" + mirror: always + rust: true + +# Is support for HTMLInputElement.webkitEntries enabled? +- name: dom.webkitBlink.filesystem.enabled + type: bool + value: @IS_NOT_ANDROID@ + mirror: always + +# Whether the Web Locks API is enabled +- name: dom.weblocks.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# Whether the WebMIDI API is enabled +- name: dom.webmidi.enabled + type: bool + value: @IS_NOT_ANDROID@ + mirror: always + +# midi permission is addon-gated +- name: dom.webmidi.gated + type: bool + value: true + mirror: always + +- name: dom.webnotifications.allowinsecure + type: RelaxedAtomicBool + value: false + mirror: always + +- name: dom.webnotifications.allowcrossoriginiframe + type: RelaxedAtomicBool + value: false + mirror: always + +- name: dom.webnotifications.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +- name: dom.webnotifications.requireuserinteraction + type: RelaxedAtomicBool + value: true + mirror: always + +- name: dom.webnotifications.requireinteraction.enabled + type: RelaxedAtomicBool + value: @IS_NIGHTLY_BUILD@ + mirror: always + +- name: dom.webnotifications.silent.enabled + type: RelaxedAtomicBool + value: @IS_NIGHTLY_BUILD@ + mirror: always + +- name: dom.webnotifications.vibrate.enabled + type: RelaxedAtomicBool +#if defined(MOZ_WIDGET_ANDROID) + value: @IS_NIGHTLY_BUILD@ +#else + value: false +#endif + mirror: always + +- name: dom.webnotifications.serviceworker.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# Is support for Window.event enabled? +- name: dom.window.event.enabled + type: bool + value: true + mirror: always + +- name: dom.window.history.async + type: bool + value: true + mirror: always + +# Enable the "noreferrer" feature argument for window.open() +- name: dom.window.open.noreferrer.enabled + type: bool + value: true + mirror: always + +- name: dom.window.content.untrusted.enabled + type: bool + value: false + mirror: always + +- name: dom.window.clientinformation.enabled + type: bool + value: true + mirror: always + +- name: dom.window.sidebar.enabled + type: bool + value: false + mirror: always + +- name: dom.worker.canceling.timeoutMilliseconds + type: RelaxedAtomicUint32 + value: 30000 # 30 seconds + mirror: always + +# Is support for compiling DOM worker scripts directly from UTF-8 (without ever +# inflating to UTF-16) enabled? +- name: dom.worker.script_loader.utf8_parsing.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +- name: dom.worker.use_medium_high_event_queue + type: RelaxedAtomicBool + value: true + mirror: always + +# Enables the dispatching of console log events from worker threads to the +# main-thread. +- name: dom.worker.console.dispatch_events_to_main_thread + type: RelaxedAtomicBool + value: true + mirror: always + +- name: dom.workers.testing.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +- name: dom.worklet.enabled + type: bool + value: true + mirror: always + +# Enable content type normalization of XHR uploads via MIME Sniffing standard +- name: dom.xhr.standard_content_type_normalization + type: RelaxedAtomicBool + value: true + mirror: always + +# When this pref is set, parent documents may consider child iframes have +# loaded while they are still loading. +- name: dom.cross_origin_iframes_loaded_in_background + type: bool + value: false + mirror: always + +# WebIDL test prefs. +- name: dom.webidl.test1 + type: bool + value: true + mirror: always +- name: dom.webidl.test2 + type: bool + value: true + mirror: always + +- name: dom.webidl.crosscontext_hasinstance.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +# WebShare API - exposes navigator.share() +- name: dom.webshare.enabled + type: bool +#ifdef XP_WIN + value: @IS_EARLY_BETA_OR_EARLIER@ +#else + value: false +#endif + mirror: always + +# WebShare API - allows WebShare without user interaction (for tests only). +- name: dom.webshare.requireinteraction + type: bool + value: true + mirror: always + +# about:home and about:newtab include remote snippets that contain arbitrarily +# placed anchor tags in their content; we want sanitization to be turned off +# in order to render them correctly +- name: dom.about_newtab_sanitization.enabled + type: bool + value: false + mirror: always + +# Hide the confirm dialog when a POST request is reloaded. +- name: dom.confirm_repost.testing.always_accept + type: bool + value: false + mirror: always + +# Whether we should suspend inactive tabs or not +- name: dom.suspend_inactive.enabled + type: bool + value: @IS_ANDROID@ + mirror: always + +# The following three prefs control the maximum script run time before slow +# script warning. + +# Controls the time that a content script can run before showing a +# notification. +- name: dom.max_script_run_time + type: int32_t + value: 10 + mirror: always + +# Controls whether we want to wait for user input before surfacing notifying +# the parent process about a long-running script. +- name: dom.max_script_run_time.require_critical_input + type: bool +# On desktop, we don't want to annoy the user with a notification if they're +# not interacting with the browser. On Android however, we automatically +# terminate long-running scripts, so we want to make sure we don't get in the +# way of that by waiting for input. +#if defined(MOZ_WIDGET_ANDROID) + value: false +#else + value: true +#endif + mirror: always + +# Controls if a content script will be aborted on child process shutdown. +- name: dom.abort_script_on_child_shutdown + type: bool + value: @IS_NIGHTLY_BUILD@ + mirror: always + +- name: dom.max_chrome_script_run_time + type: int32_t + value: 0 + mirror: always + +- name: dom.max_ext_content_script_run_time + type: int32_t + value: 5 + mirror: always + +# Initialize Resize Observer's last reported size to -1x-1, and not 0x0, +# as per CSSWG resolution: https://github.com/w3c/csswg-drafts/issues/3664 +- name: dom.resize_observer.last_reported_size_invalid + type: bool + value: true + mirror: always + +# Let Resize Observer report the size of all fragments, and not just the +# first one, as per CSSWG resolution: +# https://github.com/w3c/csswg-drafts/issues/3673#issuecomment-467221565 +- name: dom.resize_observer.support_fragments + type: bool + value: false + mirror: always + +#--------------------------------------------------------------------------- +# Prefs starting with "editor" +#--------------------------------------------------------------------------- + +# Default background color of HTML editor. This is referred only when +# "editor.use_custom_colors" is set to `true`. +- name: editor.background_color + type: String + value: "#FFFFFF" + mirror: never + +# Use compatible range computation when applying inline style. This is used +# for making it possible to backout with Normandy Pref Rollout. +- name: editor.inline_style.range.compatible_with_the_other_browsers + type: bool + value: true + mirror: always + +# Whether use Blink/WebKit compatbile joining nodes and split a node direction. +# false: Left node will be created (at splitting) and deleted (at joining) +# true: Right node will be created (at splitting) and deleted (at joinining) +- name: editor.join_split_direction.compatible_with_the_other_browsers + type: bool + value: true + mirror: always + +# Delay to mask last input character in password fields. +# If negative value, to use platform's default behavior. +# If 0, no delay to mask password. +# Otherwise, password fields unmask last input character(s) during specified +# time (in milliseconds). +- name: editor.password.mask_delay + type: int32_t + value: -1 + mirror: always + +# Set to true when you test mask_delay of password editor. If this is set +# to true, "MozLastInputMasked" is fired when last input characters are +# masked by timeout. +- name: editor.password.testing.mask_delay + type: bool + value: false + mirror: always + +# How line breakers are treated in single line editor: +# * 0: Only remove the leading and trailing newlines. +# * 1: Remove the first newline and all characters following it. +# * 2: Replace newlines with spaces (default of Firefox). +# * 3: Remove newlines from the string. +# * 4: Replace newlines with commas (default of Thunderbird). +# * 5: Collapse newlines and surrounding white space characters and +# remove them from the string. +# Other values are treated as 1. +- name: editor.singleLine.pasteNewlines + type: int32_t + value: 2 + mirror: always + +# Whether user pastes should be truncated. +- name: editor.truncate_user_pastes + type: bool + value: true + mirror: always + +# When this is set to `true`, "editor.background_color" must be set, then, +# the value is treated as default background color of the HTML editor. +# If `false` and "browser.display.use_system_colors" is set to `true`, +# "browser.display.background_color" is used instead. +# Otherwise, no color is used as default background color. +# This pref is for Thunderbird and SeaMonkey. +- name: editor.use_custom_colors + type: bool + value: false + mirror: always + +# If this is set to `true`, CSS mode of style editor is enabled by default +# unless it's a mail editor. +# This pref is for Thunderbird and SeaMonkey. +- name: editor.use_css + type: bool + value: false + mirror: always + +# Whether enabling blink compatible white-space normalizer or keep using +# Gecko's traditional white-space normalizer. +- name: editor.white_space_normalization.blink_compatible + type: bool + value: false + mirror: always + +# General prefs for editor, indicating whether Gecko-specific editing UI is +# enabled by default. Those UIs are not implemented by any other browsers. So, +# only Firefox users can change some styles with them. This means that Firefox +# users may get unexpected result of some web apps if they assume that users +# cannot change such styles. +- name: editor.resizing.enabled_by_default + type: bool + value: false + mirror: always +- name: editor.inline_table_editing.enabled_by_default + type: bool + value: false + mirror: always +- name: editor.positioning.enabled_by_default + type: bool + value: false + mirror: always + +# Controls if a double click word selection also deletes one adjacent whitespace +# (if feasible). This mimics native behaviour on MacOS. +- name: editor.word_select.delete_space_after_doubleclick_selection + type: bool +#ifdef XP_MACOSX + value: true +#else + value: false +#endif + mirror: always + +#--------------------------------------------------------------------------- +# Prefs starting with "extensions." +#--------------------------------------------------------------------------- + +# Pref that enforces the use of web_accessible_resources for content loads. +# This behavior is default for MV3. The pref controls this for MV2. +- name: extensions.content_web_accessible.enabled + type: bool + value: false + mirror: always + +# Whether the InstallTrigger implementation should be enabled (or hidden and +# none of its methods available). +- name: extensions.InstallTriggerImpl.enabled + type: bool + value: false + mirror: always + +# Whether the InstallTrigger implementation should be enabled (or completely +# hidden), separate from InstallTriggerImpl because InstallTrigger is improperly +# used also for UA detection. +- name: extensions.InstallTrigger.enabled + type: bool + value: @IS_NOT_EARLY_BETA_OR_EARLIER@ + mirror: always + + +# Whether the background.service_worker in the extension manifest.json file +# is enabled. +- name: extensions.backgroundServiceWorker.enabled + type: bool + value: false + mirror: once + +# Maximum number of misspelled words in a text. +- name: extensions.spellcheck.inline.max-misspellings + type: int32_t + value: 500 + mirror: always + +# Whether the extensions can register a service worker on its own. +# NOTE: WebExtensions Framework ability to register a background service worker +# is not controlled by this pref, only the extension code ability to use +# navigator.serviceWorker.register is locked behind this pref. +- name: extensions.serviceWorkerRegister.allowed + type: bool + value: false + mirror: always + +# Legacy behavior on filterResponse calls on intercepted sw script requests. +- name: extensions.filterResponseServiceWorkerScript.disabled + type: bool + value: false + mirror: always + +# This pref governs whether we run webextensions in a separate process (true) +# or the parent/main process (false) +- name: extensions.webextensions.remote + type: RelaxedAtomicBool + value: false + mirror: always + +# Whether to expose the MockExtensionAPI test interface in tests. +# The interface MockExtensionAPI doesn't represent a real extension API, +# it is only available in test and does include a series of cases useful +# to test the API request handling without tying the unit test to a +# specific WebExtensions API. +- name: extensions.webidl-api.expose_mock_interface + type: RelaxedAtomicBool + value: false + mirror: always + +# Whether to allow acccess to AddonManager to developer sites for testing +# NOTE: We'd like this to be a "hidden" pref once StaticPrefs supports it. +- name: extensions.webapi.testing + type: RelaxedAtomicBool + value: false + mirror: always + +# Automation-only pref to allow AddonManager over insecure protocols. +# NOTE: We'd like this to be a "hidden" pref once StaticPrefs supports it. +- name: extensions.webapi.testing.http + type: RelaxedAtomicBool + value: false + mirror: always + +#--------------------------------------------------------------------------- +# Prefs starting with "fission." +#--------------------------------------------------------------------------- + +# Whether to enable Fission in new windows by default. +# IMPORTANT: This preference should *never* be checked directly, since any +# session can contain a mix of Fission and non-Fission windows. Instead, +# callers should check whether the relevant nsILoadContext has the +# `useRemoteSubframes` flag set. +# Callers which cannot use `useRemoteSubframes` must use +# `Services.appinfo.fissionAutostart` or `mozilla::FissionAutostart()` to check +# whether fission is enabled by default. +- name: fission.autostart + type: bool + value: @IS_NOT_ANDROID@ + mirror: never + +# This pref has no effect within fission windows, it only controls the +# behaviour within non-fission windows. If true, preserve browsing contexts +# between process swaps. +- name: fission.preserve_browsing_contexts + type: bool + value: true + mirror: always + +# Disable storing the session history in the parent process, and accessing it +# over IPC from the child processes. +- name: fission.disableSessionHistoryInParent + type: bool + value: @IS_ANDROID@ + mirror: once + do_not_use_directly: true + +# If session history is stored in the parent process, enable bfcache for it. +- name: fission.bfcacheInParent + type: bool + value: true + mirror: always + do_not_use_directly: true + +# Allow renaming of processes from Private Windows to the eTLD+1 on nightly +# Setting this pref creates a privacy leak, but helps greatly with +# debugging. +- name: fission.processPrivateWindowSiteNames + type: bool + value: false + mirror: always + +# Allow renaming of process names to the eTLD+1 on all versions, NOT +# including processes from Private Windows +# Setting this pref creates a privacy leak, but helps greatly with +# debugging +- name: fission.processSiteNames + type: bool + value: false + mirror: always + +# Allow showing of current profile along with process names, NOT +# including processes from Private Windows +# Setting this pref creates a privacy leak, but helps greatly with +# debugging +- name: fission.processProfileName + type: bool + value: false + mirror: always + +# If true, allow process-switching documents loaded by <object> and <embed> +# elements into a remote process. +# NOTE: This pref has no impact outside of windows with the +# `useRemoteSubframes` flag set. +- name: fission.remoteObjectEmbed + type: bool + value: true + mirror: always + +# The strategy used to control how sites are isolated into separate processes +# when Fisison is enabled. This pref has no effect if Fission is disabled. +# See the `WebContentIsolationStrategy` enum in `ProcessIsolation.cpp`. +- name: fission.webContentIsolationStrategy + type: uint32_t + value: 1 + mirror: always + +# Time in seconds before a site loaded with the Cross-Origin-Opener-Policy +# header is no longer considered high-value and isolated in the "highValueCOOP" +# configuration. +- name: fission.highValue.coop.expiration + type: uint32_t + value: 2592000 # 30 days (in seconds) + mirror: always + +# Time in seconds before a site are considered high-value by the login detection +# service is no longer considered high-value and isolated in the "highValueHasSavedLogin" +# or "highValueIsLoggedIn" configuration. +- name: fission.highValue.login.expiration + type: uint32_t + value: 2592000 # 30 days (in seconds) + mirror: always + +# If true, capture login attemp, and add "highValueIsLoggedIn" permission to +# the permission manager no matter whether fission is enabled and +# WebContentIsolationStrateg is set to IsolateHighvalue. +- name: fission.highValue.login.monitor + type: bool + value: @IS_ANDROID@ + mirror: always + +# If true, do not send blocklisted preference values to the subprocess +- name: fission.omitBlocklistedPrefsInSubprocesses + type: RelaxedAtomicBool + value: true + mirror: always + +# If true, crash when a blocklisted preference is accessed in a subprocess +- name: fission.enforceBlocklistedPrefsInSubprocesses + type: RelaxedAtomicBool + value: @IS_EARLY_BETA_OR_EARLIER@ + mirror: always + +#--------------------------------------------------------------------------- +# Prefs starting with "font." +#--------------------------------------------------------------------------- + +# A value greater than zero enables font size inflation for +# pan-and-zoom UIs, so that the fonts in a block are at least the size +# that, if a block's width is scaled to match the device's width, the +# fonts in the block are big enough that at most the pref value ems of +# text fit in *the width of the device*. +# +# When both this pref and the next are set, the larger inflation is used. +- name: font.size.inflation.emPerLine + type: uint32_t + value: 0 + mirror: always + +# A value greater than zero enables font size inflation for +# pan-and-zoom UIs, so that if a block's width is scaled to match the +# device's width, the fonts in a block are at least the given font size. +# The value given is in twips, i.e., 1/20 of a point, or 1/1440 of an inch. +# +# When both this pref and the previous are set, the larger inflation is used. +- name: font.size.inflation.minTwips + type: uint32_t + value: 0 + mirror: always + +# In products with multi-mode pan-and-zoom and non-pan-and-zoom UIs, +# this pref forces font inflation to always be enabled in all modes. +# That is, any heuristics used to detect pan-and-zoom +# vs. non-pan-and-zoom modes are disabled and all content is treated +# as pan-and-zoom mode wrt font inflation. +# +# This pref has no effect if font inflation is not enabled through +# either of the prefs above. It has no meaning in single-mode UIs. +- name: font.size.inflation.forceEnabled + type: bool + value: false + mirror: always + +# In products with multi-mode pan-and-zoom and non-pan-and-zoom UIs, +# this pref disables font inflation in master-process contexts where +# existing heuristics can't be used determine enabled-ness. +# +# This pref has no effect if font inflation is not enabled through +# either of the prefs above. The "forceEnabled" pref above overrides +# this pref. +- name: font.size.inflation.disabledInMasterProcess + type: bool + value: false + mirror: always + +# Defines the font size inflation mapping intercept parameter. +# +# Font size inflation computes a minimum font size, m, based on +# other preferences (see font.size.inflation.minTwips and +# font.size.inflation.emPerLine, above) and the width of the +# frame in which the text resides. Using this minimum, a specified +# font size, s, is mapped to an inflated font size, i, using an +# equation that varies depending on the value of the font size +# inflation mapping intercept parameter, P. +# +# If the intercept parameter is negative, then the following mapping +# function is used: +# +# i = m + s +# +# If the intercept parameter is non-negative, then the mapping function +# is a function such that its graph meets the graph of i = s at the +# point where both i and s are (1 + P/2) * m for values of s that are +# large enough. This means that when s=0, i is always equal to m. +- name: font.size.inflation.mappingIntercept + type: int32_t + value: 1 + mirror: always + +# Since the goal of font size inflation is to avoid having to +# repeatedly scroll side to side to read a block of text, and there are +# a number of page layouts where a relatively small chunk of text is +# better off not being inflated according to the same algorithm we use +# for larger chunks of text, we want a threshold for an amount of text +# that triggers font size inflation. This preference controls that +# threshold. +# +# It controls the threshold used within an *approximation* of the +# number of lines of text we use. In particular, if we assume that +# each character (collapsing collapsible whitespace) has a width the +# same as the em-size of the font (when, normally, it's actually quite +# a bit smaller on average), this preference gives the percentage of a +# number of lines of text we'd need to trigger inflation. This means +# that a percentage of 100 means that we'd need a number of characters +# (we know the font size and the width) equivalent to one line of +# square text (which is actually a lot less than a real line of text). +# +# A value of 0 means there's no character length threshold. +- name: font.size.inflation.lineThreshold + type: uint32_t + value: 400 + mirror: always + +# This controls the percentage that fonts will be inflated, if font +# size inflation is enabled. Essentially, if we have a specified font +# size, s, and an inflated font size, i, this specifies that the ratio +# i/s * 100 should never exceed the value of this preference. In order +# for this preference to have any effect, its value must be greater +# than 100, since font inflation can never decrease the ratio i/s. +- name: font.size.inflation.maxRatio + type: uint32_t + value: 0 + mirror: always + +#--------------------------------------------------------------------------- +# Prefs starting with "full-screen-api." +#--------------------------------------------------------------------------- + +- name: full-screen-api.enabled + type: bool + value: false + mirror: always + +- name: full-screen-api.allow-trusted-requests-only + type: bool + value: true + mirror: always + +- name: full-screen-api.mouse-event-allow-left-button-only + type: bool + value: true + mirror: always + +- name: full-screen-api.exit-on.windowOpen + type: bool + value: true + mirror: always + +- name: full-screen-api.exit-on.windowRaise + type: bool + value: true + mirror: always + +- name: full-screen-api.pointer-lock.enabled + type: bool + value: true + mirror: always + +# whether to prevent the top level widget from going fullscreen +- name: full-screen-api.ignore-widgets + type: bool + value: false + mirror: always + +#--------------------------------------------------------------------------- +# Prefs starting with "fuzzing.". It's important that these can only be +# checked in fuzzing builds (when FUZZING is defined), otherwise you could +# enable the fuzzing stuff on your regular build which would be bad :) +#--------------------------------------------------------------------------- + +#ifdef FUZZING +- name: fuzzing.enabled + type: bool +#ifdef FUZZING_SNAPSHOT + value: true +#else + value: false +#endif + mirror: always + +- name: fuzzing.necko.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +- name: fuzzing.necko.http3 + type: RelaxedAtomicBool + value: false + mirror: always + rust: true +#endif + +#--------------------------------------------------------------------------- +# Prefs starting with "general." +#--------------------------------------------------------------------------- + +- name: general.aboutConfig.enable + type: bool + value: true + mirror: always + +# Limits the depth of recursive conversion of data when opening +# a content to view. This is mostly intended to prevent infinite +# loops with faulty converters involved. +- name: general.document_open_conversion_depth_limit + type: uint32_t + value: 20 + mirror: always + +- name: general.smoothScroll + type: RelaxedAtomicBool + value: true + mirror: always + +# This pref and general.smoothScroll.stopDecelerationWeighting determine +# the timing function. +- name: general.smoothScroll.currentVelocityWeighting + type: AtomicFloat + value: 0.25 + mirror: always + +# To connect consecutive scroll events into a continuous flow, the animation's +# duration should be longer than scroll events intervals (or else the scroll +# will stop before the next event arrives - we're guessing the next interval +# by averaging recent intervals). +# This defines how much longer the duration is compared to the events +# interval (percentage). +- name: general.smoothScroll.durationToIntervalRatio + type: RelaxedAtomicInt32 + value: 200 + mirror: always + +- name: general.smoothScroll.lines + type: RelaxedAtomicBool + value: true + mirror: always + +- name: general.smoothScroll.lines.durationMaxMS + type: RelaxedAtomicInt32 + value: 150 + mirror: always + +- name: general.smoothScroll.lines.durationMinMS + type: RelaxedAtomicInt32 + value: 150 + mirror: always + +- name: general.smoothScroll.mouseWheel + type: RelaxedAtomicBool + value: true + mirror: always + +- name: general.smoothScroll.mouseWheel.durationMaxMS + type: RelaxedAtomicInt32 + value: 200 + mirror: always + +- name: general.smoothScroll.mouseWheel.durationMinMS + type: RelaxedAtomicInt32 + value: 50 + mirror: always + +- name: general.smoothScroll.other + type: RelaxedAtomicBool + value: true + mirror: always + +- name: general.smoothScroll.other.durationMaxMS + type: RelaxedAtomicInt32 + value: 150 + mirror: always + +- name: general.smoothScroll.other.durationMinMS + type: RelaxedAtomicInt32 + value: 150 + mirror: always + +- name: general.smoothScroll.pages + type: RelaxedAtomicBool + value: true + mirror: always + +- name: general.smoothScroll.pages.durationMaxMS + type: RelaxedAtomicInt32 + value: 150 + mirror: always + +- name: general.smoothScroll.pages.durationMinMS + type: RelaxedAtomicInt32 + value: 150 + mirror: always + +- name: general.smoothScroll.scrollbars + type: RelaxedAtomicBool + value: true + mirror: always + +- name: general.smoothScroll.scrollbars.durationMaxMS + type: RelaxedAtomicInt32 + value: 150 + mirror: always + +- name: general.smoothScroll.scrollbars.durationMinMS + type: RelaxedAtomicInt32 + value: 150 + mirror: always + +- name: general.smoothScroll.pixels + type: RelaxedAtomicBool + value: true + mirror: always + +- name: general.smoothScroll.pixels.durationMaxMS + type: RelaxedAtomicInt32 + value: 150 + mirror: always + +- name: general.smoothScroll.pixels.durationMinMS + type: RelaxedAtomicInt32 + value: 150 + mirror: always + +# This pref and general.smoothScroll.currentVelocityWeighting determine +# the timing function. +- name: general.smoothScroll.stopDecelerationWeighting + type: AtomicFloat + value: 0.4f + mirror: always + +# Alternative smooth scroll physics. ("MSD" = Mass-Spring-Damper) +- name: general.smoothScroll.msdPhysics.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +- name: general.smoothScroll.msdPhysics.continuousMotionMaxDeltaMS + type: RelaxedAtomicInt32 + value: 120 + mirror: always + +- name: general.smoothScroll.msdPhysics.motionBeginSpringConstant + type: RelaxedAtomicInt32 + value: 1250 + mirror: always + +- name: general.smoothScroll.msdPhysics.slowdownMinDeltaMS + type: RelaxedAtomicInt32 + value: 12 + mirror: always + +- name: general.smoothScroll.msdPhysics.slowdownMinDeltaRatio + type: AtomicFloat + value: 1.3f + mirror: always + +- name: general.smoothScroll.msdPhysics.slowdownSpringConstant + type: RelaxedAtomicInt32 + value: 2000 + mirror: always + +- name: general.smoothScroll.msdPhysics.regularSpringConstant + type: RelaxedAtomicInt32 + value: 1000 + mirror: always + +#--------------------------------------------------------------------------- +# Prefs starting with "geo." +#--------------------------------------------------------------------------- + +# Is support for Navigator.geolocation enabled? +- name: geo.enabled + type: bool + value: true + mirror: always + +# Time, in milliseconds, to wait for the location provider to spin up. +- name: geo.timeout + type: int32_t + value: 6000 + mirror: always + +#ifdef MOZ_ENABLE_DBUS +# Whether to use Geoclue location provider (if available on the system). +- name: geo.provider.use_geoclue + type: bool + value: true + mirror: always + +# Whether to always provide high location accuracy, even if site +# doesn't actually request this level of accuracy. +# Almost no site correctly requests high accuracy so force it by default +# for compatibility with other geolocation providers. +- name: geo.provider.geoclue.always_high_accuracy + type: bool + value: true + mirror: always +#endif + +#--------------------------------------------------------------------------- +# Prefs starting with "gfx." +#--------------------------------------------------------------------------- + +- name: gfx.allow-texture-direct-mapping + type: bool + value: true + mirror: once + +# Allow 24-bit colour when the hardware supports it. +- name: gfx.android.rgb16.force + type: bool + value: false + mirror: once + +- name: gfx.apitrace.enabled + type: bool + value: false + mirror: once + +- name: gfx.blithelper.precision + type: RelaxedAtomicUint32 + value: 2 # { 0: lowp, 1: mediump, 2: highp } + mirror: always + +- name: gfx.blithelper.lut-size.rgb.b + type: RelaxedAtomicUint32 + value: 15 + mirror: always +- name: gfx.blithelper.lut-size.rgb.g + type: RelaxedAtomicUint32 + value: 31 + mirror: always +- name: gfx.blithelper.lut-size.rgb.r + type: RelaxedAtomicUint32 + value: 31 + mirror: always + +- name: gfx.blithelper.lut-size.ycbcr.cb + type: RelaxedAtomicUint32 + value: 15 + mirror: always +- name: gfx.blithelper.lut-size.ycbcr.cr + type: RelaxedAtomicUint32 + value: 31 + mirror: always +- name: gfx.blithelper.lut-size.ycbcr.y + type: RelaxedAtomicUint32 + value: 31 + mirror: always + +# Nb: we ignore this pref on release and beta. +- name: gfx.blocklist.all + type: int32_t + value: 0 + mirror: once + +#if defined(XP_MACOSX) +- name: gfx.cairo_quartz_cg_layer.enabled + type: bool + value: true + mirror: always +#endif + +- name: gfx.canvas.accelerated + type: bool +#if defined(XP_MACOSX) || defined(XP_LINUX) && !defined(ANDROID) + value: true +#elif defined(MOZ_WIDGET_ANDROID) + value: true +#else + value: false +#endif + mirror: always + +# Whether to attempt to enable Accelerated Canvas2D regardless of blocklisting. +- name: gfx.canvas.accelerated.force-enabled + type: bool + value: false + mirror: always + +- name: gfx.canvas.accelerated.async-present + type: RelaxedAtomicBool + value: true + mirror: always + +- name: gfx.canvas.accelerated.cache-items + type: RelaxedAtomicUint32 + value: 2048 + mirror: always + +- name: gfx.canvas.accelerated.cache-size + type: RelaxedAtomicUint32 + value: 256 + mirror: always + +- name: gfx.canvas.accelerated.reserve-empty-cache + type: RelaxedAtomicUint32 + value: 36 + mirror: always + +- name: gfx.canvas.accelerated.max-size + type: RelaxedAtomicInt32 + value: 0 + mirror: always + +- name: gfx.canvas.accelerated.min-size + type: RelaxedAtomicInt32 + value: 128 + mirror: always + +- name: gfx.canvas.accelerated.max-surface-size + type: RelaxedAtomicUint32 + value: 5280 + mirror: always + +- name: gfx.canvas.accelerated.shared-page-size + type: RelaxedAtomicUint32 + value: 1024 + mirror: always + +# The minimum number of frames before acting on performance profile info +- name: gfx.canvas.accelerated.profile-frames + type: RelaxedAtomicUint32 + value: 10 + mirror: always + +# The ratio of failed frames to total frames when to fall back from acceleration +- name: gfx.canvas.accelerated.profile-fallback-ratio + type: AtomicFloat + value: 0.3 + mirror: always + +# The ratio of cache misses at which to fail a profile frame +- name: gfx.canvas.accelerated.profile-cache-miss-ratio + type: AtomicFloat + value: 0.66 + mirror: always + +# The maximum size of the GPU path cache in MB. +- name: gfx.canvas.accelerated.gpu-path-size + type: RelaxedAtomicUint32 + value: 4 + mirror: always + +# The maximum allowed complexity of a GPU path. +- name: gfx.canvas.accelerated.gpu-path-complexity + type: RelaxedAtomicUint32 + value: 4000 + mirror: always + +# Whether to accelerate stroked paths by converting them to fill paths. +- name: gfx.canvas.accelerated.stroke-to-fill-path + type: RelaxedAtomicBool + value: false + mirror: always + +# Whether to use aa-stroke to accelerate stroked paths. +- name: gfx.canvas.accelerated.aa-stroke.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# Draws an indicator if acceleration is used. +- name: gfx.canvas.accelerated.debug + type: RelaxedAtomicBool + value: false + mirror: always + +# 0x7fff is the maximum supported xlib surface size and is more than enough for canvases. +- name: gfx.canvas.max-size + type: RelaxedAtomicInt32 + value: 0x7fff + mirror: always + +- name: gfx.canvas.remote + type: RelaxedAtomicBool +#if defined(XP_WIN) + value: true +#else + value: false +#endif + mirror: always + +- name: gfx.color_management.display_profile + type: DataMutexString + value: "" + mirror: always # But be warned: We cache the result. + +- name: gfx.color_management.force_srgb + type: RelaxedAtomicBool + value: false + mirror: always + +- name: gfx.color_management.native_srgb + type: RelaxedAtomicBool +#if defined(XP_MACOSX) + value: true +#else + value: false +#endif + mirror: always + +- name: gfx.color_management.enablev4 + type: RelaxedAtomicBool + value: true + mirror: always + +# 0 = Off, 1 = Full, 2 = Tagged Images Only. +# See CMSMode in gfx/thebes/gfxPlatform.h. +- name: gfx.color_management.mode + type: RelaxedAtomicInt32 + value: 2 + mirror: always + +# The zero default here should match QCMS_INTENT_DEFAULT from qcms.h +- name: gfx.color_management.rendering_intent + type: RelaxedAtomicInt32 + value: 0 + mirror: always + +- name: gfx.color_management.rec709_gamma_as_srgb + type: RelaxedAtomicBool + value: true # Tragic backwards compat. + mirror: always + +- name: gfx.color_management.rec2020_gamma_as_rec709 + type: RelaxedAtomicBool + value: true # Match naive behavior, but hopefully we can stop soon! + mirror: always + +- name: gfx.compositor.clearstate + type: RelaxedAtomicBool + value: false + mirror: always + +# Whether GL contexts can be migrated to a different GPU (to match the one the +# OS is using for composition). +# +# 0 = force disable migration +# 1 = use migration where in safe configurations (the default) +# 2 = force enable migration (for testing) +- name: gfx.compositor.gpu-migration + type: RelaxedAtomicInt32 + value: 1 + mirror: always + +- name: gfx.core-animation.tint-opaque + type: RelaxedAtomicBool + value: false + mirror: always + +#ifdef XP_MACOSX + # Create specialized video-only layers for video content in + # fullscreen windows. Consistently works well on Apple Silicon, + # some issues remain on Intel hardware. +- name: gfx.core-animation.specialize-video + type: RelaxedAtomicBool +#if defined(MOZ_AARCH64) + value: true +#else + value: false +#endif + mirror: always +#endif + +#if defined(XP_MACOSX) && defined(NIGHTLY_BUILD) + # Spoof the timing of the video sample instead of marking the untimed + # sample to be displayed immediately. +- name: gfx.core-animation.specialize-video.spoof-timing + type: RelaxedAtomicBool + value: false + mirror: always + + # Check that the sample has a color space and if it doesn't, log that + # and supply the default color space from the main display. +- name: gfx.core-animation.specialize-video.check-color-space + type: RelaxedAtomicBool + value: false + mirror: always + + # Log properties of the video surface, buffer, and format. +- name: gfx.core-animation.specialize-video.log + type: RelaxedAtomicBool + value: false + mirror: always +#endif + +#ifdef XP_MACOSX +- name: gfx.core-animation.low-power-telemetry-frames + type: int32_t + value: 600 + mirror: once +#endif + +#if defined(MOZ_WIDGET_ANDROID) + # Overrides the glClear color used when the surface origin is not (0, 0) + # Used for drawing a border around the content. +- name: gfx.compositor.override.clear-color.r + type: AtomicFloat + value: 0.0f + mirror: always + +- name: gfx.compositor.override.clear-color.g + type: AtomicFloat + value: 0.0f + mirror: always + +- name: gfx.compositor.override.clear-color.b + type: AtomicFloat + value: 0.0f + mirror: always + +- name: gfx.compositor.override.clear-color.a + type: AtomicFloat + value: 0.0f + mirror: always +#endif # defined(MOZ_WIDGET_ANDROID) + +- name: gfx.content.always-paint + type: RelaxedAtomicBool + value: false + mirror: always + +# Size in megabytes +- name: gfx.content.skia-font-cache-size + type: int32_t + value: 5 + mirror: once + +- name: gfx.device-reset.limit + type: int32_t + value: 10 + mirror: once + +- name: gfx.device-reset.threshold-ms + type: int32_t + value: -1 + mirror: once + + +# Whether to disable the automatic detection and use of direct2d. +- name: gfx.direct2d.disabled + type: bool + value: false + mirror: once + +# Whether to attempt to enable Direct2D regardless of automatic detection or +# blacklisting. +- name: gfx.direct2d.force-enabled + type: bool + value: false + mirror: once + +# Whether to defer destruction of Direct2D DrawTargets to the paint thread +# when using OMTP. +- name: gfx.direct2d.destroy-dt-on-paintthread + type: RelaxedAtomicBool + value: true + mirror: always + +- name: gfx.direct2d.target-independent-rasterization.disabled + type: bool + value: false + mirror: once + +- name: gfx.direct3d11.reuse-decoder-device + type: bool + value: true + mirror: once +# Enable reuse decoder device even when it is blocked. +- name: gfx.direct3d11.reuse-decoder-device-force-enabled + type: bool + value: false + mirror: once + +- name: gfx.direct3d11.allow-keyed-mutex + type: RelaxedAtomicBool + value: true + mirror: always + +- name: gfx.direct3d11.use-double-buffering + type: RelaxedAtomicBool + value: false + mirror: always + +- name: gfx.direct3d11.enable-debug-layer + type: bool + value: false + mirror: once + +- name: gfx.direct3d11.break-on-error + type: bool + value: false + mirror: once + +- name: gfx.direct3d11.sleep-on-create-device + type: int32_t + value: 0 + mirror: once + +# Rate by which the frame rate is divided. I.e. at a number higher than 1 we +# will only refresh every <x> frames. +- name: gfx.display.frame-rate-divisor + type: RelaxedAtomicInt32 + value: 1 + mirror: always + +- name: gfx.display.max-frame-rate + type: RelaxedAtomicInt32 + value: 0 + mirror: always + +# Whether to preserve color bitmap tables in fonts (bypassing OTS). +# Currently these are supported only on platforms where we use Freetype +# to render fonts (Linux/Gtk and Android). +- name: gfx.downloadable_fonts.keep_color_bitmaps + type: RelaxedAtomicBool + value: false + mirror: always + +# Whether font sanitization is performed on the main thread or not. +- name: gfx.downloadable_fonts.sanitize_omt + type: RelaxedAtomicBool + value: true + mirror: always + +# Whether to validate OpenType variation tables in fonts. +- name: gfx.downloadable_fonts.validate_variation_tables + type: RelaxedAtomicBool + value: true + mirror: always + +# Whether OTS validation should be applied to OpenType Layout (OTL) tables. +- name: gfx.downloadable_fonts.otl_validation + type: RelaxedAtomicBool + value: @IS_NOT_RELEASE_OR_BETA@ + mirror: always + +- name: gfx.draw-color-bars + type: RelaxedAtomicBool + value: false + mirror: always + +- name: gfx.e10s.hide-plugins-for-scroll + type: bool + value: true + mirror: once + +- name: gfx.e10s.font-list.shared + type: bool + value: true + mirror: once + +# Do we fire a notification about missing fonts, so the front-end can decide +# whether to try and do something about it (e.g. download additional fonts)? +- name: gfx.missing_fonts.notify + type: RelaxedAtomicBool + value: false + mirror: always + +#if !defined(MOZ_WIDGET_ANDROID) +- name: gfx.egl.prefer-gles.enabled + type: bool +#if defined(MOZ_WIDGET_GTK) && defined(MOZ_AARCH64) + value: true +#else + value: false +#endif + mirror: once +#endif + +# [Windows] Whether registry FontSubstitutes entries are used unconditionally, +# or only if the original font is not available. +#if defined(XP_WIN) +- name: gfx.windows-font-substitutes.always + type: bool + value: false + mirror: once +#endif + +- name: gfx.font-list-omt.enabled + type: bool +#if defined(XP_MACOSX) + value: true +#else + value: false +#endif + mirror: once + +# [Android] OPPO, realme and OnePlus device seem to crash when using Font +# Match API. We turn off this feature on these devices. Set true if you want to +# turn on it at force. +#if defined(MOZ_WIDGET_ANDROID) +- name: gfx.font-list.use_font_match_api.force-enabled + type: bool + value: false + mirror: once +#endif + +# Whether to load fonts (e.g. Twemoji Mozilla) bundled with the application: +# -1 - Auto behavior based on OS version (currently, disables loading on +# "low-memory" Android devices) +# 0 - Skip loading any bundled fonts +# 1 - Always load bundled fonts +- name: gfx.bundled-fonts.activate + type: int32_t + value: -1 + mirror: once + +- name: gfx.font_loader.delay + type: uint32_t +#if defined(XP_WIN) + value: 60000 +#else + value: 8000 +#endif + mirror: once + +# Disable antialiasing of Ahem, for use in tests. +- name: gfx.font_rendering.ahem_antialias_none + type: RelaxedAtomicBool + value: false + mirror: always + +#if defined(XP_MACOSX) + # Set to true to revert from HarfBuzz AAT shaping to the old Core Text + # backend. +- name: gfx.font_rendering.coretext.enabled + type: RelaxedAtomicBool + value: false + mirror: always +#endif + +- name: gfx.font_rendering.colr_v1.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +- name: gfx.font_rendering.opentype_svg.enabled + type: RelaxedAtomicBool + value: true + mirror: always + rust: true + +- name: gfx.font_rendering.fallback.async + type: RelaxedAtomicBool + value: true + mirror: always + +# whether to always search all font cmaps during system font fallback +- name: gfx.font_rendering.fallback.always_use_cmaps + type: RelaxedAtomicBool + value: false + mirror: always + +# whether to do font fallback for codepoints with General Category = Unassigned +- name: gfx.font_rendering.fallback.unassigned_chars + type: RelaxedAtomicBool + value: false + mirror: always + +#ifdef MOZ_WIDGET_GTK +- name: gfx.font_rendering.fontconfig.max_generic_substitutions + type: RelaxedAtomicUint32 + value: 3 + mirror: always +#endif + +#if defined(XP_WIN) +# Whether the DirectWrite bold simulation should be used when a bold font-weight +# is requested but no bold face available in the family. This renders poorly with +# some third-party fonts, so by default we disable it for webfonts and allow it +# only with locally-installed fonts. +# Values: +# 0 - never use DWrite bold simulation; always multi-strike instead +# 1 - use DWrite bold for installed fonts, multi-strike for webfont resources +# 2 - use DWrite bold for all fonts +- name: gfx.font_rendering.directwrite.bold_simulation + type: RelaxedAtomicUint32 + value: 1 + mirror: always +#endif + +- name: gfx.font_rendering.graphite.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# Cache shaped word results +- name: gfx.font_rendering.wordcache.charlimit + type: RelaxedAtomicUint32 + value: 32 + mirror: always + +# Cache shaped word results +- name: gfx.font_rendering.wordcache.maxentries + type: RelaxedAtomicUint32 + value: 10000 + mirror: always + +# The level of logging: +# - 0: no logging; +# - 1: adds errors; +# - 2: adds warnings; +# - 3 or 4: adds debug logging. +# If you set the value to 4, you will also need to set the environment +# variable MOZ_LOG to gfx:4. See mozilla/Logging.h for details. +- name: gfx.logging.level + type: RelaxedAtomicInt32 + value: mozilla::gfx::LOG_DEFAULT + mirror: always + include: mozilla/gfx/LoggingConstants.h + +- name: gfx.logging.crash.length + type: uint32_t + value: 16 + mirror: once + +# The maximums here are quite conservative, we can tighten them if problems show up. +- name: gfx.logging.texture-usage.enabled + type: bool + value: false + mirror: once + +- name: gfx.logging.peak-texture-usage.enabled + type: bool + value: false + mirror: once + +- name: gfx.logging.slow-frames.enabled + type: bool + value: false + mirror: once + +# Use gfxPlatform::MaxAllocSize instead of the pref directly. +- name: gfx.max-alloc-size + type: int32_t + value: (int32_t)0x7FFFFFFF + mirror: once + do_not_use_directly: true + +# Use gfxPlatform::MaxTextureSize instead of the pref directly. +- name: gfx.max-texture-size + type: int32_t + value: (int32_t)32767 + mirror: once + do_not_use_directly: true + +# Enable OffscreenCanvas everywhere. +- name: gfx.offscreencanvas.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +- name: gfx.omta.background-color + type: bool + value: true + mirror: always + +- name: gfx.partialpresent.force + type: RelaxedAtomicInt32 + value: 0 + mirror: always + +# SwapInterval +- name: gfx.swap-interval.glx + type: RelaxedAtomicBool + value: true + mirror: always + +- name: gfx.swap-interval.egl + type: RelaxedAtomicBool + mirror: always +#ifdef MOZ_WIDGET_ANDROID + value: true +#else + value: false +#endif + + +# Log severe performance warnings to the error console and profiles. +# This should be use to quickly find which slow paths are used by test cases. +- name: gfx.perf-warnings.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +#ifdef MOZ_X11 +# Whether to force using GLX over EGL. +- name: gfx.x11-egl.force-disabled + type: bool + value: false + mirror: once + +# Whether to force using EGL over GLX. +- name: gfx.x11-egl.force-enabled + type: bool + value: false + mirror: once +#endif + +- name: gfx.testing.device-fail + type: RelaxedAtomicBool + value: false + mirror: always + +- name: gfx.testing.device-reset + type: RelaxedAtomicInt32 + value: 0 + mirror: always + +- name: gfx.text.disable-aa + type: bool + value: false + mirror: once + +- name: gfx.text.subpixel-position.force-enabled + type: bool + value: false + mirror: once + +- name: gfx.text.subpixel-position.force-disabled + type: bool + value: false + mirror: once + +- name: gfx.use-iosurface-textures + type: bool + value: false + mirror: once + +- name: gfx.use-mutex-on-present + type: bool + value: false + mirror: once + +# Use SurfaceTextures as preferred backend for TextureClient/Host. +- name: gfx.use-surfacetexture-textures + type: bool + value: false + mirror: once + +- name: gfx.vsync.collect-scroll-transforms + type: RelaxedAtomicBool + value: false + mirror: always + +- name: gfx.vsync.compositor.unobserve-count + type: int32_t + value: 10 + mirror: once + +- name: gfx.vsync.force-disable-waitforvblank + type: RelaxedAtomicBool + value: false + mirror: always + +- name: gfx.will-change.ignore-opacity + type: RelaxedAtomicBool + value: true + mirror: always + +# Should we override the blocklist to enable WebGPU? +- name: gfx.webgpu.ignore-blocklist + type: bool + value: false + mirror: once + +# We expose two prefs: gfx.webrender.all and gfx.webrender.enabled. +# The first enables WR+additional features, and the second just enables WR. +# For developer convenience, building with --enable-webrender=true or just +# --enable-webrender will set gfx.webrender.enabled to true by default. +# +# We also have a pref gfx.webrender.all.qualified which is not exposed via +# about:config. That pref enables WR but only on qualified hardware. This is +# the pref we'll eventually flip to deploy WebRender to the target population. +- name: gfx.webrender.all + type: bool + value: false + mirror: once + +- name: gfx.webrender.enabled + type: bool + value: false + mirror: once + do_not_use_directly: true + +#ifdef XP_WIN +- name: gfx.webrender.force-angle + type: bool + value: true + mirror: once +#endif + +# WebRender is not enabled when there is no GPU process on window when +# WebRender uses ANGLE. It is for avoiding that WebGL and WebRender use ANGLE +# at once. But there is a case that we want to enable WebRender for testing. +#ifdef XP_WIN +- name: gfx.webrender.enabled-no-gpu-process-with-angle-win + type: bool + value: true + mirror: once +#endif + +- name: gfx.webrender.blob-images + type: RelaxedAtomicBool + value: true + mirror: always + +- name: gfx.webrender.svg-images + type: RelaxedAtomicBool + value: true + mirror: always + +- name: gfx.webrender.svg-shapes + type: RelaxedAtomicBool + value: true + mirror: always + +- name: gfx.webrender.debug.blob.paint-flashing + type: RelaxedAtomicBool + value: false + mirror: always + +- name: gfx.webrender.debug.enable-capture + type: bool + value: false + mirror: once + +- name: gfx.webrender.debug.dl.dump-parent + type: RelaxedAtomicBool + value: false + mirror: always + +- name: gfx.webrender.debug.dl.dump-content + type: RelaxedAtomicBool + value: false + mirror: always + +- name: gfx.webrender.debug.dl.dump-content-serialized + type: RelaxedAtomicBool + value: false + mirror: always + +#ifdef MOZ_WIDGET_GTK +- name: gfx.webrender.reject-software-driver + type: bool + value: true + mirror: once +#endif + +- name: gfx.webrender.debug.highlight-painted-layers + type: RelaxedAtomicBool + value: false + mirror: always + +- name: gfx.webrender.late-scenebuild-threshold + type: RelaxedAtomicInt32 + value: 4 + mirror: always + +- name: gfx.webrender.max-filter-ops-per-chain + type: RelaxedAtomicUint32 + value: 64 + mirror: always + +- name: gfx.webrender.batching.lookback + type: uint32_t + value: 10 + mirror: always + +- name: gfx.webrender.blob-tile-size + type: uint32_t + value: 256 + mirror: always + +- name: gfx.webrender.batched-upload-threshold + type: int32_t +#if defined(MOZ_WIDGET_ANDROID) + value: 262144 +#else + value: 65536 +#endif + mirror: always + +- name: gfx.webrender.compositor + type: bool +#if defined(XP_WIN) || defined(XP_MACOSX) + value: true +#else + value: false +#endif + mirror: once + +- name: gfx.webrender.scissored-cache-clears.enabled + type: bool + value: true + mirror: once + +- name: gfx.webrender.scissored-cache-clears.force-enabled + type: bool + value: false + mirror: once + +- name: gfx.webrender.compositor.force-enabled + type: bool + value: false + mirror: once + +- name: gfx.webrender.compositor.max_update_rects + type: uint32_t + value: 1 + mirror: once + +- name: gfx.webrender.compositor.surface-pool-size + type: uint32_t + value: 25 + mirror: once + +# Number of damage rects we can give to the compositor for a new frame with +# partial present. This controls whether partial present is used or not. +- name: gfx.webrender.max-partial-present-rects + type: uint32_t +#if defined(XP_WIN) || defined(MOZ_WIDGET_ANDROID) || defined(MOZ_WIDGET_GTK) + value: 1 +#else + value: 0 +#endif + mirror: once + +# Whether or not we can reuse the buffer contents using the GL buffer age +# extension, if supported by the platform. This requires partial present +# to be used. +- name: gfx.webrender.allow-partial-present-buffer-age + type: bool + value: true + mirror: once + +# Whether or not we should force partial present on. +- name: gfx.webrender.force-partial-present + type: bool + value: false + mirror: once + +- name: gfx.webrender.enable-gpu-markers + type: bool +#ifdef DEBUG + value: true +#else + value: false +#endif + mirror: once + +- name: gfx.webrender.enable-item-cache + type: bool + value: true + mirror: once + +# Whether or not to fallback from WebRender to Software WebRender. +- name: gfx.webrender.fallback.software + type: bool + value: true + mirror: once + +#ifdef XP_WIN + # Whether or not to fallback from WebRender to Software WebRender + D3D11. +- name: gfx.webrender.fallback.software-d3d11 + type: bool + value: true + mirror: once + # Whether to use a video overlay layers with DirectComposition +- name: gfx.webrender.dcomp-video-overlay-win + type: bool + value: true + mirror: once + # Enable video overlay even when it is blocked. +- name: gfx.webrender.dcomp-video-overlay-win-force-enabled + type: bool + value: false + mirror: once + # Whether to use a yuv video overlay layers with DirectComposition +- name: gfx.webrender.dcomp-video-yuv-overlay-win + type: bool + value: false + mirror: once +- name: gfx.webrender.dcomp-video-vp-scaling-win + type: bool + value: true + mirror: once + # Whether to use virtual surfaces, as opposed to each tile owning a surface. +- name: gfx.webrender.dcomp-use-virtual-surfaces + type: bool + value: true + mirror: once + # Whether to use a video overlay layers for sw decoded video with DirectComposition +- name: gfx.webrender.dcomp-video-sw-overlay-win + type: bool + value: true + mirror: once +- name: gfx.webrender.dcomp-video-check-slow-present + type: RelaxedAtomicBool + value: true + mirror: always +- name: gfx.video.convert-i420-to-nv12.force-enabled + type: bool + value: false + mirror: once +#endif + +# Whether or not fallback to Software WebRender requires the GPU process. +- name: gfx.webrender.fallback.software.requires-gpu-process + type: bool + value: false + mirror: once + +- name: gfx.webrender.program-binary-disk + type: bool +#if defined(XP_WIN) || defined(ANDROID) + value: true +#else + value: false +#endif + mirror: once + +- name: gfx.webrender.use-optimized-shaders + type: bool + value: true + mirror: once + +- name: gfx.webrender.precache-shaders + type: bool + value: false + mirror: once + +# When gl debug message is a high severity message, forwward it to gfx critical +# note. +- name: gfx.webrender.gl-debug-message-critical-note + type: bool +#if defined(XP_WIN) && defined(NIGHTLY_BUILD) + value: true +#else + value: false +#endif + mirror: once + +# Enable printing gl debug messages +- name: gfx.webrender.gl-debug-message-print + type: bool + value: false + mirror: once + +#ifdef NIGHTLY_BUILD + # Keep this pref hidden on non-nightly builds to avoid people accidentally + # turning it on. +- name: gfx.webrender.panic-on-gl-error + type: bool + value: false + mirror: once +#endif + +#ifdef XP_WIN + # Enables display of performance debugging counters when DirectComposition + # is used. + # Performance counters are displayed on the top-right corner of the screen. +- name: gfx.webrender.debug.dcomp-counter + type: RelaxedAtomicBool + value: false + mirror: always + # Enables highlighting redraw regions of DCompositionVisual +- name: gfx.webrender.debug.dcomp-redraw-regions + type: RelaxedAtomicBool + value: false + mirror: always +#endif + +#ifdef XP_MACOSX + # Files show up in $HOME/Desktop/nativelayerdumps-PID/frame-123.html +- name: gfx.webrender.debug.dump-native-layer-tree-to-file + type: RelaxedAtomicBool + value: false + mirror: always +#endif + +- name: gfx.webrender.enable-low-priority-pool + type: RelaxedAtomicBool +#if defined(ANDROID) + value: false +#else + value: true +#endif + mirror: always + + # Force subpixel anti-aliasing as much as possible, despite performance cost. +- name: gfx.webrender.quality.force-subpixel-aa-where-possible + type: bool + value: false + mirror: always + +#ifdef XP_MACOSX +- name: gfx.webrender.enable-client-storage + type: bool + value: true + mirror: once +#endif + + # Width of WebRender tile size +- name: gfx.webrender.picture-tile-width + type: RelaxedAtomicInt32 + value: 1024 + mirror: always + + # Width of WebRender tile size +- name: gfx.webrender.picture-tile-height + type: RelaxedAtomicInt32 + value: 512 + mirror: always + +# WebRender upper bound for shared surface size +# According to apitrace, textures larger than 2048 break fast clear +# optimizations on some intel drivers. We sometimes need to go larger, but +# we try to avoid it. +- name: gfx.webrender.max-shared-surface-size + type: int32_t + value: 2048 + mirror: once + +# Whether to use EGL robustness or not. +- name: gfx.webrender.prefer-robustness + type: bool +#if defined(XP_WIN) || defined(MOZ_WIDGET_GTK) + value: true +#else + value: false +#endif + mirror: once + +# Whether to use the WebRender software backend +- name: gfx.webrender.software + type: bool + value: false + mirror: once + +# Whether to use the D3D11 RenderCompositor when using WebRender software backend +- name: gfx.webrender.software.d3d11 + type: bool + value: true + mirror: once + +- name: gfx.webrender.software.opengl + type: bool +#if defined(MOZ_WIDGET_ANDROID) + value: true +#else + value: false +#endif + mirror: once + +- name: gfx.webrender.software.d3d11.upload-mode + type: RelaxedAtomicInt32 + value: 4 + mirror: always + +# Whether to force widgets to don't support acceleration to use WebRender +# despite that +- name: gfx.webrender.unaccelerated-widget.force + type: RelaxedAtomicBool + value: false + mirror: always + +# Enable a lower quality, but higher performance pinch-zoom mode. Primarily +# for devices with weak GPUs, or when running SWGL. +- name: gfx.webrender.low-quality-pinch-zoom + type: bool +#if defined(MOZ_WIDGET_ANDROID) && defined(NIGHTLY_BUILD) + value: true +#else + value: false +#endif + mirror: once + +# Disable wait of GPU execution completion +- name: gfx.webrender.wait-gpu-finished.disabled + type: bool +#if defined(XP_WIN) + value: true +#else + value: false +#endif + mirror: once + +# Enable NVIDIA RTX Video Super Resolution for video overlay on Windows +# Note: This is also a setting in NVIDIA's driver settings, so once this is +# stable, it should default to true +- name: gfx.webrender.super-resolution.nvidia + type: bool + value: false + mirror: once + +# Use vsync events generated by hardware +- name: gfx.work-around-driver-bugs + type: bool + value: true + mirror: once + +- name: gfx.ycbcr.accurate-conversion + type: RelaxedAtomicBool + value: false + mirror: always + +#--------------------------------------------------------------------------- +# Prefs starting with "gl." (OpenGL) +#--------------------------------------------------------------------------- + +- name: gl.allow-high-power + type: RelaxedAtomicBool + value: true + mirror: always + +- name: gl.ignore-dx-interop2-blacklist + type: RelaxedAtomicBool + value: false + mirror: always + +- name: gl.use-tls-is-current + type: RelaxedAtomicInt32 + value: 0 + mirror: always + +#--------------------------------------------------------------------------- +# Prefs starting with "html5." +#--------------------------------------------------------------------------- + +# Turn HTML:inert on or off. +- name: html5.inert.enabled + type: bool + value: true + mirror: always + +# Time in milliseconds between the time a network buffer is seen and the timer +# firing when the timer hasn't fired previously in this parse in the +# off-the-main-thread HTML5 parser. +- name: html5.flushtimer.initialdelay + type: RelaxedAtomicInt32 + value: 16 + mirror: always + +# Time in milliseconds between the time a network buffer is seen and the timer +# firing when the timer has already fired previously in this parse. +- name: html5.flushtimer.subsequentdelay + type: RelaxedAtomicInt32 + value: 16 + mirror: always + +#--------------------------------------------------------------------------- +# Prefs starting with "idle_period." +#--------------------------------------------------------------------------- + +- name: idle_period.min + type: uint32_t + value: 3 + mirror: always + +- name: idle_period.during_page_load.min + type: uint32_t + value: 12 + mirror: always + +- name: idle_period.cross_process_scheduling + type: RelaxedAtomicBool + value: true + mirror: always + +#--------------------------------------------------------------------------- +# Prefs starting with "image." +#--------------------------------------------------------------------------- + +# The maximum size (in kB) that the aggregate frames of an animation can use +# before it starts to discard already displayed frames and redecode them as +# necessary. +- name: image.animated.decode-on-demand.threshold-kb + type: RelaxedAtomicUint32 + value: 20*1024 + mirror: always + +# The minimum number of frames we want to have buffered ahead of an +# animation's currently displayed frame. +- name: image.animated.decode-on-demand.batch-size + type: RelaxedAtomicUint32 + value: 6 + mirror: always + +# Whether we should recycle already displayed frames instead of discarding +# them. This saves on the allocation itself, and may be able to reuse the +# contents as well. Only applies if generating full frames. +- name: image.animated.decode-on-demand.recycle + type: bool + value: true + mirror: once + +# Resume an animated image from the last displayed frame rather than +# advancing when out of view. +- name: image.animated.resume-from-last-displayed + type: RelaxedAtomicBool + value: true + mirror: always + +# Maximum number of surfaces for an image before entering "factor of 2" mode. +# This in addition to the number of "native" sizes of an image. A native size +# is a size for which we can decode a frame without up or downscaling. Most +# images only have 1, but some (i.e. ICOs) may have multiple frames for the +# same data at different sizes. +- name: image.cache.factor2.threshold-surfaces + type: RelaxedAtomicInt32 + value: 4 + mirror: always + +# Maximum size of a surface in KB we are willing to produce when rasterizing +# an SVG. +- name: image.cache.max-rasterized-svg-threshold-kb + type: RelaxedAtomicInt32 + value: 200*1024 + mirror: always + +# The maximum size, in bytes, of the decoded images we cache. +- name: image.cache.size + type: int32_t + value: 5*1024*1024 + mirror: once + +# A weight, from 0-1000, to place on time when comparing to size. +# Size is given a weight of 1000 - timeweight. +- name: image.cache.timeweight + type: int32_t + value: 500 + mirror: once + +# Decode all images automatically on load, ignoring our normal heuristics. +- name: image.decode-immediately.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +# Decode all images synchronously +- name: image.decode-sync.enabled + type: bool + value: false + mirror: always + +# Whether we attempt to downscale images during decoding. +- name: image.downscale-during-decode.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# Whether we use EXIF metadata for image density. +- name: image.exif-density-correction.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# Whether EXIF density metadata is sanity checked against PixelXDimension and PixelYDimension +- name: image.exif-density-correction.sanity-check.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# The threshold for inferring that changes to an <img> element's |src| +# attribute by JavaScript represent an animation, in milliseconds. If the |src| +# attribute is changing more frequently than this value, then we enter a +# special "animation mode" which is designed to eliminate flicker. Set to 0 to +# disable. +- name: image.infer-src-animation.threshold-ms + type: RelaxedAtomicUint32 + value: 2000 + mirror: always + +# Whether the network request priority should be adjusted according +# the layout and view frame position of each particular image. +- name: image.layout_network_priority + type: RelaxedAtomicBool + value: true + mirror: always + +# Chunk size for calls to the image decoders. +- name: image.mem.decode_bytes_at_a_time + type: uint32_t + value: 16384 + mirror: once + +# Discards inactive image frames and re-decodes them on demand from +# compressed data. +- name: image.mem.discardable + type: RelaxedAtomicBool + value: true + mirror: always + +# Discards inactive image frames of _animated_ images and re-decodes them on +# demand from compressed data. Has no effect if image.mem.discardable is false. +- name: image.mem.animated.discardable + type: bool + value: true + mirror: once + +# Whether the heap should be used for frames from animated images. On Android, +# volatile memory keeps file handles open for each buffer. +- name: image.mem.animated.use_heap + type: RelaxedAtomicBool + value: @IS_ANDROID@ + mirror: always + +# Enable extra information for debugging in the image memory reports. +- name: image.mem.debug-reporting + type: RelaxedAtomicBool + value: false + mirror: always + +# Decodes images into shared memory to allow direct use in separate +# rendering processes. Only applicable with WebRender. +- name: image.mem.shared + type: RelaxedAtomicBool + value: true + mirror: always + +# Force unmapping of unused shared surfaces after a timeout period or when we +# encounter virtual memory pressure. By default this is only enabled on 32-bit +# Firefox. +- name: image.mem.shared.unmap.force-enabled + type: bool + value: false + mirror: once + +# Minimum timeout to unmap shared surfaces since they have been last used, +# in milliseconds. +- name: image.mem.shared.unmap.min_expiration_ms + type: uint32_t + value: 60*1000 + mirror: once + +# Mininum size for shared surfaces to consider unmapping, in kilobytes. +- name: image.mem.shared.unmap.min_threshold_kb + type: uint32_t + value: 100 + mirror: once + +# How much of the data in the surface cache is discarded when we get a memory +# pressure notification, as a fraction. The discard factor is interpreted as a +# reciprocal, so a discard factor of 1 means to discard everything in the +# surface cache on memory pressure, a discard factor of 2 means to discard half +# of the data, and so forth. The default should be a good balance for desktop +# and laptop systems, where we never discard visible images. +- name: image.mem.surfacecache.discard_factor + type: uint32_t + value: 1 + mirror: once + +# Maximum size for the surface cache, in kilobytes. +- name: image.mem.surfacecache.max_size_kb + type: uint32_t + value: 2024 * 1024 + mirror: once + +# Minimum timeout for expiring unused images from the surface cache, in +# milliseconds. This controls how long we store cached temporary surfaces. +- name: image.mem.surfacecache.min_expiration_ms + type: uint32_t + value: 60*1000 + mirror: once + +# The surface cache's size, within the constraints of the maximum size set +# above, is determined as a fraction of main memory size. The size factor is +# interpreted as a reciprocal, so a size factor of 4 means to use no more than +# 1/4 of main memory. The default should be a good balance for most systems. +- name: image.mem.surfacecache.size_factor + type: uint32_t + value: 4 + mirror: once + +# Minimum buffer size in KB before using volatile memory over the heap. +- name: image.mem.volatile.min_threshold_kb + type: RelaxedAtomicInt32 +#if defined(ANDROID) + # On Android, volatile memory keeps file handles open for each buffer. + value: 100 +#else + value: -1 +#endif + mirror: always + +# How long in ms before we should start shutting down idle decoder threads. +- name: image.multithreaded_decoding.idle_timeout + type: int32_t + value: 600000 + mirror: once + +# How many threads we'll use for multithreaded decoding. If < 0, will be +# automatically determined based on the system's number of cores. +- name: image.multithreaded_decoding.limit + type: int32_t + value: -1 + mirror: once + +# Whether we record SVG images as blobs or not. +- name: image.svg.blob-image + type: RelaxedAtomicBool + value: false + mirror: always + +# Whether we attempt to decode WebP images or not. +- name: image.webp.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# Whether we attempt to decode AVIF images or not. +- name: image.avif.enabled + type: RelaxedAtomicBool +#if defined(MOZ_AV1) + value: true +#else + value: false +#endif + mirror: always + +# How strict we are in accepting/rejecting AVIF inputs according to whether they +# conform to the specification +# 0 = Permissive: accept whatever we can simply, unambiguously interpret +# 1 = Normal: reject violations of "shall" specification directives +# 2 = Strict: reject violations of "should" specification directives +- name: image.avif.compliance_strictness + type: RelaxedAtomicInt32 + value: 1 + mirror: always + +# Whether we apply container-level transforms like mirroring and rotation +- name: image.avif.apply_transforms + type: RelaxedAtomicBool + value: true + mirror: always + +# Whether we use dav1d (true) or libaom (false) to decode AVIF image +- name: image.avif.use-dav1d + type: RelaxedAtomicBool + value: true + mirror: always + +# Whether to allow decoding of animated AVIF sequences. +- name: image.avif.sequence.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# Whether AVIF files containing sequences should be animated even when the +# major brand is set to 'avif'. +- name: image.avif.sequence.animate_avif_major_branded_images + type: RelaxedAtomicBool + value: false + mirror: always + +# Whether we attempt to decode JXL images or not. +- name: image.jxl.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +#--------------------------------------------------------------------------- +# Prefs starting with "intl." +#--------------------------------------------------------------------------- + +#ifdef XP_WIN + # Whether making Gecko TSF-aware or only working with IMM. TSF is a modern + # IME API set of Windows which replaces IMM APIs. Unless you can avoid the + # problem which you see with enabling TSF, you shouldn't change this pref + # to false since IMM handler is now not maintained nor tested with latest + # Windows. If you need to change this pref to false, please file a bug to + # <https://bugzilla.mozilla.org>. + # Restart required to apply this pref change. +- name: intl.tsf.enabled + type: bool + value: true + mirror: once + + # Whether Gecko creates or does not create native caret for legacy ATOK + # (2011 - 2015). +- name: intl.tsf.hack.atok.create_native_caret + type: bool + value: true + mirror: always + + # Whether Gecko returns available composition string rect or TS_E_NOLAYOUT + # from ITextStoreACP::GetTextExt() when the specified range is same as the + # range of composition string but some character rects in it are still + # dirty if and only if ATOK is active TIP. + # Note that this is ignored if active ATOK is or older than 2016 and + # create_native_caret is true. +- name: intl.tsf.hack.atok.do_not_return_no_layout_error_of_composition_string + type: bool + value: true + mirror: always + + # Whether Gecko sets input scope of ATOK to "search" or never does it. + # When "search" is set to the input scope, ATOK may stop their suggestions. + # To avoid it, turn this pref on, or changing the settings in ATOK. + # Note that if you enable this pref and you use the touch keyboard for touch + # screens, you cannot access some specific features for a "search" input + # field. +- name: intl.tsf.hack.atok.search_input_scope_disabled + type: bool + value: false + mirror: always + + # Whether Gecko returns caret rect before composition string or TS_E_NOLAYOUT + # from ITextStoreACP::GetTextExt() when the specified range is larger than + # composition start offset if and only if Free ChangJie is active TIP. +- name: intl.tsf.hack.free_chang_jie.do_not_return_no_layout_error + type: bool + value: true + mirror: always + + # Whether Gecko returns available composition string rect or TS_E_NOLAYOUT + # from ITextStoreACP::GetTextExt() when the specified range is same as the + # range of composition string but some character rects in it are still + # dirty if and only if Japanist 10 is active TIP. +- name: intl.tsf.hack.japanist10.do_not_return_no_layout_error_of_composition_string + type: bool + value: true + mirror: always + + # Whether Gecko returns previous character rect or TS_E_NOLAYOUT from + # ITfContextView::GetTextExt() when the specified range is the first + # character of selected clause of composition string if and only if Japanese TIP + # of Microsoft is active. +- name: intl.tsf.hack.ms_japanese_ime.do_not_return_no_layout_error_at_first_char + type: bool + value: true + mirror: always + + # Whether Gecko returns previous character rect or TS_E_NOLAYOUT from + # ITfContextView::GetTextExt() when the specified range is the caret of + # composition string if and only if Japanese TIP of Microsoft is active. +- name: intl.tsf.hack.ms_japanese_ime.do_not_return_no_layout_error_at_caret + type: bool + value: true + mirror: always + + # Whether Gecko returns caret rect before composition string or TS_E_NOLAYOUT + # from ITfContextView::GetTextExt() when the specified range is larger than + # composition start offset if and only Simplified Chinese TIP of Microsoft + # is active. +- name: intl.tsf.hack.ms_simplified_chinese.do_not_return_no_layout_error + type: bool + value: true + mirror: always + + # Whether Geckos hacks ITextStoreACP::QueryInsert() or not. The method should + # return new selection after specified length text is inserted at specified + # range. However, Microsoft Pinyin and Microsoft Wubi expect that the result + # is same as specified range. If following prefs are true, + # ITextStoreACP::QueryInsert() returns specified range only when one of the + # TIPs is active. +- name: intl.tsf.hack.ms_simplified_chinese.query_insert_result + type: bool + value: true + mirror: always + + # Whether Gecko returns caret rect before composition string or TS_E_NOLAYOUT + # from ITfContextView::GetTextExt() when the specified range is larger than + # composition start offset if and only Traditional Chinese TIP of Microsoft + # is active. +- name: intl.tsf.hack.ms_traditional_chinese.do_not_return_no_layout_error + type: bool + value: true + mirror: always + + # Whether Geckos hacks ITextStoreACP::QueryInsert() or not. The method should + # return new selection after specified length text is inserted at specified + # range. However, Microsoft ChangJie and Microsoft Quick expect that the + # result is same as specified range. If following prefs are true, + # ITextStoreACP::QueryInsert() returns specified range only when one of the + # TIPs is active. +- name: intl.tsf.hack.ms_traditional_chinese.query_insert_result + type: bool + value: true + mirror: always + + # Whether Gecko sets input scope of the URL bar to IS_DEFAULT when black + # listed IMEs are active or does not. If you use tablet mode mainly and you + # want to use touch keyboard for URL when you set focus to the URL bar, you + # can set this to false. Then, you'll see, e.g., ".com" key on the keyboard. + # However, if you set this to false, such IMEs set its open state to "closed" + # when you set focus to the URL bar. I.e., input mode is automatically + # changed to English input mode. + # Known buggy IME list: + # - Microsoft IME for Japanese + # - Google Japanese Input + # - Microsoft Bopomofo + # - Microsoft ChangJie + # - Microsoft Phonetic + # - Microsoft Quick + # - Microsoft New ChangJie + # - Microsoft New Phonetic + # - Microsoft New Quick + # - Microsoft Pinyin + # - Microsoft Pinyin New Experience Input Style + # - Microsoft Wubi + # - Microsoft IME for Korean (except on Win7) + # - Microsoft Old Hangul +- name: intl.ime.hack.set_input_scope_of_url_bar_to_default + type: bool + value: true + mirror: always + + # On Windows 10 Build 17643 (an Insider Preview build of RS5), Microsoft + # have fixed the caller of ITextACPStore::GetTextExt() to return + # TS_E_NOLAYOUT to TIP as-is, rather than converting to E_FAIL. + # Therefore, if TIP supports asynchronous layout computation perfectly, we + # can return TS_E_NOLAYOUT and TIP waits next OnLayoutChange() + # notification. However, some TIPs still have some bugs of asynchronous + # layout support. We keep hacking the result of GetTextExt() like running + # on Windows 10, however, there could be unknown TIP bugs if we stop + # hacking the result. So, user can stop checking build ID to make Gecko + # hack the result forcibly. +- name: intl.tsf.hack.allow_to_stop_hacking_on_build_17643_or_later + type: bool + value: @IS_EARLY_BETA_OR_EARLIER@ + mirror: always + + # If true, automatically extend selection to cluster boundaries when + # TSF/TIP requests to select from/by middle of a cluster. +- name: intl.tsf.hack.extend_setting_selection_range_to_cluster_boundaries + type: bool + value: @IS_NOT_EARLY_BETA_OR_EARLIER@ + mirror: always + + # Whether Gecko supports IMM even if TSF is enabled. This pref exists + # only for check TSF behavior of new versions. Therefore, users should + # not set this to false for daily use. +- name: intl.tsf.support_imm + type: bool + value: true + mirror: once + + # If true, TSF and TIP (IME) can retrieve URL of the document containing + # the focused element. When this is set to true, Gecko exposes the spec + # of the URL. + # And Gecko exposes only "http" and "https" URLs. E.g., "data", "blob", + # "file" URLs are never exposed. +- name: intl.tsf.expose_url.allowed + type: bool + value: true + mirror: always + + # If true, TSF and TIP (IME) can retrieve URL of the document containing + # the focused element in the private browsing mode too. +- name: intl.tsf.expose_url_in_private_browsing.allowed + type: bool + value: false + mirror: always + +#if defined(ENABLE_TESTS) + # If true, NS_GetComplexLineBreaks compares the line breaks produced in the + # content process using the Uniscribe line breaker, with those from a + # brokered call to the parent. +- name: intl.compare_against_brokered_complex_line_breaks + type: bool + value: false + mirror: always +#endif +#endif + +# If you use legacy Chinese IME which puts an ideographic space to composition +# string as placeholder, this pref might be useful. If this is true and when +# web contents forcibly commits composition (e.g., moving focus), the +# ideographic space will be ignored (i.e., commits with empty string). +- name: intl.ime.remove_placeholder_character_at_commit + type: bool + value: false + mirror: always + + +#if defined(XP_MACOSX) || defined(MOZ_WIDGET_GTK) +# Whether text input without keyboard press nor IME composition should cause a +# set of composition events or not. E.g., when you use Emoji picker on macOS, +# it inserts an Emoji character directly. If set to true, `compositionstart`, +# `compositionupdate` and `compositionend` events will be fired, and the +# correspnding `beforeinput` events are not cancelable. Otherwise, if set to +# false, any user input events are not exposed to web apps but only +# `beforeinput` event is fired as "insert text" as a cancelable event. +- name: intl.ime.use_composition_events_for_insert_text + type: bool + value: false + mirror: always +#endif + +#--------------------------------------------------------------------------- +# Prefs starting with "javascript." +# +# NOTE: SpiderMonkey starts up before `mirror: once` preferences are sealed and +# we cannot use them (Bug 1698311). Instead, we use `mirror: always` +# prefs but mark as `do_not_use_directly` and `LoadStartupJSPrefs` will +# mirror them into SpiderMonkey. +#--------------------------------------------------------------------------- + +# The JavaScript JIT compilers. These are read once on startup so a browser may +# need to be restarted if toggling them. In general each subsequent JIT depends +# on the ones before it being enabled. +- name: javascript.options.blinterp + type: bool + value: true + mirror: always # LoadStartupJSPrefs + do_not_use_directly: true + +- name: javascript.options.baselinejit + type: bool + value: true + mirror: always # LoadStartupJSPrefs + do_not_use_directly: true + +- name: javascript.options.ion + type: bool + value: true + mirror: always # LoadStartupJSPrefs + do_not_use_directly: true + +# The irregexp JIT for regex evaluation. +- name: javascript.options.native_regexp + type: bool + value: true + mirror: always # LoadStartupJSPrefs + do_not_use_directly: true + +# Jit Hints Cache - An in-process cache for the +# content process to accelerate repeated baseline +# compilations +- name: javascript.options.jithints + type: bool + value: true + mirror: always # LoadStartupJSPrefs + do_not_use_directly: true + +# "Warm-up" thresholds at which we attempt to compile a script/function with +# the next JIT tier. +# +# NOTE: These must match JitOptions defaults. +- name: javascript.options.blinterp.threshold + type: int32_t + value: 10 + mirror: always # LoadStartupJSPrefs + do_not_use_directly: true + +- name: javascript.options.baselinejit.threshold + type: int32_t + value: 100 + mirror: always # LoadStartupJSPrefs + do_not_use_directly: true + +- name: javascript.options.ion.threshold + type: int32_t + value: 1500 + mirror: always # LoadStartupJSPrefs + do_not_use_directly: true + +# Enable off-main-thread Warp compilation. +- name: javascript.options.ion.offthread_compilation + type: bool + value: true + mirror: always # LoadStartupJSPrefs + do_not_use_directly: true + +#ifdef DEBUG + # Enable extra correctness checks in the JITs that are slow and only available + # in debug builds. +- name: javascript.options.jit.full_debug_checks + type: bool + value: false + mirror: always # LoadStartupJSPrefs + do_not_use_directly: true +#endif + +# Heuristic threshold for Warp/Ion to decide that too many bailouts are +# happening and an IonScript should be discarded. +# +# NOTE: This must match JitOptions defaults. +- name: javascript.options.ion.frequent_bailout_threshold + type: int32_t + value: 10 + mirror: always # LoadStartupJSPrefs + do_not_use_directly: true + +# A threshold for Warp to decide whether a function can be inlined. +# If the size of a function is smaller than this threshold, then it +# may be inlined. +# +# NOTE: These must match JitOptions defaults. +- name: javascript.options.inlining_bytecode_max_length + type: uint32_t + value: 130 + mirror: always + do_not_use_directly: true + +# Whether the megamorphic property lookup cache is enabled. +# +# NOTE: This must match JitOptions defaults. +- name: javascript.options.watchtower.megamorphic + type: bool + value: true + mirror: always # LoadStartupJSPrefs + do_not_use_directly: true + +- name: javascript.options.compact_on_user_inactive + type: bool + value: true + mirror: always + +# The default amount of time to wait from the user being idle to starting a +# shrinking GC. Measured in milliseconds. +- name: javascript.options.compact_on_user_inactive_delay + type: uint32_t +#ifdef NIGHTLY_BUILD + value: 15000 +#else + value: 300000 +#endif + mirror: always + +# Use better error message when accessing property of null or undefined. +- name: javascript.options.property_error_message_fix + type: bool + value: @IS_NIGHTLY_OR_DEV_EDITION@ + mirror: always + +# Support for weak references in JavaScript (WeakRef and FinalizationRegistry). +- name: javascript.options.weakrefs + type: bool + value: true + mirror: always + +# Whether to expose the FinalizationRegistry.prototype.cleanupSome method. +- name: javascript.options.experimental.weakrefs.expose_cleanupSome + type: bool + value: false + mirror: always + +# ShadowRealms: https://github.com/tc39/proposal-shadowrealm +- name: javascript.options.experimental.shadow_realms + # Atomic, as we assert the preference, and that assertion may happen + # in a worker. + type: RelaxedAtomicBool + value: false + mirror: always + +#ifdef NIGHTLY_BUILD + # Experimental support for Iterator Helpers in JavaScript. +- name: javascript.options.experimental.iterator_helpers + type: bool + value: false + mirror: always + + # Experimental support for Array Grouping in JavaScript. +- name: javascript.options.experimental.array_grouping + type: bool + value: false + mirror: always + + # Experimental support for String.prototype.{is,to}WellFormed in JavaScript. +- name: javascript.options.experimental.well_formed_unicode_strings + type: bool + value: false + mirror: always +#endif // NIGHTLY_BUILD + +#ifdef NIGHTLY_BUILD + # Experimental support for Import Assertions in JavaScript. +- name: javascript.options.experimental.import_assertions + type: bool + value: false + mirror: always +#endif // NIGHTLY_BUILD + + # Experimental support for change-array-by-copy methods +- name: javascript.options.experimental.enable_change_array_by_copy + type: bool + value: true + mirror: always + +# Support Array.fromAsync +- name: javascript.options.experimental.enable_array_from_async + type: bool + value: true + mirror: always + +#if defined(ENABLE_NEW_SET_METHODS) + # Experimental support for New Set methods +- name: javascript.options.experimental.enable_new_set_methods + type: bool + value: false + mirror: always +#endif + +- name: javascript.options.wasm_caching + type: bool + value: true + mirror: always + +# The amount of time we wait between a request to GC (due to leaving a page) and doing the actual GC, in ms. +- name: javascript.options.gc_delay + type: uint32_t + value: 4000 + mirror: always + +# The amount of time we wait from the first request to GC to actually doing the first GC, in ms. +- name: javascript.options.gc_delay.first + type: uint32_t + value: 10000 + mirror: always + +# After doing a zonal GC, wait this much time (in ms) and then do a full GC, +# unless one is already pending. +- name: javascript.options.gc_delay.full + type: uint32_t + value: 60000 + mirror: always + +# Maximum amount of time that should elapse between incremental GC slices, in ms. +- name: javascript.options.gc_delay.interslice + type: uint32_t + value: 100 + mirror: always + +# nsJSEnvironmentObserver observes the memory-pressure notifications and +# forces a garbage collection and cycle collection when it happens, if the +# appropriate pref is set. +- name: javascript.options.gc_on_memory_pressure + type: bool + # Disable the JS engine's GC on memory pressure, since we do one in the + # mobile browser (bug 669346). + # XXX: this value possibly should be changed, or the pref removed entirely. + # See bug 1450787. + value: @IS_NOT_ANDROID@ + mirror: always + +# We allow at most MIN(max, MAX(NUM_CPUS / cpu_divisor, 1)) concurrent GCs +# between processes +- name: javascript.options.concurrent_multiprocess_gcs.cpu_divisor + type: RelaxedAtomicUint32 + value: 4 + mirror: always + +# See 'cpu_divisor' above, 0 means UINT_32_MAX. +- name: javascript.options.concurrent_multiprocess_gcs.max + type: RelaxedAtomicUint32 + value: 0 + mirror: always + +- name: javascript.options.mem.log + type: bool + value: false + mirror: always + +- name: javascript.options.mem.notify + type: bool + value: false + mirror: always + +# Whether the Parent process allocates and shares memory with all content +# processes. This is mirrored once, as the parent process will do this +# allocation early on. +- name: javascript.options.self_hosted.use_shared_memory + type: bool + value: true + mirror: always # LoadStartupJSPrefs + do_not_use_directly: true + +- name: javascript.options.main_thread_stack_quota_cap + type: uint32_t +#if defined(MOZ_ASAN) + value: 6 * 1024 * 1024 +#else + value: 2 * 1024 * 1024 +#endif + mirror: always + +- name: javascript.options.wasm_optimizingjit + type: bool + value: true + mirror: always + +#if defined(ENABLE_WASM_RELAXED_SIMD) +- name: javascript.options.wasm_relaxed_simd + type: bool + value: @IS_NIGHTLY_BUILD@ + mirror: always +#endif // defined(ENABLE_WASM_RELAXED_SIMD) + +#if defined(ENABLE_WASM_MOZ_INTGEMM) +- name: javascript.options.wasm_moz_intgemm + type: bool + value: @IS_NIGHTLY_BUILD@ + mirror: always +#endif // defined(ENABLE_WASM_MOZ_INTGEMM) + +#if defined(ENABLE_WASM_EXTENDED_CONST) +- name: javascript.options.wasm_extended_const + type: bool + value: true + mirror: always +#endif // defined(ENABLE_WASM_EXTENDED_CONST) + +- name: javascript.options.wasm_exceptions + type: bool + value: true + mirror: always + +#if defined(ENABLE_WASM_FUNCTION_REFERENCES) +- name: javascript.options.wasm_function_references + type: bool + value: false + mirror: always +#endif // defined(ENABLE_WASM_FUNCTION_REFERENCES) + +#if defined(ENABLE_WASM_GC) +- name: javascript.options.wasm_gc + type: bool + value: false + mirror: always +#endif // defined(ENABLE_WASM_GC) + +#if defined(ENABLE_WASM_MEMORY_CONTROL) +- name: javascript.options.wasm_memory_control + type: bool + value: false + mirror: always +#endif // defined(ENABLE_WASM_MEMORY_CONTROL) + +#if defined(ENABLE_WASM_SIMD) +#if defined(JS_CODEGEN_X64) || defined(JS_CODEGEN_X86) + # Enables AVX instructions support on X86/X64 platforms. + # Changing these prefs requires a restart. +- name: javascript.options.wasm_simd_avx + type: bool + value: true + mirror: always +#endif +#endif + +#if defined(ENABLE_WASM_MEMORY64) +- name: javascript.options.wasm_memory64 + type: bool + value: @IS_NIGHTLY_BUILD@ + mirror: always +#endif // defined(ENABLE_WASM_MEMORY64) + +# Support for pretenuring allocations based on their allocation site. +- name: javascript.options.site_based_pretenuring + type: bool + value: true + mirror: always # LoadStartupJSPrefs + do_not_use_directly: true + +#if !defined(JS_CODEGEN_MIPS32) && !defined(JS_CODEGEN_MIPS64) && !defined(JS_CODEGEN_LOONG64) + # Spectre security vulnerability mitigations for the JS JITs. + # + # NOTE: The MIPS and LoongArch backends do not support these mitigations (and generally + # do not need them). In that case, leave the pref unlisted with its + # default value of false. +- name: javascript.options.spectre.index_masking + type: bool + value: true + mirror: always # LoadStartupJSPrefs + do_not_use_directly: true + +- name: javascript.options.spectre.object_mitigations + type: bool + value: true + mirror: always # LoadStartupJSPrefs + do_not_use_directly: true + +- name: javascript.options.spectre.string_mitigations + type: bool + value: true + mirror: always # LoadStartupJSPrefs + do_not_use_directly: true + +- name: javascript.options.spectre.value_masking + type: bool + value: true + mirror: always # LoadStartupJSPrefs + do_not_use_directly: true + +- name: javascript.options.spectre.jit_to_cxx_calls + type: bool + value: true + mirror: always # LoadStartupJSPrefs + do_not_use_directly: true +#endif // !defined(JS_CODEGEN_MIPSXX) && !defined(JS_CODEGEN_LOONG64) + +# Separate pref to override the values of the Spectre-related prefs above for +# isolated web content processes, where we don't need these mitigations. +- name: javascript.options.spectre.disable_for_isolated_content + type: bool + value: false + mirror: always + +# Whether to use the XPCOM thread pool for JS helper tasks. +- name: javascript.options.external_thread_pool + type: bool + value: true + mirror: always + do_not_use_directly: true + +# Whether to use fdlibm for Math.sin, Math.cos, and Math.tan. When +# privacy.resistFingerprinting is true, this pref is ignored and fdlibm is used +# anyway. +- name: javascript.options.use_fdlibm_for_sin_cos_tan + type: bool + value: false + mirror: always + +#--------------------------------------------------------------------------- +# Prefs starting with "layers." +#--------------------------------------------------------------------------- + +# Whether to disable acceleration for all widgets. +- name: layers.acceleration.disabled + type: bool + value: false + mirror: once + do_not_use_directly: true +# Instead, use gfxConfig::IsEnabled(Feature::HW_COMPOSITING). + +# Whether to force acceleration on, ignoring blacklists. + +# bug 838603 -- on Android, accidentally blacklisting OpenGL layers +# means a startup crash for everyone. +# Temporarily force-enable GL compositing. This is default-disabled +# deep within the bowels of the widgetry system. Remove me when GL +# compositing isn't default disabled in widget/android. +- name: layers.acceleration.force-enabled + type: bool + value: @IS_ANDROID@ + mirror: once + do_not_use_directly: true + +# Whether we allow AMD switchable graphics. +- name: layers.amd-switchable-gfx.enabled + type: bool + value: true + mirror: once + +# Whether to use async panning and zooming. +- name: layers.async-pan-zoom.enabled + type: bool + value: true + mirror: once + do_not_use_directly: true + +- name: layers.child-process-shutdown + type: RelaxedAtomicBool + value: true + mirror: always + +- name: layers.d3d11.force-warp + type: bool + value: false + mirror: once + +- name: layers.d3d11.enable-blacklist + type: bool + value: true + mirror: once + +# Enable DEAA antialiasing for transformed layers in the compositor. +- name: layers.deaa.enabled + type: RelaxedAtomicBool +#if defined(MOZ_WIDGET_ANDROID) + value: false +#else + value: true +#endif + mirror: always + +# Force all possible layers to be always active layers. +- name: layers.force-active + type: bool + value: false + mirror: always + +- name: layers.force-shmem-tiles + type: bool + value: false + mirror: once + +- name: layers.draw-mask-debug + type: RelaxedAtomicBool + value: false + mirror: always + +- name: layers.force-synchronous-resize + type: RelaxedAtomicBool +#ifdef MOZ_WAYLAND + # We want to control it by nsWindow::SynchronouslyRepaintOnResize() on Linux/Wayland. + value: false +#else + value: true +#endif + mirror: always + +- name: layers.gpu-process.allow-software + type: bool +#if defined(XP_WIN) + value: true +#else + value: false +#endif + mirror: once + +- name: layers.gpu-process.enabled + type: bool +#if defined(XP_WIN) || defined(MOZ_WIDGET_ANDROID) + value: true +#else + value: false +#endif + mirror: once + +- name: layers.gpu-process.force-enabled + type: bool + value: false + mirror: once + +- name: layers.gpu-process.ipc_reply_timeout_ms + type: int32_t + value: 10000 + mirror: once + +# How many unstable GPU process restarts we allow for a given configuration. +- name: layers.gpu-process.max_restarts + type: RelaxedAtomicInt32 +#if defined(XP_WIN) || defined(MOZ_WIDGET_GTK) || defined(MOZ_WIDGET_ANDROID) + #if defined(NIGHTLY_BUILD) + value: 6 + #else + value: 3 + #endif +#else + value: 1 +#endif + mirror: always + +# How many frames we must render before declaring the GPU process stable, and +# allow restarts without it counting against our maximum restarts. +- name: layers.gpu-process.stable.frame-threshold + type: RelaxedAtomicUint32 + value: 10 + mirror: always + +# How many milliseconds the GPU process must have lived before we accept that +# it is stable, and allow restarts without it counting against our maximum +# restarts. +- name: layers.gpu-process.stable.min-uptime-ms + type: RelaxedAtomicInt32 + value: 4 * 60000 + mirror: always + +# Note: This pref will only be used if it is less than layers.gpu-process.max_restarts. +- name: layers.gpu-process.max_restarts_with_decoder + type: RelaxedAtomicInt32 + value: 0 + mirror: always + +- name: layers.gpu-process.startup_timeout_ms + type: int32_t + value: 5000 + mirror: once + +- name: layers.gpu-process.crash-also-crashes-browser + type: bool + value: false + mirror: always + +# Whether to animate simple opacity and transforms on the compositor. +- name: layers.offmainthreadcomposition.async-animations + type: bool + value: true + mirror: always + +# Whether to log information about off main thread animations to stderr. +- name: layers.offmainthreadcomposition.log-animations + type: bool + value: false + mirror: always + +- name: layers.offmainthreadcomposition.force-disabled + type: bool + value: false + mirror: once + +# Compositor target frame rate. NOTE: If vsync is enabled the compositor +# frame rate will still be capped. +# -1 -> default (match layout.frame_rate or 60 FPS) +# 0 -> full-tilt mode: Recomposite even if not transaction occured. +- name: layers.offmainthreadcomposition.frame-rate + type: RelaxedAtomicInt32 + value: -1 + mirror: always + +#ifdef XP_WIN +- name: layers.prefer-opengl + type: bool + value: false + mirror: once +#endif + +# Copy-on-write canvas. +- name: layers.shared-buffer-provider.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +- name: layers.recycle-allocator-rdd + type: bool + value: true + mirror: once + +- name: layers.iosurfaceimage.recycle-limit + type: RelaxedAtomicUint32 + value: 15 + mirror: always + +- name: layers.iosurfaceimage.use-nv12 + type: bool + value: true + mirror: once + +#--------------------------------------------------------------------------- +# Prefs starting with "layout." +#--------------------------------------------------------------------------- + +# Debug-only pref to force enable the AccessibleCaret. If you want to +# control AccessibleCaret by mouse, you'll need to set +# "layout.accessiblecaret.hide_carets_for_mouse_input" to false. +- name: layout.accessiblecaret.enabled + type: bool + value: false + mirror: always + +# Enable the accessible caret on platforms/devices +# that we detect have touch support. Note that this pref is an +# additional way to enable the accessible carets, rather than +# overriding the layout.accessiblecaret.enabled pref. +- name: layout.accessiblecaret.enabled_on_touch + type: bool + value: true + mirror: always + +# By default, carets become tilt only when they are overlapping. +- name: layout.accessiblecaret.always_tilt + type: bool + value: false + mirror: always + +# Show caret in cursor mode when long tapping on an empty content. This +# also changes the default update behavior in cursor mode, which is based +# on the emptiness of the content, into something more heuristic. See +# AccessibleCaretManager::UpdateCaretsForCursorMode() for the details. +- name: layout.accessiblecaret.caret_shown_when_long_tapping_on_empty_content + type: bool + value: false + mirror: always + +# 0 = by default, always hide carets for selection changes due to JS calls. +# 1 = update any visible carets for selection changes due to JS calls, +# but don't show carets if carets are hidden. +# 2 = always show carets for selection changes due to JS calls. +- name: layout.accessiblecaret.script_change_update_mode + type: int32_t + value: 0 + mirror: always + +# Allow one caret to be dragged across the other caret without any limitation. +# This matches the built-in convention for all desktop platforms. +- name: layout.accessiblecaret.allow_dragging_across_other_caret + type: bool + value: true + mirror: always + +# Optionally provide haptic feedback on long-press selection events. +- name: layout.accessiblecaret.hapticfeedback + type: bool + value: false + mirror: always + +# Smart phone-number selection on long-press is not enabled by default. +- name: layout.accessiblecaret.extend_selection_for_phone_number + type: bool + value: false + mirror: always + +# Keep the accessible carets hidden when the user is using mouse input (as +# opposed to touch/pen/etc.). +- name: layout.accessiblecaret.hide_carets_for_mouse_input + type: bool + value: true + mirror: always + +# CSS attributes (width, height, margin-left) of the AccessibleCaret in CSS +# pixels. +- name: layout.accessiblecaret.width + type: float + value: 34.0f + mirror: always + +- name: layout.accessiblecaret.height + type: float + value: 36.0f + mirror: always + +- name: layout.accessiblecaret.margin-left + type: float + value: -18.5f + mirror: always + +- name: layout.accessiblecaret.transition-duration + type: float + value: 250.0f + mirror: always + +# Simulate long tap events to select words. Mainly used in manual testing +# with mouse. +- name: layout.accessiblecaret.use_long_tap_injector + type: bool + value: false + mirror: always + +# To support magnify glass, whether we dispatch additional chrome event such as +# dragcaret. +- name: layout.accessiblecaret.magnifier.enabled + type: bool + value: @IS_ANDROID@ + mirror: always + +# One of several prefs affecting the maximum area to pre-render when animating +# a large element on the compositor. +# This pref enables transform (and transform like properties) animations on a +# large element run on the compositor with rendering partial area of the +# element on the main thread instead of rendering the whole area. Once the +# animation tried to composite out of the partial rendered area, the animation +# is rendered again with the latest visible partial area. +- name: layout.animation.prerender.partial + type: RelaxedAtomicBool + value: false + mirror: always + +# One of several prefs affecting the maximum area to pre-render when animating +# a large element on the compositor. +# This value is applied to both x and y axes and a perfect square contructed +# by the greater axis value which will be capped by the absolute limits is used +# for the partial pre-render area. +- name: layout.animation.prerender.viewport-ratio-limit + type: AtomicFloat + value: 1.125f + mirror: always + +# One of several prefs affecting the maximum area to pre-render when animating +# a large element on the compositor. +- name: layout.animation.prerender.absolute-limit-x + type: RelaxedAtomicUint32 + value: 4096 + mirror: always + +# One of several prefs affecting the maximum area to pre-render when animating +# a large element on the compositor. +- name: layout.animation.prerender.absolute-limit-y + type: RelaxedAtomicUint32 + value: 4096 + mirror: always + +# Test-only pref, if this is true, partial pre-rendered transform animations +# get stuck when it reaches to the pre-rendered boundaries and the pre-render +# region is never updated. +- name: layout.animation.prerender.partial.jank + type: RelaxedAtomicBool + value: false + mirror: always + +# Override DPI. A value of -1 means use the maximum of 96 and the system DPI. +# A value of 0 means use the system DPI. A positive value is used as the DPI. +# This sets the physical size of a device pixel and thus controls the +# interpretation of physical units such as "pt". +- name: layout.css.dpi + type: int32_t + value: -1 + mirror: always + +# Whether Container Queries are enabled +- name: layout.css.container-queries.enabled + type: RelaxedAtomicBool + value: true + mirror: always + rust: true + +# Whether Constructable Stylesheets are enabled in script. +- name: layout.css.constructable-stylesheets.enabled + type: bool + value: true + mirror: always + +# Whether trigonometric constants and functions are enabled in calc(). +- name: layout.css.trig.enabled + type: RelaxedAtomicBool + value: true + mirror: always + rust: true + +# Whether the round() function is enabled in calc(). +- name: layout.css.round.enabled + type: RelaxedAtomicBool + value: @IS_NIGHTLY_BUILD@ + mirror: always + rust: true + +# Whether the mod() / rem() functions are enabled in calc(). +- name: layout.css.mod-rem.enabled + type: RelaxedAtomicBool + value: @IS_NIGHTLY_BUILD@ + mirror: always + rust: true + +# Whether exponential functions are enabled in calc(). +- name: layout.css.exp.enabled + type: RelaxedAtomicBool + value: @IS_NIGHTLY_BUILD@ + mirror: always + rust: true + +# Whether infinity / nan constants are enabled in calc(). +- name: layout.css.nan-inf.enabled + type: RelaxedAtomicBool + value: true + mirror: always + rust: true + +# Whether CSS nesting is enabled. +- name: layout.css.nesting.enabled + type: RelaxedAtomicBool + value: @IS_NIGHTLY_BUILD@ + mirror: always + rust: true + +# Should we look for counter ancestor scopes first? +- name: layout.css.counter-ancestor-scope.enabled + type: bool + value: true + mirror: always + +# Make `zoom` a `transform` + `transform-origin` alias. +- name: layout.css.zoom-transform-hack.enabled + type: RelaxedAtomicBool + value: false + mirror: always + rust: true + +# Whether the `-moz-control-character-visibility` property is exposed to +# content. +# +# Only for testing purposes. +- name: layout.css.moz-control-character-visibility.enabled + type: RelaxedAtomicBool + value: false + mirror: always + rust: true + +# Whether the `accent-color` css property is enabled. +- name: layout.css.accent-color.enabled + type: RelaxedAtomicBool + value: true + mirror: always + rust: true + +# Whether the `color-scheme` css property and meta tags are enabled. +- name: layout.css.color-scheme.enabled + type: RelaxedAtomicBool + value: true + mirror: always + rust: true + +# This pref controls whether the `prefers-color-scheme` value of iframes images +# reacts to the embedder `color-scheme` in content. +- name: layout.css.iframe-embedder-prefers-color-scheme.content.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# The minimum contrast ratio between the accent color foreground and background +# colors. +# +# We don't use this for text, so we need a contrast of at least AA (for user +# interface components and graphical objects), which per WCAG is 3:1 +- name: layout.css.accent-color.min-contrast-ratio + type: AtomicFloat + value: 3.0 + mirror: always + +# The target contrast ratio between the accent color foreground and background +# colors when darkening. +# +# We aim a bit further than the minimum contrast ratio, which seems to provide +# nice results in practice. +- name: layout.css.accent-color.darkening-target-contrast-ratio + type: AtomicFloat + value: 6.0 + mirror: always + +# Whether the `animation-composition` in css-animations-2 is enabled. +- name: layout.css.animation-composition.enabled + type: bool + value: true + mirror: always + +# Is the codepath for using cached scrollbar styles enabled? +- name: layout.css.cached-scrollbar-styles.enabled + type: bool + value: true + mirror: always + +# Whether we should return an empty style on invalid pseudo-elements starting +# with a colon. +# +# Old behavior is returning an empty style if the string starts with a double +# colon, and return the regular style otherwise. +- name: layout.css.computed-style.new-invalid-pseudo-element-behavior + type: bool + value: true + mirror: always + +# Whether computed local-fragment-only image urls serialize using the same +# rules as filter/mask/etc (not resolving the URL for local refs). +# +# See https://github.com/w3c/csswg-drafts/issues/3195 +- name: layout.css.computed-style.dont-resolve-image-local-refs + type: RelaxedAtomicBool + value: true + mirror: always + rust: true + +# Whether we should expose all shorthands in getComputedStyle(). +- name: layout.css.computed-style.shorthands + type: bool + value: true + mirror: always + +# Whether we should avoid exposing styles of elements outside the flat tree in getComputedStyle(). +- name: layout.css.computed-style.styles-outside-flat-tree + type: bool + value: false + mirror: always + +# Are implicit tracks in computed grid templates serialized? +- name: layout.css.serialize-grid-implicit-tracks + type: RelaxedAtomicBool + value: true + mirror: always + +# Whether the system-ui generic family is enabled. +- name: layout.css.system-ui.enabled + type: RelaxedAtomicBool + value: true + mirror: always + rust: true + +# Whether the rule hash is applied to attribute names too, not +# only classes / id / namespaces / etc. +- name: layout.css.bucket-attribute-names.enabled + type: RelaxedAtomicBool + value: true + mirror: always + rust: true + +# Set the number of device pixels per CSS pixel. A value <= 0 means choose +# automatically based on user settings for the platform (e.g., "UI scale factor" +# on Mac). If browser.display.os-zoom-behavior == 1, then a positive value +# will be multiplied by the text scale factor; otherwise a positive value is +# used as-is. This controls the size of a CSS "px" at 100% full-zoom. +# The size of system fonts is also changed in proportion with the change in +# "px" sizes. Use "ui.textScaleFactor" instead to only change the size of "px". +# This is only used for windows on the screen, not for printing. +- name: layout.css.devPixelsPerPx + type: AtomicFloat + value: -1.0f + mirror: always + +# Is support for CSS backdrop-filter enabled? +- name: layout.css.backdrop-filter.enabled + type: bool + value: true + mirror: always + +# Do we override the blocklist for CSS backdrop-filter? +- name: layout.css.backdrop-filter.force-enabled + type: bool + value: false + mirror: always + +# Should stray control characters be rendered visibly? +- name: layout.css.control-characters.visible + type: RelaxedAtomicBool + value: @IS_NOT_RELEASE_OR_BETA@ + mirror: always + rust: true + +# Whether the `content-visibility` CSS property is enabled +- name: layout.css.content-visibility.enabled + type: RelaxedAtomicBool + value: @IS_NIGHTLY_BUILD@ + mirror: always + rust: true + +# Whether the `contain-intrinsic-size` CSS property is enabled +- name: layout.css.contain-intrinsic-size.enabled + type: RelaxedAtomicBool + value: true + mirror: always + rust: true + +# Is support for GeometryUtils.convert*FromNode enabled? +- name: layout.css.convertFromNode.enabled + type: bool + value: @IS_NOT_RELEASE_OR_BETA@ + mirror: always + +- name: layout.css.cross-fade.enabled + type: RelaxedAtomicBool + value: false + mirror: always + rust: true + +- name: layout.css.linear-easing-function.enabled + type: RelaxedAtomicBool + value: true + mirror: always + rust: true + +# Is support for color-mix on content enabled? +- name: layout.css.color-mix.enabled + type: RelaxedAtomicBool + value: true + mirror: always + rust: true + +# Is support for color-mix with non-SRGB color spaces on content enabled? +- name: layout.css.color-mix.color-spaces.enabled + type: RelaxedAtomicBool + value: true + mirror: always + rust: true + +# Is support for fit-content() enabled? +- name: layout.css.fit-content-function.enabled + type: RelaxedAtomicBool + value: false + mirror: always + rust: true + +# Whether to use tight bounds for floating ::first-letter (legacy Gecko behavior) +# or loose bounds based on overall font metrics (WebKit/Blink-like behavior)? +# Values mean: +# 1 legacy Gecko behavior (tight bounds) +# 0 loose typographic bounds (similar to webkit/blink) +# -1 auto behavior: use loose bounds if reduced line-height (<1em) or negative +# block-start margin is present; otherwise use tight bounds. +- name: layout.css.floating-first-letter.tight-glyph-bounds + type: int32_t +#ifdef NIGHTLY_BUILD + value: -1 +#else + value: 1 +#endif + mirror: always + +# Is support for the font-display @font-face descriptor enabled? +- name: layout.css.font-display.enabled + type: RelaxedAtomicBool + value: true + mirror: always + rust: true + +# Is support for document.fonts enabled? +- name: layout.css.font-loading-api.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# Is support for workerGlobalScope.fonts enabled? +- name: layout.css.font-loading-api.workers.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# Is support for the @font-face metrics override descriptors enabled? +- name: layout.css.font-metrics-overrides.enabled + type: RelaxedAtomicBool + value: true + mirror: always + rust: true + +# Is support for the @font-palette-values rule and font-palette property enabled? +- name: layout.css.font-palette.enabled + type: RelaxedAtomicBool + value: true + mirror: always + rust: true + +# Is support for variation fonts enabled? +- name: layout.css.font-variations.enabled + type: RelaxedAtomicBool + value: true + mirror: always + rust: true + +# Is support for the size-adjust @font-face descriptor enabled? +- name: layout.css.size-adjust.enabled + type: RelaxedAtomicBool + value: true + mirror: always + rust: true + +# Is the optional adjustment-basis value for font-size-adjust enabled? +- name: layout.css.font-size-adjust.basis.enabled + type: RelaxedAtomicBool + value: true + mirror: always + rust: true + +# Is support for the tech() function in the @font-face src descriptor enabled? +- name: layout.css.font-tech.enabled + type: RelaxedAtomicBool + value: true + mirror: always + rust: true + +# Is support for font-variant-emoji enabled? +- name: layout.css.font-variant-emoji.enabled + type: RelaxedAtomicBool + value: @IS_NIGHTLY_BUILD@ + mirror: always + rust: true + +# Visibility level of font families available to CSS font-matching: +# 1 - only base system fonts +# 2 - also fonts from optional language packs +# 3 - also user-installed fonts +- name: layout.css.font-visibility.standard + type: int32_t + value: 3 + mirror: always + +# font-visibility setting when Tracking Protection is enabled +- name: layout.css.font-visibility.trackingprotection + type: int32_t + value: 3 + mirror: always + +# font-visibility setting when Resist Fingerprinting is enabled +- name: layout.css.font-visibility.resistFingerprinting + type: int32_t + value: 1 + mirror: always + +# Max font-visibility setting for Private Browsing contexts +# (The actual value used in a private-browsing context will be the lesser of +# the appropriate standard/trackingprotection/RFP value from above, and the +# private-browsing level specified by this pref.) +- name: layout.css.font-visibility.private + type: int32_t +#if defined(NIGHTLY_BUILD) + value: 2 +#else + value: 3 +#endif + mirror: always + +# Is support for GeometryUtils.getBoxQuads enabled? +- name: layout.css.getBoxQuads.enabled + type: bool + value: @IS_NOT_RELEASE_OR_BETA@ + mirror: always + +# Is support for caching an grid item's block axis measurement enabled? +- name: layout.css.grid-item-baxis-measurement.enabled + type: bool + value: true + mirror: always + +# Is support for CSS masonry layout enabled? +- name: layout.css.grid-template-masonry-value.enabled + type: RelaxedAtomicBool + value: @IS_NIGHTLY_BUILD@ + mirror: always + rust: true + +# Is support for :nth-child(An+B of S) and :nth-last-child(An+B of S) enabled? +# Before enabling everywhere, make sure blockers of bug 1808229 are fixed. +- name: layout.css.nth-child-of.enabled + type: RelaxedAtomicBool + value: true + mirror: always + rust: true + +# Is support for :has() enabled? +- name: layout.css.has-selector.enabled + type: RelaxedAtomicBool + value: false + mirror: always + rust: true + +# Is support for CSS hyphenate-character enabled? +- name: layout.css.hyphenate-character.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# Is support for CSS individual transform enabled? +- name: layout.css.individual-transform.enabled + type: bool + value: true + mirror: always + +# Is support for CSS initial-letter property enabled? +- name: layout.css.initial-letter.enabled + type: bool + value: false + mirror: always + +# Pref to control whether line-height: -moz-block-height is exposed to content. +- name: layout.css.line-height-moz-block-height.content.enabled + type: RelaxedAtomicBool + value: false + mirror: always + rust: true + +# Is support for motion-path enabled? +- name: layout.css.motion-path.enabled + type: bool + value: true + mirror: always + +# Is support for motion-path ray() enabled? +- name: layout.css.motion-path-ray.enabled + type: RelaxedAtomicBool + value: @IS_NIGHTLY_BUILD@ + mirror: always + rust: true + +# Is support for motion-path offset-position enabled? +- name: layout.css.motion-path-offset-position.enabled + type: RelaxedAtomicBool + value: @IS_NIGHTLY_BUILD@ + mirror: always + rust: true + +# Pref to control whether the ::marker property restrictions defined in [1] +# apply. +# +# [1]: https://drafts.csswg.org/css-pseudo-4/#selectordef-marker +- name: layout.css.marker.restricted + type: RelaxedAtomicBool + value: true + mirror: always + rust: true + +# Is support for math-style enabled? +- name: layout.css.math-style.enabled + type: RelaxedAtomicBool + value: @IS_NIGHTLY_BUILD@ + mirror: always + rust: true + +# Is support for math-depth enabled? +# This must not be enabled until implementation is complete (see bug 1667090). +- name: layout.css.math-depth.enabled + type: RelaxedAtomicBool + value: false + mirror: always + rust: true + +# Pref to control whether @-moz-document rules are enabled in content pages. +- name: layout.css.moz-document.content.enabled + type: RelaxedAtomicBool + value: false + mirror: always + rust: true + +# Is -moz-osx-font-smoothing enabled? (Only supported in OSX builds) +- name: layout.css.osx-font-smoothing.enabled + type: bool +#if defined(XP_MACOSX) + value: true +#else + value: false +#endif + mirror: always + +# Is support for CSS overflow-clip-box enabled for non-UA sheets? +- name: layout.css.overflow-clip-box.enabled + type: bool + value: false + mirror: always + +# Is support for CSS overflow: -moz-hidden-unscrollable enabled +- name: layout.css.overflow-moz-hidden-unscrollable.enabled + type: RelaxedAtomicBool + value: @IS_NOT_NIGHTLY_BUILD@ + mirror: always + rust: true + +# Is support for CSS overflow: overlay enabled +- name: layout.css.overflow-overlay.enabled + type: RelaxedAtomicBool + value: true + mirror: always + rust: true + +# Is support for overscroll-behavior enabled? +- name: layout.css.overscroll-behavior.enabled + type: bool + value: true + mirror: always + +- name: layout.css.overflow-logical.enabled + type: bool + value: true + mirror: always + +# Enables support for the page-orientation property inside of CSS @page rules. +- name: layout.css.page-orientation.enabled + type: RelaxedAtomicBool + value: @IS_NIGHTLY_BUILD@ + mirror: always + rust: true + +# Enables support for the size property inside of CSS @page rules. +- name: layout.css.page-size.enabled + type: RelaxedAtomicBool + value: true + mirror: always + rust: true + +# Enables support for different CSS page sizes on each page when printing. +- name: layout.css.allow-mixed-page-sizes + type: RelaxedAtomicBool + value: @IS_EARLY_BETA_OR_EARLIER@ + mirror: always + +# Whether Properties and Values is enabled +- name: layout.css.properties-and-values.enabled + type: RelaxedAtomicBool + value: false + mirror: always + rust: true + +# Dictates whether or not the prefers contrast media query will be +# usable. +# true: prefers-contrast will toggle based on OS and browser settings. +# false: prefers-contrast will only parse and toggle in the browser +# chrome and ua. +- name: layout.css.prefers-contrast.enabled + type: RelaxedAtomicBool + value: true + mirror: always + rust: true + +# An override for prefers-color-scheme for content documents. +# 0: Dark +# 1: Light +# 2: Auto (system color scheme unless overridden by browser theme) +- name: layout.css.prefers-color-scheme.content-override + type: RelaxedAtomicInt32 + value: 2 + mirror: always + +# Dictates whether or not the forced-colors media query is enabled. +- name: layout.css.forced-colors.enabled + type: RelaxedAtomicBool + value: true + mirror: always + rust: true + +# Dictates whether or not the prefers-reduced-transparency media query is enabled. +- name: layout.css.prefers-reduced-transparency.enabled + type: RelaxedAtomicBool + value: false + mirror: always + rust: true + +# Dictates whether or not the inverted-colors media query is enabled. +- name: layout.css.inverted-colors.enabled + type: RelaxedAtomicBool + value: false + mirror: always + rust: true + +# Is support for forced-color-adjust properties enabled? +- name: layout.css.forced-color-adjust.enabled + type: RelaxedAtomicBool + value: true + mirror: always + rust: true + +# Is support for -moz-prefixed animation properties enabled? +- name: layout.css.prefixes.animations + type: bool + value: true + mirror: always + +# Is support for -moz-border-image enabled? +- name: layout.css.prefixes.border-image + type: bool + value: true + mirror: always + +# Is support for -moz-box-sizing enabled? +- name: layout.css.prefixes.box-sizing + type: bool + value: true + mirror: always + +# Is support for -moz-prefixed font feature properties enabled? +- name: layout.css.prefixes.font-features + type: bool + value: true + mirror: always + +# Is support for -moz-prefixed transform properties enabled? +- name: layout.css.prefixes.transforms + type: bool + value: true + mirror: always + +# Is support for -moz-prefixed transition properties enabled? +- name: layout.css.prefixes.transitions + type: bool + value: true + mirror: always + +# Is CSS error reporting enabled? +- name: layout.css.report_errors + type: bool + value: true + mirror: always + +# Are inter-character ruby annotations enabled? +- name: layout.css.ruby.intercharacter.enabled + type: bool + value: false + mirror: always + +- name: layout.css.scroll-behavior.damping-ratio + type: AtomicFloat + value: 1.0f + mirror: always + +# Tuning of the smooth scroll motion used by CSSOM-View scroll-behavior. +# Spring-constant controls the strength of the simulated MSD +# (Mass-Spring-Damper). +- name: layout.css.scroll-behavior.spring-constant + type: AtomicFloat + value: 250.0f + mirror: always + +# Whether the scroll-driven animations generated by CSS is enabled. This +# also include animation-timelime property. +- name: layout.css.scroll-driven-animations.enabled + type: RelaxedAtomicBool + value: false + mirror: always + rust: true + +# When selecting the snap point for CSS scroll snapping, the velocity of the +# scroll frame is clamped to this speed, in CSS pixels / s. +- name: layout.css.scroll-snap.prediction-max-velocity + type: RelaxedAtomicInt32 + value: 2000 + mirror: always + +# When selecting the snap point for CSS scroll snapping, the velocity of the +# scroll frame is integrated over this duration, in seconds. The snap point +# best suited for this position is selected, enabling the user to perform fling +# gestures. +- name: layout.css.scroll-snap.prediction-sensitivity + type: AtomicFloat + value: 0.750f + mirror: always + +# Set the threshold distance in CSS pixels below which scrolling will snap to +# an edge, when scroll snapping is set to "proximity". +- name: layout.css.scroll-snap.proximity-threshold + type: RelaxedAtomicInt32 + value: 200 + mirror: always + +# Is steps(jump-*) supported in easing functions? +- name: layout.css.step-position-jump.enabled + type: RelaxedAtomicBool + value: true + mirror: always + rust: true + +# Stylo thread-pool size. +# Negative means auto, 0 disables the thread-pool (main-thread styling), other +# numbers override as specified. +# Note that 1 still creates a thread-pool of one thread! +- name: layout.css.stylo-threads + type: int32_t + value: -1 + mirror: once + rust: true + +# Stylo work unit size. This is the amount of nodes we'll process in a single +# unit of work of the thread-pool. +# +# Larger values will increase style sharing cache hits and general DOM locality +# at the expense of decreased opportunities for parallelism. There are some +# measurements in bug 1385982 comments 11, 12, 13 that investigate some +# slightly different values for the work unit size. +# +# If the size is significantly increased, make sure to adjust the condition for +# kicking off a new work unit (stylo-parallelism-threshold), because otherwise +# we're likely to end up doing too much work serially. +- name: layout.css.stylo-work-unit-size + type: RelaxedAtomicUint32 + value: 16 + mirror: always + rust: true + +# The amount of nodes that kick off the initial parallel traversal. See above +# for tweaking. A value of 0 causes the traversal to effectively always be +# serial. +- name: layout.css.stylo-parallelism-threshold + type: RelaxedAtomicUint32 + value: 32 + mirror: always + rust: true + +# Are counters for implemented CSS properties enabled? +- name: layout.css.use-counters.enabled + type: bool + value: true + mirror: always + +# Are counters for unimplemented CSS properties enabled? +- name: layout.css.use-counters-unimplemented.enabled + type: RelaxedAtomicBool + value: true + mirror: always + rust: true + +# Should the :visited selector ever match (otherwise :link matches instead)? +- name: layout.css.visited_links_enabled + type: bool + value: true + mirror: always + +# Enable experimental enhanced color CSS color spaces. (lab(), lch(), oklab(), oklch(), color()) +- name: layout.css.more_color_4.enabled + type: RelaxedAtomicBool + value: true + mirror: always + rust: true + +# The margin used for detecting relevancy for `content-visibility: auto`. +- name: layout.css.content-visibility-relevant-content-margin + type: float + value: 50 # 50% + mirror: always + +# Whether the "modern" uppercase mapping of ß to ẞ (rather than SS) is used. +- name: layout.css.text-transform.uppercase-eszett.enabled + type: bool + value: false + mirror: always + +# Whether to block large cursors intersecting UI. +- name: layout.cursor.block.enabled + type: bool + value: true + mirror: always + +# The maximum width or height of the cursor we should allow when intersecting +# the UI, in CSS pixels. +- name: layout.cursor.block.max-size + type: uint32_t + value: 32 + mirror: always + +- name: layout.display-list.build-twice + type: RelaxedAtomicBool + value: false + mirror: always + +# Toggle retaining display lists between paints. +- name: layout.display-list.retain + type: RelaxedAtomicBool + value: true + mirror: always + +# Toggle retaining display lists between paints. +- name: layout.display-list.retain.chrome + type: RelaxedAtomicBool + value: true + mirror: always + +- name: layout.display-list.retain.sc + type: RelaxedAtomicBool + value: false + mirror: always + +# Set the maximum number of modified frames allowed before doing a full +# display list rebuild. +- name: layout.display-list.rebuild-frame-limit + type: RelaxedAtomicUint32 + value: 500 + mirror: always + +# Pref to dump the display list to the log. Useful for debugging drawing. +- name: layout.display-list.dump + type: RelaxedAtomicBool + value: false + mirror: always + +# Pref to dump the display list to the log. Useful for debugging drawing. +- name: layout.display-list.dump-content + type: RelaxedAtomicBool + value: false + mirror: always + +# Pref to dump the display list to the log. Useful for debugging drawing. +- name: layout.display-list.dump-parent + type: RelaxedAtomicBool + value: false + mirror: always + +- name: layout.display-list.show-rebuild-area + type: RelaxedAtomicBool + value: false + mirror: always + +- name: layout.display-list.flatten-transform + type: RelaxedAtomicBool + value: true + mirror: always + +- name: layout.display-list.improve-fragmentation + type: RelaxedAtomicBool + value: true + mirror: always + +# Are dynamic reflow roots enabled? +- name: layout.dynamic-reflow-roots.enabled + type: bool + value: @IS_EARLY_BETA_OR_EARLIER@ + mirror: always + +# Enables the mechanism to optimize away flex item's final reflow. +# Warning: Disabling the pref will impact the performance. This is useful only for +# debugging flexbox issues. +- name: layout.flexbox.item-final-reflow-optimization.enabled + type: bool + value: true + mirror: always + +# Enables the <input type=search> custom layout frame with a clear icon. +# Still needs tests and a web-exposed way to remove that icon, see bug 1654288. +- name: layout.forms.input-type-search.enabled + type: bool + value: false + mirror: always + +# Enables the Reveal Password button inside a <input type=password>. +- name: layout.forms.reveal-password-button.enabled + type: bool + value: false + mirror: always + +# Enables the Reveal Password context-menu entry. +- name: layout.forms.reveal-password-context-menu.enabled + type: bool + value: true + mirror: always + +# Pref to control browser frame rate, in Hz. A value <= 0 means choose +# automatically based on knowledge of the platform (or 60Hz if no platform- +# specific information is available). +- name: layout.frame_rate + type: RelaxedAtomicInt32 + value: -1 + mirror: always + +# If it has been this many frame periods since a refresh, assume that painting +# is quiescent (will not happen again soon). +- name: layout.idle_period.required_quiescent_frames + type: uint32_t + value: 2 + mirror: always + +# The amount of time (milliseconds) needed between an idle period's +# end and the start of the next tick to avoid jank. +- name: layout.idle_period.time_limit + type: uint32_t + value: 1 + mirror: always + +# The minimum amount of time (milliseconds) required to be remaining +# in the current vsync interval for us to attempt an extra tick, or +# <0 to disable extra ticks entirely. +- name: layout.extra-tick.minimum-ms + type: int32_t + value: 4 + mirror: always + +# Whether to load the broken image icon eagerly. This is mostly needed for +# reftests, since the broken image icon doesn't block the load event and thus +# there's no easy way to guarantee it's loaded. +- name: layout.image.eager_broken_image_icon + type: bool + value: false + mirror: always + +# Enable/disable interruptible reflow, which allows reflows to stop +# before completion (and display the partial results) when user events +# are pending. +- name: layout.interruptible-reflow.enabled + type: bool + value: true + mirror: always + +- name: layout.min-active-layer-size + type: int32_t + value: 64 + mirror: always + +# On Android, don't synth mouse move events after scrolling, as they cause +# unexpected user-visible behaviour. Can remove this after bug 1633450 is +# satisfactorily resolved. +- name: layout.reflow.synthMouseMove + type: bool + value: @IS_NOT_ANDROID@ + mirror: always + +# This pref is to be set by test code only. +- name: layout.scrollbars.always-layerize-track + type: RelaxedAtomicBool + value: false + mirror: always + +# Whether anchor is kept selected. +- name: layout.selectanchor + type: bool + value: false + mirror: always + +# Controls caret style and word-delete during text selection. +# 0: Use platform default +# 1: Caret moves and blinks as when there is no selection; word +# delete deselects the selection and then deletes word. +# 2: Caret moves to selection edge and is not visible during selection; +# word delete deletes the selection (Mac and Linux default). +# 3: Caret moves and blinks as when there is no selection; word delete +# deletes the selection. +# Windows default is 1 for word delete behavior, the rest as for 2. +- name: layout.selection.caret_style + type: int32_t + value: 0 + mirror: always + +# If layout.show_previous_page is true then during loading of a new page we +# will draw the previous page if the new page has painting suppressed. +- name: layout.show_previous_page + type: bool + value: true + mirror: always + +# Pref to stop overlay scrollbars from fading out, for testing purposes. +- name: layout.testing.overlay-scrollbars.always-visible + type: bool + value: false + mirror: always + +# Throttled frame rate, in frames per second. +- name: layout.throttled_frame_rate + type: uint32_t + value: 1 + mirror: always + +# Whether we should throttle in-process iframes in the active tab. +- name: layout.throttle_in_process_iframes + type: bool + value: true + mirror: always + +# Activity granted to out-of-process iframes in the foreground tab, in milliseconds. +- name: layout.oopif_activity_grace_period_ms + type: uint32_t + value: 1000 + mirror: always + +- name: layout.lower_priority_refresh_driver_during_load + type: bool + value: true + mirror: always + +# If > 0, nsRefreshDriver will keep ticking this amount of milliseconds after +# top level page load. +- name: layout.keep_ticking_after_load_ms + type: uint32_t + value: 1000 + mirror: always + +# Pref to control enabling scroll anchoring. +- name: layout.css.scroll-anchoring.enabled + type: bool + value: true + mirror: always + +# Pref to control whether to suspend also RefreshDriver::Tick when the page +# itself is suspended because of some synchronous operation, like sync XHR. +- name: layout.skip_ticks_while_page_suspended + type: bool + value: true + mirror: always + +# Pref to control how many consecutive scroll-anchoring adjustments (since the +# most recent user scroll or timeout) we'll average, before we consider whether +# to automatically turn off scroll anchoring. When we hit this threshold, the +# actual decision to disable also depends on the +# min-average-adjustment-threshold pref, see below for more details. +# +# Zero disables the heuristic. +- name: layout.css.scroll-anchoring.max-consecutive-adjustments + type: uint32_t + value: 10 + mirror: always + +# Whether to reset counting the consecutive scroll-anchoring adjustments during +# running async scrolling by APZ. +- name: layout.css.scroll-anchoring.reset-heuristic-during-animation + type: bool + value: false + mirror: always + +# The time after which we reset the max-consecutive-adjustments period, in +# milliseconds. +# +# This prevents sporadic back-and-forth scroll anchoring to trigger the +# max-consecutive-adjustments heuristic. +- name: layout.css.scroll-anchoring.max-consecutive-adjustments-timeout-ms + type: uint32_t + value: 500 + mirror: always + +# Pref to control whether we should disable scroll anchoring on a scroller +# where at least max-consecutive-adjustments have happened, and which the +# average adjustment ends up being less than this number, in CSS pixels. +# +# So, for example, given max-consecutive-adjustments=10 and +# min-average-adjustment-treshold=3, we'll block scroll anchoring if there have +# been 10 consecutive adjustments without a user scroll or more, and the +# average offset difference between them amount to less than 3 CSS pixels. +- name: layout.css.scroll-anchoring.min-average-adjustment-threshold + type: uint32_t + value: 2 + mirror: always + +# Pref to control disabling scroll anchoring suppression triggers, see +# +# https://drafts.csswg.org/css-scroll-anchoring/#suppression-triggers +# +# Those triggers should be unnecessary after bug 1561450. +- name: layout.css.scroll-anchoring.suppressions.enabled + type: bool + value: true + mirror: always + +- name: layout.css.scroll-anchoring.highlight + type: bool + value: false + mirror: always + +# Pref to control whether we reselect scroll anchors if sub-optimal +# +# See https://github.com/w3c/csswg-drafts/issues/6787 +- name: layout.css.scroll-anchoring.reselect-if-suboptimal + type: bool + value: true + mirror: always + +# Are shared memory User Agent style sheets enabled? +- name: layout.css.shared-memory-ua-sheets.enabled + type: bool + value: true + mirror: always + +# Is support for -webkit-line-clamp on regular blocks enabled? +- name: layout.css.webkit-line-clamp.block.enabled + type: bool + value: false + mirror: always + +# Is 'content:none' supported on (non-pseudo) elements? +- name: layout.css.element-content-none.enabled + type: RelaxedAtomicBool + value: false + mirror: always + rust: true + +# Is 'font-synthesis: small-caps' supported? +- name: layout.css.font-synthesis-small-caps.enabled + type: RelaxedAtomicBool + value: true + mirror: always + rust: true + +# Whether we want scrollbar-width: thin to behave as scrollbar-width: auto. +- name: layout.css.scrollbar-width-thin.disabled + type: RelaxedAtomicBool + value: false + mirror: always + +# Whether the `scrollbar-gutter` CSS property is enabled. +- name: layout.css.scrollbar-gutter.enabled + type: RelaxedAtomicBool + value: true + mirror: always + rust: true + +# Whether supports() conditions in @import is enabled +- name: layout.css.import-supports.enabled + type: RelaxedAtomicBool + value: true + mirror: always + rust: true + +# Whether frame visibility tracking is enabled globally. +- name: layout.framevisibility.enabled + type: bool + value: true + mirror: always + +# The fraction of the scrollport we allow to horizontally scroll by before we +# schedule an update of frame visibility. +- name: layout.framevisibility.amountscrollbeforeupdatehorizontal + type: int32_t + value: 2 + mirror: always + +# The fraction of the scrollport we allow to vertically scroll by before we +# schedule an update of frame visibility. +- name: layout.framevisibility.amountscrollbeforeupdatevertical + type: int32_t + value: 2 + mirror: always + +# The number of scrollports wide to expand when tracking frame visibility. +- name: layout.framevisibility.numscrollportwidths + type: uint32_t +#ifdef ANDROID + value: 1 +#else + value: 0 +#endif + mirror: always + +# The number of scrollports high to expand when tracking frame visibility. +- name: layout.framevisibility.numscrollportheights + type: uint32_t + value: 1 + mirror: always + +# Test only. +- name: layout.dynamic-toolbar-max-height + type: RelaxedAtomicInt32 + value: 0 + mirror: always + +# Whether outlines should include all overflowing descendants, or just the +# border-box of a given element. +# +# Historically we have included descendants but other browsers have not. +- name: layout.outline.include-overflow + type: bool + value: false + mirror: always + +- name: layout.visibility.min-recompute-interval-ms + type: uint32_t + value: 1000 + mirror: always + +# Controls double click and Alt+Arrow word selection behavior. +- name: layout.word_select.eat_space_to_next_word + type: bool +#ifdef XP_WIN + value: true +#else + value: false +#endif + mirror: always + +- name: layout.word_select.stop_at_punctuation + type: bool + value: true + mirror: always + +# Whether underscore should be treated as a word-breaking character for +# word selection/arrow-key movement purposes. +- name: layout.word_select.stop_at_underscore + type: bool + value: false + mirror: always + +# Should deprecated plugin behavior fallback to normal behavior or use +# the experimental design. +- name: layout.use-plugin-fallback + type: bool + value: false + mirror: always + +# Whether to draw images in CSS backgrounds if we only have a partial frame. +- name: layout.display_partial_background_images + type: bool + value: true + mirror: always + +# Controls whether nsRefreshDriver::IsInHighRateMode() may ever return true. +- name: layout.expose_high_rate_mode_from_refreshdriver + type: bool + value: true + mirror: always + +#--------------------------------------------------------------------------- +# Prefs starting with "mathml." +#--------------------------------------------------------------------------- + +# Whether to disable layout of invalid markup as an error message. +- name: mathml.error_message_layout_for_invalid_markup.disabled + type: bool + value: true + mirror: always + +# Whether to disable MathML3 implementations for maction and semantics. +- name: mathml.legacy_maction_and_semantics_implementations.disabled + type: bool + value: true + mirror: always + rust: true + +# Whether to disable the lquote/rquote attributes of the <ms> element. +- name: mathml.ms_lquote_rquote_attributes.disabled + type: bool + value: true + mirror: always + rust: true + +# Whether to disable legacy names "thickmathspace", "mediummathspace", +# "thickmathspace" etc for length attributes. +- name: mathml.mathspace_names.disabled + type: bool + value: @IS_NIGHTLY_BUILD@ + mirror: always + +# Whether to disable the scriptminsize attribute. +# Note that this only disables parsing, not the default effect when no attribute +# is unspecified. +- name: mathml.scriptminsize_attribute.disabled + type: bool + value: true + mirror: always + +# Whether to disable the scriptsizemultiplier attribute. +- name: mathml.scriptsizemultiplier_attribute.disabled + type: bool + value: true + mirror: always + +# Whether to disable support for stretching operators with STIXGeneral fonts. +# macos still has the deprecated STIXGeneral font pre-installed. +- name: mathml.stixgeneral_operator_stretching.disabled + type: bool +#if defined(XP_MACOSX) + value: @IS_NIGHTLY_BUILD@ +#else + value: true +#endif + mirror: always + +# Whether to disable fallback for mathvariant=italic/bold/bold-italic via +# styling when lacking proper fonts for Mathematical Alphanumeric Symbols. +# We expect all OSes to have relevant fonts, except Android, see bug 1789083. +- name: mathml.mathvariant_styling_fallback.disabled + type: bool +#if defined(ANDROID) + value: false +#else + value: true +#endif + mirror: always + +#--------------------------------------------------------------------------- +# Prefs starting with "media." +#--------------------------------------------------------------------------- + + +# This pref defines what the blocking policy would be used in blocking autoplay. +# 0 : use sticky activation (default) +# https://html.spec.whatwg.org/multipage/interaction.html#sticky-activation +# 1 : use transient activation (the transient activation duration can be +# adjusted by the pref `dom.user_activation.transient.timeout`) +# https://html.spec.whatwg.org/multipage/interaction.html#transient-activation +# 2 : user input depth (allow autoplay when the play is trigged by user input +# which is determined by the user input depth) +- name: media.autoplay.blocking_policy + type: uint32_t + value: 0 + mirror: always + +# Whether to allow autoplay on extension background pages. +- name: media.autoplay.allow-extension-background-pages + type: bool + value: true + mirror: always + +# Block autoplay, asking for permission by default. +# 0=Allowed, 1=Blocked, 5=All Blocked +- name: media.autoplay.default + type: int32_t + value: 1 + mirror: always + +# Wether to block autoplay for webaudio +- name: media.autoplay.block-webaudio + type: bool + value: true + mirror: always + +# File-backed MediaCache size. +- name: media.cache_size + type: RelaxedAtomicUint32 + value: 512000 # Measured in KiB + mirror: always + +# Size of file backed MediaCache while on a connection which is cellular (3G, +# etc), and thus assumed to be "expensive". +- name: media.cache_size.cellular + type: RelaxedAtomicUint32 + value: 32768 # Measured in KiB + mirror: always + +# Whether cubeb is sandboxed (AudioIPC) +- name: media.cubeb.sandbox + type: bool + mirror: always +#if defined(XP_LINUX) && !defined(MOZ_WIDGET_ANDROID) || defined(XP_WIN) || defined(XP_MACOSX) + value: true +#else + value: false +#endif + +# Whether or not to pass AUDCLNT_STREAMOPTIONS_RAW when initializing audio +# streams when using WASAPI. +# 0 - don't use RAW streams +# 1 - use RAW streams for input streams only +# 2 - use RAW streams for output streams only +# 3 - use RAW streams for input and output streams +#if defined (XP_WIN) +- name: media.cubeb.wasapi-raw + type: RelaxedAtomicUint32 + mirror: always + value: 0 +#endif // XP_WIN + +# Whether to make the start of cubeb stream slower, and by how many +# milliseconds. +- name: media.cubeb.slow_stream_init_ms + type: RelaxedAtomicUint32 + mirror: always + value: 0 + +# ClockDrift desired buffering in milliseconds +- name: media.clockdrift.buffering + type: RelaxedAtomicUint32 + mirror: always + value: 50 + +# If a resource is known to be smaller than this size (in kilobytes), a +# memory-backed MediaCache may be used; otherwise the (single shared global) +# file-backed MediaCache is used. +- name: media.memory_cache_max_size + type: uint32_t + value: 8192 # Measured in KiB + mirror: always + +# Don't create more memory-backed MediaCaches if their combined size would go +# above this absolute size limit. +- name: media.memory_caches_combined_limit_kb + type: uint32_t + value: 524288 + mirror: always + +# Don't create more memory-backed MediaCaches if their combined size would go +# above this relative size limit (a percentage of physical memory). +- name: media.memory_caches_combined_limit_pc_sysmem + type: uint32_t + value: 5 # A percentage + mirror: always + +# When a network connection is suspended, don't resume it until the amount of +# buffered data falls below this threshold (in seconds). +- name: media.cache_resume_threshold + type: RelaxedAtomicUint32 + value: 30 + mirror: always +- name: media.cache_resume_threshold.cellular + type: RelaxedAtomicUint32 + value: 10 + mirror: always + +# Stop reading ahead when our buffered data is this many seconds ahead of the +# current playback position. This limit can stop us from using arbitrary +# amounts of network bandwidth prefetching huge videos. +- name: media.cache_readahead_limit + type: RelaxedAtomicUint32 + value: 60 + mirror: always +- name: media.cache_readahead_limit.cellular + type: RelaxedAtomicUint32 + value: 30 + mirror: always + +# MediaCapabilities +- name: media.mediacapabilities.drop-threshold + type: RelaxedAtomicInt32 + value: 95 + mirror: always + +- name: media.mediacapabilities.from-database + type: RelaxedAtomicBool + value: @IS_NIGHTLY_BUILD@ + mirror: always + +# AudioSink +- name: media.resampling.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +# libcubeb backend implements .get_preferred_channel_layout +- name: media.forcestereo.enabled + type: RelaxedAtomicBool +#if defined(XP_WIN) || defined(XP_DARWIN) || defined(MOZ_PULSEAUDIO) + value: false +#else + value: true +#endif + mirror: always + +# MediaSource + +# Whether to enable MediaSource support. +- name: media.mediasource.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +- name: media.mediasource.mp4.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +- name: media.mediasource.webm.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# Check if vp9 is enabled by default in mediasource. False on Android. +# If disabled, vp9 will only be enabled under some conditions: +# - h264 HW decoding is not supported +# - mp4 is not enabled +# - Device was deemed fast enough to decode VP9 via the VP9Benchmark utility +# - A VP9 HW decoder is present. +- name: media.mediasource.vp9.enabled + type: RelaxedAtomicBool + value: @IS_NOT_ANDROID@ + mirror: always + +- name: media.mediasource.webm.audio.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# Whether to enable MediaSource v2 support. +- name: media.mediasource.experimental.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +# VideoSink +- name: media.ruin-av-sync.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +# Encrypted Media Extensions +- name: media.eme.enabled + type: bool +#if defined(XP_LINUX) && !defined(MOZ_WIDGET_ANDROID) + # On Linux EME is visible but disabled by default. This is so that the "Play + # DRM content" checkbox in the Firefox UI is unchecked by default. DRM + # requires downloading and installing proprietary binaries, which users on an + # open source operating systems didn't opt into. The first time a site using + # EME is encountered, the user will be prompted to enable DRM, whereupon the + # EME plugin binaries will be downloaded if permission is granted. + value: false +#else + value: true +#endif + mirror: always + +# Whether we expose the functionality proposed in +# https://github.com/WICG/encrypted-media-encryption-scheme/blob/master/explainer.md +# I.e. if true, apps calling navigator.requestMediaKeySystemAccess() can pass +# an optional encryption scheme as part of MediaKeySystemMediaCapability +# objects. If a scheme is present when we check for support, we must ensure we +# support that scheme in order to provide key system access. +- name: media.eme.encrypted-media-encryption-scheme.enabled + type: bool + value: false + mirror: always + +# Do we need explicit approval from the application to allow access to EME? +# If true, Gecko will ask for permission before allowing MediaKeySystemAccess. +# At time of writing this is aimed at GeckoView, and setting this to true +# outside of GeckoView or test environments will likely break EME. +- name: media.eme.require-app-approval + type: bool + value: false + mirror: always + +- name: media.eme.audio.blank + type: RelaxedAtomicBool + value: false + mirror: always + +- name: media.eme.video.blank + type: RelaxedAtomicBool + value: false + mirror: always + +- name: media.eme.chromium-api.video-shmems + type: RelaxedAtomicUint32 + value: 6 + mirror: always + +# Is support for MediaKeys.getStatusForPolicy enabled? +- name: media.eme.hdcp-policy-check.enabled + type: bool + value: false + mirror: always + +- name: media.eme.max-throughput-ms + type: RelaxedAtomicUint32 + value: 500 + mirror: always + +- name: media.clearkey.persistent-license.enabled + type: bool + value: false + mirror: always + +# Are test specific clearkey key systems enabled and exposed? +- name: media.clearkey.test-key-systems.enabled + type: bool + value: false + mirror: always + +- name: media.cloneElementVisually.testing + type: bool + value: false + mirror: always + +#if defined(XP_LINUX) && defined(MOZ_SANDBOX) + # Whether to allow, on a Linux system that doesn't support the necessary + # sandboxing features, loading Gecko Media Plugins unsandboxed. However, EME + # CDMs will not be loaded without sandboxing even if this pref is changed. +- name: media.gmp.insecure.allow + type: RelaxedAtomicBool + value: false + mirror: always +#endif + +# (When reading the next line, know that preprocessor.py doesn't +# understand parentheses, but && is higher precedence than ||.) +#if defined(XP_WIN) && defined(_ARM64_) || defined(XP_MACOSX) + # These prefs control whether or not we will allow x86/x64 plugins + # to run on Windows ARM or Apple Silicon machines. This requires + # launching the GMP child process executable in x86/x64 mode. We + # expect to allow this for Widevine until an arm64 version of + # Widevine and Clearkey is made available. We don't expect to need + # to allow this for OpenH264. + # + # For Apple Silicon and OSX, it will be for universal builds and + # whether or not it can use the x64 Widevine plugin. + # + # For Windows ARM, it will be for ARM builds and whether or not it + # can use x86 Widevine or Clearkey plugins. + + # May a Widevine GMP x64 process be executed on ARM builds. +- name: media.gmp-widevinecdm.allow-x64-plugin-on-arm64 + type: RelaxedAtomicBool + value: true + mirror: always + + # May an OpenH264 GMP x64 process be executed on ARM builds. +- name: media.gmp-gmpopenh264.allow-x64-plugin-on-arm64 + type: RelaxedAtomicBool + value: false + mirror: always + + # May a Clearkey GMP x64 process be executed on ARM builds. +- name: media.gmp-gmpclearkey.allow-x64-plugin-on-arm64 + type: RelaxedAtomicBool + value: false + mirror: always +#endif + +# Specifies whether the PDMFactory can create a test decoder that just outputs +# blank frames/audio instead of actually decoding. The blank decoder works on +# all platforms. +- name: media.use-blank-decoder + type: RelaxedAtomicBool + value: false + mirror: always + +- name: media.gpu-process-decoder + type: RelaxedAtomicBool +#if defined(XP_WIN) + value: true +#else + value: false +#endif + mirror: always + +- name: media.rdd-process.enabled + type: RelaxedAtomicBool +#if defined(XP_WIN) + value: true +#elif defined(XP_MACOSX) + value: true +#elif defined(XP_LINUX) && !defined(ANDROID) + value: true +#elif defined(XP_FREEBSD) + value: true +#elif defined(XP_OPENBSD) + value: true +#else + value: false +#endif + mirror: always + +- name: media.rdd-retryonfailure.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +- name: media.rdd-process.startup_timeout_ms + type: RelaxedAtomicInt32 + value: 5000 + mirror: always + +# Specifies how many times we restart RDD process after crash till we give up. +# After first RDD restart we disable HW acceleration on Linux. +- name: media.rdd-process.max-crashes + type: RelaxedAtomicInt32 + value: 2 + mirror: always + +#ifdef MOZ_FFMPEG +- name: media.rdd-ffmpeg.enabled + type: RelaxedAtomicBool + value: true + mirror: always +#endif + +#ifdef MOZ_FFVPX +- name: media.rdd-ffvpx.enabled + type: RelaxedAtomicBool +#if defined(XP_WIN) + value: true +#elif defined(XP_MACOSX) + value: true +#elif defined(XP_LINUX) && !defined(ANDROID) + value: true +#elif defined(XP_FREEBSD) + value: true +#elif defined(XP_OPENBSD) + value: true +#else + value: false +#endif + mirror: always +#endif + +#ifdef MOZ_WMF +- name: media.rdd-wmf.enabled + type: RelaxedAtomicBool + value: true + mirror: always +#endif + +#ifdef MOZ_APPLEMEDIA +- name: media.rdd-applemedia.enabled + type: RelaxedAtomicBool + value: true + mirror: always +#endif + +- name: media.rdd-theora.enabled + type: RelaxedAtomicBool +#if defined(XP_WIN) + value: true +#elif defined(XP_MACOSX) + value: true +#elif defined(XP_LINUX) && !defined(ANDROID) + value: true +#elif defined(XP_FREEBSD) + value: true +#elif defined(XP_OPENBSD) + value: true +#else + value: false +#endif + mirror: always + +- name: media.rdd-vorbis.enabled + type: RelaxedAtomicBool +#if defined(XP_WIN) + value: true +#elif defined(XP_MACOSX) + value: true +#elif defined(XP_LINUX) && !defined(ANDROID) + value: true +#elif defined(XP_FREEBSD) + value: true +#elif defined(XP_OPENBSD) + value: true +#else + value: false +#endif + mirror: always + +- name: media.rdd-vpx.enabled + type: RelaxedAtomicBool +#if defined(XP_WIN) + value: true +#elif defined(XP_MACOSX) + value: true +#elif defined(XP_LINUX) && !defined(ANDROID) + value: true +#elif defined(XP_FREEBSD) + value: true +#elif defined(XP_OPENBSD) + value: true +#else + value: false +#endif + mirror: always + +- name: media.rdd-wav.enabled + type: RelaxedAtomicBool +#if defined(XP_WIN) + value: true +#elif defined(XP_MACOSX) + value: true +#elif defined(XP_LINUX) && !defined(ANDROID) + value: true +#elif defined(XP_FREEBSD) + value: true +#elif defined(XP_OPENBSD) + value: true +#else + value: false +#endif + mirror: always + +- name: media.rdd-opus.enabled + type: RelaxedAtomicBool +#if defined(XP_WIN) + value: true +#elif defined(XP_MACOSX) + value: true +#elif defined(XP_LINUX) && !defined(ANDROID) + value: true +#elif defined(XP_FREEBSD) + value: true +#elif defined(XP_OPENBSD) + value: true +#else + value: false +#endif + mirror: always + +- name: media.rdd-webaudio.batch.size + type: RelaxedAtomicInt32 + value: 100 + mirror: always + +# This pref is here to control whether we want to perform audio decoding by +# using the IPC actor within the Utility process rather than the RDD process. +# When it is set to true, then the utility process will take precedence over RDD +# to perform audio decoding. +# TODO: Enabling for Isolated Processes builds on Android +- name: media.utility-process.enabled + type: RelaxedAtomicBool +#if defined(XP_WIN) + value: true +#elif defined(XP_MACOSX) + value: true +#elif defined(XP_LINUX) && !defined(ANDROID) + value: true +#elif defined(ANDROID) && !defined(MOZ_ANDROID_CONTENT_SERVICE_ISOLATED_PROCESS) + value: true +#elif defined(XP_OPENBSD) + value: true +#else + value: false +#endif + mirror: always + +# Specifies how many times we restart Utility process after crash till we give +# up. +- name: media.utility-process.max-crashes + type: RelaxedAtomicInt32 + value: 2 + mirror: always + +#ifdef MOZ_FFMPEG +- name: media.utility-ffmpeg.enabled + type: RelaxedAtomicBool + value: true + mirror: always +#endif + +#ifdef MOZ_FFVPX +- name: media.utility-ffvpx.enabled + type: RelaxedAtomicBool + value: true + mirror: always +#endif + +#ifdef MOZ_WMF +- name: media.utility-wmf.enabled + type: RelaxedAtomicBool + value: true + mirror: always +#endif + +#ifdef MOZ_APPLEMEDIA +- name: media.utility-applemedia.enabled + type: RelaxedAtomicBool + value: true + mirror: always +#endif + +- name: media.utility-vorbis.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +- name: media.utility-wav.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +- name: media.utility-opus.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +#ifdef ANDROID + # Enable the MediaCodec PlatformDecoderModule by default. +- name: media.android-media-codec.enabled + type: RelaxedAtomicBool + value: true + mirror: always + + # Bug 1771196 + # Dont yet enable AndroidDecoderModule on Utility +- name: media.utility-android-media-codec.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +- name: media.android-media-codec.preferred + type: RelaxedAtomicBool + value: true + mirror: always +#endif # ANDROID + +#ifdef MOZ_OMX +- name: media.omx.enabled + type: bool + value: false + mirror: always +#endif + +# Allow ffmpeg decoder to decode directly onto shmem buffer +- name: media.ffmpeg.customized-buffer-allocation + type: RelaxedAtomicBool + value: true + mirror: always + +#ifdef MOZ_FFMPEG +- name: media.ffmpeg.enabled + type: RelaxedAtomicBool + #if defined(XP_MACOSX) + value: false + #else + value: true + #endif + mirror: always + +- name: media.libavcodec.allow-obsolete + type: bool + value: false + mirror: always +#endif # MOZ_FFMPEG + +#if defined(MOZ_FFMPEG) || defined(MOZ_FFVPX) +# Allow using openh264 decoding with ffmpeg +- name: media.ffmpeg.allow-openh264 + type: RelaxedAtomicBool + value: @IS_NOT_NIGHTLY_BUILD@ + mirror: always +#endif # MOZ_FFMPEG || MOZ_FFVPX + +#ifdef MOZ_WIDGET_GTK +# Use VA-API for ffmpeg video playback on Linux +- name: media.ffmpeg.vaapi.enabled + type: bool + value: false + mirror: once + +# Force to copy dmabuf video frames +# Used for debugging/troubleshooting only +# 0 - force disable +# 1 - force enable +# 2 - default +- name: media.ffmpeg.vaapi.force-surface-zero-copy + type: uint32_t + value: 2 + mirror: once +#endif # MOZ_WIDGET_GTK + +- name: media.ffvpx.enabled + type: RelaxedAtomicBool +#ifdef MOZ_FFVPX + value: true +#else + value: false +#endif + mirror: always + +- name: media.ffvpx.mp3.enabled + type: RelaxedAtomicBool +#ifdef MOZ_FFVPX + value: true +#else + value: false +#endif + mirror: always + +# Set to true in marionette tests to disable the sanity test +# which would lead to unnecessary start of the RDD process. +- name: media.sanity-test.disabled + type: RelaxedAtomicBool + value: false + mirror: always + +#ifdef MOZ_WMF + +- name: media.wmf.enabled + type: RelaxedAtomicBool + value: true + mirror: always + + # Whether DD should consider WMF-disabled a WMF failure, useful for testing. +- name: media.decoder-doctor.wmf-disabled-is-failure + type: RelaxedAtomicBool + value: false + mirror: always + +- name: media.wmf.dxva.d3d11.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +- name: media.wmf.dxva.max-videos + type: RelaxedAtomicUint32 + value: 8 + mirror: always + +- name: media.wmf.dxva.d3d9.amd-pre-uvd4.disabled + type: RelaxedAtomicBool + value: true + mirror: always + +- name: media.wmf.use-nv12-format + type: RelaxedAtomicBool + value: true + mirror: always + +- name: media.wmf.zero-copy-nv12-textures + type: bool + value: true + mirror: once +# Enable hardware decoded video no copy even when it is blocked. +- name: media.wmf.zero-copy-nv12-textures-force-enabled + type: bool + value: false + mirror: once + +- name: media.wmf.force.allow-p010-format + type: RelaxedAtomicBool + value: false + mirror: always + +- name: media.wmf.use-sync-texture + type: bool + value: true + mirror: once + +- name: media.wmf.low-latency.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +- name: media.wmf.low-latency.force-disabled + type: RelaxedAtomicBool + value: false + mirror: always + +- name: media.wmf.skip-blacklist + type: RelaxedAtomicBool + value: false + mirror: always + +- name: media.wmf.amd.highres.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +- name: media.wmf.allow-unsupported-resolutions + type: RelaxedAtomicBool + value: false + mirror: always + +- name: media.wmf.vp9.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +- name: media.wmf.av1.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# Using Windows Media Foundation Media Engine for encrypted playback +# 0 : disable, 1 : enable for encrypted and clear, +# 2 : enable for encrypted only, 3 : enable for clear only +- name: media.wmf.media-engine.enabled + type: RelaxedAtomicUint32 + value: 0 + mirror: always + +# Testing purpose, enable media engine on channel decoder as well. +- name: media.wmf.media-engine.channel-decoder.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +# The amount of video raw data the engine stream will queue +- name: media.wmf.media-engine.raw-data-threshold.video + type: RelaxedAtomicInt32 + value: 500000 + mirror: always + +# The amount of audio raw data the engine stream will queue +- name: media.wmf.media-engine.raw-data-threshold.audio + type: RelaxedAtomicInt32 + value: 2000000 + mirror: always + +# Specifies how many times we restart MFCDM process after crash till we give up. +- name: media.wmf.media-engine.max-crashes + type: RelaxedAtomicInt32 + value: 2 + mirror: always + +# Enable PlayReady DRM for EME +- name: media.eme.playready.enabled + type: RelaxedAtomicBool +#if defined(MOZ_WMF_CDM) && defined(NIGHTLY_BUILD) + value: false # TODO: enable this when ready to play. +#else + value: false +#endif + mirror: always + +#endif # MOZ_WMF + +- name: media.decoder-doctor.testing + type: bool + value: false + mirror: always + +- name: media.hardware-video-decoding.enabled + type: bool + value: true + mirror: once + +- name: media.hardware-video-decoding.force-enabled + type: bool + value: false + mirror: once + +# Whether to check the decoder supports recycling. +- name: media.decoder.recycle.enabled + type: RelaxedAtomicBool + value: @IS_ANDROID@ + mirror: always + +# Should MFR try to skip to the next key frame? +- name: media.decoder.skip-to-next-key-frame.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# When video continues later than the current media time for this period of +# time, then it will trigger skip-to-next-keyframe mechanism. As this aims to +# solve the drop frames issue where video decoding too slow for high +# resolution videos. eg. 4k+. Therefore, the value is is determined by the +# telemetry probe `video_inter_keyframe_max_ms` in the key of `AV,h>2160` which +# shows that 95% video's key frame interval are less than ~5000. We use its +# half value as a threashold to decide whether we should keep decoding in the +# current video position or jump to the next keyframe in order to decode future +# frames in advance. +- name: media.decoder.skip_when_video_too_slow_ms + type: RelaxedAtomicInt32 + value: 2500 + mirror: always + +# True if we want to decode in batches. +- name: media.gmp.decoder.decode_batch + type: RelaxedAtomicBool + value: false + mirror: always + +# True if we allow use of any decoders found in GMP plugins. +- name: media.gmp.decoder.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# True if we want to request the multithreaded GMP decoder. +- name: media.gmp.decoder.multithreaded + type: RelaxedAtomicBool + value: false + mirror: always + +# True if we want to try using the GMP plugin decoders first. +- name: media.gmp.decoder.preferred + type: RelaxedAtomicBool + value: false + mirror: always + +# True if we want to reorder frames from the decoder based on the timestamp. +- name: media.gmp.decoder.reorder_frames + type: RelaxedAtomicBool + value: true + mirror: always + +# Whether to suspend decoding of videos in background tabs. +- name: media.suspend-bkgnd-video.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# Delay, in ms, from time window goes to background to suspending +# video decoders. Defaults to 10 seconds. +- name: media.suspend-bkgnd-video.delay-ms + type: RelaxedAtomicUint32 + value: 10000 + mirror: always + +- name: media.dormant-on-pause-timeout-ms + type: RelaxedAtomicInt32 + value: 5000 + mirror: always + +# AudioTrack and VideoTrack support +- name: media.track.enabled + type: bool + value: false + mirror: always + +# This pref disables the reception of RTCP. It is used for testing. +- name: media.webrtc.net.force_disable_rtcp_reception + type: ReleaseAcquireAtomicBool + value: false + mirror: always + +# TextTrack WebVTT Region extension support. +- name: media.webvtt.regions.enabled + type: bool + value: true + mirror: always + +# This pref controls whether dispatch testing-only events. +- name: media.webvtt.testing.events + type: bool + value: true + mirror: always + +- name: media.webspeech.synth.force_global_queue + type: bool + value: false + mirror: always + +- name: media.webspeech.test.enable + type: bool + value: false + mirror: always + +- name: media.webspeech.test.fake_fsm_events + type: bool + value: false + mirror: always + +- name: media.webspeech.test.fake_recognition_service + type: bool + value: false + mirror: always + +#ifdef MOZ_WEBSPEECH +- name: media.webspeech.recognition.enable + type: bool + value: false + mirror: always +#endif + +- name: media.webspeech.recognition.force_enable + type: bool + value: false + mirror: always + +#ifdef MOZ_WEBSPEECH +- name: media.webspeech.synth.enabled + type: bool + value: false + mirror: always +#endif # MOZ_WEBSPEECH + +- name: media.encoder.webm.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +- name: media.audio-max-decode-error + type: uint32_t +#if defined(RELEASE_OR_BETA) + value: 3 +#else + # Zero tolerance in pre-release builds to detect any decoder regression. + value: 0 +#endif + mirror: always + +- name: media.video-max-decode-error + type: uint32_t +#if defined(RELEASE_OR_BETA) + value: 2 +#else + # Zero tolerance in pre-release builds to detect any decoder regression. + value: 0 +#endif + mirror: always + +# Are video stats enabled? (Disabling can help prevent fingerprinting.) +- name: media.video_stats.enabled + type: bool + value: true + mirror: always + +# forces the number of dropped frames to 0 +- name: media.video.dropped_frame_stats.enabled + type: bool + value: true + mirror: always + +# Opus +- name: media.opus.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# Wave +- name: media.wave.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# Ogg +- name: media.ogg.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# WebM +- name: media.webm.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# AV1 +- name: media.av1.enabled + type: RelaxedAtomicBool +#if defined(XP_WIN) && !defined(_ARM64_) + value: true +#elif defined(XP_MACOSX) + value: true +#elif defined(MOZ_WIDGET_ANDROID) + value: true +#elif defined(XP_UNIX) + value: true +#else + value: false +#endif + mirror: always + +- name: media.av1.use-dav1d + type: RelaxedAtomicBool +#if defined(XP_WIN) && !defined(_ARM64_) + value: true +#elif defined(XP_MACOSX) + value: true +#elif defined(XP_UNIX) + value: true +#else + value: false +#endif + mirror: always + +- name: media.av1.new-thread-count-strategy + type: RelaxedAtomicBool + value: false + mirror: always + +- name: media.av1.force-thread-count + type: RelaxedAtomicInt32 + value: 0 + mirror: always + +- name: media.flac.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# Hls +- name: media.hls.enabled + type: RelaxedAtomicBool + value: @IS_ANDROID@ + mirror: always + +# Max number of HLS players that can be created concurrently. Used only on +# Android and when "media.hls.enabled" is true. +#ifdef ANDROID +- name: media.hls.max-allocations + type: uint32_t + value: 20 + mirror: always +#endif + +- name: media.mp4.enabled + type: RelaxedAtomicBool +#ifdef MOZ_FMP4 + value: true +#else + value: false +#endif + mirror: always + +- name: media.mp4.sniff_iso_brand + type: RelaxedAtomicBool + value: true + mirror: always + +# Error/warning handling, Decoder Doctor. +# +# Set to true to force demux/decode warnings to be treated as errors. +- name: media.playback.warnings-as-errors + type: RelaxedAtomicBool + value: false + mirror: always + +# Resume video decoding when the cursor is hovering on a background tab to +# reduce the resume latency and improve the user experience. +- name: media.resume-bkgnd-video-on-tabhover + type: bool + value: true + mirror: always + +- name: media.videocontrols.lock-video-orientation + type: bool + value: false + mirror: always + +# Media Seamless Looping +- name: media.seamless-looping + type: RelaxedAtomicBool + value: true + mirror: always + +- name: media.seamless-looping-video + type: RelaxedAtomicBool + value: true + mirror: always + +- name: media.autoplay.block-event.enabled + type: bool + value: false + mirror: always + +- name: media.media-capabilities.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +- name: media.media-capabilities.screen.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +- name: media.benchmark.vp9.fps + type: RelaxedAtomicUint32 + value: 0 + mirror: always + +- name: media.benchmark.vp9.threshold + type: RelaxedAtomicUint32 + value: 150 + mirror: always + +- name: media.benchmark.vp9.versioncheck + type: RelaxedAtomicUint32 + value: 0 + mirror: always + +- name: media.benchmark.frames + type: RelaxedAtomicUint32 + value: 300 + mirror: always + +- name: media.benchmark.timeout + type: RelaxedAtomicUint32 + value: 1000 + mirror: always + +- name: media.test.video-suspend + type: RelaxedAtomicBool + value: false + mirror: always + +# MediaCapture prefs follow + +# Enables navigator.mediaDevices and getUserMedia() support. See also +# media.peerconnection.enabled +- name: media.navigator.enabled + type: bool + value: true + mirror: always + +# This pref turns off window-focus checks on the navigator.mediaDevices methods, +# for partner testing frameworks. +# Prefer "focusmanager.testmode", which is already set by default for +# web-platform tests. +- name: media.devices.unfocused.enabled + type: bool + value: false + mirror: always + +# This pref turns off [SecureContext] on the navigator.mediaDevices object, for +# more compatible legacy behavior. +- name: media.devices.insecure.enabled + type: bool + value: false + mirror: always + +# If the above pref is also enabled, this pref enabled getUserMedia() support +# in http, bypassing the instant NotAllowedError you get otherwise. +- name: media.getusermedia.insecure.enabled + type: bool + value: false + mirror: always + +# Enable tab sharing +- name: media.getusermedia.browser.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +# The getDisplayMedia method is always SecureContext regardless of the above two +# prefs. But it is not implemented on android, and can be turned off elsewhere. +- name: media.getdisplaymedia.enabled + type: bool + value: @IS_NOT_ANDROID@ + mirror: always + +# Turn off any cameras (but not mics) while in the background. This is desirable +# on mobile. +- name: media.getusermedia.camera.background.mute.enabled + type: bool + value: @IS_ANDROID@ + mirror: always + +# Use the libwebrtc AVFoundation camera backend on Mac by default. When +# disabled, an older forked capture module is used. +- name: media.getusermedia.camera.macavf.enabled + type: bool + value: true + mirror: once + +# This pref turns on legacy (non-spec) exposure of camera and microphone +# information from enumerateDevices and devicechange ahead of successful +# getUserMedia calls. Should only be turned on to resolve web compat issues, +# since doing so reveals more user fingerprinting information to trackers. +# +# In this mode, camera and microphone device labels are exposed if the site has a +# persisted permission to either kind, as well as while actively capturing either +# kind (temporary and tab-specific grace-period permissions do not count). +# +# Planned next steps: true → @IS_NOT_NIGHTLY_BUILD@ → false +- name: media.devices.enumerate.legacy.enabled + type: bool + value: true + mirror: always + +# WebRTC prefs follow + +# Enables RTCPeerConnection support. Note that, when true, this pref enables +# navigator.mediaDevices and getUserMedia() support as well. +# See also media.navigator.enabled +- name: media.peerconnection.enabled + type: bool + value: true + mirror: always + +- name: media.peerconnection.dtmf.enabled + type: bool + value: true + mirror: always + +- name: media.peerconnection.identity.enabled + type: bool + value: true + mirror: always + +#ifdef MOZ_WEBRTC + # Use MediaDataDecoder API for VP8/VP9 in WebRTC. This includes hardware + # acceleration for decoding. +- name: media.navigator.mediadatadecoder_vpx_enabled + type: RelaxedAtomicBool +#if defined(NIGHTLY_BUILD) || defined(MOZ_WIDGET_GTK) + value: true +#else + value: false +#endif + mirror: always + + # Use MediaDataDecoder API for H264 in WebRTC. This includes hardware + # acceleration for decoding. +- name: media.navigator.mediadatadecoder_h264_enabled + type: RelaxedAtomicBool + #if defined(_ARM64_) && defined(XP_WIN) + value: false + #else + value: true + #endif + mirror: always + +#if defined(MOZ_WIDGET_GTK) + # Use hardware acceleration for VP8 decoding on Linux. +- name: media.navigator.mediadatadecoder_vp8_hardware_enabled + type: RelaxedAtomicBool + value: false + mirror: always +#endif + + # Interval in milliseconds at which to gather WebRTC stats for use in about:webrtc. +- name: media.aboutwebrtc.hist.poll_interval_ms + type: RelaxedAtomicUint32 + value: 250 + mirror: always + + # History time depth in seconds to keep for webrtc:stats for use in about:webrtc. +- name: media.aboutwebrtc.hist.storage_window_s + type: RelaxedAtomicUint32 + value: 60 + mirror: always + + # Time in minutes to retain peer connection stats after closing. +- name: media.aboutwebrtc.hist.prune_after_m + type: RelaxedAtomicUint32 + value: 60 * 24 * 2 + mirror: always + + # Max number of closed PC stats histories to retain +- name: media.aboutwebrtc.hist.closed_stats_to_retain + type: RelaxedAtomicUint32 + value: 8 + mirror: always + + # Gather PeerConnection stats history for display in about:webrtc. If + # disabled history will only gather when about:webrtc is open. Additionally, + # if disabled and when about:webrtc is not in the foreground history data + # will become sparse. +- name: media.aboutwebrtc.hist.enabled + type: RelaxedAtomicBool +#if defined(MOZ_WIDGET_ANDROID) + value: false +#else + value: @IS_NIGHTLY_BUILD@ +#endif + mirror: always + +#endif # MOZ_WEBRTC + +# HTMLMediaElement.allowedToPlay should be exposed to web content when +# block autoplay rides the trains to release. Until then, Nightly only. +- name: media.allowed-to-play.enabled + type: bool + value: @IS_NIGHTLY_BUILD@ + mirror: always + +# Is support for MediaDevices.ondevicechange enabled? +- name: media.ondevicechange.enabled + type: bool + value: true + mirror: always + +# Is support for HTMLMediaElement.seekToNextFrame enabled? +- name: media.seekToNextFrame.enabled + type: bool + value: true + mirror: always + +# setSinkId will be enabled in bug 1498512. Till then the +# implementation will remain hidden behind this pref (Bug 1152401, Bug 934425). +- name: media.setsinkid.enabled + type: bool +#if defined(MOZ_WIDGET_ANDROID) + value: false # bug 1473346 +#else + value: @IS_NIGHTLY_BUILD@ +#endif + mirror: always + +# Turn on this pref can enable test-only events for media element. +- name: media.testing-only-events + type: bool + value: false + mirror: always + +- name: media.useAudioChannelService.testing + type: bool + value: false + mirror: always + +- name: media.audioFocus.management + type: bool +#if defined(MOZ_WIDGET_ANDROID) + value: true +#else + value: false +#endif + mirror: always + +- name: media.hardwaremediakeys.enabled + type: bool + value: true + mirror: always + +# If this pref is on, then `media.mediacontrol.stopcontrol.timer.ms` would take +# effect and determine the timing to stop controlling media. +- name: media.mediacontrol.stopcontrol.timer + type: bool + value: true + mirror: always + +# If media is being paused after a certain period, then we would think that +# media doesn't need to be controlled anymore. Therefore, that media would stop +# listening to the media control key events. The value of this pref is how long +# media would stop listening to the event after it's paused. The default value +# is set to 24 hrs (24*60*60*1000) +- name: media.mediacontrol.stopcontrol.timer.ms + type: RelaxedAtomicUint32 + value: 86400000 + mirror: always + +# If this pref is on, we would stop controlling media after it reaches to the +# end. +- name: media.mediacontrol.stopcontrol.aftermediaends + type: bool + value: true + mirror: always + +# We would only use media control to control media which duration is longer +# than this value. +- name: media.mediacontrol.eligible.media.duration.s + type: AtomicFloat + value: 3.0f + mirror: always + +- name: media.webrtc.platformencoder + type: RelaxedAtomicBool +#if defined(MOZ_WIDGET_ANDROID) + value: true +#else + value: @IS_EARLY_BETA_OR_EARLIER@ +#endif + mirror: always + +- name: media.webrtc.platformencoder.sw_only + type: RelaxedAtomicBool +#if defined(MOZ_WIDGET_ANDROID) + value: false +#else + value: true +#endif + mirror: always + +- name: media.webrtc.software_encoder.fallback + type: RelaxedAtomicBool +#if !defined(MOZ_WIDGET_GTK) + value: true +#else + value: false +#endif + mirror: always + +#if defined(XP_MACOSX) +- name: media.webrtc.capture.allow-iosurface + type: RelaxedAtomicBool + value: true + mirror: always +#endif + +#if defined(XP_WIN) +- name: media.webrtc.capture.allow-directx + type: RelaxedAtomicBool + value: true + mirror: always + +- name: media.webrtc.capture.allow-wgc + type: RelaxedAtomicBool + value: @IS_EARLY_BETA_OR_EARLIER@ + mirror: always +#endif + +#if defined(MOZ_WIDGET_GTK) +- name: media.webrtc.capture.allow-pipewire + type: RelaxedAtomicBool + value: true + mirror: always +#endif + +- name: media.block-autoplay-until-in-foreground + type: bool +#if !defined(MOZ_WIDGET_ANDROID) + value: true +#else + value: false +#endif + mirror: always + +- name: media.webrtc.hw.h264.enabled + type: bool +#if defined(MOZ_WIDGET_ANDROID) + value: true +#else + value: false +#endif + mirror: always + + # If true, then we require explicit approval from the embedding app (ex. Fenix) + # on GeckoView to know if we can allow audible, inaudible media or both kinds + # of media to autoplay. +- name: media.geckoview.autoplay.request + type: bool + value: false + mirror: always + + # This is used in testing only, in order to skip the prompting process. This + # pref works only when enabling the pref `media.geckoview.autoplay.request`. + # 0=prompt as normal, 1=allow all, 2=deny all, 3=allow audible request, + # 4=deny audible request, 5=allow inaudible request, 6=deny inaudible request. + # 7=leave all requests pending. +- name: media.geckoview.autoplay.request.testing + type: uint32_t + value: 0 + mirror: always + +- name: media.mediacontrol.testingevents.enabled + type: bool + value: false + mirror: always + +#if defined(XP_MACOSX) +- name: media.macos.screenrecording.oscheck.enabled + type: bool + value: true + mirror: always +#endif + +# When the playback rate of an HTMLMediaElement is greater than this value, or +# lower than the inverse of this value, the audio is muted. +- name: media.audio.playbackrate.muting_threshold + type: uint32_t + value: 8 + mirror: always + +# Time-stretch algorithm single processing sequence length in milliseconds. +# This determines to how long sequences the original sound is chopped in the +# time-stretch algorithm. +- name: media.audio.playbackrate.soundtouch_sequence_ms + type: RelaxedAtomicInt32 + value: 10 + mirror: always + +# Time-stretch algorithm seeking window length in milliseconds for algorithm +# that finds the best possible overlapping location. This determines from how +# wide window the algorithm may look for an optimal joining location when mixing +# the sound sequences back together. +- name: media.audio.playbackrate.soundtouch_seekwindow_ms + type: RelaxedAtomicInt32 + value: 15 + mirror: always + +# Time-stretch algorithm overlap length in milliseconds. When the chopped sound +# sequences are mixed back together, to form a continuous sound stream, this +# parameter defines over how long period the two consecutive sequences are let +# to overlap each other. +- name: media.audio.playbackrate.soundtouch_overlap_ms + type: RelaxedAtomicInt32 + value: 8 + mirror: always + +# The duration, in milliseconds, of decoded audio to keep around in the +# AudioSink ring-buffer. New decoding operations are started when this limit is +# reached. The total size of the ring-buffer is slightly bigger than this. +- name: media.audio.audiosink.threshold_ms + type: AtomicFloat +#if defined(XP_MACOSX) && defined(MOZ_AARCH64) + value: 1000.0 +#else + value: 200.0 +#endif + mirror: always + +- name: media.video-wakelock + type: RelaxedAtomicBool + value: true + mirror: always + +#--------------------------------------------------------------------------- +# Prefs starting with "midi." +#--------------------------------------------------------------------------- + +- name: midi.testing + type: RelaxedAtomicBool + value: false + mirror: always + +#--------------------------------------------------------------------------- +# Prefs starting with "mousewheel." +#--------------------------------------------------------------------------- + +# This affects how line scrolls from wheel events will be accelerated. +# Factor to be multiplied for constant acceleration. +- name: mousewheel.acceleration.factor + type: RelaxedAtomicInt32 + value: 10 + mirror: always + +# This affects how line scrolls from wheel events will be accelerated. +# Number of mousewheel clicks when acceleration starts. +# Acceleration can be turned off if pref is set to -1. +- name: mousewheel.acceleration.start + type: RelaxedAtomicInt32 + value: -1 + mirror: always + +# Auto-dir is a feature which treats any single-wheel scroll as a scroll in the +# only one scrollable direction if the target has only one scrollable +# direction. For example, if the user scrolls a vertical wheel inside a target +# which is horizontally scrollable but vertical unscrollable, then the vertical +# scroll is converted to a horizontal scroll for that target. +# Note that auto-dir only takes effect for |mousewheel.*.action|s and +# |mousewheel.*.action.override_x|s whose values are 1. +- name: mousewheel.autodir.enabled + type: bool + value: false + mirror: always + +# When a wheel scroll is converted due to auto-dir, which side the converted +# scroll goes towards is decided by one thing called "honoured target". If the +# content of the honoured target horizontally starts from right to left, then +# an upward scroll maps to a rightward scroll and a downward scroll maps to a +# leftward scroll; otherwise, an upward scroll maps to a leftward scroll and a +# downward scroll maps to a rightward scroll. +# If this pref is set to false, then consider the scrolling target as the +# honoured target. +# If set to true, then consider the root element in the document where the +# scrolling target is as the honoured target. But note that there's one +# exception: for targets in an HTML document, the real root element(I.e. the +# <html> element) is typically not considered as a root element, but the <body> +# element is typically considered as a root element. If there is no <body> +# element, then consider the <html> element instead. +- name: mousewheel.autodir.honourroot + type: bool + value: false + mirror: always + +- name: mousewheel.system_scroll_override.enabled + type: RelaxedAtomicBool +#if defined(XP_WIN) || defined(MOZ_WIDGET_GTK) + value: true +#else + value: false +#endif + mirror: always + +# Prefs for overriding the system mouse wheel scrolling speed on +# content of the web pages. When +# "mousewheel.system_scroll_override.enabled" is true and the +# system scrolling speed isn't customized by the user, the content scrolling +# speed is multiplied by the following factors. The value will be used as +# 1/100. E.g., 200 means 2.00. +# NOTE: Even if "mousewheel.system_scroll_override.enabled" is +# true, when Gecko detects the user customized the system scrolling speed +# settings, the override isn't executed. +- name: mousewheel.system_scroll_override.horizontal.factor + type: RelaxedAtomicInt32 + value: 200 + mirror: always +- name: mousewheel.system_scroll_override.vertical.factor + type: RelaxedAtomicInt32 + value: 200 + mirror: always + +# Mouse wheel scroll transaction is held even if the mouse cursor is moved. +- name: mousewheel.transaction.ignoremovedelay + type: RelaxedAtomicInt32 + value: 100 + mirror: always + +# Mouse wheel scroll transaction period of time (in milliseconds). +- name: mousewheel.transaction.timeout + type: RelaxedAtomicInt32 + value: 1500 + mirror: always + +# Mouse wheel scroll position is determined by GetMessagePos rather than +# LPARAM msg value +- name: mousewheel.ignore_cursor_position_in_lparam + type: RelaxedAtomicBool + value: false + mirror: always + +# If line-height is lower than this value (in device pixels), 1 line scroll +# scrolls this height. +- name: mousewheel.min_line_scroll_amount + type: int32_t + value: 5 + mirror: always + +# Timeout period (in milliseconds) when the mouse wheel event is no longer +# handled as the same series. +- name: mousewheel.scroll_series_timeout + type: RelaxedAtomicInt32 + value: 80 + mirror: always + +#--------------------------------------------------------------------------- +# Prefs starting with "mozilla." +#--------------------------------------------------------------------------- + +- name: mozilla.widget.raise-on-setfocus + type: bool + value: true + mirror: once + +#--------------------------------------------------------------------------- +# Prefs starting with "network." +#--------------------------------------------------------------------------- + +# Force less-secure NTLMv1 when needed (NTLMv2 is the default). +- name: network.auth.force-generic-ntlm-v1 + type: RelaxedAtomicBool + value: false + mirror: always + +# Sub-resources HTTP-authentication: +# 0 - don't allow sub-resources to open HTTP authentication credentials +# dialogs +# 1 - allow sub-resources to open HTTP authentication credentials dialogs, +# but don't allow it for cross-origin sub-resources +# 2 - allow the cross-origin authentication as well. +- name: network.auth.subresource-http-auth-allow + type: uint32_t + value: 2 + mirror: always + +# Sub-resources HTTP-authentication for cross-origin images: +# - true: It is allowed to present http auth. dialog for cross-origin images. +# - false: It is not allowed. +# If network.auth.subresource-http-auth-allow has values 0 or 1 this pref does +# not have any effect. +- name: network.auth.subresource-img-cross-origin-http-auth-allow + type: bool + value: false + mirror: always + +# Resources that are triggered by some non-web-content: +# - true: They are allow to present http auth. dialog +# - false: They are not allow to present http auth. dialog. +- name: network.auth.non-web-content-triggered-resources-http-auth-allow + type: bool + value: false + mirror: always + +# Whether to show anti-spoof confirmation prompts when navigating to a url +# with userinfo +- name: network.auth.confirmAuth.enabled + type: bool + value: true + mirror: always + +# Whether to display auth prompts if X-Frame-Options header will block loading +# page +- name: network.auth.supress_auth_prompt_for_XFO_failures + type: bool + value: true + mirror: always + +# Whether to use new implementation of ParseReasm +- name: network.auth.use_new_parse_realm + type: RelaxedAtomicBool + value: true + mirror: always + +# Whether to use new implementation of ParseReasm +- name: network.auth.allow_multiple_challenges_same_line + type: RelaxedAtomicBool + value: true + mirror: always + +# Whether to use challenges in the most secure order. See bug 650091. +- name: network.auth.choose_most_secure_challenge + type: RelaxedAtomicBool + value: true + mirror: always + +# See the full list of values in nsICookieService.idl. +- name: network.cookie.cookieBehavior + type: RelaxedAtomicInt32 + value: 0 # accept all cookies + mirror: always + +# See the full list of values in nsICookieService.idl. +- name: network.cookie.rejectForeignWithExceptions.enabled + type: bool + value: false + mirror: always + +# The cookieBehavior to be used in Private Browsing mode. +- name: network.cookie.cookieBehavior.pbmode + type: RelaxedAtomicInt32 + value: 0 # accept all cookies + mirror: always + +# Stale threshold for cookies in seconds. +- name: network.cookie.staleThreshold + type: uint32_t + value: 60 + mirror: always + +- name: network.cookie.sameSite.laxByDefault + type: RelaxedAtomicBool + value: false + mirror: always + +# lax-by-default 2 minutes tollerance for unsafe methods. The value is in seconds. +- name: network.cookie.sameSite.laxPlusPOST.timeout + type: uint32_t + value: 120 + mirror: always + +# For lax-by-default cookies ignore cross-site redirects when the final +# redirect is same-site again. +# https://github.com/httpwg/http-extensions/issues/2104 +- name: network.cookie.sameSite.laxByDefault.allowBoomerangRedirect + type: bool + value: true + mirror: always + +- name: network.cookie.sameSite.noneRequiresSecure + type: bool + value: @IS_EARLY_BETA_OR_EARLIER@ + mirror: always + +- name: network.cookie.sameSite.schemeful + type: bool + value: false + mirror: always + +- name: network.cookie.thirdparty.sessionOnly + type: bool + value: false + mirror: always + +- name: network.cookie.thirdparty.nonsecureSessionOnly + type: bool + value: false + mirror: always + +# If we should not store "persistent" cookies at all, i.e., make the +# "persistent" storage be like "private" storage. This value is only read when +# instantiating persistent storage for the cookie service, which usually only +# happens when the cookie service singleton is created. +- name: network.cookie.noPersistentStorage + type: bool + value: false + mirror: always + +# If true then any cookies containing unicode will be rejected +- name: network.cookie.blockUnicode + type: RelaxedAtomicBool + value: false + mirror: always + +# If true cookies loaded from the sqlite DB that have a creation or +# last accessed time that is in the future will be fixed and the +# timestamps will be set to the current time. +- name: network.cookie.fixup_on_db_load + type: RelaxedAtomicBool + value: true + mirror: always + +# If we should attempt to race the cache and network. +- name: network.http.rcwn.enabled + type: bool + value: true + mirror: always + +- name: network.http.rcwn.cache_queue_normal_threshold + type: uint32_t + value: 8 + mirror: always + +- name: network.http.rcwn.cache_queue_priority_threshold + type: uint32_t + value: 2 + mirror: always + +# We might attempt to race the cache with the network only if a resource +# is smaller than this size. +- name: network.http.rcwn.small_resource_size_kb + type: uint32_t + value: 256 + mirror: always + +- name: network.http.rcwn.min_wait_before_racing_ms + type: uint32_t + value: 0 + mirror: always + +- name: network.http.rcwn.max_wait_before_racing_ms + type: uint32_t + value: 500 + mirror: always + +# false=real referer, true=spoof referer (use target URI as referer). +- name: network.http.referer.spoofSource + type: bool + value: false + mirror: always + +# Check whether we need to hide referrer when leaving a .onion domain. +# false=allow onion referer, true=hide onion referer (use empty referer). +- name: network.http.referer.hideOnionSource + type: bool + value: false + mirror: always + +# Include an origin header on non-GET and non-HEAD requests regardless of CORS. +# 0=never send, 1=send when same-origin only, 2=always send. +- name: network.http.sendOriginHeader + type: uint32_t + value: 2 + mirror: always + +# Whether to respect the redirected-tainted origin flag +# https://fetch.spec.whatwg.org/#concept-request-tainted-origin +- name: network.http.origin.redirectTainted + type: bool + value: true + mirror: always + +# Whether to strip auth headers for redirected fetch/xhr channels +# https://fetch.spec.whatwg.org/#http-redirect-fetch +- name: network.fetch.redirect.stripAuthHeader + type: RelaxedAtomicBool + value: true + mirror: always + +# Whether to strip auth headers for redirected http channels +# https://fetch.spec.whatwg.org/#http-redirect-fetch +- name: network.http.redirect.stripAuthHeader + type: RelaxedAtomicBool + value: true + mirror: always + +# Prefs allowing granular control of referers. +# 0=don't send any, 1=send only on clicks, 2=send on image requests as well +- name: network.http.sendRefererHeader + type: uint32_t + value: 2 + mirror: always + do_not_use_directly: true + +# The maximum allowed length for a referrer header - 4096 default. +# 0 means no limit. +- name: network.http.referer.referrerLengthLimit + type: uint32_t + value: 4096 + mirror: always + +# 0=always send, 1=send iff base domains match, 2=send iff hosts match. +- name: network.http.referer.XOriginPolicy + type: uint32_t + value: 0 + mirror: always + do_not_use_directly: true + +# 0=full URI, 1=scheme+host+port+path, 2=scheme+host+port. +- name: network.http.referer.trimmingPolicy + type: uint32_t + value: 0 + mirror: always + do_not_use_directly: true + +# 0=full URI, 1=scheme+host+port+path, 2=scheme+host+port. +- name: network.http.referer.XOriginTrimmingPolicy + type: uint32_t + value: 0 + mirror: always + do_not_use_directly: true + +# Set the default Referrer Policy; to be used unless overriden by the site. +# 0=no-referrer, 1=same-origin, 2=strict-origin-when-cross-origin, +# 3=no-referrer-when-downgrade. +- name: network.http.referer.defaultPolicy + type: uint32_t + value: 2 + mirror: always + +# Set the default Referrer Policy applied to third-party trackers when the +# default cookie policy is set to reject third-party trackers, to be used +# unless overriden by the site. +# 0=no-referrer, 1=same-origin, 2=strict-origin-when-cross-origin, +# 3=no-referrer-when-downgrade. +# Trim referrers from trackers to origins by default. +- name: network.http.referer.defaultPolicy.trackers + type: uint32_t + value: 2 + mirror: always + +# Set the Private Browsing Default Referrer Policy, to be used +# unless overriden by the site. +# 0=no-referrer, 1=same-origin, 2=strict-origin-when-cross-origin, +# 3=no-referrer-when-downgrade. +- name: network.http.referer.defaultPolicy.pbmode + type: uint32_t + value: 2 + mirror: always + +# Set to ignore referrer policies which is less restricted than the default for +# cross-site requests, including 'unsafe-url', 'no-referrer-when-downgrade' and +# 'origin-when-cross-origin'. +- name: network.http.referer.disallowCrossSiteRelaxingDefault + type: bool + value: true + mirror: always + +# Whether we ignore less restricted referrer policies for top navigations. +- name: network.http.referer.disallowCrossSiteRelaxingDefault.top_navigation + type: bool + value: false + mirror: always + + +# Set to ignore referrer policies which is less restricted than the default for +# cross-site requests in the private browsing mode, including 'unsafe-url', +# 'no-referrer-when-downgrade' and 'origin-when-cross-origin'. +- name: network.http.referer.disallowCrossSiteRelaxingDefault.pbmode + type: bool + value: true + mirror: always + +# Whether we ignore less restricted referrer policies for top navigations in the +# private browsing mode. +- name: network.http.referer.disallowCrossSiteRelaxingDefault.pbmode.top_navigation + type: bool + value: true + mirror: always + +# Set the Private Browsing Default Referrer Policy applied to third-party +# trackers when the default cookie policy is set to reject third-party +# trackers, to be used unless overriden by the site. +# 0=no-referrer, 1=same-origin, 2=strict-origin-when-cross-origin, +# 3=no-referrer-when-downgrade. +# No need to change this pref for trimming referrers from trackers since in +# private windows we already trim all referrers to origin only. +- name: network.http.referer.defaultPolicy.trackers.pbmode + type: uint32_t + value: 2 + mirror: always + +# Whether certain http header values should be censored out in logs. +# Specifically filters out "authorization" and "proxy-authorization". +- name: network.http.sanitize-headers-in-logs + type: RelaxedAtomicBool + value: true + mirror: always + +# Set this pref to an integer like 99 to override the User-Agent string's +# Firefox version. The value 0 means use the default Firefox version. If +# enterprise users rely on sites that aren't compatible with Firefox version +# 100's three-digit version number, enterprise admins can set this pref to a +# known-good version (like 99) in an enterprise policy file. +- name: network.http.useragent.forceVersion + type: uint32_t + value: 0 + mirror: always + +# Set this pref to an integer like 99 to override the User-Agent string's +# 'rv' bit. The value 0 means use the default Firefox version. We introduced +# this for Firefox 110 because it turned out websites used user agent parsing +# for "rv:11" to detect IE11. +- name: network.http.useragent.forceRVOnly + type: uint32_t + value: 109 + mirror: always + +# Whether or not we use Windows for SSO to Microsoft sites. +- name: network.http.windows-sso.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +# Whether windows-sso is enabled for the default (0) container. +# To enable SSO for additional containers, add a new pref like +# `network.http.windows-sso.container-enabled.${containerId}` = true +- name: network.http.windows-sso.container-enabled.0 + type: bool + value: true + mirror: never + +# The factor by which to increase the keepalive timeout when the +# NS_HTTP_LARGE_KEEPALIVE flag is used for a connection +- name: network.http.largeKeepaliveFactor + type: RelaxedAtomicUint32 + value: 10 + mirror: always + +# This preference, if true, causes all UTF-8 domain names to be normalized to +# punycode. The intention is to allow UTF-8 domain names as input, but never +# generate them from punycode. +- name: network.IDN_show_punycode + type: RelaxedAtomicBool + value: false + mirror: always + +# If set to true, IOService.offline depends on IOService.connectivity. +- name: network.offline-mirrors-connectivity + type: RelaxedAtomicBool + value: false + mirror: always + +# If set to true, disallow localhost connections when offline. +- name: network.disable-localhost-when-offline + type: RelaxedAtomicBool + value: false + mirror: always + +# Enables the predictive service. +- name: network.predictor.enabled + type: bool + value: true + mirror: always + +# Set true to allow resolving proxy for localhost +- name: network.proxy.allow_hijacking_localhost + type: RelaxedAtomicBool + value: false + mirror: always + +# This pref will still treat localhost URLs as secure even when hijacked +# during testing. This is necessary for automated testing to check that we +# actually treat localhost as a secure origin. +- name: network.proxy.testing_localhost_is_secure_when_hijacked + type: RelaxedAtomicBool + value: false + mirror: always + +# Allow CookieJarSettings to be unblocked for channels without a document. +# This is for testing only. +- name: network.cookieJarSettings.unblocked_for_testing + type: bool + value: false + mirror: always + +- name: network.predictor.enable-hover-on-ssl + type: bool + value: false + mirror: always + +- name: network.predictor.enable-prefetch + type: bool + value: @IS_EARLY_BETA_OR_EARLIER@ + mirror: always + +- name: network.predictor.page-degradation.day + type: int32_t + value: 0 + mirror: always +- name: network.predictor.page-degradation.week + type: int32_t + value: 5 + mirror: always +- name: network.predictor.page-degradation.month + type: int32_t + value: 10 + mirror: always +- name: network.predictor.page-degradation.year + type: int32_t + value: 25 + mirror: always +- name: network.predictor.page-degradation.max + type: int32_t + value: 50 + mirror: always + +- name: network.predictor.subresource-degradation.day + type: int32_t + value: 1 + mirror: always +- name: network.predictor.subresource-degradation.week + type: int32_t + value: 10 + mirror: always +- name: network.predictor.subresource-degradation.month + type: int32_t + value: 25 + mirror: always +- name: network.predictor.subresource-degradation.year + type: int32_t + value: 50 + mirror: always +- name: network.predictor.subresource-degradation.max + type: int32_t + value: 100 + mirror: always + +- name: network.predictor.prefetch-rolling-load-count + type: int32_t + value: 10 + mirror: always + +- name: network.predictor.prefetch-min-confidence + type: int32_t + value: 100 + mirror: always +- name: network.predictor.preconnect-min-confidence + type: int32_t + value: 90 + mirror: always +- name: network.predictor.preresolve-min-confidence + type: int32_t + value: 60 + mirror: always + +- name: network.predictor.prefetch-force-valid-for + type: int32_t + value: 10 + mirror: always + +- name: network.predictor.max-resources-per-entry + type: int32_t + value: 100 + mirror: always + +# This is selected in concert with max-resources-per-entry to keep memory +# usage low-ish. The default of the combo of the two is ~50k. +- name: network.predictor.max-uri-length + type: uint32_t + value: 500 + mirror: always + +# A testing flag. +- name: network.predictor.doing-tests + type: bool + value: false + mirror: always + +# Enables `<link rel="preload">` tag and `Link: rel=preload` response header +# handling. +- name: network.preload + type: RelaxedAtomicBool + value: true + mirror: always + +# Enables `<link rel="modulepreload">` tag and `Link: rel=modulepreload` +# response header handling. The latter is not yet implemented, see: +# https://bugzilla.mozilla.org/show_bug.cgi?id=1773056. +- name: network.modulepreload + type: RelaxedAtomicBool + value: true + mirror: always + +# Enable 103 Early Hint status code (RFC 8297) +- name: network.early-hints.enabled + type: RelaxedAtomicBool + value: @IS_EARLY_BETA_OR_EARLIER@ + mirror: always + +# Enable `Link: rel=preconnect` in 103 Early Hint response. +- name: network.early-hints.preconnect.enabled + type: RelaxedAtomicBool + value: @IS_EARLY_BETA_OR_EARLIER@ + mirror: always + +# The max number of speculative connections we allow for `Link: rel=preconnect`. +# When 0, the speculative connection created due to `Link: rel=preconnect` will +# be limited by "network.http.speculative-parallel-limit". +- name: network.early-hints.preconnect.max_connections + type: uint32_t + value: 10 + mirror: always + +# How long we should wait for EarlyHintPreloader to be used. +# Under normal circumstances it should be used immidiately. +- name: network.early-hints.parent-connect-timeout + type: uint32_t + value: 10000 + mirror: always + +# Whether to use the network process or not +# Start a separate socket process. Performing networking on the socket process +# is control by a sepparate pref +# ("network.http.network_access_on_socket_process.enabled"). +# Changing these prefs requires a restart. +- name: network.process.enabled + type: RelaxedAtomicBool + mirror: always +#if defined(ANDROID) || defined(MOZ_THUNDERBIRD) + value: false # see bug 1641427 +#else + value: true +#endif + +# Whether we can send OnDataAvailable to content process directly. +- name: network.send_ODA_to_content_directly + type: RelaxedAtomicBool + value: true + mirror: always + +# Perform all network access on the socket process. +# The pref requires "network.process.enabled" to be true. +# Changing these prefs requires a restart. +- name: network.http.network_access_on_socket_process.enabled + type: RelaxedAtomicBool + mirror: always + value: false + +# Telemetry of traffic categories. Whether or not to enable HttpTrafficAnalyzer. +- name: network.traffic_analyzer.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# Whether DNS resolution is limited to literals and cached entries. +- name: network.dns.disabled + type: RelaxedAtomicBool + value: false + mirror: always + +# Whether DNS resolution is limited to literals and cached entries. +- name: network.dns.skipTRR-when-parental-control-enabled + type: RelaxedAtomicBool + value: true + mirror: always + +- name: network.dns.disablePrefetchFromHTTPS + type: bool + value: true + mirror: always + +# Max time to shutdown the resolver threads +- name: network.dns.resolver_shutdown_timeout_ms + type: uint32_t + value: 2000 + mirror: always + +# When true on Windows DNS resolutions for single label domains +# (domains that don't contain a dot) will be resolved using the DnsQuery +# API instead of PR_GetAddrInfoByName +- name: network.dns.dns_query_single_label + type: RelaxedAtomicBool + value: false + mirror: always + +# When this pref is true we enforce a 253 character limit on domains we try to +# resolve. See bug 1264117. If it doesn't cause any web-compat issues we can +# remove it in a few releases +- name: network.dns.limit_253_chars + type: RelaxedAtomicBool + value: true + mirror: always + +# When this pref is true, we copy the host name to a fresh string before +# calling into getaddrinfo. +- name: network.dns.copy_string_before_call + type: RelaxedAtomicBool + value: true + mirror: always + +- name: network.dns.max_high_priority_threads + type: RelaxedAtomicUint32 + value: 5 + mirror: always + +- name: network.dns.max_any_priority_threads + type: RelaxedAtomicUint32 + value: 3 + mirror: always + +# The proxy type. See nsIProtocolProxyService.idl +# PROXYCONFIG_DIRECT = 0 +# PROXYCONFIG_MANUAL = 1 +# PROXYCONFIG_PAC = 2 +# PROXYCONFIG_WPAD = 4 +# PROXYCONFIG_SYSTEM = 5 +- name: network.proxy.type + type: RelaxedAtomicUint32 + value: 5 + mirror: always + +# Whether the SOCKS proxy should be in charge of DNS resolution. +- name: network.proxy.socks_remote_dns + type: RelaxedAtomicBool + value: false + mirror: always + +# When receiving a network change event, the time (in ms) we wait to reload the +# PAC url. +- name: network.proxy.reload_pac_delay + type: RelaxedAtomicUint32 + value: 2000 + mirror: always + +# When parsing "SOCKS" in PAC string, the default version of SOCKS that will be +# used. +- name: network.proxy.default_pac_script_socks_version + type: RelaxedAtomicUint32 + value: 4 + mirror: always + +# Whether to force failover to direct for system requests. +#ifdef MOZ_PROXY_DIRECT_FAILOVER +- name: network.proxy.failover_direct + type: bool + value: true + mirror: always +#endif + +# Whether to allow a bypass flag to be set on httpChannel that will +# prevent proxies from being used for that specific request. +- name: network.proxy.allow_bypass + type: bool +#ifdef MOZ_PROXY_BYPASS_PROTECTION + value: false +#else + value: true +#endif + mirror: always + +- name: network.proxy.parse_pac_on_socket_process + type: RelaxedAtomicBool + value: false + mirror: always + +- name: network.proxy.detect_system_proxy_changes + type: RelaxedAtomicBool + value: false + mirror: always + +# If all non-direct proxies have failed, we retry all of them in case they +# are online now. +- name: network.proxy.retry_failed_proxies + type: RelaxedAtomicBool + value: true + mirror: always + +# Some requests during a page load are marked as "tail", mainly trackers, but not only. +# This pref controls whether such requests are put to the tail, behind other requests +# emerging during page loading process. +- name: network.http.tailing.enabled + type: bool + value: true + mirror: always + +# Whether to run proxy checks when processing Alt-Svc headers. +- name: network.http.altsvc.proxy_checks + type: bool + value: true + mirror: always + +- name: network.http.stale_while_revalidate.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# Capacity of the above cache, in kilobytes. +- name: network.ssl_tokens_cache_capacity + type: RelaxedAtomicUint32 + value: 2048 + mirror: always + +# How many records we store per entry +- name: network.ssl_tokens_cache_records_per_entry + type: RelaxedAtomicUint32 + value: 2 + mirror: always + +# If true, only use the token once +- name: network.ssl_tokens_cache_use_only_once + type: RelaxedAtomicBool + value: true + mirror: always + +# The maximum allowed length for a URL - 1MB default. +- name: network.standard-url.max-length + type: RelaxedAtomicUint32 + value: 1048576 + mirror: always + +# DNS Trusted Recursive Resolver +# 0 - default off, 1 - reserved/off, 2 - TRR first, 3 - TRR only, +# 4 - reserved/off, 5 off by choice +- name: network.trr.mode + type: RelaxedAtomicUint32 + value: 0 + mirror: always + +# Default global TRR provider +- name: network.trr.default_provider_uri + type: String + value: "https://mozilla.cloudflare-dns.com/dns-query" + mirror: never + +# If true, retry TRR for recoverable errors once. +- name: network.trr.retry_on_recoverable_errors + type: RelaxedAtomicBool + value: true + mirror: always + +# If true, don't fallback to native DNS upon network errors. +- name: network.trr.strict_native_fallback + type: RelaxedAtomicBool + value: false + mirror: always + +# If true, we'll fallback to native if the retry also times out. +- name: network.trr.strict_native_fallback_allow_timeouts + type: RelaxedAtomicBool + value: true + mirror: always + +# Single TRR request timeout (ms) when strict native fallback is enabled. +- name: network.trr.strict_fallback_request_timeout_ms + type: RelaxedAtomicUint32 + value: 6000 + mirror: always + +# If false, the temporary blocklisting feature is disabled. +# This is useful for tests to prevent bleeding extra reqs +# between tasks, since we may attempt to look up the +# parent domain in the background when blocklisting a host. +- name: network.trr.temp_blocklist + type: RelaxedAtomicBool + value: true + mirror: always + +# TRR blocklist entry expire time (in seconds). Default is one minute. +# Meant to survive basically a page load. +- name: network.trr.temp_blocklist_duration_sec + type: RelaxedAtomicUint32 + value: 60 + mirror: always + +# Single TRR request timeout, in milliseconds +- name: network.trr.request_timeout_ms + type: RelaxedAtomicUint32 + value: 1500 + mirror: always + +# Single TRR request timeout, in milliseconds for mode 3 +- name: network.trr.request_timeout_mode_trronly_ms + type: RelaxedAtomicUint32 + value: 30000 + mirror: always + +# Similar to network.http.http2.ping-timeout, but this is used when the +# Http/2 connection is connected to the TRR server. +- name: network.trr.ping_timeout + type: RelaxedAtomicUint32 + value: 3000 + mirror: always + +# The timeout of the TRR confirmation request +- name: network.trr.confirmation_timeout_ms + type: RelaxedAtomicUint32 + value: 6000 + mirror: always + +# The timeout of the TRR confirmation request +- name: network.trr.confirmation_telemetry_enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# Whether to send the Accept-Language header for TRR requests +- name: network.trr.send_accept-language_headers + type: RelaxedAtomicBool + value: false + mirror: always + +# Whether to send an empty Accept-Encoding header for TRR requests +- name: network.trr.send_empty_accept-encoding_headers + type: RelaxedAtomicBool + value: true + mirror: always + +# Whether to send the User-Agent header for TRR requests +- name: network.trr.send_user-agent_headers + type: RelaxedAtomicBool + value: false + mirror: always + +# This pref controls whether to use TRRServiceChannel off main thread. +- name: network.trr.fetch_off_main_thread + type: RelaxedAtomicBool + value: true + mirror: always + +# If we should wait for captive portal confirmation before enabling TRR +- name: network.trr.wait-for-portal + type: RelaxedAtomicBool + value: false + mirror: always + +# If we should wait for TRR service confirmation to complete before enabling +# TRR for lookups when fallback is enabled. Confirmation is always skipped when +# global mode is TRR-only (no fallback). +- name: network.trr.wait-for-confirmation + type: RelaxedAtomicBool + value: false + mirror: always + +# Normally when confirmation fails we wait for the confirmation to succeed +# before attempting to do TRR. When this pref is true, we optimistically +# assume the confirmation will succeed and might attempt TRR anyway. +# If network.trr.wait-for-confirmation is true, this pref is ignored. +- name: network.trr.attempt-when-retrying-confirmation + type: RelaxedAtomicBool + value: false + mirror: always + +# Use GET (rather than POST) +- name: network.trr.useGET + type: RelaxedAtomicBool + value: false + mirror: always + +# Allow RFC1918 address in responses? +- name: network.trr.allow-rfc1918 + type: RelaxedAtomicBool + value: false + mirror: always + +# When true, it only sends AAAA when the system has IPv6 connectivity +- name: network.trr.skip-AAAA-when-not-supported + type: RelaxedAtomicBool + value: true + mirror: always + +# Whether to apply split horizon mitigations when using TRR. +# These include adding the DNS suffix to the excluded domains +- name: network.trr.split_horizon_mitigations + type: RelaxedAtomicBool + value: true + mirror: always + +# Explicitly disable ECS (EDNS Client Subnet, RFC 7871) +- name: network.trr.disable-ECS + type: RelaxedAtomicBool + value: true + mirror: always + +# When true, the DNS+TRR cache will be cleared when a relevant TRR pref +# changes. (uri, bootstrapAddress, excluded-domains) +- name: network.trr.clear-cache-on-pref-change + type: RelaxedAtomicBool + value: true + mirror: always + +# After this many failed TRR requests in a row, consider TRR borked +- name: network.trr.max-fails + type: RelaxedAtomicUint32 + value: 15 + mirror: always + +# When the TRR confirmation is set to CONFIRM_FAILED due to many failures in +# a row, we set a timer to retry. This has an exponential backoff up to +# 64 seconds. +- name: network.trr.retry-timeout-ms + type: RelaxedAtomicUint32 + value: 125 + mirror: always + +# Retry with no TRR when the response contained only 0.0.0.0 or :: +- name: network.trr.fallback-on-zero-response + type: RelaxedAtomicBool + value: false + mirror: always + +# If true we parse the /etc/hosts file and exclude any host names from TRR. +# Reading the file is only done once, when TRR is first enabled - this could be +# soon after startup or when the pref is flipped. +- name: network.trr.exclude-etc-hosts + type: RelaxedAtomicBool + value: true + mirror: always + +# Whether to add padding in the doh dns queries (rfc 7830) +- name: network.trr.padding + type: RelaxedAtomicBool + value: true + mirror: always + +# The block size to pad to. Capped at 1024 bytes. +# Setting it to 0 doesn't add additional padding, but allows the server to +# respond with padding (RFC7930 Sec 4) +- name: network.trr.padding.length + type: RelaxedAtomicUint32 + value: 128 + mirror: always + +# Whether to skip the NS check for the blocked host. +# Note this is used for test only. +- name: network.trr.skip-check-for-blocked-host + type: RelaxedAtomicBool + value: false + mirror: always + +# Whether to use the connection info that is generated asynchronously. +- name: network.trr.async_connInfo + type: RelaxedAtomicBool + value: false + mirror: always + +# The base URL of the `Learn more` button for skip reasons +- name: network.trr_ui.skip_reason_learn_more_url + type: String + value: "https://firefox-source-docs.mozilla.org/networking/dns/trr-skip-reasons.html#" + mirror: never + +# If true, display a warning before fallback to native +- name: network.trr.display_fallback_warning + type: RelaxedAtomicBool + value: false + mirror: always + +# Heuristics in this list will trigger the fallback to native warning +- name: network.trr.fallback_warning_heuristic_list + type: String + value: "canary" + mirror: never + +# Use Oblivious HTTP when making TRR requests. +- name: network.trr.use_ohttp + type: RelaxedAtomicBool + value: false + mirror: always + +# Oblivious HTTP relay URI for TRR requests. +- name: network.trr.ohttp.relay_uri + type: String + value: "" + mirror: never + +# URI from which to fetch the configuration for the Oblivious HTTP gateway for TRR requests. +- name: network.trr.ohttp.config_uri + type: String + value: "" + mirror: never + +# The URI used for the target DoH server when network.trr.use_ohttp is true +- name: network.trr.ohttp.uri + type: String + value: "" + mirror: never + +# Allow the network changed event to get sent when a network topology or setup +# change is noticed while running. +- name: network.notify.changed + type: RelaxedAtomicBool + value: true + mirror: always + +# Allow network detection of IPv6 related changes (bug 1245059) +- name: network.notify.IPv6 + type: RelaxedAtomicBool +#ifdef XP_WIN + value: false +#else + value: true +#endif + mirror: always + +# Whether to check the dnsSuffix on network changes +- name: network.notify.dnsSuffixList + type: RelaxedAtomicBool + value: true + mirror: always + +# Whether to check the registry for proxies on network changes that indicate +# that TRR should not be used. +- name: network.notify.checkForProxies + type: RelaxedAtomicBool + value: true + mirror: always + +# Whether to check the registry for NRPT rules on network changes that +# indicate that TRR should not be used. +- name: network.notify.checkForNRPT + type: RelaxedAtomicBool + value: true + mirror: always + +# Whether NotifyIpInterfaceChange should be called immediately after +# registration in order to record the initial state of the network adapters. +- name: network.notify.initial_call + type: RelaxedAtomicBool + value: true + mirror: always + +# Whether to check for DNS resolvers +- name: network.notify.resolvers + type: RelaxedAtomicBool + value: true + mirror: always + +# Whether to use the rust implemented DefaultURI for unknown scheme types +- name: network.url.useDefaultURI + type: RelaxedAtomicBool + value: false + mirror: always + +# The maximum allowed length for a URL - 32MB default. +# If 0 that means no limit. +- name: network.url.max-length + type: RelaxedAtomicUint32 + value: 32 * 1024 * 1024 + mirror: always + +# Should be removed if no breakage occurs. See bug 1797846 +- name: network.url.strip-data-url-whitespace + type: RelaxedAtomicBool + value: false + mirror: always + +# Force remapping of remote port numbers to allow reaching local testing +# servers or port forwarders listening on non-standard ports. Note that +# this is not changing the origin URL in the addressbar, only internally +# the port number used. This is intended to be used along with the +# `network.dns.forceResolve` preference. +# +# The form is: +# "80,443,808-888=8080; 563=8081" +# this will remap ports for HTTP, HTTPS and the range of 808-888 included +# to use port 8080, and port 563 to go to 8081. +- name: network.socket.forcePort + type: String + value: "" + mirror: never + +# Try and use HTTP2 when using SSL +- name: network.http.http2.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +- name: network.http.http2.enabled.deps + type: RelaxedAtomicBool + value: true + mirror: always + +- name: network.http.http2.enforce-tls-profile + type: RelaxedAtomicBool + value: true + mirror: always + +- name: network.http.http2.chunk-size + type: RelaxedAtomicInt32 + value: 16000 + mirror: always + +- name: network.http.http2.timeout + type: RelaxedAtomicInt32 + value: 170 + mirror: always + +- name: network.http.http2.coalesce-hostnames + type: RelaxedAtomicBool + value: true + mirror: always + +- name: network.http.http2.persistent-settings + type: RelaxedAtomicBool + value: false + mirror: always + +- name: network.http.http2.ping-threshold + type: RelaxedAtomicInt32 + value: 58 + mirror: always + +- name: network.http.http2.ping-timeout + type: RelaxedAtomicInt32 + value: 8 + mirror: always + +- name: network.http.http2.send-buffer-size + type: RelaxedAtomicInt32 + value: 0 + mirror: always + +- name: network.http.http2.allow-push + type: RelaxedAtomicBool + value: true + mirror: always + +- name: network.http.http2.push-allowance + type: RelaxedAtomicInt32 + value: 131072 # 128KB + mirror: always + +- name: network.http.http2.pull-allowance + type: RelaxedAtomicInt32 + value: 12582912 # 12MB + mirror: always + +- name: network.http.http2.default-concurrent + type: RelaxedAtomicInt32 + value: 100 + mirror: always + +- name: network.http.http2.default-hpack-buffer + type: RelaxedAtomicInt32 + value: 65536 # 64K + mirror: always + +- name: network.http.http2.websockets + type: RelaxedAtomicBool + value: true + mirror: always + +- name: network.http.http2.enable-hpack-dump + type: RelaxedAtomicBool + value: false + mirror: always + +# Enable HTTP/3 +- name: network.http.http3.enable + type: RelaxedAtomicBool + value: true + mirror: always + +# Receive buffer size of QUIC socket +- name: network.http.http3.recvBufferSize + type: RelaxedAtomicInt32 + value: 1048576 + mirror: always + +- name: network.http.http3.enable_qlog + type: RelaxedAtomicBool + value: false + mirror: always + +- name: network.http.http3.enable_0rtt + type: RelaxedAtomicBool + value: true + mirror: always + +# When a h3 transaction is inserted in the pending queue, the time (ms) we wait +# to create a TCP backup connection. +- name: network.http.http3.backup_timer_delay + type: RelaxedAtomicUint32 + value: 100 + mirror: always + +# The global half open sockets allowed for creating a backup connection. +- name: network.http.http3.parallel_fallback_conn_limit + type: RelaxedAtomicUint32 + value: 32 + mirror: always + +# Receive buffer size of QUIC socket +- name: network.http.http3.max_data + type: RelaxedAtomicUint32 + value: 25165824 + mirror: always + +# Receive buffer size of QUIC socket +- name: network.http.http3.max_stream_data + type: RelaxedAtomicUint32 + value: 12582912 + mirror: always + +# Enable http3 network priority as described in +# https://httpwg.org/http-extensions/draft-ietf-httpbis-priority.html +- name: network.http.http3.priority + type: RelaxedAtomicBool + value: true + mirror: always + +# Depriorizing background tabs notifies websites when switching to or from the +# tab while still loading resources for the website. On one hand it might +# improve performance when switching to an tab with a website using the same +# QUIC connection. On the other hand it sends more data to the website and +# might be a privacy concern. +- name: network.http.http3.send_background_tabs_deprioritization + type: RelaxedAtomicBool + value: false + mirror: always + +- name: network.http.http3.version_negotiation.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +# When a Http/3 connection failed, whether to retry with a different IP address. +- name: network.http.http3.retry_different_ip_family + type: RelaxedAtomicBool + value: false + mirror: always + +# This is for testing purpose. When true, nsUDPSocket::SendWithAddress will +# return NS_ERROR_CONNECTION_REFUSED for address "::1". +- name: network.http.http3.block_loopback_ipv6_addr + type: RelaxedAtomicBool + value: false + mirror: always + +# When true, a http request will be upgraded to https when HTTPS RR is +# available. +- name: network.dns.upgrade_with_https_rr + type: RelaxedAtomicBool + value: true + mirror: always + +# Whether to use HTTPS RR as AltSvc +- name: network.dns.use_https_rr_as_altsvc + type: RelaxedAtomicBool + value: true + mirror: always + +# Whether to check for NAT64 using the system resolver +- name: network.connectivity-service.nat64-check + type: bool + value: true + mirror: always + +# Manually enter the NAT64 prefix that will be used if IPv4 is unavailable. +# The value is formatted as IPv6 with the least significant bits to be dropped. +# For example, 64:ff9b:: is a common prefix. This will not disable +# the NAT64 check, although the value of this pref will be prioritized. +- name: network.connectivity-service.nat64-prefix + type: String + value: "" + mirror: never + +# Whether to enable echconfig. +- name: network.dns.echconfig.enabled + type: RelaxedAtomicBool + value: @IS_NIGHTLY_BUILD@ + mirror: always + +# Whether to enable echconfig for http3. +- name: network.dns.http3_echconfig.enabled + type: RelaxedAtomicBool + value: @IS_NIGHTLY_BUILD@ + mirror: always + +# This pref needs to be worked together with network.dns.echconfig.enabled +# being true and there is no record without ECHConfig. +# When we try all records with ECHConfig in HTTPS RRs and still can't connect, +# this pref indicate whether we can fallback to the origin server. +- name: network.dns.echconfig.fallback_to_origin_when_all_failed + type: RelaxedAtomicBool + value: @IS_NOT_NIGHTLY_BUILD@ + mirror: always + +# When true, reset the exclusion list when all records are excluded. +- name: network.dns.httpssvc.reset_exclustion_list + type: RelaxedAtomicBool + value: true + mirror: always + +# If the http3 connection cannot be ready after the timeout value here, the +# transaction will start another non-http3 conneciton. +# Setting this value to 0 indicates this feature is disabled. +- name: network.dns.httpssvc.http3_fast_fallback_timeout + type: RelaxedAtomicUint32 + value: 50 + mirror: always + +# Whether to force a transaction to wait https rr. +- name: network.dns.force_waiting_https_rr + type: RelaxedAtomicBool + value: @IS_NIGHTLY_BUILD@ + mirror: always + +# The TTL for negative responses of TXT and HTTPS records. +- name: network.dns.negative_ttl_for_type_record + type: RelaxedAtomicUint32 + value: 300 # 5 minutes (in seconds) + mirror: always + +# Whether to use port prefixed QNAME for HTTPS RR +- name: network.dns.port_prefixed_qname_https_rr + type: RelaxedAtomicBool + value: false + mirror: always + +# Whether to use HTTPS RR and ignore NS_HTTP_DISALLOW_HTTPS_RR +# This pref is only set when running tests +- name: network.dns.force_use_https_rr + type: RelaxedAtomicBool + value: false + mirror: always + +- name: network.cache.frecency_array_check_enabled + type: RelaxedAtomicBool + value: @IS_EARLY_BETA_OR_EARLIER@ + mirror: always + +# When this pref is true, AddStorageEntry will return an error if the +# OPEN_READONLY & OPEN_SECRETLY flags are passed and no entry exists. +# If no regressions occur this pref should be removed. +- name: network.cache.bug1708673 + type: RelaxedAtomicBool + value: false + mirror: always + +# When true we will dispatch a background task (separate process) to +# delete the cache folder at shutdown in order to avoid shutdown hangs. +- name: network.cache.shutdown_purge_in_background_task + type: RelaxedAtomicBool +#if defined(XP_WIN) + value: true +#else + value: false +#endif + mirror: always + +# Number of seconds to wait for the cache folder to be renamed before +# the background task forcefully exists. +- name: network.cache.shutdown_purge_folder_wait_seconds + type: RelaxedAtomicUint32 + value: 10 + mirror: always + +# This is used for a temporary workaround for a web-compat issue. If pref is +# true CORS preflight requests are allowed to send client certificates. +- name: network.cors_preflight.allow_client_cert + type: RelaxedAtomicBool + value: false + mirror: always + +# If true nsCORSListenerProxy will reject any URL that contains user & password +# regardless if it's a redirect or not. When false nsCORSListenerProxy will +# only reject URLs with a username and password when they happen on a redirected +# channel. +- name: network.cors_preflight.block_userpass_uri + type: RelaxedAtomicBool + value: false + mirror: always + +# Whether to record the telemetry event when a JAR channel is failed to load. +- name: network.jar.record_failure_reason + type: RelaxedAtomicBool + value: @IS_EARLY_BETA_OR_EARLIER@ + mirror: always + +# nsJARInputStream::Available returns the size indicated by the archived entry +# so we need a limit so we don't OOM if the archive is corrupted. +- name: network.jar.max_available_size + type: RelaxedAtomicUint32 + value: 256*1024*1024 # 256 Mb + mirror: always + +# Whether JAR entries that defate to a different size than RealSize/orglen +# are considered corrupted or not +- name: network.jar.require_size_match + type: RelaxedAtomicBool + value: true + mirror: always + +# When this pref is true we clear the Content-Encoding header for +# application/x-gzip Content-Type responses, see bug 1030660. +# +# Assuming there are no regressions, this pref and related code should be +# removed. +- name: network.http.clear_bogus_content_encoding + type: RelaxedAtomicBool + value: false + mirror: always + +# When this pref is true, we will use the HTTPS acceptable content encoding +# list for trustworthy domains such as http://localhost +- name: network.http.encoding.trustworthy_is_https + type: RelaxedAtomicBool + value: true + mirror: always + +# Support http3 version1 +- name: network.http.http3.support_version1 + type: RelaxedAtomicBool + value: true + mirror: always + +# Disable early data on an origin if SSL_ERROR_PROTOCOL_VERSION_ALERT is received +- name: network.http.early_data_disable_on_error + type: RelaxedAtomicBool + value: true + mirror: always + +# Disable early data if it fails for more than this number of origins +- name: network.http.early_data_max_error + type: RelaxedAtomicUint32 + value: 5 + mirror: always + + # If true, remove the resumption token when 0RTT failed. +- name: network.http.remove_resumption_token_when_early_data_failed + type: RelaxedAtomicBool + value: true + mirror: always + +# The maximum count that we allow socket prrocess to crash. If this count is +# reached, we won't use networking over socket process. +- name: network.max_socket_process_failed_count + type: RelaxedAtomicUint32 + value: 1 + mirror: always + +- name: network.allow_redirect_to_data + type: RelaxedAtomicBool + value: false + mirror: always + +- name: network.allow_raw_sockets_in_content_processes + type: bool + value: false + mirror: once + +- name: network.allow_large_stack_size_for_socket_thread + type: RelaxedAtomicBool + value: true + mirror: always + +# WebTransport +- name: network.webtransport.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# WebTransport Datagram support +- name: network.webtransport.datagrams.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# WebTransport Datagram size +- name: network.webtransport.datagram_size + type: RelaxedAtomicUint32 + value: 1200 + mirror: always + +# WebTransport Redirect support +- name: network.webtransport.redirect.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +# Wifi-scan polling period, in ms, when on a mobile network. +# A value of 0 indicates that no polling should be done. +- name: network.wifi.scanning_period + type: RelaxedAtomicUint32 + value: 60000 + mirror: always + +# When the Access-Control-Allow-Headers is wildcard (*), whether to allow +# CORS-protected requests with the Authorization request header. +- name: network.cors_preflight.authorization_covered_by_wildcard + type: bool + value: true + mirror: always + +#--------------------------------------------------------------------------- +# Prefs starting with "nglayout." +#--------------------------------------------------------------------------- + +# Enable/disable display list invalidation logging --- useful for debugging. +- name: nglayout.debug.invalidation + type: bool + value: false + mirror: always + +# Enable/disable widget update area flashing --- only supported with +# BasicLayers (other layer managers always update the entire widget area). +- name: nglayout.debug.widget_update_flashing + type: RelaxedAtomicBool + value: false + mirror: always + +- name: nglayout.debug.disable_xul_cache + type: bool + value: false + mirror: always + +- name: nglayout.initialpaint.delay + type: int32_t + value: 5 + mirror: always + +- name: nglayout.initialpaint.delay_in_oopif + type: int32_t + value: 5 + mirror: always + +#--------------------------------------------------------------------------- +# Prefs starting with "page_load." +#--------------------------------------------------------------------------- + +# Time in milliseconds during which certain tasks are deprioritized during +# page load. +- name: page_load.deprioritization_period + type: RelaxedAtomicUint32 + value: 5000 + mirror: always + +#--------------------------------------------------------------------------- +# Prefs starting with "pdfjs." +#--------------------------------------------------------------------------- + +- name: pdfjs.disabled + type: bool + value: false + mirror: always + +#--------------------------------------------------------------------------- +# Prefs starting with "permissions." +#--------------------------------------------------------------------------- + +# 1-Accept, 2-Deny, Any other value: Accept +- name: permissions.default.image + type: RelaxedAtomicUint32 + value: 1 + mirror: always + +- name: permissions.delegation.enabled + type: bool + value: true + mirror: always + +- name: permissions.isolateBy.userContext + type: RelaxedAtomicBool + value: false + mirror: always + +- name: permissions.isolateBy.privateBrowsing + type: RelaxedAtomicBool + value: true + mirror: always + +#--------------------------------------------------------------------------- +# Prefs starting with "places." +#--------------------------------------------------------------------------- + +# Whether pages alternative frecency is enabled. This and the following related +# prefs only apply at restart. +- name: places.frecency.pages.alternative.featureGate + type: bool + value: false + mirror: once + +- name: places.frecency.pages.alternative.highWeight + type: uint32_t + value: 100 + mirror: once + +- name: places.frecency.pages.alternative.mediumWeight + type: uint32_t + value: 50 + mirror: once + +- name: places.frecency.pages.alternative.lowWeight + type: uint32_t + value: 20 + mirror: once + +- name: places.frecency.pages.alternative.halfLifeDays + type: uint32_t + value: 30 + mirror: once + +- name: places.frecency.pages.alternative.numSampledVisits + type: uint32_t + value: 10 + mirror: once + +#--------------------------------------------------------------------------- +# Prefs starting with "plain_text." +#--------------------------------------------------------------------------- + +# When false, text in plaintext documents does not wrap long lines. +- name: plain_text.wrap_long_lines + type: bool + value: true + mirror: always + +#--------------------------------------------------------------------------- +# Prefs starting with "preferences." +#--------------------------------------------------------------------------- + +- name: preferences.allow.omt-write + type: bool + value: true + mirror: never + +#ifdef DEBUG + # If set to true, setting a Preference matched to a `Once` StaticPref will + # assert that the value matches. Such assertion being broken is a clear flag + # that the Once policy shouldn't be used. +- name: preferences.check.once.policy + type: bool + value: false + mirror: always + + # If set to true, StaticPrefs Once policy check will be skipped during + # automation regression test. Use with care. This pref must be set back to + # false as soon as specific test has completed. +- name: preferences.force-disable.check.once.policy + type: bool + value: false + mirror: always +#endif + +#--------------------------------------------------------------------------- +# Prefs starting with "print." +#--------------------------------------------------------------------------- + +# Variation fonts can't always be embedded in certain output formats +# such as PDF. To work around this, draw the variation fonts using +# paths instead of using font embedding. +- name: print.font-variations-as-paths + type: RelaxedAtomicBool + value: true + mirror: always + +# Whether we always print silently (without a print dialog). +- name: print.always_print_silent + type: RelaxedAtomicBool + value: false + mirror: always + +# Whether we attempt to generate links in Save As PDF output. +- name: print.save_as_pdf.links.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# Whether we attempt to generate and use document-internal PDF destinations. +# This currently sometimes results in an internal cairo error, see bug 1725743; +# disabled by default until that is resolved. +- name: print.save_as_pdf.internal_destinations.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +# Whether we use the CSS @page size as the paper size in PDF output. +- name: print.save_as_pdf.use_page_rule_size_as_paper_size.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# The default DPI for printing. +# +# For PDF-based output, DPI should ideally be irrelevant, but in fact it is not +# for multiple reasons: +# +# * Layout code that tries to respect device pixels (e.g. for snapping glyph +# positions and baselines, and especially for the "GDI Classic" +# rendering-mode threshold for certain fonts). +# +# * The limitations of the PDF format mean that we can't natively represent +# certain effects, such as filters, in PDF output, so we need to rasterize +# the parts of the document with these applied. +# +# * Other rasterized things like images and such are also affected by DPI +# (both in the output, and the images we select via srcset, for example). +# +# Therefore, using a high DPI is preferable. For now, we use 144dpi to match +# physical printer output on Windows, but higher (e.g. 300dpi) might be better, +# but only if it does not lead to issues such as excessive memory use. +- name: print.default_dpi + type: float + value: 144.0f + mirror: always + +# Whether support for monochrome printing is enabled for CUPS. +- name: print.cups.monochrome.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# Disabling this will no-op window.print() +- name: print.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# The maximum amount of time CUPS should spend enumerating print destinations +# (in milliseconds). +# The default value chosen here is completely arbitrary. +- name: print.cups.enum_dests_timeout_ms + type: RelaxedAtomicUint32 + value: 150 + mirror: always + +#--------------------------------------------------------------------------- +# Prefs starting with "privacy." +#--------------------------------------------------------------------------- + +- name: privacy.fuzzyfox.clockgrainus + type: RelaxedAtomicUint32 + value: 100 + mirror: always + +# Annotate trackers using the strict list. If set to false, the basic list will +# be used instead. +- name: privacy.annotate_channels.strict_list.enabled + type: bool + value: @IS_EARLY_BETA_OR_EARLIER@ + mirror: always + +# Annotate trackers using the strict list in the private browsing mode. If set +# to false, the basic list will be used instead. +- name: privacy.annotate_channels.strict_list.pbmode.enabled + type: bool + value: true + mirror: always + +# First Party Isolation (double keying), disabled by default. +- name: privacy.firstparty.isolate + type: RelaxedAtomicBool + value: false + mirror: always + +# If false, two windows in the same domain with different first party domains +# (top level URLs) can access resources through window.opener. This pref is +# effective only when "privacy.firstparty.isolate" is true. +- name: privacy.firstparty.isolate.restrict_opener_access + type: RelaxedAtomicBool + value: true + mirror: always + +- name: privacy.firstparty.isolate.block_post_message + type: RelaxedAtomicBool + value: false + mirror: always + +- name: privacy.firstparty.isolate.use_site + type: RelaxedAtomicBool + value: false + mirror: always + +# Enforce tracking protection in all modes. +- name: privacy.trackingprotection.enabled + type: bool + value: false + mirror: always + +# Enforce tracking protection in Private Browsing mode. +- name: privacy.trackingprotection.pbmode.enabled + type: bool + value: true + mirror: always + +# Annotate channels based on the tracking protection list in all modes +- name: privacy.trackingprotection.annotate_channels + type: bool + value: true + mirror: always + +# Block 3rd party fingerprinting resources. +- name: privacy.trackingprotection.fingerprinting.enabled + type: bool + value: false + mirror: always + +# Block 3rd party cryptomining resources. +- name: privacy.trackingprotection.cryptomining.enabled + type: bool + value: false + mirror: always + +# Block 3rd party socialtracking resources. +- name: privacy.trackingprotection.socialtracking.enabled + type: bool + value: false + mirror: always + +# Consider socialtracking annotation as trackers (see ETP). +- name: privacy.socialtracking.block_cookies.enabled + type: bool + value: true + mirror: always + +# Block 3rd party emailtracking resources in all mode. +- name: privacy.trackingprotection.emailtracking.enabled + type: bool + value: false + mirror: always + +# Block 3rd party emailtracking resources in Private Browsing mode. +- name: privacy.trackingprotection.emailtracking.pbmode.enabled + type: bool + value: true + mirror: always + +# Collecting 3rd party emailtracking telemetry. +- name: privacy.trackingprotection.emailtracking.data_collection.enabled + type: bool + value: true + mirror: always + +- name: privacy.trackingprotection.testing.report_blocked_node + type: RelaxedAtomicBool + value: false + mirror: always + +# Whether to spoof user locale to English (used as part of Resist +# Fingerprinting). +# 0 - will prompt +# 1 - don't spoof +# 2 - spoof +- name: privacy.spoof_english + type: RelaxedAtomicUint32 + value: 0 + mirror: always + +# Send "do not track" HTTP header, disabled by default. +- name: privacy.donottrackheader.enabled + type: bool + value: false + mirror: always + +# Potentially send "global privacy control" HTTP header and set navigator +# property accordingly. Communicates user's desire to opt-out/in of +# websites or services selling or sharing the user's information, false by +# default. +# true - Send the header with a value of 1 to indicate opting-out +# false - Do not send header to indicate opting-in +- name: privacy.globalprivacycontrol.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +# Controls whether or not GPC signals are sent. Meant to act as a third option +# of 'undecided' by leaving the navigator property undefined and not attaching +# the Sec-GPC HTTP header. +- name: privacy.globalprivacycontrol.functionality.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +# Lower the priority of network loads for resources on the tracking protection +# list. Note that this requires the +# privacy.trackingprotection.annotate_channels pref to be on in order to have +# any effect. +- name: privacy.trackingprotection.lower_network_priority + type: bool + value: @IS_NIGHTLY_BUILD@ + mirror: always + +# A subset of Resist Fingerprinting protections focused specifically on timers. +# This affects the Animation API, the performance APIs, Date.getTime, +# Event.timestamp, File.lastModified, audioContext.currentTime, +# canvas.captureStream.currentTime. +- name: privacy.reduceTimerPrecision + type: RelaxedAtomicBool + value: true + mirror: always + +# If privacy.reduceTimerPrecision is false, this pref controls whether or not +# to clamp all timers at a fixed 20 microsconds. It should always be enabled, +# and is only specified as a pref to enable an emergency disabling in the event +# of catastrophic failure. +- name: privacy.reduceTimerPrecision.unconditional + type: RelaxedAtomicBool + value: true + mirror: always + +# The resistFingerprinting variables are marked with 'Relaxed' memory ordering. +# We don't particurally care that threads have a percently consistent view of +# the values of these prefs. They are not expected to change often, and having +# an outdated view is not particurally harmful. They will eventually become +# consistent. +# +# The variables will, however, be read often (specifically .microseconds on +# each timer rounding) so performance is important. +- name: privacy.resistFingerprinting + type: RelaxedAtomicBool + value: false + mirror: always + do_not_use_directly: true + +# When the .pbmode pref is on, RFP or FPP will be enabled in PBM +# When the non-pbm pref is on, they will be enabled in PBM and non-PBM +- name: privacy.resistFingerprinting.pbmode + type: RelaxedAtomicBool + value: false + mirror: always + do_not_use_directly: true + +# privacy.fingerprintingProtection enables a set of fingerprinting protections +# designed to minimize breakage while maximizing protection. +- name: privacy.fingerprintingProtection + type: RelaxedAtomicBool + value: false + mirror: always + do_not_use_directly: true + +- name: privacy.fingerprintingProtection.pbmode + type: RelaxedAtomicBool + value: false + mirror: always + do_not_use_directly: true + +# We automatically decline canvas permission requests if they are not initiated +# from user input. Just in case that breaks something, we allow the user to +# revert this behavior with this obscure pref. We do not intend to support this +# long term. If you do set it, to work around some broken website, please file +# a bug with information so we can understand why it is needed. +- name: privacy.resistFingerprinting.autoDeclineNoUserInputCanvasPrompts + type: bool + value: true + mirror: always + +# This pref can be used to disable mozAddonManager entirely for fingerprinting +# reasons. Someone like Tor browser will use this pref. +# NOTE: We'd like this to be a "hidden" pref once StaticPrefs supports it. +- name: privacy.resistFingerprinting.block_mozAddonManager + type: RelaxedAtomicBool + value: false + mirror: always + +# Whether canvas extraction should result in random data. If false, canvas +# extraction results in all-white, opaque pixel data. +- name: privacy.resistFingerprinting.randomDataOnCanvasExtract + type: RelaxedAtomicBool + value: true + mirror: always + +# The log level for browser console messages logged in RFPHelper.sys.mjs. Change to +# 'All' and restart to see the messages. +- name: privacy.resistFingerprinting.jsmloglevel + type: String + value: "Warn" + mirror: never + +# Enable jittering the clock one precision value forward. +- name: privacy.resistFingerprinting.reduceTimerPrecision.jitter + type: RelaxedAtomicBool + value: true + mirror: always + +# Dynamically tune the resolution of the timer reduction for +# `privacy.reduceTimerPrecision` and `privacy.resistFingerprinting`. +- name: privacy.resistFingerprinting.reduceTimerPrecision.microseconds + type: RelaxedAtomicUint32 + value: 1000 + mirror: always + +- name: privacy.resistFingerprinting.target_video_res + type: uint32_t + value: 480 + mirror: always + +# Setting TZ=UTC ensures that even libc functions use the spoofed time zone. +# We want to remove that override as soon as possible however. +- name: privacy.resistFingerprinting.testing.setTZtoUTC + type: bool + value: false + mirror: always + +# Bitfield for selectively disabling RFP +# 0 for no new behavior +# 1 for disabling RFP if it's a WebExtension +# 2 for disabling RFP if we are not in PBM +# 4 for disabling RFP on specific domains (see privacy.resistFingerprinting.exemptedDomains) +- name: privacy.resistFingerprinting.testGranularityMask + type: RelaxedAtomicUint32 + value: 0 + mirror: always + +# Enable the fingerprinting randomization. +- name: privacy.resistFingerprinting.randomization.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +# Enable resetting the fingerprinting randomization key daily for normal windwos. +- name: privacy.resistFingerprinting.randomization.daily_reset.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +# Enable resetting the fingerprinting randomization key daily for private windwos. +- name: privacy.resistFingerprinting.randomization.daily_reset.private.enabled + type: RelaxedAtomicBool + value: false + mirror: always + + +# Anti-tracking permission expiration. +- name: privacy.restrict3rdpartystorage.expiration + type: uint32_t + value: 2592000 # 30 days (in seconds) + mirror: always + +# Report Anti-tracking warnings to console lazily +- name: privacy.restrict3rdpartystorage.console.lazy + type: bool + value: true + mirror: always + +# Enable the heuristic to allow storage access for windows opened using window.open() after user interaction +- name: privacy.restrict3rdpartystorage.heuristic.opened_window_after_interaction + type: bool + value: true + mirror: always + +# Enable the heuristic to allow storage access for windows opened using window.open() +- name: privacy.restrict3rdpartystorage.heuristic.window_open + type: bool + value: true + mirror: always + +# Enable the heuristic to allow storage access for windows opened using window.open() +- name: privacy.restrict3rdpartystorage.heuristic.redirect + type: bool + value: true + mirror: always + +# Anti-tracking permission expiration. +- name: privacy.restrict3rdpartystorage.expiration_redirect + type: uint32_t + value: 2592000 # 30 days (in seconds) + mirror: always + +# Anti-tracking user-interaction expiration. +- name: privacy.userInteraction.expiration + type: uint32_t + value: 3888000 # 45 days (in seconds) + mirror: always + +# Anti-tracking user-interaction document interval. +- name: privacy.userInteraction.document.interval + type: uint32_t + value: 1800 # 30 minutes (in seconds) + mirror: always + +# Enable Anti-tracking testing. When it enables, it will notify the observers +# when user-interaction permission or storage access permission is added. This +# is for testing only. +- name: privacy.antitracking.testing + type: bool + value: false + mirror: always + +# Controls the anti-tracking webcompat features. This includes: +# - All URL-Classifier and state partitioning skip lists (prefs and remote +# settings) +# - Storage access heuristics (opener, redirect, etc.) +# - StorageAccessAPI automatic grants (skips the prompt) +# - Allowing specific tracking channels on user opt-in (e.g. facebook login +# shim). +- name: privacy.antitracking.enableWebcompat + type: RelaxedAtomicBool + value: true + mirror: always + +# Enable the heuristic to allow storage access for recent visited pages +- name: privacy.restrict3rdpartystorage.heuristic.recently_visited + type: bool + value: true + mirror: always + +# Valid time gap since last visit +- name: privacy.restrict3rdpartystorage.heuristic.recently_visited_time + type: uint32_t + value: 600 # 10 minutes + mirror: always + +# Recent visited pages redirection permission expiration. +- name: privacy.restrict3rdpartystorage.expiration_visited + type: uint32_t + value: 2592000 # 30 days (in seconds) + mirror: always + +# Maximum client-side cookie life-time cap. Measured in seconds, set to 0 to +# disable. +- name: privacy.documentCookies.maxage + type: uint32_t + value: 0 + mirror: always + +- name: privacy.window.maxInnerWidth + type: int32_t + value: 1000 + mirror: always + +- name: privacy.window.maxInnerHeight + type: int32_t + value: 1000 + mirror: always + +- name: privacy.sanitize.sanitizeOnShutdown + type: RelaxedAtomicBool + value: false + mirror: always + +- name: privacy.clearOnShutdown.cache + type: RelaxedAtomicBool + value: false + mirror: always + +- name: privacy.dynamic_firstparty.limitForeign + type: RelaxedAtomicBool + value: false + mirror: always + +- name: privacy.dynamic_firstparty.use_site + type: RelaxedAtomicBool + value: true + mirror: always + +- name: privacy.partition.network_state + type: RelaxedAtomicBool + value: true + mirror: always + +# Partition the OCSP cache by the partitionKey. +- name: privacy.partition.network_state.ocsp_cache + type: RelaxedAtomicBool + value: @IS_NIGHTLY_BUILD@ + mirror: always + +# Partition the OCSP cache by the partitionKey for private browsing mode. +- name: privacy.partition.network_state.ocsp_cache.pbmode + type: RelaxedAtomicBool + value: true + mirror: always + +# Always partition web storage APIs except cookies. +- name: privacy.partition.always_partition_third_party_non_cookie_storage + type: RelaxedAtomicBool + value: true + mirror: always + +# Exclude session storage from the above preference. +- name: privacy.partition.always_partition_third_party_non_cookie_storage.exempt_sessionstorage + type: RelaxedAtomicBool + value: false + mirror: always + +- name: privacy.partition.bloburl_per_agent_cluster + type: RelaxedAtomicBool + value: false + mirror: always + +- name: privacy.window.name.update.enabled + type: bool + value: true + mirror: always + +# By default, the network state isolation is not active when there is a proxy +# setting. This pref forces the network isolation even in these scenarios. +- name: privacy.partition.network_state.connection_with_proxy + type: bool + value: false + mirror: always + +# Partition the service workers unconditionally when dFPI is enabled. +- name: privacy.partition.serviceWorkers + type: RelaxedAtomicBool + value: true + mirror: always + +# Enables / disables the strip on share feature which strips query parameters +# when copying/sharing in-content links or from the url bar. +- name: privacy.query_stripping.strip_on_share.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +# Enables / disables the URL query string stripping in normal browsing mode +# which strips query parameters from loading URIs to prevent bounce (redirect) +# tracking. +- name: privacy.query_stripping.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +# Same as the pref above, but controls query stripping for private browsing +# mode. +- name: privacy.query_stripping.enabled.pbmode + type: RelaxedAtomicBool + value: false + mirror: always + +# The list which contains query parameters that are needed to be stripped from +# URIs. The query parameters are separated by a space. +- name: privacy.query_stripping.strip_list + type: String + value: "" + mirror: never + +# This controls if we will do the query string stripping for redirects. +- name: privacy.query_stripping.redirect + type: bool + value: true + mirror: always + +# the list which contains sites where should exempt from query stripping +- name: privacy.query_stripping.allow_list + type: String + value: "" + mirror: never + +#--------------------------------------------------------------------------- +# Prefs starting with "prompts." +#--------------------------------------------------------------------------- + +# Prompt modal type prefs +# See nsIPromptService::MODAL_TYPE fields for possible values. + +# Insecure form submit warning. +- name: prompts.modalType.insecureFormSubmit + type: int32_t + value: 2 + mirror: always + +# nsHttpChannelAuthProvider#ConfirmAuth anti-phishing prompts. +- name: prompts.modalType.confirmAuth + type: int32_t + value: 2 + mirror: always + +#--------------------------------------------------------------------------- +# Prefs starting with "security." +#--------------------------------------------------------------------------- + +# Mochitests that need to load resource:// URIs not declared content-accessible +# in manifests should set this pref. +- name: security.all_resource_uri_content_accessible + type: bool + value: false + mirror: always + +- name: security.bad_cert_domain_error.url_fix_enabled + type: bool + value: true + mirror: always + +- name: security.csp.reporting.script-sample.max-length + type: int32_t + value: 40 + mirror: always + +- name: security.csp.truncate_blocked_uri_for_frame_navigations + type: bool + value: true + mirror: always + +# If true, all toplevel data: URI navigations will be blocked. +# Please note that manually entering a data: URI in the +# URL-Bar will not be blocked when flipping this pref. +- name: security.data_uri.block_toplevel_data_uri_navigations + type: bool + value: true + mirror: always + +# Whether window A is allowed to navigate cross-origin window B (that is not +# a descendant frame of A) to a URI that loads externally. +- name: security.allow_disjointed_external_uri_loads + type: bool + value: false + mirror: always + +# Allowed by default so it doesn't affect Thunderbird/SeaMonkey, but +# not allowed for Firefox Desktop in firefox.js +- name: security.allow_parent_unrestricted_js_loads + type: RelaxedAtomicBool + value: true + mirror: always + +# Allowed by default so it doesn't affect Thunderbird/SeaMonkey, but +# not allowed for Firefox Desktop in firefox.js +- name: security.allow_eval_with_system_principal + type: RelaxedAtomicBool + value: true + mirror: always + +# Allowed by default so it doesn't affect Thunderbird/SeaMonkey, but +# not allowed for Firefox Desktop in firefox.js +- name: security.allow_eval_in_parent_process + type: RelaxedAtomicBool + value: true + mirror: always + +# Disallowed by default, ensure not disallowed content is loaded in the parent +# process. +- name: security.allow_unsafe_parent_loads + type: bool + value: false + mirror: always + +# Pref to block mixed scripts (fonts, plugin content, scripts, stylesheets, +# iframes, websockets, XHR). +- name: security.mixed_content.block_active_content + type: bool + value: @IS_ANDROID@ + mirror: always + +# Pref to block sub requests that happen within an object. +- name: security.mixed_content.block_object_subrequest + type: bool + value: false + mirror: always + +# Pref for mixed display content blocking (images, audio, video). +- name: security.mixed_content.block_display_content + type: bool + value: false + mirror: always + +# Pref for mixed display content upgrading (images, audio, video). +- name: security.mixed_content.upgrade_display_content + type: bool + value: @IS_NIGHTLY_BUILD@ + mirror: always + +# Whether strict file origin policy is in effect. "False" is traditional. +- name: security.fileuri.strict_origin_policy + type: RelaxedAtomicBool + value: true + mirror: always + +# The level to which we sandbox the content process. firefox.js sets the +# default to different values on a per-OS basis, and has documentation +# on what the defaults are and what the numbers mean. +- name: security.sandbox.content.level + type: int32_t + value: 0 + mirror: always + do_not_use_directly: true # Consumers should use SandboxSettings to ask. + +- name: security.sandbox.socket.process.level + type: int32_t + value: 0 + mirror: always + do_not_use_directly: true # Consumers should use SandboxSettings to ask. + +# This controls the strength of the Windows GPU process sandbox. Changes +# will require restart. +# For information on what the level number means, see +# SetSecurityLevelForGPUProcess() in +# security/sandbox/win/src/sandboxbroker/sandboxBroker.cpp +- name: security.sandbox.gpu.level + type: int32_t +#if defined(XP_WIN) + value: 1 +#else + value: 0 +#endif + mirror: always + +# Enrollment preferences for the win32k experiment, set and managed by Normandy +- name: security.sandbox.content.win32k-experiment.enrollmentStatus + type: uint32_t + value: 0 + mirror: never + +- name: security.sandbox.content.win32k-experiment.startupEnrollmentStatus + type: uint32_t + value: 0 + mirror: never + +#if defined(XP_WIN) && defined(MOZ_SANDBOX) + + # Whether win32k is disabled for content processes. + # true means win32k system calls are not permitted. +- name: security.sandbox.content.win32k-disable + type: RelaxedAtomicBool + value: true + mirror: always + + # Note: win32k is currently _not_ disabled for GMP due to intermittent test + # failures, where the GMP process fails very early. See bug 1449348. +- name: security.sandbox.gmp.win32k-disable + type: RelaxedAtomicBool + value: false + mirror: always + + # Whether win32k is disabled for socket processes. + # true means win32k system calls are not permitted. +- name: security.sandbox.socket.win32k-disable + type: RelaxedAtomicBool + value: true + mirror: always + + # Whether CET User Shadow Stack compatible modules only is enabled for the + # relevant process type. +- name: security.sandbox.content.shadow-stack.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +- name: security.sandbox.rdd.shadow-stack.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +- name: security.sandbox.socket.shadow-stack.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +- name: security.sandbox.gpu.shadow-stack.enabled + type: RelaxedAtomicBool + value: @IS_NIGHTLY_BUILD@ + mirror: always + +- name: security.sandbox.gmp.shadow-stack.enabled + type: RelaxedAtomicBool + value: @IS_NIGHTLY_BUILD@ + mirror: always + + # Whether a Low Privilege AppContainer (LPAC) is enabled for the relevant + # process type. + +#if defined(MOZ_WMF_MEDIA_ENGINE) +- name: security.sandbox.utility-wmf-cdm.lpac.enabled + type: RelaxedAtomicBool + value: false + mirror: always +#endif + + # Whether Arbitrary Code Guard is enabled for the RDD process. +- name: security.sandbox.rdd.acg.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +#ifdef MOZ_WMF + # Whether Arbitrary Code Guard is enabled for the utility WMF audio decoder + # process. + +- name: security.sandbox.utility-wmf.acg.enabled + type: RelaxedAtomicBool + value: true + mirror: always +#endif // MOZ_WMF + + # This controls the depth of stack trace that is logged when Windows sandbox + # logging is turned on. This is only currently available for the content + # process because the only other sandbox (for GMP) has too strict a policy to + # allow stack tracing. This does not require a restart to take effect. +- name: security.sandbox.windows.log.stackTraceDepth + type: RelaxedAtomicUint32 + value: 0 + mirror: always +#endif + +#if defined(XP_LINUX) && defined(MOZ_SANDBOX) + # Run content processes in headless mode and disallow + # connections to the X server. Requires: + # * `webgl.out-of-process` (or else WebGL breaks) + # * `widget.non-native-theme.enabled` (scrollbars & form controls) + # Changing it requires a restart because sandbox policy information + # dependent on it is cached. See bug 1640345 for details. +- name: security.sandbox.content.headless + type: bool + value: true + mirror: once +#endif + +# Pref to show warning when submitting from secure to insecure. +- name: security.warn_submit_secure_to_insecure + type: bool + value: true + mirror: always + +# Hardware Origin-bound Second Factor Support +- name: security.webauth.webauthn + type: bool + value: true + mirror: always + +# Navigate-to CSP 3 directive +- name: security.csp.enableNavigateTo + type: bool + value: false + mirror: always + +# wasm-unsafe-eval source keyword +- name: security.csp.wasm-unsafe-eval.enabled + type: bool + value: true + mirror: always + +# unsafe-hashes source keyword +- name: security.csp.unsafe-hashes.enabled + type: bool + value: true + mirror: always + +# The script-src-attr and script-src-elem directive +- name: security.csp.script-src-attr-elem.enabled + type: bool + value: true + mirror: always + +# The style-src-attr and style-src-elem directive +- name: security.csp.style-src-attr-elem.enabled + type: bool + value: true + mirror: always + +# WebAuthn CTAP2 support +- name: security.webauthn.ctap2 + type: RelaxedAtomicBool + value: true + mirror: always + rust: true + +# Dispatch WebAuthn requests to the software CTAP1 token. +# (mutually exclusive with webauthn_enable_android_fido2, +# and webauthn_enable_usbtoken) +- name: security.webauth.webauthn_enable_softtoken + type: RelaxedAtomicBool + value: false + mirror: always + +# Dispatch WebAuthn requests to the Android platform API +- name: security.webauth.webauthn_enable_android_fido2 + type: RelaxedAtomicBool + value: @IS_ANDROID@ + mirror: always + +# residentKey support when using Android platform API +- name: security.webauthn.webauthn_enable_android_fido2.residentkey + type: RelaxedAtomicBool + value: false + mirror: always + +# Dispatch WebAuthn requests to authenticator-rs +- name: security.webauth.webauthn_enable_usbtoken + type: RelaxedAtomicBool + value: @IS_NOT_ANDROID@ + mirror: always + +# Skip direct attestation consent prompts (for tests). +- name: security.webauth.webauthn_testing_allow_direct_attestation + type: RelaxedAtomicBool + value: false + mirror: always + +# Global counter for U2F soft token operations +- name: security.webauth.softtoken_counter + type: RelaxedAtomicUint32 + value: 0 + mirror: always + +# Block Worker/SharedWorker scripts with wrong MIME type. +- name: security.block_Worker_with_wrong_mime + type: bool + value: true + mirror: always + +# Block the execution of scripts using a wrong type as defined by the file extension +# (OS) mapping when loaded via the file:// protocol. +- name: security.block_fileuri_script_with_wrong_mime + type: bool + value: @IS_EARLY_BETA_OR_EARLIER@ + mirror: always + +# Cancel outgoing requests from SystemPrincipal: +# but only with scheme http(s) and contentpolicytype subdocument +- name: security.disallow_privileged_https_subdocuments_loads + type: bool + value: true + mirror: always + +# but only with scheme data and contentpolicytype subdocument +- name: security.disallow_privileged_data_subdocuments_loads + type: bool + value: true + mirror: always + +# Cancel outgoing requests from SystemPrincipal: +# but only with scheme http(s) and contentpolicytype stylesheet +- name: security.disallow_privileged_https_stylesheet_loads + type: bool + value: true + mirror: always + +# Cancel outgoing requests from SystemPrincipal: +# but only with scheme http(s) and contentpolicytype script +- name: security.disallow_privileged_https_script_loads + type: bool + value: true + mirror: always + +# Cancel outgoing requests from SystemPrincipal: +# where there is no finalURI. +- name: security.disallow_privileged_no_finaluri_loads + type: bool + value: true + mirror: always + +# Cancel outgoing requests from privileged about pages: +# but only with scheme http(s) and contentpolicytype script +- name: security.disallow_privilegedabout_remote_script_loads + type: bool + value: true + mirror: always + +# Disable preloaded static key pins by default. +- name: security.cert_pinning.enforcement_level + type: RelaxedAtomicUint32 + value: 0 + mirror: always + do_not_use_directly: true + +# OCSP fetching behavior: +# 0: do not fetch OCSP +# 1: fetch OCSP for DV and EV certificates +# 2: fetch OCSP only for EV certificates +- name: security.OCSP.enabled + type: RelaxedAtomicUint32 +#ifdef ANDROID + value: 2 +#else + value: 1 +#endif + mirror: always + + +# Whether or not OCSP is required. +# true => hard-fail (if an OCSP request times out, stop the connection) +# false => soft-fail (if an OCSP request times out, continue the connection) +- name: security.OCSP.require + type: RelaxedAtomicBool + value: false + mirror: always + +# How many milliseconds to wait for an OCSP response before assuming it failed +# (when fetching for soft-fail). +- name: security.OCSP.timeoutMilliseconds.soft + type: RelaxedAtomicUint32 +#ifdef RELEASE_OR_BETA + value: 2000 +#else + value: 1000 +#endif + mirror: always + +# How many milliseconds to wait for an OCSP response before assuming it failed +# (when fetching for hard-fail). +- name: security.OCSP.timeoutMilliseconds.hard + type: RelaxedAtomicUint32 + value: 10000 + mirror: always + +# Whether or not to enable OCSP must-staple (in other words, TLS-feature with +# status request). +- name: security.ssl.enable_ocsp_must_staple + type: RelaxedAtomicBool + value: true + mirror: always + +# Whether or not to enable OCSP stapling. +- name: security.ssl.enable_ocsp_stapling + type: RelaxedAtomicBool + value: true + mirror: always + +# This is checked at startup to see if NSS should be initialized without the +# user's certificate and key databases. +- name: security.nocertdb + type: bool + value: false + mirror: once + +# On Windows 8.1, if the following preference is 2, we will attempt to detect +# whether the Family Safety TLS interception feature has been enabled. +# If so, we will behave as if the enterprise roots feature has been enabled +# (i.e. import and trust third party root certificates from the OS). +# With any other value of the pref or on any other platform, this does nothing. +# This preference takes precedence over "security.enterprise_roots.enabled". +- name: security.family_safety.mode + type: RelaxedAtomicUint32 + value: 2 + mirror: always + +# Whether or not to import and trust third party root certificates from the OS. +- name: security.enterprise_roots.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +- name: security.intermediate_preloading_healer.enabled + type: RelaxedAtomicBool + value: @IS_NOT_ANDROID@ + mirror: always + +- name: security.intermediate_preloading_healer.timer_interval_ms + type: RelaxedAtomicUint32 + value: 300000 + mirror: always + +# If true, attempt to load the osclientcerts PKCS#11 module at startup on a +# background thread. This module allows Firefox to use client certificates +# stored in OS certificate storage. Currently only available for Windows and +# macOS. +- name: security.osclientcerts.autoload + type: RelaxedAtomicBool + value: true + mirror: always + +# If true, assume tokens accessed via osclientcerts implement RSA-PSS. If a +# given token does not support RSA-PSS, users may see the error +# 'SEC_ERROR_PKCS11_GENERAL_ERROR' if a server indicates it will accept an +# RSA-PSS signature in the client's certificate verify message. +# Setting this to false may allow such connections to succeed, if the server +# also accepts RSA-PKCS1 signatures. +- name: security.osclientcerts.assume_rsa_pss_support + type: RelaxedAtomicBool + value: true + mirror: always + +- name: security.pki.cert_short_lifetime_in_days + type: RelaxedAtomicUint32 + value: 10 + mirror: always + +# security.pki.netscape_step_up_policy controls how the platform handles the +# id-Netscape-stepUp OID in extended key usage extensions of CA certificates. +# 0: id-Netscape-stepUp is always considered equivalent to id-kp-serverAuth +# 1: it is considered equivalent when the notBefore is before 23 August 2016 +# 2: similarly, but for 23 August 2015 +# 3: it is never considered equivalent +- name: security.pki.netscape_step_up_policy + type: RelaxedAtomicUint32 +#ifdef RELEASE_OR_BETA + value: 1 +#else + value: 2 +#endif + mirror: always + +# Configures Certificate Transparency support mode: +# 0: Fully disabled. +# 1: Only collect telemetry. CT qualification checks are not performed. +- name: security.pki.certificate_transparency.mode + type: RelaxedAtomicUint32 + value: 0 + mirror: always + +# 0: Disable CRLite entirely. +# 1: Consult CRLite but only collect telemetry. +# 2: Consult CRLite and enforce both "Revoked" and "Not Revoked" results. +# 3: Consult CRLite and enforce "Not Revoked" results, but defer to OCSP for "Revoked". +- name: security.pki.crlite_mode + type: RelaxedAtomicUint32 + value: 3 + mirror: always + +- name: security.tls.version.min + type: RelaxedAtomicUint32 + value: 3 + mirror: always + +- name: security.tls.version.max + type: RelaxedAtomicUint32 + value: 4 + mirror: always + +- name: security.tls.version.enable-deprecated + type: RelaxedAtomicBool + value: false + mirror: always + +- name: security.tls.version.fallback-limit + type: RelaxedAtomicUint32 + value: 4 + mirror: always + +# Turn off post-handshake authentication for TLS 1.3 by default, +# until the incompatibility with HTTP/2 is resolved: +# https://tools.ietf.org/html/draft-davidben-http2-tls13-00 +- name: security.tls.enable_post_handshake_auth + type: RelaxedAtomicBool + value: false + mirror: always + +# Probability of GREASEing a TLS connection with ECH (0-100) +# 0 means never GREASE, 100 means always GREASE +- name: security.tls.ech.grease_probability + type: RelaxedAtomicUint32 +#ifdef NIGHTLY_BUILD + value: 100 +#else + value: 0 +#endif + mirror: always + +# Whether to apply ECH GREASE settings to HTTP3/QUIC connections +- name: security.tls.ech.grease_http3 + type: RelaxedAtomicBool + value: @IS_NIGHTLY_BUILD@ + mirror: always + +# Whether to retry connections without ECH Grease +- name: security.tls.ech.disable_grease_on_fallback + type: RelaxedAtomicBool + value: @IS_NOT_NIGHTLY_BUILD@ + mirror: always + +# ECH GREASE Padding target (1-255) +- name: security.tls.ech.grease_size + type: RelaxedAtomicUint32 + value: 100 + mirror: always + +- name: security.tls.hello_downgrade_check + type: RelaxedAtomicBool + value: true + mirror: always + +- name: security.tls.enable_delegated_credentials + type: RelaxedAtomicBool + value: true + mirror: always + +- name: security.tls.enable_0rtt_data + type: RelaxedAtomicBool + value: true + mirror: always + +- name: security.ssl.treat_unsafe_negotiation_as_broken + type: RelaxedAtomicBool + value: false + mirror: always + +- name: security.ssl.require_safe_negotiation + type: RelaxedAtomicBool + value: false + mirror: always + +- name: security.ssl.enable_false_start + type: RelaxedAtomicBool + value: true + mirror: always + +- name: security.ssl.enable_alpn + type: RelaxedAtomicBool + value: true + mirror: always + +- name: security.ssl.disable_session_identifiers + type: RelaxedAtomicBool + value: false + mirror: always + +- name: security.ssl3.ecdhe_rsa_aes_128_gcm_sha256 + type: RelaxedAtomicBool + value: true + mirror: always + +- name: security.ssl3.ecdhe_ecdsa_aes_128_gcm_sha256 + type: RelaxedAtomicBool + value: true + mirror: always + +- name: security.ssl3.ecdhe_ecdsa_chacha20_poly1305_sha256 + type: RelaxedAtomicBool + value: true + mirror: always + +- name: security.ssl3.ecdhe_rsa_chacha20_poly1305_sha256 + type: RelaxedAtomicBool + value: true + mirror: always + +- name: security.ssl3.ecdhe_ecdsa_aes_256_gcm_sha384 + type: RelaxedAtomicBool + value: true + mirror: always + +- name: security.ssl3.ecdhe_rsa_aes_256_gcm_sha384 + type: RelaxedAtomicBool + value: true + mirror: always + +- name: security.ssl3.ecdhe_rsa_aes_128_sha + type: RelaxedAtomicBool + value: true + mirror: always + +- name: security.ssl3.ecdhe_ecdsa_aes_128_sha + type: RelaxedAtomicBool + value: @IS_NOT_EARLY_BETA_OR_EARLIER@ + mirror: always + +- name: security.ssl3.ecdhe_rsa_aes_256_sha + type: RelaxedAtomicBool + value: true + mirror: always + +- name: security.ssl3.ecdhe_ecdsa_aes_256_sha + type: RelaxedAtomicBool + value: @IS_NOT_EARLY_BETA_OR_EARLIER@ + mirror: always + +- name: security.ssl3.dhe_rsa_aes_128_sha + type: RelaxedAtomicBool + value: false + mirror: always + +- name: security.ssl3.dhe_rsa_aes_256_sha + type: RelaxedAtomicBool + value: false + mirror: always + +- name: security.ssl3.rsa_aes_128_sha + type: RelaxedAtomicBool + value: true + mirror: always + +- name: security.ssl3.rsa_aes_256_sha + type: RelaxedAtomicBool + value: true + mirror: always + +- name: security.ssl3.rsa_aes_128_gcm_sha256 + type: RelaxedAtomicBool + value: true + mirror: always + +- name: security.ssl3.rsa_aes_256_gcm_sha384 + type: RelaxedAtomicBool + value: true + mirror: always + +- name: security.ssl3.deprecated.rsa_des_ede3_sha + type: RelaxedAtomicBool + value: true + mirror: always + +- name: security.tls13.aes_128_gcm_sha256 + type: RelaxedAtomicBool + value: true + mirror: always + +- name: security.tls13.chacha20_poly1305_sha256 + type: RelaxedAtomicBool + value: true + mirror: always + +- name: security.tls13.aes_256_gcm_sha384 + type: RelaxedAtomicBool + value: true + mirror: always + +#--------------------------------------------------------------------------- +# Prefs starting with "signon." +#--------------------------------------------------------------------------- +- name: signon.usernameOnlyForm.enabled + type: bool + value: true + mirror: always + +#--------------------------------------------------------------------------- +# Prefs starting with "slider." +#--------------------------------------------------------------------------- + +# Scrollbar snapping region. +# - 0: off +# - 1 and higher: slider thickness multiple +- name: slider.snapMultiplier + type: int32_t +#ifdef XP_WIN + value: 6 +#else + value: 0 +#endif + mirror: once + +#--------------------------------------------------------------------------- +# Prefs starting with "storage." +#--------------------------------------------------------------------------- + +# Whether to use a non-exclusive VFS. +# By default we use the unix-excl VFS, for the following reasons: +# 1. It improves compatibility with NFS shares, whose implementation +# is incompatible with SQLite's locking requirements (reliable fcntl), and +# in particular with WAL journaling. +# Bug 433129 attempted to automatically identify such file-systems, +# but a reliable way was not found and the fallback locking is slower than +# POSIX locking, so we do not want to do it by default. +# 2. It allows wal mode to avoid the memory mapped -shm file, reducing the +# likelihood of SIGBUS failures when disk space is exhausted. +# 3. It provides some protection from third party database tampering while a +# connection is open. +# Note there's no win32-excl VFS, so this has no effect on Windows. +- name: storage.sqlite.exclusiveLock.enabled + type: RelaxedAtomicBool + value: @IS_NOT_ANDROID@ + mirror: always + +#--------------------------------------------------------------------------- +# Prefs starting with "svg." +#--------------------------------------------------------------------------- + +# This pref controls whether the 'context-fill' and 'context-stroke' keywords +# can be used in SVG-as-an-image in the content processes to use the fill/ +# stroke specified on the element that embeds the image. (These keywords are +# always enabled in the chrome process, regardless of this pref.) Also, these +# keywords are currently not part of any spec, which is partly why we disable +# them for web content. +- name: svg.context-properties.content.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +# This pref controls whether the `prefers-color-scheme` value of SVG images +# reacts to the embedder `color-scheme` in content. +- name: svg.embedder-prefers-color-scheme.content.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# Enables the 'context-fill' and 'context-stroke' keywords for particular +# domains. We expect this list to be Mozilla-controlled properties, since the +# 'context-*' keywords are not part of any spec. We expect to remove this +# preference and the 'context-` keyword support entirely in the +# not-too-distant future when a standardized alternative ships. This preference +# is _not_ for allowing web content to use these keywords. For performance +# reasons, the list of domains in this preference should remain short in +# length. +- name: svg.context-properties.content.allowed-domains + type: String + value: "" + mirror: never + +# Is support for the new getBBox method from SVG 2 enabled? +# See https://svgwg.org/svg2-draft/single-page.html#types-SVGBoundingBoxOptions +- name: svg.new-getBBox.enabled + type: bool + value: false + mirror: always + +# Whether SVGGraphicsElement.nearestViewportElement and SVGGraphicsElement.farthestViewportElement are enabled. +- name: svg.nearestAndFarthestViewportElement.enabled + type: bool + value: @IS_NOT_EARLY_BETA_OR_EARLIER@ + mirror: always + +# Tweak which elements are allowed in <svg:use> subtrees, and in which +# circumstances. See RemoveForbiddenNodes in SVGUseElement.cpp for the spec +# text. +# +# - 0: Don't restrict ever. +# - 1: Restrict only cross-document. +# - 2/other: restrict always. +# +# We allow the behavior to be configurable via this pref. Our chosen default +# value forbids non-graphical content in <svg:use> clones of cross-document +# elements. This is a compromise between our more-permissive pre-existing +# behavior (which SVG 2 seems to call for, and maps to pref value 0) and the +# behavior of other UAs (which SVG 1.1 seems to call for, and maps to pref +# value 2). +- name: svg.use-element.graphics-element-restrictions + type: int32_t + value: 1 + mirror: always + +# Whether to restrict <svg:use> element recursion levels. +# +# - 0: Don't restrict ever. +# - 1: Restrict everywhere +# - 2/other: Restrict only in the parent process. +# +- name: svg.use-element.recursive-clone-limit.enabled + type: int32_t + value: 2 + mirror: always + +# What is the recursion limit for svg use element cloning if enabled. +- name: svg.use-element.recursive-clone-limit + type: uint32_t + value: 8 + mirror: always + +#--------------------------------------------------------------------------- +# Prefs starting with "telemetry." +#--------------------------------------------------------------------------- + +- name: telemetry.number_of_site_origin.min_interval + type: uint32_t + value: 300000 + mirror: always + +- name: telemetry.fog.test.localhost_port + type: RelaxedAtomicInt32 + value: 0 + mirror: always + rust: true + +- name: telemetry.fog.test.activity_limit + type: RelaxedAtomicUint32 + value: 120 + mirror: always + rust: true + +- name: telemetry.fog.test.inactivity_limit + type: RelaxedAtomicUint32 + value: 1200 + mirror: always + rust: true + +- name: telemetry.fog.artifact_build + type: RelaxedAtomicBool + value: false + mirror: always + +#--------------------------------------------------------------------------- +# Prefs starting with "test." +#--------------------------------------------------------------------------- + +- name: test.events.async.enabled + type: RelaxedAtomicBool + value: false + mirror: always + +- name: test.mousescroll + type: RelaxedAtomicBool + value: false + mirror: always + +#--------------------------------------------------------------------------- +# Prefs starting with "thread." +#--------------------------------------------------------------------------- + +- name: threads.medium_high_event_queue.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# If control tasks aren't enabled, they get medium high priority. +- name: threads.control_event_queue.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# If the service is available, set threads to low-power mode when in the background. +- name: threads.use_low_power.enabled + type: RelaxedAtomicBool + value: @IS_NIGHTLY_BUILD@ + mirror: always + + +# If the process priority is set to background, put the main thread in the background. +# Currently off by default. +- name: threads.lower_mainthread_priority_in_background.enabled + type: bool + value: @IS_NIGHTLY_BUILD@ + mirror: always + +#--------------------------------------------------------------------------- +# Prefs starting with "timer." +#--------------------------------------------------------------------------- + +# Since our timestamp on macOS does not increment while the system is asleep, we +# should ignore sleep/wake notifications to make timer thread process timers. +- name: timer.ignore_sleep_wake_notifications + type: RelaxedAtomicBool +#ifdef XP_MACOSX + value: true +#else + value: false +#endif + mirror: always + +# Amount of time by which it is always acceptable to delay the firing of a timer. +# Any timer may be delayed by up to this amount in order to enable timers to be +# bundled together for efficiency. +- name: timer.minimum_firing_delay_tolerance_ms + type: AtomicFloat + value: 1.0 + mirror: always + +# Maximum amount of time by which it is ever acceptable to delay the firing of a timer. +# Setting this to zero will effectively disable timer coalescing. +- name: timer.maximum_firing_delay_tolerance_ms + type: AtomicFloat +#ifdef NIGHTLY_BUILD + value: 10000.0 +#else + value: 0.0 +#endif + mirror: always + +#--------------------------------------------------------------------------- +# Prefs starting with "toolkit." +#--------------------------------------------------------------------------- + +# Makes removeDirectory background task wait for the given milliseconds before removal. +- name: toolkit.background_tasks.remove_directory.testing.sleep_ms + type: RelaxedAtomicUint32 + value: 0 + mirror: always + +# Returns true if BHR is disabled. +- name: toolkit.content-background-hang-monitor.disabled + type: bool + value: false + mirror: always + +- name: toolkit.scrollbox.horizontalScrollDistance + type: RelaxedAtomicInt32 + value: 5 + mirror: always + +- name: toolkit.scrollbox.verticalScrollDistance + type: RelaxedAtomicInt32 + value: 3 + mirror: always + +# The lateWriteChecksStage and fastShutdownStage below represent the stage +# of shutdown after which we (for lateWriteChecksStage) crash / gather +# telemetry data on file writes, or (for fastShutdownStage) we call _exit(0). +# Higher values are earlier during shutdown, and the full enumeration can +# be found in AppShutdown.h in the AppShutdownPhase enum. +- name: toolkit.shutdown.lateWriteChecksStage + type: int32_t +#ifdef MOZ_CODE_COVERAGE + value: 0 +#else + value: 2 +#endif + mirror: always + +# See the comment above toolkit.shutdown.lateWriteChecksStage. A higher value +# for this pref means we call _exit(0) earlier during shutdown. +- name: toolkit.shutdown.fastShutdownStage + type: int32_t +#if !defined(DEBUG) && !defined(MOZ_ASAN) && !defined(MOZ_TSAN) && !defined(MOZ_CODE_COVERAGE) && !defined(MOZ_VALGRIND) && !defined(MOZ_PROFILE_GENERATE) && !defined(JS_STRUCTURED_SPEW) + value: 1 +#else + value: 0 +#endif + mirror: always + +# Sending each remote accumulation immediately places undue strain on the IPC +# subsystem. Batch the remote accumulations for a period of time before sending +# them all at once. This value was chosen as a balance between data timeliness +# and performance (see bug 1218576). +- name: toolkit.telemetry.ipcBatchTimeout + type: uint32_t + value: 2000 + mirror: always + +- name: toolkit.telemetry.geckoview.batchDurationMS + type: RelaxedAtomicUint32 + value: 5000 + mirror: always + +- name: toolkit.telemetry.geckoview.maxBatchStalenessMS + type: RelaxedAtomicUint32 + value: 60000 + mirror: always + +- name: toolkit.telemetry.geckoview.streaming + type: RelaxedAtomicBool + value: false + mirror: always + +- name: toolkit.telemetry.testing.overrideProductsCheck + type: RelaxedAtomicBool + value: false + mirror: always + +#--------------------------------------------------------------------------- +# Prefs starting with "ui." +#--------------------------------------------------------------------------- + +- name: ui.key.generalAccessKey + type: int32_t + value: -1 + mirror: always + +# Use 17 for Ctrl, 18 for Alt, 224 for Meta, 91 for Win, 0 for none. +- name: ui.key.accelKey + type: uint32_t +#ifdef XP_MACOSX + value: 224 +#else + value: 17 +#endif + mirror: always + +# See above for the key codes to use. +- name: ui.key.menuAccessKey + type: uint32_t +#ifdef XP_MACOSX + value: 0 +#else + value: 18 +#endif + mirror: always + +# Only used if generalAccessKey is -1. +- name: ui.key.chromeAccess + type: int32_t +#ifdef XP_MACOSX + # 0 = disabled, 1 = Shift, 2 = Ctrl, 4 = Alt, 3 = ctrl+shift, 8 = Meta + value: 2 +#else + # 0 = disabled, 1 = Shift, 2 = Ctrl, 4 = Alt, 5 = Alt+Shift, + # 8 = Meta, 16 = Win + value: 4 +#endif + mirror: always + +# Only used if generalAccessKey is -1. +- name: ui.key.contentAccess + type: int32_t +#ifdef XP_MACOSX + # 0 = disabled, 1 = Shift, 2 = Ctrl, 4 = Alt, 3 = ctrl+shift, 8 = Meta + value: 6 +#else + # 0 = disabled, 1 = Shift, 2 = Ctrl, 4 = Alt, 5 = Alt+Shift, + # 8 = Meta, 16 = Win + value: 5 +#endif + mirror: always + +# Does the access key by itself focus the menu bar? +- name: ui.key.menuAccessKeyFocuses + type: bool +#if defined(XP_WIN) || defined(MOZ_WIDGET_GTK) + # On Windows and Linux, we now default to showing the menu bar only when alt + # is pressed. + value: true +#else + value: false +#endif + mirror: always + +# Whether native key bindings in the environment or builtin shortcut key +# definitions in Gecko are used first in <input> and <textarea> +- name: ui.key.textcontrol.prefer_native_key_bindings_over_builtin_shortcut_key_definitions + type: bool + value: true + mirror: always + +#ifdef MOZ_WIDGET_GTK +# Only GtkTextView (native multiline text viewer/editor) supports "select-all" +# signal so that we cannot know "select-all" key bindings only with GtkEntry. +# When this pref is set to true, if a key combination does not cause any +# signals in GtkEntry, try to check the key combination is mapped to +# "select-all" in GtkTextView or not. If it's mapped to other commands, they +# are just ignored. +- name: ui.key.use_select_all_in_single_line_editor + type: bool + value: true + mirror: always +#endif + +# Duration of timeout of incremental search in menus (ms). 0 means infinite. +- name: ui.menu.incremental_search.timeout + type: uint32_t + value: 1000 + mirror: always + +# If true, all popups won't hide automatically on blur +- name: ui.popup.disable_autohide + type: RelaxedAtomicBool + value: false + mirror: always + +# Negate scroll, true will make the mouse scroll wheel move the screen the +# same direction as with most desktops or laptops. +- name: ui.scrolling.negate_wheel_scroll + type: RelaxedAtomicBool + value: @IS_ANDROID@ + mirror: always + +# If the user puts a finger down on an element and we think the user might be +# executing a pan gesture, how long do we wait before tentatively deciding the +# gesture is actually a tap and activating the target element? +- name: ui.touch_activation.delay_ms + type: int32_t + value: 100 + mirror: always + +# If the user has clicked an element, how long do we keep the :active state +# before it is cleared by the mouse sequences fired after a +# touchstart/touchend. +- name: ui.touch_activation.duration_ms + type: int32_t + value: 10 + mirror: always + +# Prevent system colors from being exposed to CSS or canvas. +- name: ui.use_standins_for_native_colors + type: RelaxedAtomicBool + value: false + mirror: always + +# Disable page loading activity cursor by default. +- name: ui.use_activity_cursor + type: bool + value: false + mirror: always + +# Whether context menus should only appear on mouseup instead of mousedown, +# on OSes where they normally appear on mousedown (macOS, *nix). +# Note: ignored on Windows (context menus always use mouseup). +- name: ui.context_menus.after_mouseup + type: bool + value: false + mirror: always + +# Whether click-hold context menus are enabled. +- name: ui.click_hold_context_menus + type: RelaxedAtomicBool + value: false + mirror: always + +# How long to wait for a drag gesture before displaying click-hold context menu, +# in milliseconds. +- name: ui.click_hold_context_menus.delay + type: RelaxedAtomicInt32 + value: 500 + mirror: always + +# When enabled, the touch.radius and mouse.radius prefs allow events to be +# dispatched to nearby elements that are sensitive to the event. See +# PositionedEventTargeting.cpp. The 'mm' prefs define a rectangle around the +# nominal event target point within which we will search for suitable elements. +# 'visitedWeight' is a percentage weight; a value > 100 makes a visited link be +# treated as further away from the event target than it really is, while a +# value < 100 makes a visited link be treated as closer to the event target +# than it really is. + +- name: ui.touch.radius.enabled + type: bool + value: @IS_ANDROID@ + mirror: always + +- name: ui.touch.radius.topmm + type: uint32_t +#ifdef ANDROID + value: 2 +#else + value: 12 +#endif + mirror: always + +- name: ui.touch.radius.rightmm + type: uint32_t +#ifdef ANDROID + value: 3 +#else + value: 8 +#endif + mirror: always + +- name: ui.touch.radius.bottommm + type: uint32_t +#ifdef ANDROID + value: 2 +#else + value: 4 +#endif + mirror: always + +- name: ui.touch.radius.leftmm + type: uint32_t +#ifdef ANDROID + value: 3 +#else + value: 8 +#endif + mirror: always + +- name: ui.touch.radius.visitedWeight + type: uint32_t + value: 120 + mirror: always + +- name: ui.mouse.radius.enabled + type: bool + value: @IS_ANDROID@ + mirror: always + +- name: ui.mouse.radius.topmm + type: uint32_t +#ifdef ANDROID + value: 2 +#else + value: 12 +#endif + mirror: always + +- name: ui.mouse.radius.rightmm + type: uint32_t +#ifdef ANDROID + value: 3 +#else + value: 8 +#endif + mirror: always + +- name: ui.mouse.radius.bottommm + type: uint32_t +#ifdef ANDROID + value: 2 +#else + value: 4 +#endif + mirror: always + +- name: ui.mouse.radius.leftmm + type: uint32_t +#ifdef ANDROID + value: 3 +#else + value: 8 +#endif + mirror: always + +- name: ui.mouse.radius.visitedWeight + type: uint32_t + value: 120 + mirror: always + +- name: ui.mouse.radius.reposition + type: bool + value: @IS_ANDROID@ + mirror: always + +# When true, the ui.mouse.radius.* prefs will only affect simulated mouse +# events generated by touch input. When false, the prefs will be used for all +# mouse events. +- name: ui.mouse.radius.inputSource.touchOnly + type: bool + value: true + mirror: always + +#--------------------------------------------------------------------------- +# Prefs starting with "urlclassifier." +#--------------------------------------------------------------------------- + +# Update server response timeout for Safe Browsing. +- name: urlclassifier.update.response_timeout_ms + type: uint32_t + value: 30000 + mirror: always + +# Download update timeout for Safe Browsing. +- name: urlclassifier.update.timeout_ms + type: uint32_t + value: 90000 + mirror: always + +#--------------------------------------------------------------------------- +# Prefs starting with "view_source." +#--------------------------------------------------------------------------- + +- name: view_source.editor.external + type: bool + value: false + mirror: always + +- name: view_source.wrap_long_lines + type: bool + value: @IS_ANDROID@ + mirror: always + +- name: view_source.syntax_highlight + type: bool + value: true + mirror: always + +- name: view_source.tab_size + type: int32_t + value: 4 + mirror: always + +#--------------------------------------------------------------------------- +# Prefs starting with "webgl." (for pref access from Worker threads) +#--------------------------------------------------------------------------- + +- name: webgl.1.allow-core-profiles + type: RelaxedAtomicBool +#ifdef XP_MACOSX + value: true +#else + value: false +#endif + mirror: always + +- name: webgl.angle.force-d3d11 + type: RelaxedAtomicBool + value: false + mirror: always + +- name: webgl.angle.try-d3d11 + type: RelaxedAtomicBool +#ifdef XP_WIN + value: true +#else + value: false +#endif + mirror: always + +- name: webgl.angle.force-warp + type: RelaxedAtomicBool + value: false + mirror: always + +- name: webgl.auto-flush + type: RelaxedAtomicBool + value: true + mirror: always + +- name: webgl.auto-flush.gl + type: RelaxedAtomicBool + value: false + mirror: always + +- name: webgl.can-lose-context-in-foreground + type: RelaxedAtomicBool + value: true + mirror: always + +- name: webgl.cgl.multithreaded + type: RelaxedAtomicBool + value: true + mirror: always + +- name: webgl.colorspaces.prototype + type: RelaxedAtomicBool + value: false + mirror: always + +- name: webgl.debug.incomplete-tex-color + type: RelaxedAtomicUint32 + value: 0 + mirror: always + +- name: webgl.default-antialias + type: RelaxedAtomicBool + value: @IS_NOT_ANDROID@ + mirror: always + +- name: webgl.default-no-alpha + type: RelaxedAtomicBool + value: false + mirror: always + +- name: webgl.disable-angle + type: RelaxedAtomicBool + value: false + mirror: always + +- name: webgl.disable-wgl + type: RelaxedAtomicBool + value: false + mirror: always + +- name: webgl.dxgl.enabled + type: RelaxedAtomicBool +#ifdef XP_WIN + value: true +#else + value: false +#endif + mirror: always + +- name: webgl.dxgl.needs-finish + type: RelaxedAtomicBool + value: false + mirror: always + +- name: webgl.disable-fail-if-major-performance-caveat + type: RelaxedAtomicBool + value: true + mirror: always + +- name: webgl.disable-DOM-blit-uploads + type: RelaxedAtomicBool +#if defined(MOZ_AARCH64) && defined(XP_MACOSX) + value: true +#else + value: false +#endif + mirror: always + +- name: webgl.disabled + type: RelaxedAtomicBool + value: false + mirror: always + +- name: webgl.enable-debug-renderer-info + type: RelaxedAtomicBool + value: true + mirror: always + +- name: webgl.enable-draft-extensions + type: RelaxedAtomicBool + value: false + mirror: always + +- name: webgl.enable-privileged-extensions + type: RelaxedAtomicBool + value: false + mirror: always + +- name: webgl.enable-renderer-query + type: RelaxedAtomicBool + value: true + mirror: always + +- name: webgl.enable-surface-texture + type: RelaxedAtomicBool + value: true + mirror: always + +- name: webgl.enable-webgl2 + type: RelaxedAtomicBool + value: true + mirror: always + +- name: webgl.fake-verts.max + type: RelaxedAtomicUint32 + value: 10*1000*1000 # 10M as vec4 is count*4*4 = 160MB + mirror: always + +# Only works on Mac for now. +- name: webgl.forbid-hardware + type: RelaxedAtomicBool + value: false + mirror: always + +# Only works on Mac for now. +- name: webgl.forbid-software + type: RelaxedAtomicBool + value: true # It's generally better to encourage fallback to e.g. canvas2d. + mirror: always + +- name: webgl.force-enabled + type: RelaxedAtomicBool + value: false + mirror: always + +- name: webgl.force-index-validation + type: RelaxedAtomicInt32 + value: 0 + mirror: always + +- name: webgl.gl_khr_no_error + type: RelaxedAtomicBool +#ifdef XP_WIN + value: false +#else + value: true +#endif + mirror: always + +- name: webgl.lose-context-on-memory-pressure + type: RelaxedAtomicBool + value: false + mirror: always + +- name: webgl.max-contexts + type: RelaxedAtomicUint32 + value: 1000 + mirror: always + +- name: webgl.max-contexts-per-principal + type: RelaxedAtomicUint32 + value: 300 + mirror: always + +- name: webgl.max-size-per-texture-mib + type: RelaxedAtomicUint32 + value: 1024 + mirror: always + +- name: webgl.max-vert-ids-per-draw + type: RelaxedAtomicUint32 + value: 30*1000*1000 + mirror: always + +- name: webgl.max-warnings-per-context + type: RelaxedAtomicUint32 + value: 32 + mirror: always + +- name: webgl.min_capability_mode + type: RelaxedAtomicBool + value: false + mirror: always + +- name: webgl.msaa-force + type: RelaxedAtomicBool + value: false + mirror: always + +- name: webgl.msaa-samples + type: RelaxedAtomicUint32 + value: 4 + mirror: always + +- name: webgl.out-of-process + type: RelaxedAtomicBool +# (When reading the next line, know that preprocessor.py doesn't +# understand parentheses, but && is higher precedence than ||.) + value: true + mirror: always + +- name: webgl.out-of-process.worker + type: RelaxedAtomicBool +# (When reading the next line, know that preprocessor.py doesn't +# understand parentheses, but && is higher precedence than ||.) + value: true + mirror: always + +- name: webgl.out-of-process.force + type: RelaxedAtomicBool + value: false + mirror: always + +- name: webgl.out-of-process.shmem-size + type: RelaxedAtomicUint32 + value: 100000 # 100KB + mirror: always + +- name: webgl.out-of-process.async-present + type: RelaxedAtomicBool + value: true + mirror: always + +# Forces async present to wait for a sync, even while using remote textures. +- name: webgl.out-of-process.async-present.force-sync + type: RelaxedAtomicBool +#if defined(EARLY_BETA_OR_EARLIER) + value: false +#else + value: true +#endif + mirror: always + +#if defined(MOZ_WIDGET_ANDROID) +- name: webgl.out-of-process.enable-ahardwarebuffer + type: bool + value: false + mirror: once +#endif + +# Override the blocklist to assume that GL is threadsafe. +- name: webgl.threadsafe-gl.force-enabled + type: bool + value: false + mirror: once + +# Override the blocklist to assume that GL is not threadsafe. +- name: webgl.threadsafe-gl.force-disabled + type: bool + value: false + mirror: once + +- name: webgl.use-canvas-render-thread + type: bool + value: true + mirror: once + +- name: webgl.override-unmasked-renderer + type: DataMutexString + value: "" + mirror: always + +- name: webgl.override-unmasked-vendor + type: DataMutexString + value: "" + mirror: always + +- name: webgl.power-preference-override + type: RelaxedAtomicInt32 + value: 0 + mirror: always + +- name: webgl.prefer-16bpp + type: RelaxedAtomicBool + value: false + mirror: always + +- name: webgl.sanitize-unmasked-renderer + type: RelaxedAtomicBool + value: true + mirror: always + +- name: webgl.allow-immediate-queries + type: RelaxedAtomicBool + value: false + mirror: always + +- name: webgl.allow-fb-invalidation + type: RelaxedAtomicBool + value: false + mirror: always + + +- name: webgl.perf.max-warnings + type: RelaxedAtomicInt32 + value: 0 + mirror: always + +- name: webgl.perf.max-acceptable-fb-status-invals + type: RelaxedAtomicInt32 + value: 0 + mirror: always + +- name: webgl.perf.spew-frame-allocs + type: RelaxedAtomicBool + value: true + mirror: always + +#--------------------------------------------------------------------------- +# Prefs starting with "widget." +#--------------------------------------------------------------------------- + +# Global user preference for disabling native theme in content processes. +# +# NOTE(emilio): When changing this make sure to update the non_native_theme +# entry in python/mozbuild/mozbuild/mozinfo.py and test_fission_autostart.py +- name: widget.non-native-theme.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# Whether the non-native theme should always use system colors. Useful mostly +# for testing forced colors mode. +- name: widget.non-native-theme.always-high-contrast + type: RelaxedAtomicBool + value: false + mirror: always + +# The style of scrollbars to use. Here are the current options: +# +# 0: Default platform scrollbar style. +# 1: macOS scrollbars +# 2: GTK scrollbars +# 3: Android scrollbars +# 4: Windows 10 scrollbars +# 5: Windows 11 scrollbars +# +# Note that switching to non-default scrollbars is experimental and other +# scrollbar-related prefs may interfere with the experience. For example, +# setting the GTK thumb size may have no effect when using non-GTK scrollbars +# on GTK. +- name: widget.non-native-theme.scrollbar.style + type: uint32_t + value: 0 + mirror: always + +# An override that allows to override the default platform size. The size in CSS +# pixels at full zoom of the minimum scrollbar width. +- name: widget.non-native-theme.scrollbar.size.override + type: uint32_t + value: 0 + mirror: always + +# Whether we should use themed values for dark scrollbars. +- name: widget.non-native-theme.scrollbar.dark-themed + type: RelaxedAtomicBool + value: true + mirror: always + +# Whether the active thumb color should always use the themed colors, even if +# dark scrollbars are in use. +- name: widget.non-native-theme.scrollbar.active-always-themed + type: RelaxedAtomicBool + value: true + mirror: always + +# Whether we use the Windows CSS scrollbar sizes, or the scrollbar sizes +# defined above. +- name: widget.non-native-theme.win.scrollbar.use-system-size + type: bool + value: true + mirror: always + +# Whether Windows 11 scrollbars are always drawn with the thinner "overlay" +# scrollbar style. +- name: widget.non-native-theme.win11.scrollbar.force-overlay-style + type: bool + value: false + mirror: always + +# The amount of space that the thumb should fill the scrollbar, from zero to +# one. +- name: widget.non-native-theme.gtk.scrollbar.thumb-size + type: float + value: 0.75 + mirror: always + +# The minimum size of the scroll thumb, in the scrollbar direction. +- name: widget.non-native-theme.gtk.scrollbar.thumb-cross-size + type: uint32_t + value: 40 + mirror: always + +# Whether the thumb should be rounded for the non-native scrollbars. +- name: widget.non-native-theme.gtk.scrollbar.round-thumb + type: bool + value: true + mirror: always + +# Whether buttons shouldn't be suppressed for non-native scrollbars. +- name: widget.non-native-theme.gtk.scrollbar.allow-buttons + type: bool + value: false + mirror: always + +# Whether we should use the default accent color or the theme-provided one for +# content (e.g. for form controls and CSS system colors). +# +# Turned off on Windows, for now (we always use the default blue-ish +# accent-color there). We might want to turn this on there, though it's worth +# thinking on what the behavior should be for grey-ish accent colors (which are +# a thing on Windows and can cause confusion with things like disabled form +# controls). Maybe it's just fine. +- name: widget.non-native-theme.use-theme-accent + type: RelaxedAtomicBool +#ifdef XP_WIN + value: false +#else + value: true +#endif + mirror: always + +# Whether we should try to use WebRender to render widgets. +- name: widget.non-native-theme.webrender + type: bool +#if defined(XP_MACOSX) + # Disabled on macOS release / beta because of a suspected AMD driver bug (see + # bug 1715452). + value: @IS_NIGHTLY_BUILD@ +#else + value: true +#endif + mirror: always + +# Whether the outline style should be one big stroke or two contrasting strokes +- name: widget.non-native-theme.solid-outline-style + type: bool + value: false + mirror: always + +# Preference to disable dark scrollbar implementation. +# This is mainly for testing because dark scrollbars have to be semi- +# transparent, but many reftests expect scrollbars to look identical +# among different backgrounds. +# However, some users may want to disable this as well. +- name: widget.disable-dark-scrollbar + type: bool + value: false + mirror: always + +- name: widget.window-transforms.disabled + type: RelaxedAtomicBool + value: false + mirror: always + +#ifdef XP_MACOSX + +# Whether to shift by the menubar height on fullscreen mode. +# 0: never +# 1: always +# 2: auto (tries to detect when it is needed) +- name: widget.macos.shift-by-menubar-on-fullscreen + type: RelaxedAtomicUint32 + value: 2 + mirror: always + +- name: widget.macos.native-context-menus + type: RelaxedAtomicBool + value: true + mirror: always +#endif + +# Whether native GTK context menus are enabled. +# Disabled because at the very least there's missing custom icon support. +- name: widget.gtk.native-context-menus + type: RelaxedAtomicBool + value: false + mirror: always + +# Whether we use overlay scrollbars on GTK. +- name: widget.gtk.overlay-scrollbars.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# Whether we honor the scrollbar colors from the gtk theme. +- name: widget.gtk.theme-scrollbar-colors.enabled + type: bool + value: true + mirror: always + +# Whether selection colors for the non-system theme get passed from the system +# GTK theme. +- name: widget.gtk.alt-theme.selection + type: bool + value: true + mirror: always + +# Whether form control accent colors for the non-system theme get passed from +# the system GTK theme. +- name: widget.gtk.alt-theme.accent + type: bool + value: true + mirror: always + +# Whether the scrollbar thumb active color from the non-system theme gets +# passed from the system GTK theme. +- name: widget.gtk.alt-theme.scrollbar_active + type: bool + value: true + mirror: always + +# Whether we should try to grab the pointer on popups. +# 0: Never +# 1: Always +# 2: Auto (depending on the system) +- name: widget.gtk.grab-pointer + type: int32_t + value: 2 + mirror: always + +# Whether we should try ignore bogus leave-notify events from the window +# manager. +# 0: Never +# 1: Always +# 2: Auto (depending on the system) +- name: widget.gtk.ignore-bogus-leave-notify + type: int32_t + value: 2 + mirror: always + +# Whether to use gtk high contrast themes to disable content styling like on +# windows high contrast mode. +- name: widget.content.gtk-high-contrast.enabled + type: bool + value: true + mirror: always + +# Whether to pause the compositor when a native window is minimized. +- name: widget.pause-compositor-when-minimized + type: bool + value: true + mirror: always + +#ifdef MOZ_WAYLAND +# Whether to override the DMABuf blocklist. +- name: widget.dmabuf.force-enabled + type: bool + value: false + mirror: once + +#ifdef NIGHTLY_BUILD +# Keep those pref hidden on non-nightly builds to avoid people accidentally +# turning it on. + +# Use DMABuf for content textures. +# For testing purposes only. +- name: widget.dmabuf-textures.enabled + type: RelaxedAtomicBool + value: false + mirror: always +#endif + +# Use DMABuf backend for WebGL. +- name: widget.dmabuf-webgl.enabled + type: RelaxedAtomicBool + value: true + mirror: always + +# Force fractional scaling using wp_viewporter. Valid values: 0.5 - 8 +- name: widget.wayland.fractional_buffer_scale + type: float + value: 0.0f + mirror: once + +# Use opaque region for MozContainer wl_surface +- name: widget.wayland.opaque-region.enabled + type: bool + value: true + mirror: once + +# Use frame callback based vsync +- name: widget.wayland.vsync.enabled + type: bool + value: true + mirror: once + +# Whether to keep firing vsync at layout.throttled_frame_rate after we've been +# occluded. +- name: widget.wayland.vsync.keep-firing-at-idle + type: bool + value: false + mirror: always +#endif + +#ifdef MOZ_WIDGET_GTK + +# Use gdk_window_move_to_rect to move Wayland popups when available. +- name: widget.wayland.use-move-to-rect + type: bool + value: true + mirror: once + +# The time we should spend on a DBUS call to the FileManager1 interface before +# giving up and trying an alternative method. +# +# -1 for the default system timeout, INT_MAX for "infinite time". +# +# This happens right now on the main thread so 1 second should be enough, we +# should consider moving it to a background task and just use the default +# timeout. +- name: widget.gtk.file-manager-show-items-timeout-ms + type: int32_t + value: 1000 + mirror: always + +# The timeout we should spend on a DBUS call to the Settings proxy before +# giving up. +# +# -1 for the default system timeout, INT_MAX for "infinite time". +# +# This runs just once, but during startup, so make sure it doesn't take too +# long. Three seconds should be way more than enough, and if we don't get the +# reply on time then the only potential issue is that we use a light instead of +# dark interface or vice versa. +- name: widget.gtk.settings-portal-timeout-ms + type: int32_t + value: 3000 + mirror: always + +# Whether to use gtk portal for the file picker. +# - 0: never +# - 1: always +# - 2: auto (true for flatpak or GTK_USE_PORTAL=1, false otherwise) +- name: widget.use-xdg-desktop-portal.file-picker + type: int32_t + value: 2 + mirror: always + +# Whether to use gtk portal for the mime handler. +# - 0: never +# - 1: always +# - 2: auto (for now only true for flatpak, see bug 1516290) +- name: widget.use-xdg-desktop-portal.mime-handler + type: int32_t + value: 2 + mirror: always + +# Whether to try to use XDG portal for settings / look-and-feel information. +# https://flatpak.github.io/xdg-desktop-portal/#gdbus-org.freedesktop.portal.Settings +# - 0: never +# - 1: always +# - 2: auto +- name: widget.use-xdg-desktop-portal.settings + type: int32_t + value: 2 + mirror: always + +# Whether to use XDG portal for geolocation. +# https://flatpak.github.io/xdg-desktop-portal/#gdbus-org.freedesktop.portal.Location +# - 0: never +# - 1: always +# - 2: auto +- name: widget.use-xdg-desktop-portal.location + type: int32_t + value: 2 + mirror: always +# Whether to use XDG portal for opening to a file. +# https://flatpak.github.io/xdg-desktop-portal/#gdbus-org.freedesktop.portal.OpenURI +# - 0: never +# - 1: always +# - 2: auto (true for flatpak or GTK_USE_PORTAL=1, false otherwise) +- name: widget.use-xdg-desktop-portal.open-uri + type: int32_t + value: 2 + mirror: always +#endif + +#ifdef XP_WIN +# WindowsUIUtils::Share to wait for user action on Windows share dialog +# `true` means the promise resolves when user completes or cancels the share +# action. This can be unsafe since selecting copy action fires no DataPackage +# event as of 21H1. +# `false` means the promise resolves when the share data is passed to +# DataPackage. +# This affects the behavior of `navigator.share()`. +- name: widget.windows.share.wait_action.enabled + type: bool + value: false + mirror: always + +- name: widget.windows.window_occlusion_tracking.enabled + type: bool + value: true + mirror: always + +# Whether overlay scrollbars respect the system settings. +# Note that these can be overridden by the ui.useOverlayScrollbars pref. +- name: widget.windows.overlay-scrollbars.enabled + type: bool + value: true + mirror: always + +# Whether we allow accessing the UWP system color pallete. +- name: widget.windows.uwp-system-colors.enabled + type: bool + value: true + mirror: always + +# Whether we use the accent color for highlight as some other UWP apps do. +# +# false for now since it can cause some contrast-with-background issues +# specially with grey accents, see bug 1776588. +- name: widget.windows.uwp-system-colors.highlight-accent + type: bool + value: false + mirror: always + +- name: widget.windows.window_occlusion_tracking_display_state.enabled + type: bool + value: false + mirror: always + +- name: widget.windows.window_occlusion_tracking_session_lock.enabled + type: bool + value: true + mirror: always + +- name: widget.windows.hide_cursor_when_typing + type: bool + value: false + mirror: always + +# Whether to apply logic intended to improve taskbar behavior involving +# non-foreground fullscreen windows. (See bug 1732517.) +- name: widget.windows.alternate_fullscreen_heuristics + type: RelaxedAtomicBool + value: true + mirror: always + +# Whether to apply a workaround intended to prevent Windows from treating +# non-foreground-marked fullscreen windows as fullscreen on Windows 7 and +# earlier. (See bug 1732517.) +# +# Valid values: +# * -1: the workaround is never used. +# * 1: the workaround is always used. +# * 0: the workaround is used if we think it should be. (Default.) +- name: widget.windows.fullscreen_marking_workaround + type: RelaxedAtomicInt32 + value: 0 + mirror: always + +# The number of messages of each type to keep for display in +# about:windows-messages +- name: widget.windows.messages_to_log + type: RelaxedAtomicUint32 + value: 6 + mirror: always + +# Whether to flush the Ole clipboard synchronously. +# Possible values are: +# * 0: never +# * 1: always +# * 2 (or others): when needed +- name: widget.windows.sync-clipboard-flush + type: uint32_t + value: 2 + mirror: always + +# Whether to apply a hack (adjusting the window height by -1px and back again) +# upon first entering fullscreen intended to work around a bug exhibited under +# on some Windows 11 machines under some configurations. (See bug 1763981.) +# +# Semantics: +# * 0: never +# * 1: always +# * 2: auto +- name: widget.windows.apply-dwm-resize-hack + type: RelaxedAtomicInt32 + value: 2 + mirror: always +#endif + +# Whether to disable SwipeTracker (e.g. swipe-to-nav). +- name: widget.disable-swipe-tracker + type: bool + value: false + mirror: always + +# Various metrics to control SwipeTracker. +- name: widget.swipe.velocity-twitch-tolerance + type: float + value: 0.0000001f + mirror: always + +- name: widget.swipe.success-velocity-contribution + type: float + value: 0.05f + mirror: always + +# The values for this pref are derived from trial and error in an effort to +# match the existing behavior on the respective platforms. +- name: widget.swipe.whole-page-pixel-size + type: float +#if defined(XP_WIN) + value: 1100.0f +#elif defined(XP_MACOSX) + value: 550.0f +#else + value: 40.0f +#endif + mirror: always + +- name: widget.transparent-windows + type: bool + value: true + mirror: once + +#--------------------------------------------------------------------------- +# Prefs starting with "zoom." +#--------------------------------------------------------------------------- + +- name: zoom.maxPercent + type: uint32_t +#ifdef ANDROID + value: 400 +#else + value: 500 +#endif + mirror: always + +- name: zoom.minPercent + type: uint32_t +#ifdef ANDROID + value: 20 +#else + value: 30 +#endif + mirror: always + +#--------------------------------------------------------------------------- +# End of prefs +#--------------------------------------------------------------------------- |