# 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: # mandatory # type: # mandatory # value: # mandatory # mirror: # mandatory # do_not_use_directly: # optional # include: # optional # rust: # 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`. # # - `value` is the default value. Its type should be appropriate for # , 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. ``. # # - `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 # 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 cache the entire accessibility trees of all content processes in # the parent process. - name: accessibility.cache.enabled type: bool #if defined(ANDROID) value: true #elif defined(XP_WIN) || defined(XP_LINUX) value: @IS_EARLY_BETA_OR_EARLIER@ #else value: @IS_NOT_RELEASE_OR_BETA@ #endif mirror: once # Whether to avoid accessibility activation on Windows shortly after clipboard # copy. # # Possible values are: # * 0: never # * 1: always # * 2 (or others): when needed - name: accessibility.windows.suppress-after-clipboard-copy type: uint32_t value: 2 mirror: always #--------------------------------------------------------------------------- # Prefs starting with "alerts." #--------------------------------------------------------------------------- # Whether to use platform-specific backends for showing desktop notifications. # If no such backend is available, or if the pref is false, then XUL # notifications are used. - name: alerts.useSystemBackend type: bool #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: RelaxedAtomicBool value: true mirror: always - name: android.touch_resampling.enabled type: RelaxedAtomicBool value: true mirror: always #endif #--------------------------------------------------------------------------- # Prefs starting with "apz." # The apz prefs are explained in AsyncPanZoomController.cpp #--------------------------------------------------------------------------- # amount we zoom in for a double tap gesture if we couldn't find any content # based rect to zoom to - name: apz.doubletapzoom.defaultzoomin type: AtomicFloat value: 1.2f mirror: always - name: apz.scrollbarbuttonrepeat.enabled type: RelaxedAtomicBool value: true mirror: always - name: apz.scrollend-event.content.enabled type: RelaxedAtomicBool value: true mirror: always # After a user has executed a pan gesture, we may receive momentum phase pan # gestures from the OS. This specifies how long we should wait following the # pan end gesture for possible momentum phase pan gestures before sending the # TransformEnd notification. - name: apz.scrollend-event.content.delay_ms type: RelaxedAtomicInt32 value: 100 mirror: always - name: apz.wr.activate_all_scroll_frames type: RelaxedAtomicBool value: false mirror: always - name: apz.wr.activate_all_scroll_frames_when_fission type: RelaxedAtomicBool value: true mirror: always - name: apz.prefer_jank_minimal_displayports type: RelaxedAtomicBool value: true mirror: always - name: apz.allow_double_tap_zooming type: RelaxedAtomicBool value: true mirror: always - name: apz.mac.enable_double_tap_zoom_touchpad_gesture type: RelaxedAtomicBool value: true mirror: always - name: apz.allow_immediate_handoff type: RelaxedAtomicBool value: false mirror: always - name: apz.allow_zooming type: RelaxedAtomicBool value: true mirror: always - name: apz.max_zoom type: AtomicFloat value: 10.0f mirror: always - name: apz.min_zoom type: AtomicFloat value: 0.25f mirror: always - name: apz.allow_zooming_out type: RelaxedAtomicBool value: false mirror: always - name: apz.android.chrome_fling_physics.friction type: AtomicFloat value: 0.015f mirror: always - name: apz.android.chrome_fling_physics.inflexion type: AtomicFloat value: 0.35f mirror: always - name: apz.android.chrome_fling_physics.stop_threshold type: AtomicFloat value: 0.1f mirror: always - name: apz.autoscroll.enabled type: RelaxedAtomicBool value: true mirror: always - name: apz.axis_lock.breakout_angle type: AtomicFloat value: float(M_PI / 8.0) # 22.5 degrees mirror: always include: - 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: - name: apz.axis_lock.lock_angle type: AtomicFloat value: float(M_PI / 6.0) # 30 degrees mirror: always include: # Whether to lock touch scrolling to one axis at a time. When a new # axis lock mode is added, the APZCAxisLockCompatTester GTest shoud # be updated to include the lock mode value. # 0 = FREE (No locking at all) # 1 = STANDARD (Once locked, remain locked until scrolling ends) # 2 = STICKY (Allow lock to be broken, with hysteresis) # 3 = DOMINANT_AXIS (Only allow movement on one axis at a time, only # applies to touchpad scrolling) - name: apz.axis_lock.mode type: RelaxedAtomicInt32 #if defined(XP_MACOSX) value: 3 #else value: 2 #endif mirror: always - name: apz.content_response_timeout type: RelaxedAtomicInt32 value: 400 mirror: always - name: apz.danger_zone_x type: RelaxedAtomicInt32 value: 50 mirror: always - name: apz.danger_zone_y type: RelaxedAtomicInt32 value: 100 mirror: always - name: apz.disable_for_scroll_linked_effects type: RelaxedAtomicBool value: false mirror: always - name: apz.displayport_expiry_ms type: RelaxedAtomicUint32 value: 15000 mirror: always - name: apz.drag.enabled type: RelaxedAtomicBool value: true mirror: always - name: apz.drag.initial.enabled type: RelaxedAtomicBool value: true mirror: always - name: apz.drag.touch.enabled type: RelaxedAtomicBool value: true mirror: always - name: apz.enlarge_displayport_when_clipped type: RelaxedAtomicBool value: @IS_ANDROID@ mirror: always # Test only. - name: apz.fixed-margin-override.enabled type: RelaxedAtomicBool value: false mirror: always # Test only. - name: apz.fixed-margin-override.bottom type: RelaxedAtomicInt32 value: 0 mirror: always # Test only. - name: apz.fixed-margin-override.top type: RelaxedAtomicInt32 value: 0 mirror: always - name: apz.fling_accel_base_mult type: AtomicFloat value: 1.0f mirror: always - name: apz.fling_accel_supplemental_mult type: AtomicFloat value: 1.0f mirror: always - name: apz.fling_accel_min_fling_velocity type: AtomicFloat value: 1.5f mirror: always - name: apz.fling_accel_min_pan_velocity type: AtomicFloat value: 0.8f mirror: always - name: apz.fling_accel_max_pause_interval_ms type: RelaxedAtomicInt32 value: 50 mirror: always - name: apz.fling_curve_function_x1 type: float value: 0.0f mirror: once - name: apz.fling_curve_function_x2 type: float value: 1.0f mirror: once - name: apz.fling_curve_function_y1 type: float value: 0.0f mirror: once - name: apz.fling_curve_function_y2 type: float value: 1.0f mirror: once - name: apz.fling_curve_threshold_inches_per_ms type: AtomicFloat value: -1.0f mirror: always - name: apz.fling_friction type: AtomicFloat value: 0.002f mirror: always - name: apz.fling_min_velocity_threshold type: AtomicFloat value: 0.5f mirror: always - name: apz.fling_stop_on_tap_threshold type: AtomicFloat value: 0.05f mirror: always - name: apz.fling_stopped_threshold type: AtomicFloat value: 0.01f mirror: always - name: apz.touch_acceleration_factor_x type: float value: 1.0f mirror: always - name: apz.touch_acceleration_factor_y type: float value: 1.0f mirror: always # new scrollbar code for desktop zooming - name: apz.force_disable_desktop_zooming_scrollbars type: RelaxedAtomicBool value: false mirror: always #ifdef MOZ_WIDGET_GTK - name: apz.gtk.kinetic_scroll.enabled type: RelaxedAtomicBool value: true mirror: always - name: apz.gtk.pangesture.enabled type: RelaxedAtomicBool value: true mirror: always # Mode to use when receiving pan gesture input. # # * 0: Auto mode (uses the default behavior, subject to change). # * 1: Page mode: Uses gtk deltas as a percentage of the page size to scroll. This mode matches: # # https://gitlab.gnome.org/GNOME/gtk/blob/c734c7e9188b56f56c3a504abee05fa40c5475ac/gtk/gtkrange.c#L3063-3074 # # * 2: Pixel mode: Uses gtk deltas as a fixed pixel multiplier. This mode matches e.g. GNOME web. # # https://webkit-search.igalia.com/webkit/rev/215039ef09d6bfd6e088175bfe30788d95b9705d/Source/WebKit/Shared/gtk/WebEventFactory.cpp#265-296 # (multiplied then by pixelsPerLineStep which in GNOME-web is 40). - name: apz.gtk.pangesture.delta_mode type: uint32_t value: 0 mirror: always - name: apz.gtk.pangesture.page_delta_mode_multiplier type: float value: 1.0f mirror: always - name: apz.gtk.pangesture.pixel_delta_mode_multiplier type: float value: 40.0f mirror: always - name: apz.gtk.touchpad_pinch.enabled type: RelaxedAtomicBool value: true mirror: always - name: apz.gtk.touchpad_pinch.three_fingers.enabled type: RelaxedAtomicBool value: false mirror: always #endif - name: apz.keyboard.enabled type: bool value: @IS_NOT_ANDROID@ mirror: once - name: apz.keyboard.passive-listeners type: RelaxedAtomicBool value: @IS_NOT_ANDROID@ mirror: always - name: apz.max_tap_time type: RelaxedAtomicInt32 value: 300 mirror: always - name: apz.max_velocity_inches_per_ms type: AtomicFloat value: -1.0f mirror: always - name: apz.max_velocity_queue_size type: uint32_t value: 5 mirror: once - name: apz.min_skate_speed type: AtomicFloat value: 1.0f mirror: always - name: apz.mvm.force-enabled type: RelaxedAtomicBool value: true mirror: always - name: apz.one_touch_pinch.enabled type: RelaxedAtomicBool value: @IS_ANDROID@ mirror: always - name: apz.overscroll.enabled type: RelaxedAtomicBool #if defined(XP_MACOSX) value: true #elif defined(XP_WIN) && defined(NIGHTLY_BUILD) value: true #else value: false #endif mirror: always # The "test async scroll offset" (used via reftest-async-scroll # or nsIDOMWindowUtils.setAsyncScrollOffset()) can be used to # trigger overscroll. Used for tests only. - name: apz.overscroll.test_async_scroll_offset.enabled type: RelaxedAtomicBool value: false mirror: always - name: apz.overscroll.min_pan_distance_ratio type: AtomicFloat value: 1.0f mirror: always - name: apz.overscroll.stop_distance_threshold type: AtomicFloat value: 5.0f mirror: always - name: apz.overscroll.spring_stiffness type: AtomicFloat value: 200 mirror: always - name: apz.overscroll.damping type: AtomicFloat value: 1.1 mirror: always - name: apz.overscroll.max_velocity type: AtomicFloat value: 10 mirror: always - name: apz.paint_skipping.enabled type: RelaxedAtomicBool value: true mirror: always # Fetch displayport updates early from the message queue. - name: apz.pinch_lock.mode type: RelaxedAtomicInt32 value: 2 mirror: always - name: apz.pinch_lock.scroll_lock_threshold type: AtomicFloat value: 1.0f / 16.0f # 1/16 inches mirror: always - name: apz.pinch_lock.span_breakout_threshold type: AtomicFloat value: 1.0f / 32.0f # 1/32 inches mirror: always - name: apz.pinch_lock.span_lock_threshold type: AtomicFloat value: 1.0f / 32.0f # 1/32 inches mirror: always - name: apz.pinch_lock.buffer_max_age type: int32_t value: 80 # milliseconds mirror: once - name: apz.popups.enabled type: RelaxedAtomicBool value: true mirror: always # Whether to print the APZC tree for debugging. - name: apz.printtree type: RelaxedAtomicBool value: false mirror: always - name: apz.record_checkerboarding type: RelaxedAtomicBool value: @IS_NIGHTLY_BUILD@ mirror: always - name: apz.second_tap_tolerance type: AtomicFloat value: 0.5f mirror: always - 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 #--------------------------------------------------------------------------- # Prefs starting with "beacon." #--------------------------------------------------------------------------- # Is support for Navigator.sendBeacon enabled? - name: beacon.enabled type: bool value: true mirror: always #--------------------------------------------------------------------------- # Prefs starting with "bidi." #--------------------------------------------------------------------------- # Whether delete and backspace should immediately delete characters not # visually adjacent to the caret, or adjust the visual position of the caret # on the first keypress and delete the character on a second keypress - name: bidi.edit.delete_immediately type: bool value: true mirror: always # Bidi caret movement style: # 0 = logical # 1 = visual # 2 = visual, but logical during selection - name: bidi.edit.caret_movement_style type: int32_t #if !defined(XP_LINUX) && defined(NIGHTLY_BUILD) value: 1 #else value: 2 # See Bug 1638240 #endif mirror: always # Bidi numeral style: # 0 = nominalnumeralBidi * # 1 = regularcontextnumeralBidi # 2 = hindicontextnumeralBidi # 3 = arabicnumeralBidi # 4 = hindinumeralBidi # 5 = persiancontextnumeralBidi # 6 = persiannumeralBidi - name: bidi.numeral type: RelaxedAtomicUint32 value: 0 mirror: always # Bidi text type # 1 = charsettexttypeBidi * # 2 = logicaltexttypeBidi # 3 = visualtexttypeBidi - name: bidi.texttype type: RelaxedAtomicUint32 value: 1 mirror: always # Bidi direction # 1 = directionLTRBidi * # 2 = directionRTLBidi - name: bidi.direction type: RelaxedAtomicUint32 value: 1 mirror: always # Setting this pref to |true| forces Bidi UI menu items and keyboard shortcuts # to be exposed, and enables the directional caret hook. By default, only # expose it for bidi-associated system locales. - name: bidi.browser.ui type: bool value: false mirror: always #--------------------------------------------------------------------------- # Prefs starting with "browser." #--------------------------------------------------------------------------- - name: browser.active_color type: String value: "#EE0000" mirror: never - name: browser.active_color.dark type: String value: "#FF6666" mirror: never - name: browser.anchor_color type: String value: "#0000EE" mirror: never # If you change this, you probably also want to change # nsXPLookAndFeel::GenericDarkColor for MozNativehyperlinktext. - name: browser.anchor_color.dark type: String value: "#8C8CFF" mirror: never # See http://dev.w3.org/html5/spec/forms.html#attr-fe-autofocus - name: browser.autofocus type: bool value: true mirror: always - name: browser.cache.offline.enable type: bool value: @IS_NOT_EARLY_BETA_OR_EARLIER@ 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 - name: browser.contentblocking.database.enabled type: bool value: false mirror: always # How many recent block/unblock actions per origins we remember in the # Content Blocking log for each top-level window. - name: browser.contentblocking.originlog.length type: uint32_t value: 32 mirror: always - name: browser.display.background_color type: String value: "#FFFFFF" mirror: never - name: browser.display.background_color.dark type: String value: "#1C1B22" mirror: never # This preference is a bit confusing because we use the opposite # string value in the colors dialog to indicate to users how FF HCM # will behave. # With resect to document colors, these values mean: # 0 = "default" = always, except in high contrast mode # 1 = "always" # 2 = "never" # # On windows, we set this to 0, which means FF HCM will mirror OS HCM. # Everywhere else, we set this to 1, disabling FF HCM. - name: browser.display.document_color_use type: RelaxedAtomicUint32 #if defined(XP_WIN) value: 0 #else value: 1 #endif mirror: always rust: true # 0 = always native # 1 = never native # other = default - name: browser.display.windows.non_native_menus type: RelaxedAtomicUint32 value: 2 mirror: always rust: true # This pref dictates whether or not backplates and background images # are to be drawn, when in high-contrast mode: # false: do not draw backplates or render background images # true: render background images and draw backplates # This condition is only considered when high-contrast mode is enabled # in Firefox, ie. when the user has: # (1) mUseAccessibilityMode set to true (Widows high-contrast mode is on) # AND browser.display.document_color_use set to 0 # (only with high-contrast themes) OR # (2) browser.display.document_color_use set to 2 (always) - name: browser.display.permit_backplate type: RelaxedAtomicBool value: true mirror: always rust: true # Whether we should suppress the background-image of the canvas (the root # frame) if we're in forced colors mode. # # This is important because some sites use background-image with a plain color # and it causes undesirable results in high-contrast mode. # # See bug 1614921 for example. - name: browser.display.suppress_canvas_background_image_on_forced_colors type: bool value: true mirror: always - name: browser.display.focus_ring_on_anything type: bool value: false mirror: always - name: browser.display.focus_ring_width type: uint32_t value: 1 mirror: always - name: browser.display.focus_background_color type: String value: "#117722" mirror: never # Focus ring border style. # 0 = solid border, 1 = dotted border - name: browser.display.focus_ring_style type: uint32_t value: 1 mirror: always - name: browser.display.focus_text_color type: String value: "#ffffff" mirror: never - name: browser.display.foreground_color type: String value: "#000000" mirror: never - name: browser.display.foreground_color.dark type: String value: "#FBFBFE" mirror: never # Determines the behavior of OS zoom settings. # # 0: doesn't affect rendering at all # 1: affects full zoom (dpi, effectively). # 2: affects text zoom. # # Default is (1): Historical behavior on Linux, matches other browsers on # Windows, and generally creates more consistent rendering. - name: browser.display.os-zoom-behavior type: RelaxedAtomicInt32 value: 1 mirror: always rust: true # Whether focus rings are always shown by default. # # This is the initial value of nsWindowRoot::mShowFocusRings, but it can be # overridden by system preferences. - name: browser.display.show_focus_rings type: bool value: false mirror: always # 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 - name: browser.display.use_focus_colors type: bool value: false mirror: always - name: browser.display.use_system_colors type: RelaxedAtomicBool #ifdef XP_WIN value: true #else value: false #endif mirror: always - name: browser.dom.window.dump.enabled type: RelaxedAtomicBool value: @IS_NOT_MOZILLA_OFFICIAL@ mirror: always # See bug 1710926 - name: browser.download.improvements_to_download_panel type: bool value: true 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 - name: browser.download.sanitize_non_media_extensions type: bool value: true mirror: always # Image document's automatic image sizing. - name: browser.enable_automatic_image_resizing type: bool value: true mirror: always # Image document's click-to-resize. - name: browser.enable_click_image_resizing type: bool value: @IS_NOT_ANDROID@ mirror: always - name: browser.find.ignore_ruby_annotations type: bool value: true mirror: always #if defined(XP_MACOSX) # Whether pressing Esc will exit fullscreen. - name: browser.fullscreen.exit_on_escape type: bool value: true mirror: always #endif # The max url length we'll store in history. # # The default value is mostly a guess based on various facts: # # * IE didn't support urls longer than 2083 chars # * Sitemaps protocol used to support a maximum of 2048 chars # * Various SEO guides suggest to not go over 2000 chars # * Various apps/services are known to have issues over 2000 chars # * RFC 2616 - HTTP/1.1 suggests being cautious about depending # on URI lengths above 255 bytes # - name: browser.history.maxUrlLength type: uint32_t value: 2000 mirror: always # Max size of push/replaceState data parameter - name: browser.history.maxStateObjectSize type: int32_t value: 16777216 mirror: always # True to collect wireframes upon navigations / pushState - name: browser.history.collectWireframes type: bool value: false mirror: always # The minimum area for a rect to be included in a wireframe, in CSS pixels. # # The current value of 50 is pretty arbitrary, and will be tuned as we refine # and test the wireframing capability. - name: browser.history.wireframeAreaThreshold type: uint32_t value: 50 mirror: always #if defined(XP_WIN) || defined(XP_LINUX) # Notify TabUnloader or send the memory pressure if the memory resource # notification is signaled AND the available commit space is lower than # this value. - name: browser.low_commit_space_threshold_mb type: RelaxedAtomicUint32 value: 200 mirror: always #endif #ifdef XP_LINUX # On Linux we also check available memory in comparison to total memory, # and use this percent value (out of 100) to determine if we are in a # low memory scenario. - name: browser.low_commit_space_threshold_percent type: RelaxedAtomicUint32 value: 5 mirror: always #endif # Render animations and videos as a solid color - name: browser.measurement.render_anims_and_video_solid type: RelaxedAtomicBool value: false mirror: always - name: browser.navigation.requireUserInteraction type: bool value: false mirror: always # Indicates if about:newtab shows content (enabled) or just blank. - name: browser.newtabpage.enabled type: bool value: true mirror: always # Open PDFs in Edge with the --app flag if it is the default. - name: browser.pdf.launchDefaultEdgeAsApp type: bool value: true mirror: always # Maximium delay between keystrokes that will be considered typing (milliseconds). - name: browser.places.interactions.typing_timeout_ms type: RelaxedAtomicUint32 value: 3000 mirror: always # Maximum delay between scroll input events that will be considered a scrolling interaction (milliseconds). - name: browser.places.interactions.scrolling_timeout_ms type: RelaxedAtomicUint32 value: 5000 mirror: always # Number of seconds till the sponsored session is timeout. - name: browser.places.sponsoredSession.timeoutSecs type: RelaxedAtomicUint32 value: 3600 mirror: always # Whether to start the private browsing mode at application startup - name: browser.privatebrowsing.autostart type: bool value: false mirror: always # Force usage of in-memory (rather than file on disk) media cache for video streaming when private browsing - name: browser.privatebrowsing.forceMediaMemoryCache type: bool value: false mirror: always # Communicates the toolbar color to platform (for e.g., prefers-color-scheme). # # Returns whether the toolbar is dark (0), light (1), or system (2). # # Default to "light" on macOS / Windows, and "system" elsewhere. The theming # code sets it appropriately. - name: browser.theme.toolbar-theme type: RelaxedAtomicUint32 #if defined(XP_WIN) || defined(XP_MACOSX) value: 1 #else value: 2 #endif mirror: always # Communicates the preferred content theme color to platform (for e.g., # prefers-color-scheme). # # dark (0), light (1), system (2), or toolbar (3). # # Default to "toolbar", the theming code sets it appropriately. - name: browser.theme.content-theme type: RelaxedAtomicUint32 value: 2 mirror: always rust: true # Blocked plugin content - name: browser.safebrowsing.blockedURIs.enabled type: bool value: true mirror: always # Malware protection - name: browser.safebrowsing.malware.enabled type: bool value: true mirror: always # Password protection - name: browser.safebrowsing.passwords.enabled type: bool value: false mirror: always # Phishing protection - name: browser.safebrowsing.phishing.enabled type: bool value: true mirror: always # Maximum size for an array to store the safebrowsing prefixset. - name: browser.safebrowsing.prefixset_max_array_size type: RelaxedAtomicUint32 value: 512*1024 mirror: always # SessionStore prefs # Maximum number of bytes of DOMSessionStorage data we collect per origin. - name: browser.sessionstore.dom_storage_limit type: uint32_t value: 2048 mirror: always # Maximum number of characters of form field data per field we collect. - name: browser.sessionstore.dom_form_limit type: uint32_t value: 1024*1024*2 mirror: always # Maximum number of characters of form data we collect per origin. - name: browser.sessionstore.dom_form_max_limit type: uint32_t value: 1024*1024*50 mirror: always # Minimal interval between two save operations in milliseconds (while the user is active). - name: browser.sessionstore.interval type: RelaxedAtomicUint32 value: 15000 mirror: always # Platform collection of data for session store - name: browser.sessionstore.platform_collection type: bool #if defined(ANDROID) || defined(MOZ_THUNDERBIRD) value: false #else value: true #endif mirror: once # Platform collection of session storage data for session store - name: browser.sessionstore.collect_session_storage type: bool value: @IS_NOT_ANDROID@ mirror: once # Platform collection of zoom data for session store - name: browser.sessionstore.collect_zoom type: bool value: @IS_NOT_ANDROID@ mirror: once # Causes SessionStore to ignore non-final update messages from # browser tabs that were not caused by a flush from the parent. # This is a testing flag and should not be used by end-users. - name: browser.sessionstore.debug.no_auto_updates type: RelaxedAtomicBool value: false mirror: always # - name: browser.swipe.navigation-icon-move-distance type: uint32_t #if defined(XP_LINUX) || defined(XP_WIN) value: 100 #else value: 0 #endif mirror: always # Whether we should draw the tabs on top of the titlebar. # # no (0), yes (1), or default (2), which is true everywhere except Linux. - name: browser.tabs.inTitlebar type: int32_t value: 2 mirror: always # If set, use DocumentChannel to directly initiate loads entirely # from parent-process BrowsingContexts - name: browser.tabs.documentchannel.parent-controlled type: bool value: false mirror: always # Testing-only pref which makes data: URIs be loaded in a "web" content process # instead of within a process based on the URI's loader. - name: browser.tabs.remote.dataUriInDefaultWebProcess type: bool value: false mirror: always # Testing-only pref to force system-triggered about:blank loads to not change # content processes. This is used for performance tests which load an # about:blank document between navigations for historical reasons to avoid # unnecessary process switches. - name: browser.tabs.remote.systemTriggeredAboutBlankAnywhere type: bool value: false mirror: always # Testing-only pref to cause PBrowser creation for a specific BrowsingContext to # fail, to test the errored codepath. - name: browser.tabs.remote.testOnly.failPBrowserCreation.enabled type: bool value: false mirror: always - name: browser.tabs.remote.desktopbehavior type: bool value: false mirror: always - name: browser.tabs.remote.force-paint type: bool value: true mirror: always # When this pref is enabled document loads with a mismatched # Cross-Origin-Embedder-Policy header will fail to load - name: browser.tabs.remote.useCrossOriginEmbedderPolicy type: RelaxedAtomicBool value: true mirror: always # This pref makes `credentialless` a valid value for # Cross-Origin-Embedder-Policy header - name: browser.tabs.remote.coep.credentialless type: RelaxedAtomicBool value: @IS_NIGHTLY_BUILD@ mirror: always do_not_use_directly: true # When this pref is enabled top level loads with a mismatched # Cross-Origin-Opener-Policy header will be loaded in a separate process. - name: browser.tabs.remote.useCrossOriginOpenerPolicy type: RelaxedAtomicBool value: true mirror: always # When this pref is enabled then we use a separate content process for # top-level load of file:// URIs - name: browser.tabs.remote.separateFileUriProcess type: RelaxedAtomicBool #if !defined(ANDROID) value: true #else value: false #endif mirror: always # Pref to control whether we use a separate privileged content process # for certain mozilla webpages (which are listed in the pref # browser.tabs.remote.separatedMozillaDomains). - name: browser.tabs.remote.separatePrivilegedMozillaWebContentProcess type: bool value: false mirror: always # Whether or not process selection for subframes will prefer re-using an # existing content process over creating a new one. Enabling this pref should # reduce the number of processes allocated for non-first-party domains if # dom.ipc.processCount.webIsolated > 1. - name: browser.tabs.remote.subframesPreferUsed type: bool value: true mirror: always # When this pref is enabled, opaque response is only allowed to enter the # content process if it's a response for media (audio, image, video), CSS, or # JavaScript. - name: browser.opaqueResponseBlocking type: RelaxedAtomicBool #if defined(ANDROID) value: false #else value: @IS_NIGHTLY_BUILD@ #endif mirror: always # When this pref is enabled, the JS validator will be enabled for # ORB. - name: browser.opaqueResponseBlocking.javascriptValidator type: bool value: @IS_NIGHTLY_BUILD@ mirror: always # When this pref is enabled, and elements will create # synthetic documents when the resource type they're loading is an image. - name: browser.opaqueResponseBlocking.syntheticBrowsingContext type: bool value: true mirror: once # When this pref is enabled, and elements will filter the # browsing contexts created for the synthetic browsing contexts for the # synthetic documents when browser.opaqueResponseBlocking.syntheticBrowsingContext # is enabled from `Window.frames`, `Window.length` and named targeting. - name: browser.opaqueResponseBlocking.syntheticBrowsingContext.filter type: bool value: true mirror: once do_not_use_directly: true # When true, zooming will be enabled on all sites, even ones that declare # user-scalable=no. - name: browser.ui.zoom.force-user-scalable type: RelaxedAtomicBool value: false mirror: always - name: browser.underline_anchors type: bool value: true mirror: always - name: browser.viewport.desktopWidth type: RelaxedAtomicInt32 value: 980 mirror: always - name: browser.visited_color type: String value: "#551A8B" mirror: never # If you change this, you probably also want to change # nsXPLookAndFeel::GenericDarkColor for MozNativevisitedhyperlinktext. - name: browser.visited_color.dark type: String value: "#FFADFF" mirror: never # When true, soft reloads (including location.reload()) # will only froce validate the top level document, subresources will # be loaded normally as-if users normally navigated to the page. - name: browser.soft_reload.only_force_validate_top_level_document type: bool value: true mirror: always #--------------------------------------------------------------------------- # Prefs starting with "canvas." #--------------------------------------------------------------------------- # Limit for the canvas image cache. 0 means unlimited. - name: canvas.image.cache.limit type: int32_t value: 0 mirror: always # Add support for canvas path objects - name: canvas.path.enabled type: RelaxedAtomicBool value: true mirror: always - name: canvas.capturestream.enabled type: bool value: true mirror: always # Is support for CanvasRenderingContext2D.filter enabled? - name: canvas.filters.enabled type: bool value: true mirror: always # Provide ability to turn on support for canvas focus rings. - name: canvas.focusring.enabled type: bool value: true mirror: always # Is support for CanvasRenderingContext2D's createConicGradient API enabled? - name: canvas.createConicGradient.enabled type: RelaxedAtomicBool value: true mirror: always #--------------------------------------------------------------------------- # Prefs starting with "channelclassifier." #--------------------------------------------------------------------------- - name: channelclassifier.allowlist_example type: bool value: false mirror: always #--------------------------------------------------------------------------- # Prefs starting with "clipboard." #--------------------------------------------------------------------------- # Clipboard behavior. - name: clipboard.autocopy type: bool #if !defined(ANDROID) && !defined(XP_MACOSX) && defined(XP_UNIX) value: true #else value: false #endif mirror: always #ifdef XP_WIN # allow to copy clipboard data to Clipboard History/Cloud # (used on sensitive data in about:logins and Private Browsing) - name: clipboard.copyPrivateDataToClipboardCloudOrHistory type: bool value: false mirror: always #endif #--------------------------------------------------------------------------- # Prefs starting with "consoleservice." #--------------------------------------------------------------------------- #if defined(ANDROID) # Disable sending console to logcat on release builds. - name: consoleservice.logcat type: RelaxedAtomicBool value: @IS_NOT_RELEASE_OR_BETA@ mirror: always #endif #--------------------------------------------------------------------------- # Prefs starting with "content." #--------------------------------------------------------------------------- - name: content.cors.disable type: bool value: false mirror: always # Back off timer notification after count. # -1 means never. - name: content.notify.backoffcount type: int32_t value: -1 mirror: always # Notification interval in microseconds. # The notification interval has a dramatic effect on how long it takes to # initially display content for slow connections. The current value # provides good incremental display of content without causing an increase # in page load time. If this value is set below 1/10 of a second it starts # to impact page load performance. # See bugzilla bug 72138 for more info. - name: content.notify.interval type: int32_t value: 120000 mirror: always # Do we notify based on time? - name: content.notify.ontimer type: bool value: true mirror: always # How many times to deflect in interactive mode. - name: content.sink.interactive_deflect_count type: int32_t value: 0 mirror: always # How many times to deflect in perf mode. - name: content.sink.perf_deflect_count type: int32_t value: 200 mirror: always # Parse mode for handling pending events. # 0 = don't check for pending events # 1 = don't deflect if there are pending events # 2 = bail if there are pending events - name: content.sink.pending_event_mode type: int32_t #ifdef XP_WIN value: 1 #else value: 0 #endif mirror: always # How often to probe for pending events. 1 = every token. - name: content.sink.event_probe_rate type: int32_t value: 1 mirror: always # How long to stay off the event loop in interactive mode (microseconds). - name: content.sink.interactive_parse_time type: int32_t value: 3000 mirror: always # How long to stay off the event loop in perf mode. - name: content.sink.perf_parse_time type: int32_t value: 30000 mirror: always # How long to be in interactive mode after an event. - name: content.sink.interactive_time type: uint32_t value: 750000 mirror: always # How long to stay in perf mode after initial loading. - name: content.sink.initial_perf_time type: uint32_t value: 2000000 mirror: always # Should we switch between perf-mode and interactive-mode? # 0 = Switch # 1 = Interactive mode # 2 = Perf mode - name: content.sink.enable_perf_mode type: int32_t value: 0 mirror: always #--------------------------------------------------------------------------- # Prefs starting with "converter." #--------------------------------------------------------------------------- # Whether we include ruby annotation in the text despite whether it # is requested. This was true because we didn't explicitly strip out # annotations. Set false by default to provide a better behavior, but # we want to be able to pref-off it if user doesn't like it. - name: converter.html2txt.always_include_ruby type: bool value: false mirror: always #--------------------------------------------------------------------------- # Prefs starting with "cookiebanners." #--------------------------------------------------------------------------- # Controls the cookie banner handling mode in normal browsing. # 0: Disables all cookie banner handling. # 1: Reject-all if possible, otherwise do nothing. # 2: Reject-all if possible, otherwise accept-all. - name: cookiebanners.service.mode type: uint32_t value: 0 mirror: always # Controls the cookie banner handling mode in private browsing. Same mode # options as the normal browsing pref above. - name: cookiebanners.service.mode.privateBrowsing type: uint32_t value: 0 mirror: always # Enables use of global CookieBannerRules, which apply to all sites. This is # used for click rules that can handle common Consent Management Providers # (CMP). # Enabling this (when the cookie handling feature is enabled) may negatively # impact site performance since it requires us to run rule-defined query # selectors for every page. - name: cookiebanners.service.enableGlobalRules type: bool value: false mirror: always # Enables the cookie banner cookie injector. The cookie banner cookie injector # depends on the `cookiebanners.service.mode` pref above. - name: cookiebanners.cookieInjector.enabled type: bool value: true mirror: always # By default, how many seconds in the future cookies should expire after they # have been injected. Defaults to 12 months. Individual cookie rules may # override this. - name: cookiebanners.cookieInjector.defaultExpiryRelative type: uint32_t value: 31536000 mirror: always # Enables the cookie banner auto clicking. The cookie banner auto clicking # depends on the `cookiebanners.service.mode` pref above. - name: cookiebanners.bannerClicking.enabled type: bool value: true mirror: always # The maximum time in ms for detecting banner and button elements for cookie # banner auto clicking. - name: cookiebanners.bannerClicking.timeout type: uint32_t value: 3000 mirror: always # Whether or not banner auto clicking test mode is enabled. - name: cookiebanners.bannerClicking.testing type: bool value: false mirror: always #--------------------------------------------------------------------------- # Prefs starting with "datareporting." #--------------------------------------------------------------------------- - name: datareporting.healthreport.uploadEnabled type: RelaxedAtomicBool value: false mirror: always rust: true #--------------------------------------------------------------------------- # Prefs starting with "device." #--------------------------------------------------------------------------- # Is support for the device sensors API enabled? - name: device.sensors.enabled type: bool value: true mirror: always # KaiOS-only, see https://bugzilla.mozilla.org/show_bug.cgi?id=1699707#c10 - name: device.sensors.ambientLight.enabled type: bool value: false mirror: always - name: device.sensors.motion.enabled type: bool value: true mirror: always - name: device.sensors.orientation.enabled type: bool value: true mirror: always # KaiOS-only, see https://bugzilla.mozilla.org/show_bug.cgi?id=1699707#c10 - name: device.sensors.proximity.enabled type: bool value: false mirror: always - name: device.sensors.test.events type: bool value: false mirror: always #--------------------------------------------------------------------------- # Prefs starting with "devtools." #--------------------------------------------------------------------------- - name: devtools.console.stdout.chrome type: RelaxedAtomicBool value: @IS_NOT_MOZILLA_OFFICIAL@ mirror: always - name: devtools.console.stdout.content type: RelaxedAtomicBool value: false mirror: always - name: devtools.toolbox.force-chrome-prefs type: RelaxedAtomicBool value: true mirror: always #--------------------------------------------------------------------------- # Prefs starting with "docshell." #--------------------------------------------------------------------------- # Used to indicate whether session history listeners should be notified # about content viewer eviction. Used only for testing. - name: docshell.shistory.testing.bfevict type: bool value: false mirror: always # If true, pages with an opener won't be bfcached. - name: docshell.shistory.bfcache.require_no_opener type: bool value: @IS_ANDROID@ mirror: always # If true, page with beforeunload or unload event listeners can be bfcached. - name: docshell.shistory.bfcache.allow_unload_listeners type: bool value: @IS_ANDROID@ mirror: always # If true, page with beforeunload event listeners can be bfcached. # This only works when sessionHistoryInParent is enabled. - name: docshell.shistory.bfcache.ship_allow_beforeunload_listeners type: bool value: @IS_EARLY_BETA_OR_EARLIER@ mirror: always #--------------------------------------------------------------------------- # Prefs starting with "dom." #--------------------------------------------------------------------------- # Whether CanvasRenderingContext2D.mozTextStyle is enabled. - name: dom.mozTextStyle.enabled type: bool value: @IS_NOT_EARLY_BETA_OR_EARLIER@ 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: true mirror: always # Is support for the core interfaces of Web Animations API enabled? - name: dom.animations-api.core.enabled type: bool value: true mirror: always # Is support for Document.getAnimations() and Element.getAnimations() # supported? - name: dom.animations-api.getAnimations.enabled type: bool value: true mirror: always # Is support for animations from the Web Animations API without 0%/100% # keyframes enabled? - name: dom.animations-api.implicit-keyframes.enabled type: bool value: true mirror: always # Is support for timelines from the Web Animations API enabled? - name: dom.animations-api.timelines.enabled type: bool value: true mirror: always # Synchronize transform animations with geometric animations on the # main thread. - name: dom.animations.mainthread-synchronization-with-geometric-animations type: bool value: @IS_NOT_NIGHTLY_BUILD@ mirror: always # Is support for AudioWorklet enabled? - name: dom.audioworklet.enabled type: bool value: true mirror: always # Is support for Navigator.getBattery enabled? - name: dom.battery.enabled type: bool value: true mirror: always # Block multiple external protocol URLs in iframes per single event. - name: dom.block_external_protocol_in_iframes type: bool value: true mirror: always # Block sandboxed BrowsingContexts from navigating to external protocols. - name: dom.block_external_protocol_navigation_from_sandbox type: bool value: true mirror: always # Block Insecure downloads from Secure Origins - name: dom.block_download_insecure type: bool value: true mirror: always # Block all downloads in iframes with the sandboxed attribute - name: dom.block_download_in_sandboxed_iframes type: bool value: true mirror: always # Block multiple window.open() per single event. - name: dom.block_multiple_popups type: bool value: true mirror: always # The maximum number of popup that is allowed to be opened. Set to -1 for no # limit. - name: dom.popup_maximum type: int32_t value: 20 mirror: always # Whether window.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 # (bug 1570566). - name: dom.block_reload_from_resize_event_handler type: bool value: false mirror: always # SW Cache API - name: dom.caches.enabled type: RelaxedAtomicBool value: true mirror: always # Exposes window.caches and skips SecureContext check. # dom.serviceWorkers.testing.enabled also includes the same effect. - name: dom.caches.testing.enabled type: RelaxedAtomicBool value: false mirror: always # Disable capture attribute for input elements; only supported on GeckoView. - name: dom.capture.enabled type: bool value: false mirror: always # Allow control characters appear in composition string. # When this is false, control characters except # CHARACTER TABULATION (horizontal tab) are removed from # both composition string and data attribute of compositionupdate # and compositionend events. - name: dom.compositionevent.allow_control_characters type: bool value: false mirror: always - name: dom.crypto.randomUUID.enabled type: RelaxedAtomicBool value: true mirror: always # Is support for CSSPseudoElement enabled? - name: dom.css_pseudo_element.enabled type: bool value: false mirror: always # After how many seconds we allow external protocol URLs in iframe when not in # single events - name: dom.delay.block_external_protocol_in_iframes type: uint32_t value: 10 # in seconds mirror: always # Whether the above pref has any effect at all. # Make sure cases like bug 1795380 work before trying to turn this off. See # bug 1680721 for some other context that might be relevant. - name: dom.delay.block_external_protocol_in_iframes.enabled type: bool value: true mirror: always # HTML element - name: dom.dialog_element.enabled type: bool value: true mirror: always # Only propagate the open window click permission if the setTimeout() is equal # to or less than this value. - name: dom.disable_open_click_delay type: int32_t value: 1000 mirror: always - name: dom.disable_open_during_load type: bool value: false mirror: always - name: dom.disable_beforeunload type: bool value: false mirror: always - name: dom.require_user_interaction_for_beforeunload type: bool value: true mirror: always # Enable/disable Gecko specific edit commands - name: dom.document.edit_command.contentReadOnly.enabled type: bool value: @IS_NOT_EARLY_BETA_OR_EARLIER@ mirror: always - name: dom.document.edit_command.insertBrOnReturn.enabled type: bool value: @IS_NOT_EARLY_BETA_OR_EARLIER@ mirror: always # If set this to true, `Document.execCommand` may be performed nestedly. # Otherwise, nested calls just return false. - name: dom.document.exec_command.nested_calls_allowed type: bool value: false mirror: always - name: dom.enable_window_print type: bool value: @IS_NOT_ANDROID@ mirror: always # Only intended for fuzzing purposes, this will break mozPrintCallback, etc. - name: dom.window_print.fuzzing.block_while_printing type: bool value: false mirror: always - name: dom.element.transform-getters.enabled type: bool value: false mirror: always # Controls whether the "focus fixup rule" is enabled. Subject to minor changes # based on https://github.com/whatwg/html/pull/8392 and # https://github.com/whatwg/html/issues/8225 - name: dom.focus.fixup type: bool value: true mirror: always - name: dom.mouse_capture.enabled type: bool value: true mirror: always # Is support for Performance.mozMemory enabled? - name: dom.enable_memory_stats type: bool value: false mirror: always # Enable Performance API # Whether nonzero values can be returned from performance.timing.* - name: dom.enable_performance type: RelaxedAtomicBool value: true mirror: always # Enable Performance Observer API - name: dom.enable_performance_observer type: RelaxedAtomicBool value: true mirror: always # Whether resource timing will be gathered and returned by performance.GetEntries* - name: dom.enable_resource_timing type: bool value: true mirror: always # Whether event timing will be gathered and returned by performance observer* - name: dom.enable_event_timing type: RelaxedAtomicBool value: true mirror: always # Whether performance.GetEntries* will contain an entry for the active document - name: dom.enable_performance_navigation_timing type: bool value: true mirror: always # Whether the scheduler interface will be exposed - name: dom.enable_web_task_scheduling type: RelaxedAtomicBool value: @IS_NIGHTLY_BUILD@ mirror: always # If this is true, it's allowed to fire "cut", "copy" and "paste" events. # Additionally, "input" events may expose clipboard content when inputType # is "insertFromPaste" or something. - name: dom.event.clipboardevents.enabled type: bool value: true mirror: always # Whether touch event listeners are passive by default. - name: dom.event.default_to_passive_touch_listeners type: bool value: true mirror: always # Whether wheel listeners are passive by default. - name: dom.event.default_to_passive_wheel_listeners type: bool value: true mirror: always - name: dom.event.dragexit.enabled type: bool value: @IS_NOT_NIGHTLY_BUILD@ mirror: always # Whether WheelEvent should return pixels instead of lines for # WheelEvent.deltaX/Y/Z, when deltaMode hasn't been checked. # # Other browsers don't use line deltas and websites forget to check for it, see # bug 1392460. - name: dom.event.wheel-deltaMode-lines.disabled type: bool value: true mirror: always # Mostly for debugging. Whether we should do the same as # dom.event.wheel-deltaMode-lines.disabled, but unconditionally rather than # only when deltaMode hasn't been checked. - name: dom.event.wheel-deltaMode-lines.always-disabled type: bool value: false mirror: always # A blocklist (list of domains) for the # dom.event.wheel-deltaMode-lines.disabled behavior, in case potential # unforeseen problems with it arrive. - name: dom.event.wheel-deltaMode-lines.always-enabled type: String value: "" mirror: never #if defined(XP_MACOSX) # Whether to disable treating ctrl click as right click - name: dom.event.treat_ctrl_click_as_right_click.disabled type: bool value: @IS_NIGHTLY_BUILD@ mirror: always #endif # Whether .offset{X,Y} for events targeted at SVG nodes returns bounds relative # to the outer SVG. - name: dom.events.offset-in-svg-relative-to-svg-root type: bool value: true mirror: always # Disable clipboard.read(), clipboard.write() and ClipboardItem by default - name: dom.events.asyncClipboard.clipboardItem type: bool value: false mirror: always # Skips checking permission and user activation when accessing the clipboard. # Should only be enabled in tests. # Access with Clipboard::IsTestingPrefEnabled(). - name: dom.events.testing.asyncClipboard type: bool value: false mirror: always do_not_use_directly: true # Control whether `navigator.clipboard.readText()` is exposed to content. # Currently not supported by GeckoView, see bug 1776829. - name: dom.events.asyncClipboard.readText type: bool value: false mirror: always do_not_use_directly: true # This pref controls whether or not the `protected` dataTransfer state is # enabled. If the `protected` dataTransfer stae is disabled, then the # DataTransfer will be read-only whenever it should be protected, and will not # be disconnected after a drag event is completed. - name: dom.events.dataTransfer.protected.enabled type: bool value: false mirror: always # Whether to hide normal files (i.e. non-images) in dataTransfer inside # the content process. - name: dom.events.dataTransfer.mozFile.enabled type: bool value: false mirror: always - name: dom.events.dataTransfer.imageAsFile.enabled type: bool value: false mirror: always # User interaction timer interval, in ms - name: dom.events.user_interaction_interval type: uint32_t value: 5000 mirror: always # Whether to try to compress touchmove events on IPC layer. - name: dom.events.compress.touchmove type: bool value: true mirror: always # In addition to the above IPC layer compresison, allow touchmove # events to be further coalesced in the child side after they # are sent. - name: dom.events.coalesce.touchmove type: bool value: true mirror: always # Allow mousemove events to be coalesced in the child side after they are sent. - name: dom.events.coalesce.mousemove type: bool value: true mirror: always # Whether to expose test interfaces of various sorts - name: dom.expose_test_interfaces type: bool value: false mirror: always - name: dom.fetchObserver.enabled type: RelaxedAtomicBool value: false mirror: always # Allow the content process to create a File from a path. This is allowed just # on parent process, on 'file' Content process, or for testing. - name: dom.file.createInChild type: RelaxedAtomicBool value: false mirror: always # Whether or not File Handle is enabled. - name: dom.fileHandle.enabled type: RelaxedAtomicBool value: false mirror: always # Support @autocomplete values for form autofill feature. - name: dom.forms.autocomplete.formautofill type: bool value: false mirror: always # Only trusted submit event could trigger form submission. - name: dom.forms.submit.trusted_event_only type: bool value: false mirror: always # This pref just controls whether we format the number with grouping separator # characters when the internal value is set or updated. It does not stop the # user from typing in a number and using grouping separators. - name: dom.forms.number.grouping type: bool value: false mirror: always # Whether fullscreen should make the rest of the document inert. # This matches other browsers but historically not Gecko. - name: dom.fullscreen.modal type: bool value: true mirror: always # Whether the Gamepad API is enabled - name: dom.gamepad.enabled type: bool value: true mirror: always # Is Gamepad Extension API enabled? - name: dom.gamepad.extensions.enabled type: bool value: true mirror: always # Is LightIndicator API enabled in Gamepad Extension API? - name: dom.gamepad.extensions.lightindicator type: bool value: false mirror: always # Is MultiTouch API enabled in Gamepad Extension API? - name: dom.gamepad.extensions.multitouch type: bool value: false mirror: always # Is Gamepad vibrate haptic feedback function enabled? - name: dom.gamepad.haptic_feedback.enabled type: bool value: true mirror: always - name: dom.gamepad.non_standard_events.enabled type: bool value: @IS_NOT_RELEASE_OR_BETA@ mirror: always - name: dom.gamepad.test.enabled type: RelaxedAtomicBool value: false mirror: always # W3C draft ImageCapture API - name: dom.imagecapture.enabled type: bool value: false mirror: always # # # See https://github.com/whatwg/html/pull/3752 - name: dom.image-lazy-loading.enabled type: RelaxedAtomicBool value: true mirror: always # The root margin for image lazy loading, defined as four (value, percentage) # pairs. - name: dom.image-lazy-loading.root-margin.top type: float value: 600 mirror: always - name: dom.image-lazy-loading.root-margin.top.percentage type: bool value: false mirror: always - name: dom.image-lazy-loading.root-margin.bottom type: float value: 600 mirror: always - name: dom.image-lazy-loading.root-margin.bottom.percentage type: bool value: false mirror: always - name: dom.image-lazy-loading.root-margin.left type: float value: 600 mirror: always - name: dom.image-lazy-loading.root-margin.left.percentage type: bool value: false mirror: always - name: dom.image-lazy-loading.root-margin.right type: float value: 600 mirror: always - name: dom.image-lazy-loading.root-margin.right.percentage type: bool value: false mirror: always # Enable indexedDB in private browsing mode with encryption - name: dom.indexedDB.privateBrowsing.enabled type: RelaxedAtomicBool value: false mirror: always # Whether or not indexedDB test mode is enabled. - name: dom.indexedDB.testing type: RelaxedAtomicBool value: false mirror: always # Whether or not indexedDB experimental features are enabled. - name: dom.indexedDB.experimental type: RelaxedAtomicBool value: false mirror: always # Whether or not indexedDB preprocessing is enabled. - name: dom.indexedDB.preprocessing type: RelaxedAtomicBool value: false mirror: always - name: dom.input_events.beforeinput.enabled type: bool value: true mirror: always # Whether innerWidth / innerHeight return rounded or fractional sizes. # # NOTE(emilio): Fractional sizes are not web-compatible, see the regressions # from bug 1676843, but we want to expose the fractional sizes (probably in # another API) one way or another, see [1], so we're keeping the code for the # time being. # # [1]: https://github.com/w3c/csswg-drafts/issues/5260 - name: dom.innerSize.rounded type: bool value: true mirror: always # Whether we conform to Input Events Level 1 or Input Events Level 2. # true: conforming to Level 1 # false: conforming to Level 2 - name: dom.input_events.conform_to_level_1 type: bool value: true mirror: always # Whether we allow BrowsingContextGroup to suspend input events - name: dom.input_events.canSuspendInBCG.enabled type: bool value: false mirror: always # The maximum time (milliseconds) we reserve for handling input events in each # frame. - name: dom.input_event_queue.duration.max type: uint32_t value: 8 mirror: always # Enable not moving the cursor to end when a text input or textarea has .value # set to the value it already has. By default, enabled. - name: dom.input.skip_cursor_move_for_same_value_set type: bool value: true mirror: always - name: dom.ipc.cancel_content_js_when_navigating type: bool value: true mirror: always # How often to check for CPOW timeouts (ms). CPOWs are only timed # out by the hang monitor. - name: dom.ipc.cpow.timeout type: uint32_t value: 500 mirror: always #ifdef MOZ_ENABLE_FORKSERVER - name: dom.ipc.forkserver.enable type: bool value: false mirror: once #endif #ifdef MOZ_WIDGET_GTK # # Avoid the use of GTK in content processes if possible, by running # them in headless mode, to conserve resources (e.g., connections to # the X server). See the usage in `ContentParent.cpp` for the full # definition of "if possible". # # This does not affect sandbox policies; content processes may still # dynamically connect to the display server for, e.g., WebGL. - name: dom.ipc.avoid-gtk type: bool value: true mirror: always #endif # Whether or not to collect a paired minidump when force-killing a # content process. - name: dom.ipc.tabs.createKillHardCrashReports type: bool value: @IS_NOT_RELEASE_OR_BETA@ mirror: once # Allow Flash async drawing mode in 64-bit release builds. - name: dom.ipc.plugins.asyncdrawing.enabled type: RelaxedAtomicBool value: true mirror: always # How long we wait before unloading an idle plugin process. - name: dom.ipc.plugins.unloadTimeoutSecs type: RelaxedAtomicUint32 value: 30 mirror: always - name: dom.ipc.plugins.allow_dxgi_surface type: bool value: true mirror: always # Enable e10s hang monitoring (slow script checking and plugin hang detection). - name: dom.ipc.processHangMonitor type: bool value: true mirror: once # Whether we report such process hangs - name: dom.ipc.reportProcessHangs type: RelaxedAtomicBool # Don't report hangs in DEBUG builds. They're too slow and often a # debugger is attached. #ifdef DEBUG value: false #else value: true #endif mirror: always - name: dom.ipc.tabs.disabled type: bool value: false mirror: always # Process launch delay (in milliseconds). - name: dom.ipc.processPrelaunch.delayMs type: uint32_t # This number is fairly arbitrary ... the intention is to put off # launching another app process until the last one has finished # loading its content, to reduce CPU/memory/IO contention. value: 1000 mirror: always - name: dom.ipc.processPrelaunch.startupDelayMs type: uint32_t # delay starting content processes for a short time after browser start # to provide time for the UI to come up value: 1000 mirror: always # Process preallocation cache # Only used in fission; in e10s we use 1 always - name: dom.ipc.processPrelaunch.fission.number type: uint32_t value: 3 mirror: always # Limit preallocated processes below this memory size (in MB) - name: dom.ipc.processPrelaunch.lowmem_mb type: uint32_t value: 4096 mirror: always - name: dom.ipc.processPriorityManager.enabled type: bool value: false mirror: always - name: dom.ipc.processPriorityManager.testMode type: bool value: false mirror: always - name: dom.ipc.processPriorityManager.backgroundPerceivableGracePeriodMS type: uint32_t #if defined(MOZ_WIDGET_ANDROID) && defined(NIGHTLY_BUILD) value: 3000 #else value: 0 #endif mirror: always - name: dom.ipc.processPriorityManager.backgroundGracePeriodMS type: uint32_t #if defined(MOZ_WIDGET_ANDROID) && defined(NIGHTLY_BUILD) value: 3000 #else value: 0 #endif mirror: always #ifdef XP_WIN - name: dom.ipc.processPriorityManager.backgroundUsesEcoQoS type: bool value: false mirror: always #endif # Is support for HTMLElement.autocapitalize enabled? - name: dom.forms.autocapitalize type: bool value: @IS_NIGHTLY_BUILD@ mirror: always # Support for input type=month, type=week. By default, disabled. - name: dom.forms.datetime.others type: bool value: @IS_ANDROID@ mirror: always # Is support for HTMLElement.enterKeyHint enabled? - name: dom.forms.enterkeyhint type: bool value: true mirror: always # Is support for HTMLElement.inputMode enabled? - name: dom.forms.inputmode type: bool value: true mirror: always - name: dom.forms.always_allow_pointer_events.enabled type: bool value: @IS_NIGHTLY_BUILD@ mirror: always # Is support for HTMLInputElement.showPicker enabled? - name: dom.input.showPicker type: bool value: true mirror: always # Whether to allow or disallow web apps to cancel `beforeinput` events caused # by MozEditableElement#setUserInput() which is used by autocomplete, autofill # and password manager. - name: dom.input_event.allow_to_cancel_set_user_input type: bool value: false mirror: always # How long a content process can take before closing its IPC channel # after shutdown is initiated. If the process exceeds the timeout, # we fear the worst and kill it. - name: dom.ipc.tabs.shutdownTimeoutSecs type: RelaxedAtomicUint32 #if !defined(DEBUG) && !defined(MOZ_ASAN) && !defined(MOZ_VALGRIND) && !defined(MOZ_TSAN) value: 20 #else value: 0 #endif mirror: always # Whether a native event loop should be used in the content process. - name: dom.ipc.useNativeEventProcessing.content type: RelaxedAtomicBool #if defined(XP_WIN) || defined(XP_MACOSX) value: false #else value: true #endif mirror: always # If this is true, TextEventDispatcher dispatches keydown and keyup events # even during composition (keypress events are never fired during composition # even if this is true). - name: dom.keyboardevent.dispatch_during_composition type: bool value: true mirror: always # Enable/disable KeyboardEvent.initKeyEvent function - name: dom.keyboardevent.init_key_event.enabled type: bool value: false mirror: always # Enable/disable KeyboardEvent.initKeyEvent function in addons even if it's # disabled. - name: dom.keyboardevent.init_key_event.enabled_in_addons type: bool value: true mirror: always # If this is true, keypress events for non-printable keys are dispatched only # for event listeners of the system event group in web content. - name: dom.keyboardevent.keypress.dispatch_non_printable_keys_only_system_group_in_content type: bool value: true mirror: always # If this is true, "keypress" event's keyCode value and charCode value always # become same if the event is not created/initialized by JS. - name: dom.keyboardevent.keypress.set_keycode_and_charcode_to_same_value type: bool value: true mirror: always # Whether "W3C Web Manifest" processing is enabled - name: dom.manifest.enabled type: bool value: true mirror: always # Enable mapped array buffer by default. - name: dom.mapped_arraybuffer.enabled type: bool value: true mirror: always # 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 # Autoplay Policy Detection https://w3c.github.io/autoplay/ - name: dom.media.autoplay-policy-detection.enabled type: RelaxedAtomicBool value: @IS_NIGHTLY_BUILD@ mirror: always # Media Session API - name: dom.media.mediasession.enabled type: bool value: true mirror: always # WebCodecs API - name: dom.media.webcodecs.enabled type: RelaxedAtomicBool value: false mirror: always # Number of seconds of very quiet or silent audio before considering the audio # inaudible. - name: dom.media.silence_duration_for_audibility type: AtomicFloat value: 2.0f mirror: always # Enable meta-viewport support in remote APZ-enabled frames. - name: dom.meta-viewport.enabled type: RelaxedAtomicBool value: false mirror: always # Timeout clamp in ms for timeouts we clamp. - name: dom.min_timeout_value type: RelaxedAtomicInt32 value: 4 mirror: always # Timeout clamp in ms for background windows. - name: dom.min_background_timeout_value type: int32_t value: 1000 mirror: always # Timeout clamp in ms for background windows when throttling isn't enabled. - name: dom.min_background_timeout_value_without_budget_throttling type: int32_t value: 1000 mirror: always # Are missing-property use counters for certain DOM attributes enabled? - name: dom.missing_prop_counters.enabled type: bool value: true mirror: always # Is support for module scripts (