Source code

Revision control

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
#
# - `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, or `String`. 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
#---------------------------------------------------------------------------
# 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: false
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
#ifdef XP_WIN
# Linux and macOS turn on system level notification as default, but Windows is
# disabled due to instability (dependencies of bug 1497425).
value: false
#else
value: true
#endif
mirror: always
#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: bool
value: true
mirror: always
#endif
#---------------------------------------------------------------------------
# Prefs starting with "apz."
# The apz prefs are explained in AsyncPanZoomController.cpp
#---------------------------------------------------------------------------
- name: apz.allow_double_tap_zooming
type: RelaxedAtomicBool
value: true
mirror: always
- name: apz.allow_immediate_handoff
type: RelaxedAtomicBool
value: false
mirror: always
- name: apz.allow_zooming
type: RelaxedAtomicBool
value: @IS_ANDROID@
mirror: always
- name: apz.allow_zooming_out
type: RelaxedAtomicBool
value: false
mirror: always
- name: apz.android.chrome_fling_physics.enabled
type: RelaxedAtomicBool
value: true
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.
# 0 = FREE (No locking at all)
# 1 = STANDARD (Once locked, remain locked until scrolling ends)
# 2 = STICKY (Allow lock to be broken, with hysteresis)
- name: apz.axis_lock.mode
type: RelaxedAtomicInt32
value: 2
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_interval_ms
type: RelaxedAtomicInt32
value: 500
mirror: always
- name: apz.fling_accel_supplemental_mult
type: AtomicFloat
value: 1.0f
mirror: always
- name: apz.fling_accel_min_velocity
type: AtomicFloat
value: 1.5f
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
#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.mvm.force-enabled
type: RelaxedAtomicBool
value: true
mirror: always
- name: apz.one_touch_pinch.enabled
type: RelaxedAtomicBool
value: true
mirror: always
- name: apz.overscroll.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.paint_skipping.enabled
type: RelaxedAtomicBool
value: true
mirror: always
- name: apz.peek_messages.enabled
type: RelaxedAtomicBool
value: true
mirror: always
# Fetch displayport updates early from the message queue.
- name: apz.pinch_lock.mode
type: RelaxedAtomicInt32
value: 1
mirror: always
- name: apz.pinch_lock.scroll_lock_threshold
type: AtomicFloat
value: 1.0f / 32.0f # 1/32 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: 50 # milliseconds
mirror: once
- name: apz.popups.enabled
type: RelaxedAtomicBool
value: false
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
- 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: 150
mirror: always
- name: apz.windows.force_disable_direct_manipulation
type: RelaxedAtomicBool
value: false
mirror: always
- name: apz.windows.use_direct_manipulation
type: RelaxedAtomicBool
value: false
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
value: 250
mirror: always
- name: apz.scale_repaint_delay_ms
type: RelaxedAtomicInt32
value: 500
mirror: always
- name: apz.relative-update.enabled
type: RelaxedAtomicBool
value: true
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
#---------------------------------------------------------------------------
# Prefs starting with "browser."
#---------------------------------------------------------------------------
- name: browser.active_color
type: String
value: "#EE0000"
mirror: never
- name: browser.anchor_color
type: String
value: "#0000EE"
mirror: never
- name: browser.autofocus
type: bool
value: true
mirror: always
- name: browser.cache.offline.enable
type: bool
value: true
mirror: always
- name: browser.cache.offline.storage.enable
type: bool
#ifdef EARLY_BETA_OR_EARLIER
value: false
#else
value: true
#endif
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
# Enable/Disable Origin based cache isolation
- name: browser.cache.cache_isolation
type: RelaxedAtomicBool
value: false
mirror: always
# -1 = determine dynamically, 0 = none, n = memory capacity in kilobytes.
- name: browser.cache.memory.capacity
type: RelaxedAtomicInt32
#ifdef ANDROID
value: 1024
#else
value: -1
#endif
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
# 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
- 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
# 0 = always, except in high contrast mode
# 1 = always
# 2 = never
#
# Default to 0 on windows, 1 elsewhere.
- name: browser.display.document_color_use
type: RelaxedAtomicUint32
#ifdef XP_WIN
value: 0
#else
value: 1
#endif
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
# Whether focus rings are always shown by default.
#
# This is the initial value of nsWindowRoot::mShowFocusRings, but it can be
# overridden by system preferences. For Windows, we start with default-true,
# and by default the UISF_HIDEFOCUS message comes by and sets it to false.
- name: browser.display.show_focus_rings
type: bool
#ifndef XP_WIN
value: false
#else
value: true
#endif
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
- name: browser.display.use_focus_colors
type: bool
value: false
mirror: always
- name: browser.display.use_system_colors
type: bool
value: false
mirror: always
- name: browser.dom.window.dump.enabled
type: RelaxedAtomicBool
value: @IS_NOT_MOZILLA_OFFICIAL@
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
# Render animations and videos as a solid color
- name: browser.measurement.render_anims_and_video_solid
type: RelaxedAtomicBool
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
# 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
# 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
# ContentSessionStore 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
# If set, use DocumentChannel with nsDocShell in place of HttpChannel.
- name: browser.tabs.documentchannel
type: bool
value: true
mirror: always
# If set, use DocumentChannel with parent process' sDocShell
- name: browser.tabs.documentchannel.ppdc
type: bool
value: true
mirror: always
# If set, use DocumentChannel to initiate loads from
# parent-process BrowsingContexts in parallel with the content
# process.
- name: browser.tabs.documentchannel.parent-initiated
type: bool
value: true
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
- 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
#if !defined(ANDROID)
value: true
#else
value: false # Blocked by DocumentChannel, see Bug 1589982.
#endif
mirror: always
# 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
#if !defined(ANDROID)
value: true
#else
value: false # Blocked by DocumentChannel, see Bug 1589982.
#endif
mirror: always
# 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
- name: browser.find.anonymous_content.enabled
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: bool
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 hitRegion APIs enabled?
- name: canvas.hitregions.enabled
type: bool
value: false
mirror: always
# Provide ability to turn on support for canvas mozGetAsFile API.
- name: canvas.mozgetasfile.enabled
type: bool
value: false
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
#---------------------------------------------------------------------------
# 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.
- 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: 360000
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 "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."
#---------------------------------------------------------------------------
# Tells if DevTools have been explicitely enabled by the user. This pref
# allows to disable all features related to DevTools for users that never use
# them. Until bug 1361080 lands, we always consider them enabled.
- name: devtools.enabled
type: RelaxedAtomicBool
value: true
mirror: always
- 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
#---------------------------------------------------------------------------
# Prefs starting with "dom."
#---------------------------------------------------------------------------
# Whether window.mozPaintCount is exposed to the web.
- name: dom.mozPaintCount.enabled
type: bool
value: false
mirror: always
# 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: @IS_NOT_RELEASE_OR_BETA@
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 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.location.reload() and window.history.go(0) should be blocked
# if 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
#
# So for now disable it on Android and Desktop Nightly, to see if we have any
# desktop regression before removing it completely. Note that this means that
# non-nightly RDM behaves different than Android in this case.
- name: dom.block_reload_from_resize_event_handler
type: bool
#if defined(MOZ_WIDGET_ANDROID) || defined(NIGHTLY_BUILD)
value: false
#else
value: true
#endif
mirror: always
# SW Cache API
- name: dom.caches.enabled
type: RelaxedAtomicBool
value: true
mirror: always
- 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
# Whether Mozilla specific "text" event should be dispatched only in the
# system group or not in content.
- name: dom.compositionevent.text.dispatch_only_system_group_in_content
type: bool
value: true
mirror: always
# Is support for CSSPseudoElement enabled?
- name: dom.css_pseudo_element.enabled
type: bool
value: false
mirror: always
# Disable moz* APIs in DataTransfer.
# Should be accessed via DataTransfer::MozAtAPIsEnabled.
- name: dom.datatransfer.mozAtAPIs
type: bool
value: false
mirror: always
do_not_use_directly: true
# Any 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
# HTML <dialog> element
- name: dom.dialog_element.enabled
type: bool
value: @IS_NIGHTLY_BUILD@
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
# 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: @IS_NOT_EARLY_BETA_OR_EARLIER@
mirror: always
- name: dom.enable_window_print
type: bool
value: @IS_NOT_ANDROID@
mirror: always
- name: dom.element.transform-getters.enabled
type: bool
value: false
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 performance.GetEntries* will contain an entry for the active document
- name: dom.enable_performance_navigation_timing
type: bool
value: true
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: @IS_NIGHTLY_BUILD@
mirror: always
#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
# Enable clipboard readText() and writeText() by default
- name: dom.events.asyncClipboard
type: bool
value: true
mirror: always
# Disable clipboard read() and write() by default
- name: dom.events.asyncClipboard.dataTransfer
type: bool
value: false
mirror: always
# 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
# 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
# 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
# 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
# Enable formData event
- name: dom.formdata.event.enabled
type: bool
value: true
mirror: always
# Support @autocomplete values for form autofill feature.
- name: dom.forms.autocomplete.formautofill
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
# Enable the form.requestSubmit API
- name: dom.forms.requestsubmit.enabled
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: bool
value: false
mirror: always
# W3C draft ImageCapture API
- name: dom.imagecapture.enabled
type: bool
value: false
mirror: always
# <img loading="lazy">
#
- 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.
#
# (0px, 0px, 0px, 0px) by default, for now. We could also consider an
# adaptative version of this.
- name: dom.image-lazy-loading.root-margin.top
type: float
value: 0
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: 0
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: 0
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: 0
mirror: always
- name: dom.image-lazy-loading.root-margin.right.percentage
type: bool
value: false
mirror: always
# Enable passing the "storage" option to indexedDB.open.
- name: dom.indexedDB.storageOption.enabled
type: RelaxedAtomicBool
value: false
mirror: always
- name: dom.input_events.beforeinput.enabled
type: bool
value: false
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
# 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.IntersectionObserver.enabled
type: bool
value: true
mirror: always
- name: dom.IntersectionObserverExplicitDocumentRoot.enabled
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
# 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
# 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
- 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
value: 0
mirror: always
- name: dom.ipc.processPriorityManager.backgroundGracePeriodMS
type: uint32_t
value: 0
mirror: always
# Don't use new input types.
- name: dom.experimental_forms
type: bool
value: false
mirror: always
# Enable <input type=color> by default. It will be turned off for remaining
# platforms which don't have a color picker implemented yet.
- name: dom.forms.color
type: bool
value: true
mirror: always
# Is support for input type=date and type=time enabled?
- name: dom.forms.datetime
type: bool
value: true
mirror: always
# Support for input type=month, type=week and type=datetime-local. 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: @IS_NIGHTLY_BUILD@
mirror: always
# Is support for HTMLElement.inputMode enabled?
- name: dom.forms.inputmode
type: bool
#if defined(ANDROID)
value: true
#else
value: @IS_NOT_RELEASE_OR_BETA@
#endif
mirror: always
# Enable Directory API. By default, disabled.
- name: dom.input.dirpicker
type: bool
value: false
mirror: always
# Is support for InputEvent.data enabled?
- name: dom.inputevent.data.enabled
type: bool
value: true
mirror: always
# Is support for InputEvent.dataTransfer enabled?
- name: dom.inputevent.datatransfer.enabled
type: bool
value: true
mirror: always
# Is support for InputEvent.inputType enabled?
- name: dom.inputevent.inputtype.enabled
type: bool
value: true
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
# 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 the Large-Allocation header is enabled.
- name: dom.largeAllocationHeader.enabled
type: bool
value: true
mirror: always
- name: dom.largeAllocation.forceEnable
type: bool
value: false
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
# This pref is used to enable/disable the `document.autoplayPolicy` API which
# returns a enum string which presents current autoplay policy and can change
# overtime based on user session activity.
- name: dom.media.autoplay.autoplay-policy-api
type: bool
value: false
mirror: always
# Media Session API
- name: dom.media.mediasession.enabled
type: bool
value: @IS_NIGHTLY_BUILD@
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: int32_t
value: 4
mirror: always
# Timeout clamp in ms for background windows.
- name: dom.min_background_timeout_value
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
# 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_var_caches.js accordingly.
- name: dom.mutation-events.cssom.disabled
type: bool
value: true
mirror: always
# Network Information API
- name: dom.netinfo.enabled
type: RelaxedAtomicBool
value: @IS_ANDROID@
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
# 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
# Whether we should show the placeholder when the element is focused but empty.
- name: dom.placeholder.show_on_focus
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
#if !defined(ANDROID)
value: true
#else
value: false # Blocked by DocumentChannel, see Bug 1589982.
#endif
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
# Presentation API
- name: dom.presentation.enabled
type: bool
#if defined(ANDROID)
value: @IS_NOT_RELEASE_OR_BETA@
#else
value: false
#endif
mirror: always
- name: dom.presentation.controller.enabled
type: bool
#if defined(ANDROID)
value: @IS_NOT_RELEASE_OR_BETA@
#else
value: false
#endif
mirror: always
- name: dom.presentation.receiver.enabled
type: bool
#if defined(ANDROID)
value: @IS_NOT_RELEASE_OR_BETA@
#else
value: false
#endif
mirror: always
- name: dom.presentation.testing.simulate-receiver
type: bool
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
# 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
# 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
# Preference that users can set to override temporary storage smart limit
# calculation.
- name: dom.quotaManager.temporaryStorage.fixedLimit
type: RelaxedAtomicInt32
value: -1
mirror: always
# Preference that users can set to override temporary storage smart limit
# calculation.
- name: dom.quotaManager.temporaryStorage.chunkSize
type: RelaxedAtomicUint32
value: 10 * 1024
mirror: always
# A pref that is used to enable testing features.
- name: dom.quotaManager.testing
type: SequentiallyConsistentAtomicBool
value: false
mirror: always
#ifdef 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
# TelemetryVFS.
- name: dom.quotaManager.overrideXFullPathname
type: RelaxedAtomicBool
value: true
mirror: always
#endif
# Reporting API.
- name: dom.reporting.enabled
type: RelaxedAtomicBool
value: @IS_NIGHTLY_BUILD@
mirror: always
- name: dom.reporting.testing.enabled
type: RelaxedAtomicBool
value: false
mirror: always
- name: dom.reporting.featurePolicy.enabled
type: RelaxedAtomicBool
value: @IS_NIGHTLY_BUILD@
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
# 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
# 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: @IS_NIGHTLY_BUILD@
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.whitelist_onions
type: bool
value: false
mirror: always
# This pref enables FeaturePolicy logic and the parsing of 'allow' attribute in
# HTMLIFrameElement objects.
- name: dom.security.featurePolicy.enabled
type: bool
value: true
mirror: always
# This pref enables Sec-Fetch-* logic and causes corresponding
# request headers to be set.
- name: dom.security.secFetch.enabled
type: RelaxedAtomicBool
value: @IS_NIGHTLY_BUILD@
mirror: always
# This pref enables the featurePolicy header support.
- name: dom.security.featurePolicy.header.enabled
type: bool
value: false
mirror: always
- name: dom.security.respect_document_nosniff
type: RelaxedAtomicBool
value: true
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
# 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 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
# Is support for selection event APIs enabled?
- name: dom.select_events.enabled
type: bool
value: true
mirror: always
# Whether or not selection events on text controls are enabled.
- name: dom.select_events.textcontrols.enabled
type: bool
value: @IS_NIGHTLY_BUILD@
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: @IS_EARLY_BETA_OR_EARLIER@
mirror: once
- name: dom.serviceWorkers.enabled
type: RelaxedAtomicBool
value: false
mirror: always
# If true. then the service worker interception and the ServiceWorkerManager
# will live in the parent process. This only takes effect on browser start.
# Note, this is not currently safe to use for normal browsing yet.
- name: dom.serviceWorkers.parent_intercept
type: bool