Source code

Revision control

Copy as Markdown

Other Tools

# 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
# set_spidermonkey_pref: <false | startup | always> # 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.cross-fade.enabled")`.
#
# - `set_spidermonkey_pref` indicates whether SpiderMonkey boilerplate code
# should be generated for this pref. If this is set to 'startup', the
# pref on the SpiderMonkey side is only set during process startup. If set to
# 'always', the SpiderMonkey pref value is also updated when this pref is
# changed at runtime.
# This option is only valid for javascript.options.* prefs.
#
# 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
#if defined(MOZ_DEV_EDITION) || defined(EARLY_BETA_OR_EARLIER)
#define IS_DEV_EDITION_OR_EARLY_BETA_OR_EARLIER true
#else
#define IS_DEV_EDITION_OR_EARLY_BETA_OR_EARLIER false
#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
#ifdef XP_MACOSX
#define IS_XP_MACOSX true
#define IS_NOT_XP_MACOSX false
#else
#define IS_XP_MACOSX false
#define IS_NOT_XP_MACOSX true
#endif
#---------------------------------------------------------------------------
# Prefs starting with "accessibility."
#---------------------------------------------------------------------------
# Tab focus model bit field:
# 1 focuses text controls, 2 focuses other form elements, 4 adds links.
# Most users will want 1, 3, or 7. On macOS we expose a checkbox to alter
# between 7 and 3.
- name: accessibility.tabfocus
type: int32_t
value: 7
mirror: always
# Only on mac tabfocus is expected to handle UI widgets as well as web content.
# FIXME(emilio): This is weird now that we have a lot of HTML in our pages.
- name: accessibility.tabfocus_applies_to_xul
type: bool
value: @IS_XP_MACOSX@
mirror: always
- 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.ARIAElementReflection.enabled
type: bool
value: @IS_NIGHTLY_BUILD@
mirror: always
# Whether to enable all accessibility cache domains on startup.
# * false: enable domains as needed
# * true: enable all domains regardless of need (cache everything)
- name: accessibility.enable_all_cache_domains
type: bool
value: false
mirror: once
# 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 enable support for the UI Automation API on Windows.
- name: accessibility.uia.enable
type: bool
value: false
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
# Whether to avoid accessibility activation on Windows shortly after max button
# hit-test for the "snap layout" feature.
#
# Possible values are:
# * 0: never
# * 1: always
# * 2 (or others): when needed
- name: accessibility.windows.suppress-for-snap-layout
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: false
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
# 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.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
#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:
#
#
# * 2: Pixel mode: Uses gtk deltas as a fixed pixel multiplier. This mode matches e.g. GNOME web.
#
# (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.minimap.enabled
type: RelaxedAtomicBool
value: false
mirror: always
- name: apz.one_touch_pinch.enabled
type: RelaxedAtomicBool
value: @IS_ANDROID@
mirror: always
- name: apz.overscroll.enabled
type: RelaxedAtomicBool
value: true
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.
- name: apz.scrollthumb.recalc
type: RelaxedAtomicBool
value: true
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
- 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
# DLP agent name, for display in the browser
- name: browser.contentanalysis.agent_name
type: String
value: "A DLP agent"
mirror: never
# (optional) The organization name that the DLP agent should have. If this is
# non-empty and the DLP agent is not signed with this organization name,
# Firefox will fail the connection.
- name: browser.contentanalysis.client_signature
type: String
value: ""
mirror: never
# Content analysis by external applications, e.g. data-loss prevention apps
- name: browser.contentanalysis.enabled
type: bool
value: false
mirror: always
# What content analysis should return if there is a problem communicating
# with the agent. (see DefaultResponse enum in ContentAnalysis.h)
# Make sure these stay in sync with the out-of-range check in Policies.sys.mjs.
#
# 0: Block all requests
# 1: Warn on all requests (which lets the user decide)
# 2: Allow all requests
- name: browser.contentanalysis.default_result
type: uint32_t
value: 0
mirror: always
# Is the IPC pipe to the DLP tool specific to the user or to the system?
- name: browser.contentanalysis.is_per_user
type: bool
value: true
mirror: always
# Path name of pipe used to connect to a configured DLP agent.
- name: browser.contentanalysis.pipe_path_name
type: String
value: "path_user"
mirror: never
# Space-separated list of regexs that are compared to URLs of resources
# being checked by content-analysis. Resources that match are not checked
# and are always permitted.
# By default this does not check any about: page except for about:blank
# and about:srcdoc.
- name: browser.contentanalysis.allow_url_regex_list
type: String
value: "^about:(?!blank|srcdoc).*"
mirror: never
# Space-separated list of regexs that are compared to URLs of resources
# being checked by content-analysis. Resources that match are not checked
# and are always denied.
- name: browser.contentanalysis.deny_url_regex_list
type: String
value: ""
mirror: never
# Should CA ignore the system setting and use silent notifications?
- name: browser.contentanalysis.silent_notifications
type: bool
value: false
mirror: always
# Time (secs) after which content analysis operations are considered timed-out
- name: browser.contentanalysis.agent_timeout
type: uint32_t
value: 30
mirror: always
# Should Firefox show a notification or dialog when content analysis blocks
# access?
- name: browser.contentanalysis.show_blocked_result
type: bool
value: true
mirror: always
# Should Firefox bypass content analysis for pastes and drags whose source
# is the same tab?
- name: browser.contentanalysis.bypass_for_same_tab_operations
type: bool
value: false
mirror: always
# Content blocking for Enhanced Tracking Protection
- 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
# Min font device pixel size at which to turn on high quality.
- name: browser.display.auto_quality_min_font_size
type: RelaxedAtomicUint32
value: 20
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.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,
Google Material Icons Filled,
Material Symbols Outlined,
Material Symbols Round,
Material Symbols Rounded,
Material Symbols Sharp,
Google Symbols,
FontAwesome
mirror: never
- 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: @IS_NIGHTLY_BUILD@
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). The
# theming code overrides it if appropriate.
- name: browser.theme.toolbar-theme
type: RelaxedAtomicUint32
value: 2
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
# Whether the firefox titlebar respects the
# -moz-windows-accent-color-in-titlebar setting on the tab strip.
- name: browser.theme.windows.accent-color-in-tabs.enabled
type: RelaxedAtomicBool
value: false
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
# 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
# Disable collection of data for session store using the native collector code,
# instead use the older implementation that's not compatible with session
# history in the parent (and thus Fission).
- name: browser.sessionstore.disable_platform_collection
type: bool
#if defined(MOZ_THUNDERBIRD)
value: true
#else
value: false
#endif
mirror: once
do_not_use_directly: true
#if defined(NIGHTLY_BUILD) || defined(MOZ_DEV_EDITION) || defined(DEBUG)
- name: browser.startup.record
type: bool
value: false
mirror: always
#endif
# 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
# If set, when a link is opened to a new tab, do not switch to the new tab.
#
# This pref is used when the link is opened with "Open Link in New Tab",
# middle-click, etc.
#
# See also browser.tabs.loadDivertedInBackground, which is used when the website
# diverts the link into a new tab.
- name: browser.tabs.loadInBackground
type: bool
value: true
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
# If set, middle clicking on a link opens the link in a new tab.
- name: browser.tabs.opentabfor.middleclick
type: bool
value: true
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.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
#if defined(ANDROID)
value: @IS_NIGHTLY_BUILD@
#else
value: true
#endif
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: true
#endif
mirror: always
# When this pref is enabled, the JS validator will be enabled for
# ORB.
- name: browser.opaqueResponseBlocking.javascriptValidator
type: bool
value: true
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.
# 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).
# 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 true, zooming will be enabled on all sites, even ones that declare
# user-scalable=no or use touch-action to disable pinch gestures.
- name: browser.ui.zoom.force-user-scalable
type: RelaxedAtomicBool
value: false
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
# Whether or not to save and restore zoom levels on a per-site basis.
- name: browser.zoom.siteSpecific
type: bool
value: @IS_NOT_ANDROID@
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
# Whether to put a file promise onto the clipboard when copying images on Windows
- name: clipboard.imageAsFile.enabled
type: bool
value: @IS_NOT_EARLY_BETA_OR_EARLIER@
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: true
mirror: always
# Whether global rules are allowed to run in sub-frames. Running query selectors
# in every sub-frame may negatively impact performance, but is required for some
# CMPs.
- name: cookiebanners.service.enableGlobalRules.subFrames
type: bool
value: true
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
# How many times per site and site load to check for cookie banners after which
# the mechanism is considered on cooldown for the site in the current browsing
# session. If the threshold is set to zero, banner clicking won't be considered
# as being on cooldown regardless of how many times the site is loaded. The
# maximum value for the retry is 255, any value over than that will be capped.
- name: cookiebanners.bannerClicking.maxTriesPerSiteAndSession
type: uint32_t
value: 3
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
- 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
- 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
#---------------------------------------------------------------------------
# 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.