Backed out changeset a04e5744fe2e (bug 1758540) for causing bug 1769510. a=backout
[gecko.git] / modules / libpref / init / StaticPrefList.yaml
bloba16947b0180f9a3ccc973fcdc6b9e84ebb7214c4
1 # This Source Code Form is subject to the terms of the Mozilla Public
2 # License, v. 2.0. If a copy of the MPL was not distributed with this
3 # file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 # This file defines static prefs, i.e. those that are defined at startup and
6 # used entirely or mostly from C++ and/or Rust code.
8 # The file is separated into sections, where each section contains a group of
9 # prefs that all share the same first segment of their name -- all the "gfx.*"
10 # prefs are together, all the "network.*" prefs are together, etc. Sections
11 # must be kept in alphabetical order, but prefs within sections need not be.
13 # Basics
14 # ------
15 # Any pref defined in one of the files included here should *not* be defined
16 # in a data file such as all.js; that would just be useless duplication.
18 # (Except under unusual circumstances where the value defined here must be
19 # overridden, e.g. for some Thunderbird prefs. In those cases the default
20 # value from the data file will override the static default value defined
21 # here.)
23 # Please follow the existing prefs naming convention when considering adding a
24 # new pref, and don't create a new pref group unless it's appropriate and there
25 # are likely to be multiple prefs within that group. (If you do, you'll need to
26 # update the `pref_groups` variable in modules/libpref/moz.build.)
28 # Definitions
29 # -----------
30 # A pref definition looks like this:
32 #   - name: <pref-name>                    # mandatory
33 #     type: <cpp-type>                     # mandatory
34 #     value: <default-value>               # mandatory
35 #     mirror: <never | once | always>      # mandatory
36 #     do_not_use_directly: <true | false>  # optional
37 #     include: <header-file>               # optional
38 #     rust: <true | false>                 # optional
40 # - `name` is the name of the pref, without double-quotes, as it appears
41 #   in about:config. It is used in most libpref API functions (from both C++
42 #   and JS code).
44 # - `type` is one of `bool`, `int32_t`, `uint32_t`, `float`, an atomic version
45 #   of one of those, or `String`. Note that float prefs are stored internally
46 #   as strings. The C++ preprocessor doesn't like template syntax in a macro
47 #   argument, so use the typedefs defined in StaticPrefsBase.h; for example,
48 #   use `RelaxedAtomicBool` instead of `Atomic<bool, Relaxed>`.
50 # - `value` is the default value. Its type should be appropriate for
51 #   <cpp-type>, otherwise the generated code will fail to compile. A complex
52 #   C++ numeric expressions like `60 * 60` (which the YAML parser cannot treat
53 #   as an integer or float) is treated as a string and passed through without
54 #   change, which is useful.
56 # - `mirror` indicates how the pref value is mirrored into a C++ variable.
58 #   * `never`: There is no C++ mirror variable. The pref value can only be
59 #     accessed via the standard libpref API functions.
61 #   * `once`: The pref value is mirrored into a variable at startup; the
62 #     mirror variable is left unchanged after that. (The exact point at which
63 #     all `once` mirror variables are set is when the first `once` mirror
64 #     variable is accessed, via its getter function.) This is mostly useful for
65 #     graphics prefs where we often don't want a new pref value to apply until
66 #     restart. Otherwise, this update policy is best avoided because its
67 #     behaviour can cause confusion and bugs.
69 #   * `always`: The mirror variable is always kept in sync with the pref value.
70 #     This is the most common choice.
72 #   When a mirror variable is present, a getter will be created that can access
73 #   it. Using the getter function to read the pref's value has the two
74 #   following advantages over the normal API functions.
76 #   * A direct variable access is faster than a hash table lookup.
78 #   * A mirror variable can be accessed off the main thread. If a pref *is*
79 #     accessed off the main thread, it should have an atomic type. Assertions
80 #     enforce this.
82 #   Note that Rust code must access the mirror variable directly, rather than
83 #   via the getter function.
85 # - `do_not_use_directly` indicates if `_DoNotUseDirectly` should be appended to
86 #   the name of the getter function. This is simply a naming convention
87 #   indicating that there is some other wrapper getter function that should be
88 #   used in preference to the normal static pref getter. Defaults to `false` if
89 #   not present. Cannot be used with a `never` mirror value, because there is
90 #   no getter function in that case.
92 # - `include` names a header file that must be included for the pref value to
93 #   compile correctly, e.g. because it refers to a code constant. System
94 #   headers should be surrounded with angle brackets, e.g. `<cmath>`.
96 # - `rust` indicates if the mirror variable is used by Rust code. If so, it
97 #   will be usable via the `static_prefs::pref!` macro, e.g.
98 #   `static_prefs::pref!("layout.css.font-display.enabled")`.
100 # The getter function's base name is the same as the pref's name, but with
101 # '.' or '-' chars converted to '_', to make a valid identifier. For example,
102 # the getter for `foo.bar_baz` is `foo_bar_baz()`. This is ugly but clear,
103 # and you can search for both the pref name and the getter using the regexp
104 # /foo.bar.baz/. Suffixes are added as follows:
106 # - If the `mirror` value is `once`, `_AtStartup` is appended, to indicate the
107 #   value was obtained at startup.
109 # - If the `do_not_use_directly` value is true, `_DoNotUseDirectly` is
110 #   appended.
112 # Preprocessor
113 # ------------
114 # Note finally that this file is preprocessed by preprocessor.py, not the C++
115 # preprocessor. As a result, the following things may be surprising.
117 # - YAML comments start with a '#', so putting a comment on the same line as a
118 #   preprocessor directive is dubious. E.g. avoid lines like `#define X 3 #
119 #   three` because the ` # three` will be part of `X`.
121 # - '@' use is required for substitutions to occur. E.g. with `#define FOO 1`,
122 #   `FOO` won't be replaced with `1` unless it has '@' chars around it.
124 # - Spaces aren't permitted between the leading '#' and the name of a
125 #   directive, e.g. `#ifdef XYZ` works but `# ifdef XYZ` does not.
127 # Please indent all prefs defined within #ifdef/#ifndef conditions. This
128 # improves readability, particular for conditional blocks that exceed a single
129 # screen. But note that the leading '-' in a definition must remain in the
130 # first column for it to be valid YAML.
132 #ifdef RELEASE_OR_BETA
133 #define IS_NOT_RELEASE_OR_BETA false
134 #else
135 #define IS_NOT_RELEASE_OR_BETA true
136 #endif
138 #ifdef NIGHTLY_BUILD
139 #define IS_NIGHTLY_BUILD      true
140 #define IS_NOT_NIGHTLY_BUILD  false
141 #else
142 #define IS_NIGHTLY_BUILD      false
143 #define IS_NOT_NIGHTLY_BUILD  true
144 #endif
146 #if defined(NIGHTLY_BUILD) || defined(MOZ_DEV_EDITION)
147 #define IS_NIGHTLY_OR_DEV_EDITION true
148 #else
149 #define IS_NIGHTLY_OR_DEV_EDITION false
150 #endif
152 #ifdef MOZILLA_OFFICIAL
153 #define IS_NOT_MOZILLA_OFFICIAL false
154 #else
155 #define IS_NOT_MOZILLA_OFFICIAL true
156 #endif
158 #ifdef EARLY_BETA_OR_EARLIER
159 #define IS_EARLY_BETA_OR_EARLIER true
160 #define IS_NOT_EARLY_BETA_OR_EARLIER false
161 #else
162 #define IS_EARLY_BETA_OR_EARLIER false
163 #define IS_NOT_EARLY_BETA_OR_EARLIER true
164 #endif
166 #ifdef ANDROID
167 #define IS_ANDROID true
168 #define IS_NOT_ANDROID false
169 #else
170 #define IS_ANDROID false
171 #define IS_NOT_ANDROID true
172 #endif
174 #---------------------------------------------------------------------------
175 # Prefs starting with "accessibility."
176 #---------------------------------------------------------------------------
178 - name: accessibility.accesskeycausesactivation
179   type: bool
180   value: true
181   mirror: always
183 - name: accessibility.monoaudio.enable
184   type: RelaxedAtomicBool
185   value: false
186   mirror: always
188 - name: accessibility.browsewithcaret
189   type: RelaxedAtomicBool
190   value: false
191   mirror: always
193 - name: accessibility.AOM.enabled
194   type: bool
195   value: false
196   mirror: always
198 - name: accessibility.ARIAReflection.enabled
199   type: bool
200   value: false
201   mirror: always
203 # Whether form controls and images should be focusable with mouse, in content
204 # documents.
206 # This matches historical macOS / Safari behavior.
208 #  * 0: never
209 #  * 1: always
210 #  * 2: on content documents
211 - name: accessibility.mouse_focuses_formcontrol
212   type: int32_t
213 #ifdef XP_MACOSX
214   value: 2
215 #else
216   value: 1
217 #endif
218   mirror: always
220 # Whether to cache the entire accessibility trees of all content processes in
221 # the parent process.
222 - name: accessibility.cache.enabled
223   type: bool
224   value: false
225   mirror: once
227 #---------------------------------------------------------------------------
228 # Prefs starting with "alerts."
229 #---------------------------------------------------------------------------
231 # Whether to use platform-specific backends for showing desktop notifications.
232 # If no such backend is available, or if the pref is false, then XUL
233 # notifications are used.
234 - name: alerts.useSystemBackend
235   type: bool
236 #ifdef XP_WIN
237   # Linux and macOS turn on system level notification as default, but Windows is
238   # disabled due to instability (dependencies of bug 1497425).
239   value: false
240 #else
241   value: true
242 #endif
243   mirror: always
246 #ifdef ANDROID
247   #---------------------------------------------------------------------------
248   # Prefs starting with "android."
249   #---------------------------------------------------------------------------
251   # On Android, we want an opaque background to be visible under the page,
252   # so layout should not force a default background.
253 -   name: android.widget_paints_background
254     type: RelaxedAtomicBool
255     value: true
256     mirror: always
258 -   name: android.touch_resampling.enabled
259     type: RelaxedAtomicBool
260     value: true
261     mirror: always
263 #endif
265 #---------------------------------------------------------------------------
266 # Prefs starting with "apz."
267 # The apz prefs are explained in AsyncPanZoomController.cpp
268 #---------------------------------------------------------------------------
270 # amount we zoom in for a double tap gesture if we couldn't find any content
271 # based rect to zoom to
272 - name: apz.doubletapzoom.defaultzoomin
273   type: AtomicFloat
274   value: 1.2f
275   mirror: always
277 - name: apz.scrollbarbuttonrepeat.enabled
278   type: RelaxedAtomicBool
279   value: true
280   mirror: always
282 - name: apz.wr.activate_all_scroll_frames
283   type: RelaxedAtomicBool
284   value: false
285   mirror: always
287 - name: apz.wr.activate_all_scroll_frames_when_fission
288   type: RelaxedAtomicBool
289   value: true
290   mirror: always
292 - name: apz.prefer_jank_minimal_displayports
293   type: RelaxedAtomicBool
294   value: true
295   mirror: always
297 - name: apz.allow_double_tap_zooming
298   type: RelaxedAtomicBool
299   value: true
300   mirror: always
302 - name: apz.mac.enable_double_tap_zoom_touchpad_gesture
303   type: RelaxedAtomicBool
304   value: true
305   mirror: always
307 - name: apz.allow_immediate_handoff
308   type: RelaxedAtomicBool
309   value: false
310   mirror: always
312 - name: apz.allow_zooming
313   type: RelaxedAtomicBool
314   value: true
315   mirror: always
317 - name: apz.allow_zooming_out
318   type: RelaxedAtomicBool
319   value: false
320   mirror: always
322 - name: apz.android.chrome_fling_physics.friction
323   type: AtomicFloat
324   value: 0.015f
325   mirror: always
327 - name: apz.android.chrome_fling_physics.inflexion
328   type: AtomicFloat
329   value: 0.35f
330   mirror: always
332 - name: apz.android.chrome_fling_physics.stop_threshold
333   type: AtomicFloat
334   value: 0.1f
335   mirror: always
337 - name: apz.autoscroll.enabled
338   type: RelaxedAtomicBool
339   value: true
340   mirror: always
342 - name: apz.axis_lock.breakout_angle
343   type: AtomicFloat
344   value: float(M_PI / 8.0)    # 22.5 degrees
345   mirror: always
346   include: <cmath>
348 - name: apz.axis_lock.breakout_threshold
349   type: AtomicFloat
350   value: 1.0f / 32.0f
351   mirror: always
353 - name: apz.axis_lock.direct_pan_angle
354   type: AtomicFloat
355   value: float(M_PI / 3.0)    # 60 degrees
356   mirror: always
357   include: <cmath>
359 - name: apz.axis_lock.lock_angle
360   type: AtomicFloat
361   value: float(M_PI / 6.0)    # 30 degrees
362   mirror: always
363   include: <cmath>
365 # Whether to lock touch scrolling to one axis at a time.
366 # 0 = FREE (No locking at all)
367 # 1 = STANDARD (Once locked, remain locked until scrolling ends)
368 # 2 = STICKY (Allow lock to be broken, with hysteresis)
369 - name: apz.axis_lock.mode
370   type: RelaxedAtomicInt32
371   value: 2
372   mirror: always
374 - name: apz.content_response_timeout
375   type: RelaxedAtomicInt32
376   value: 400
377   mirror: always
379 - name: apz.danger_zone_x
380   type: RelaxedAtomicInt32
381   value: 50
382   mirror: always
384 - name: apz.danger_zone_y
385   type: RelaxedAtomicInt32
386   value: 100
387   mirror: always
389 - name: apz.disable_for_scroll_linked_effects
390   type: RelaxedAtomicBool
391   value: false
392   mirror: always
394 - name: apz.displayport_expiry_ms
395   type: RelaxedAtomicUint32
396   value: 15000
397   mirror: always
399 - name: apz.drag.enabled
400   type: RelaxedAtomicBool
401   value: true
402   mirror: always
404 - name: apz.drag.initial.enabled
405   type: RelaxedAtomicBool
406   value: true
407   mirror: always
409 - name: apz.drag.touch.enabled
410   type: RelaxedAtomicBool
411   value: true
412   mirror: always
414 - name: apz.enlarge_displayport_when_clipped
415   type: RelaxedAtomicBool
416   value: @IS_ANDROID@
417   mirror: always
419 # Test only.
420 - name: apz.fixed-margin-override.enabled
421   type: RelaxedAtomicBool
422   value: false
423   mirror: always
425 # Test only.
426 - name: apz.fixed-margin-override.bottom
427   type: RelaxedAtomicInt32
428   value: 0
429   mirror: always
431 # Test only.
432 - name: apz.fixed-margin-override.top
433   type: RelaxedAtomicInt32
434   value: 0
435   mirror: always
437 - name: apz.fling_accel_base_mult
438   type: AtomicFloat
439   value: 1.0f
440   mirror: always
442 - name: apz.fling_accel_supplemental_mult
443   type: AtomicFloat
444   value: 1.0f
445   mirror: always
447 - name: apz.fling_accel_min_fling_velocity
448   type: AtomicFloat
449   value: 1.5f
450   mirror: always
452 - name: apz.fling_accel_min_pan_velocity
453   type: AtomicFloat
454   value: 0.8f
455   mirror: always
457 - name: apz.fling_accel_max_pause_interval_ms
458   type: RelaxedAtomicInt32
459   value: 50
460   mirror: always
462 - name: apz.fling_curve_function_x1
463   type: float
464   value: 0.0f
465   mirror: once
467 - name: apz.fling_curve_function_x2
468   type: float
469   value: 1.0f
470   mirror: once
472 - name: apz.fling_curve_function_y1
473   type: float
474   value: 0.0f
475   mirror: once
477 - name: apz.fling_curve_function_y2
478   type: float
479   value: 1.0f
480   mirror: once
482 - name: apz.fling_curve_threshold_inches_per_ms
483   type: AtomicFloat
484   value: -1.0f
485   mirror: always
487 - name: apz.fling_friction
488   type: AtomicFloat
489   value: 0.002f
490   mirror: always
492 - name: apz.fling_min_velocity_threshold
493   type: AtomicFloat
494   value: 0.5f
495   mirror: always
497 - name: apz.fling_stop_on_tap_threshold
498   type: AtomicFloat
499   value: 0.05f
500   mirror: always
502 - name: apz.fling_stopped_threshold
503   type: AtomicFloat
504   value: 0.01f
505   mirror: always
507 - name: apz.touch_acceleration_factor_x
508   type: float
509   value: 1.0f
510   mirror: always
512 - name: apz.touch_acceleration_factor_y
513   type: float
514   value: 1.0f
515   mirror: always
517 # new scrollbar code for desktop zooming
518 - name: apz.force_disable_desktop_zooming_scrollbars
519   type: RelaxedAtomicBool
520   value: false
521   mirror: always
523 #ifdef MOZ_WIDGET_GTK
524 -   name: apz.gtk.kinetic_scroll.enabled
525     type: RelaxedAtomicBool
526     value: true
527     mirror: always
529 # Mode to use when receiving kinetic scroll input.
531 #  * 0: Auto mode (uses the default behavior, subject to change).
532 #  * 1: Page mode: Uses gtk deltas as a percentage of the page size to scroll. This mode matches:
534 #    https://gitlab.gnome.org/GNOME/gtk/blob/c734c7e9188b56f56c3a504abee05fa40c5475ac/gtk/gtkrange.c#L3063-3074
536 #  * 2: Pixel mode: Uses gtk deltas as a fixed pixel multiplier. This mode matches e.g. GNOME web.
538 #    https://webkit-search.igalia.com/webkit/rev/215039ef09d6bfd6e088175bfe30788d95b9705d/Source/WebKit/Shared/gtk/WebEventFactory.cpp#265-296
539 #    (multiplied then by pixelsPerLineStep which in GNOME-web is 40).
540 -   name: apz.gtk.kinetic_scroll.delta_mode
541     type: uint32_t
542     value: 0
543     mirror: always
545 -   name: apz.gtk.kinetic_scroll.page_delta_mode_multiplier
546     type: float
547     value: 1.0f
548     mirror: always
550 -   name: apz.gtk.kinetic_scroll.pixel_delta_mode_multiplier
551     type: float
552     value: 40.0f
553     mirror: always
555 -   name: apz.gtk.touchpad_pinch.enabled
556     type: RelaxedAtomicBool
557     value: true
558     mirror: always
560 -   name: apz.gtk.touchpad_pinch.three_fingers.enabled
561     type: RelaxedAtomicBool
562     value: false
563     mirror: always
564 #endif
566 - name: apz.keyboard.enabled
567   type: bool
568   value: @IS_NOT_ANDROID@
569   mirror: once
571 - name: apz.keyboard.passive-listeners
572   type: RelaxedAtomicBool
573   value: @IS_NOT_ANDROID@
574   mirror: always
576 - name: apz.max_tap_time
577   type: RelaxedAtomicInt32
578   value: 300
579   mirror: always
581 - name: apz.max_velocity_inches_per_ms
582   type: AtomicFloat
583   value: -1.0f
584   mirror: always
586 - name: apz.max_velocity_queue_size
587   type: uint32_t
588   value: 5
589   mirror: once
591 - name: apz.min_skate_speed
592   type: AtomicFloat
593   value: 1.0f
594   mirror: always
596 - name: apz.minimap.enabled
597   type: RelaxedAtomicBool
598   value: false
599   mirror: always
601 - name: apz.mvm.force-enabled
602   type: RelaxedAtomicBool
603   value: true
604   mirror: always
606 - name: apz.one_touch_pinch.enabled
607   type: RelaxedAtomicBool
608   value: @IS_ANDROID@
609   mirror: always
611 - name: apz.overscroll.enabled
612   type: RelaxedAtomicBool
613 #if defined(XP_MACOSX)
614   value: true
615 #else
616   value: false
617 #endif
618   mirror: always
620 # The "test async scroll offset" (used via reftest-async-scroll
621 # or nsIDOMWindowUtils.setAsyncScrollOffset()) can be used to
622 # trigger overscroll. Used for tests only.
623 - name: apz.overscroll.test_async_scroll_offset.enabled
624   type: RelaxedAtomicBool
625   value: false
626   mirror: always
628 - name: apz.overscroll.min_pan_distance_ratio
629   type: AtomicFloat
630   value: 1.0f
631   mirror: always
633 - name: apz.overscroll.stop_distance_threshold
634   type: AtomicFloat
635   value: 5.0f
636   mirror: always
638 - name: apz.overscroll.spring_stiffness
639   type: AtomicFloat
640   value: 200
641   mirror: always
643 - name: apz.overscroll.damping
644   type: AtomicFloat
645   value: 1.1
646   mirror: always
648 - name: apz.overscroll.max_velocity
649   type: AtomicFloat
650   value: 10
651   mirror: always
653 - name: apz.paint_skipping.enabled
654   type: RelaxedAtomicBool
655   value: true
656   mirror: always
658 # Fetch displayport updates early from the message queue.
659 - name: apz.pinch_lock.mode
660   type: RelaxedAtomicInt32
661   value: 1
662   mirror: always
664 - name: apz.pinch_lock.scroll_lock_threshold
665   type: AtomicFloat
666   value: 1.0f / 32.0f   # 1/32 inches
667   mirror: always
669 - name: apz.pinch_lock.span_breakout_threshold
670   type: AtomicFloat
671   value: 1.0f / 32.0f   # 1/32 inches
672   mirror: always
674 - name: apz.pinch_lock.span_lock_threshold
675   type: AtomicFloat
676   value: 1.0f / 32.0f   # 1/32 inches
677   mirror: always
679 - name: apz.pinch_lock.buffer_max_age
680   type: int32_t
681   value: 50   # milliseconds
682   mirror: once
684 - name: apz.popups.enabled
685   type: RelaxedAtomicBool
686   value: true
687   mirror: always
689 # Whether to print the APZC tree for debugging.
690 - name: apz.printtree
691   type: RelaxedAtomicBool
692   value: false
693   mirror: always
695 - name: apz.record_checkerboarding
696   type: RelaxedAtomicBool
697   value: @IS_NIGHTLY_BUILD@
698   mirror: always
700 - name: apz.second_tap_tolerance
701   type: AtomicFloat
702   value: 0.5f
703   mirror: always
705 - name: apz.test.fails_with_native_injection
706   type: RelaxedAtomicBool
707   value: false
708   mirror: always
710 - name: apz.test.logging_enabled
711   type: RelaxedAtomicBool
712   value: false
713   mirror: always
715 - name: apz.touch_move_tolerance
716   type: AtomicFloat
717   value: 0.1f
718   mirror: always
720 - name: apz.touch_start_tolerance
721   type: AtomicFloat
722   value: 0.1f
723   mirror: always
725 - name: apz.velocity_bias
726   type: AtomicFloat
727   value: 0.0f
728   mirror: always
730 - name: apz.velocity_relevance_time_ms
731   type: RelaxedAtomicUint32
732   value: 100
733   mirror: always
735 - name: apz.windows.force_disable_direct_manipulation
736   type: RelaxedAtomicBool
737   value: false
738   mirror: always
740 - name: apz.windows.use_direct_manipulation
741   type: RelaxedAtomicBool
742   value: true
743   mirror: always
745 - name: apz.windows.check_for_pan_gesture_conversion
746   type: RelaxedAtomicBool
747   value: true
748   mirror: always
750 - name: apz.x_skate_highmem_adjust
751   type: AtomicFloat
752   value: 0.0f
753   mirror: always
755 - name: apz.x_skate_size_multiplier
756   type: AtomicFloat
757   value: 1.25f
758   mirror: always
760 - name: apz.x_stationary_size_multiplier
761   type: AtomicFloat
762   value: 1.5f
763   mirror: always
765 - name: apz.y_skate_highmem_adjust
766   type: AtomicFloat
767   value: 0.0f
768   mirror: always
770 - name: apz.y_skate_size_multiplier
771   type: AtomicFloat
772 #if defined(MOZ_WIDGET_ANDROID)
773   value: 1.5f
774 #else
775   value: 3.5f
776 #endif
777   mirror: always
779 - name: apz.y_stationary_size_multiplier
780   type: AtomicFloat
781 #if defined(MOZ_WIDGET_ANDROID)
782   value: 1.5f
783 #else
784   value: 3.5f
785 #endif
786   mirror: always
788 - name: apz.zoom_animation_duration_ms
789   type: RelaxedAtomicInt32
790 #if defined(MOZ_WIDGET_ANDROID)
791   value: 250
792 #else
793   value: 350
794 #endif
795   mirror: always
797 - name: apz.scale_repaint_delay_ms
798   type: RelaxedAtomicInt32
799   value: 500
800   mirror: always
802 #---------------------------------------------------------------------------
803 # Prefs starting with "beacon."
804 #---------------------------------------------------------------------------
806 # Is support for Navigator.sendBeacon enabled?
807 - name: beacon.enabled
808   type: bool
809   value: true
810   mirror: always
812 #---------------------------------------------------------------------------
813 # Prefs starting with "bidi."
814 #---------------------------------------------------------------------------
816 # Whether delete and backspace should immediately delete characters not
817 # visually adjacent to the caret, or adjust the visual position of the caret
818 # on the first keypress and delete the character on a second keypress
819 - name: bidi.edit.delete_immediately
820   type: bool
821   value: true
822   mirror: always
824 # Bidi caret movement style:
825 # 0 = logical
826 # 1 = visual
827 # 2 = visual, but logical during selection
828 - name: bidi.edit.caret_movement_style
829   type: int32_t
830 #if !defined(XP_LINUX) && defined(NIGHTLY_BUILD)
831   value: 1
832 #else
833   value: 2 # See Bug 1638240
834 #endif
835   mirror: always
837 #---------------------------------------------------------------------------
838 # Prefs starting with "browser."
839 #---------------------------------------------------------------------------
841 - name: browser.active_color
842   type: String
843   value: "#EE0000"
844   mirror: never
846 - name: browser.active_color.dark
847   type: String
848   value: "#FF6666"
849   mirror: never
851 - name: browser.anchor_color
852   type: String
853   value: "#0000EE"
854   mirror: never
856 # If you change this, you probably also want to change
857 # nsXPLookAndFeel::GenericDarkColor for MozNativehyperlinktext.
858 - name: browser.anchor_color.dark
859   type: String
860   value: "#8C8CFF"
861   mirror: never
863 # See http://dev.w3.org/html5/spec/forms.html#attr-fe-autofocus
864 - name: browser.autofocus
865   type: bool
866   value: true
867   mirror: always
869 - name: browser.cache.offline.enable
870   type: bool
871   value: @IS_NOT_EARLY_BETA_OR_EARLIER@
872   mirror: always
874 - name: browser.cache.disk.enable
875   type: RelaxedAtomicBool
876   value: true
877   mirror: always
879 - name: browser.cache.memory.enable
880   type: RelaxedAtomicBool
881   value: true
882   mirror: always
884 # Limit of recent metadata we keep in memory for faster access, in KB.
885 - name: browser.cache.disk.metadata_memory_limit
886   type: RelaxedAtomicUint32
887   value: 250   # 0.25 MB
888   mirror: always
890 # Does the user want smart-sizing?
891 - name: browser.cache.disk.smart_size.enabled
892   type: RelaxedAtomicBool
893   value: true
894   mirror: always
896 # Disk cache capacity in kilobytes. It's used only when
897 # browser.cache.disk.smart_size.enabled == false
898 - name: browser.cache.disk.capacity
899   type: RelaxedAtomicUint32
900   value: 256000
901   mirror: always
903 # -1 = determine dynamically, 0 = none, n = memory capacity in kilobytes.
904 - name: browser.cache.memory.capacity
905   type: RelaxedAtomicInt32
906   value: -1
907   mirror: always
909 # When smartsizing is disabled we could potentially fill all disk space by
910 # cache data when the disk capacity is not set correctly. To avoid that we
911 # check the free space every time we write some data to the cache. The free
912 # space is checked against two limits. Once the soft limit is reached we start
913 # evicting the least useful entries, when we reach the hard limit writing to
914 # the entry fails.
915 - name: browser.cache.disk.free_space_soft_limit
916   type: RelaxedAtomicUint32
917   value: 5 * 1024   # 5MB
918   mirror: always
920 - name: browser.cache.disk.free_space_hard_limit
921   type: RelaxedAtomicUint32
922   value: 1024    # 1MB
923   mirror: always
925 # The number of chunks we preload ahead of read. One chunk currently has
926 # 256kB.
927 - name: browser.cache.disk.preload_chunk_count
928   type: RelaxedAtomicUint32
929   value: 4    # 1 MB of read ahead
930   mirror: always
932 # Max-size (in KB) for entries in disk cache. Set to -1 for no limit.
933 # (Note: entries bigger than 1/8 of disk-cache are never cached)
934 - name: browser.cache.disk.max_entry_size
935   type: RelaxedAtomicUint32
936   value: 50 * 1024    # 50 MB
937   mirror: always
939 # Max-size (in KB) for entries in memory cache. Set to -1 for no limit.
940 # (Note: entries bigger than than 90% of the mem-cache are never cached.)
941 - name: browser.cache.memory.max_entry_size
942   type: RelaxedAtomicInt32
943   value: 5 * 1024
944   mirror: always
946 # Memory limit (in kB) for new cache data not yet written to disk. Writes to
947 # the cache are buffered and written to disk on background with low priority.
948 # With a slow persistent storage these buffers may grow when data is coming
949 # fast from the network. When the amount of unwritten data is exceeded, new
950 # writes will simply fail. We have two buckets, one for important data
951 # (priority) like html, css, fonts and js, and one for other data like images,
952 # video, etc.
953 # Note: 0 means no limit.
954 - name: browser.cache.disk.max_chunks_memory_usage
955   type: RelaxedAtomicUint32
956   value: 40 * 1024
957   mirror: always
958 - name: browser.cache.disk.max_priority_chunks_memory_usage
959   type: RelaxedAtomicUint32
960   value: 40 * 1024
961   mirror: always
963 # Number of seconds the cache spends writing pending data and closing files
964 # after shutdown has been signalled. Past that time data is not written and
965 # files are left open for the OS to clean up.
966 - name: browser.cache.max_shutdown_io_lag
967   type: RelaxedAtomicUint32
968   value: 2
969   mirror: always
971 # A percentage limit for media content type in the disk cache. When some entries
972 # need to be evicted and media is over the limit, it's evicted first.
973 - name: browser.cache.disk.content_type_media_limit
974   type: RelaxedAtomicInt32
975   value: 50
976   mirror: always
978 # How often to validate document in cache
979 #   0 = once-per-session,
980 #   1 = each-time,
981 #   2 = never,
982 #   3 = when-appropriate/automatically
983 - name: browser.cache.check_doc_frequency
984   type: RelaxedAtomicUint32
985   value: 3
986   mirror: always
988 - name: browser.contentblocking.database.enabled
989   type: bool
990   value: false
991   mirror: always
993 # How many recent block/unblock actions per origins we remember in the
994 # Content Blocking log for each top-level window.
995 - name: browser.contentblocking.originlog.length
996   type: uint32_t
997   value: 32
998   mirror: always
1000 - name: browser.display.background_color
1001   type: String
1002   value: "#FFFFFF"
1003   mirror: never
1005 - name: browser.display.background_color.dark
1006   type: String
1007   value: "#1C1B22"
1008   mirror: never
1010 # This preference is a bit confusing because we use the opposite
1011 # string value in the colors dialog to indicate to users how FF HCM
1012 # will behave.
1013 # With resect to document colors, these values mean:
1014 # 0 = "default" = always, except in high contrast mode
1015 # 1 = "always"
1016 # 2 = "never"
1018 # On windows, we set this to 0, which means FF HCM will mirror OS HCM.
1019 # Everywhere else, we set this to 1, disabling FF HCM.
1020 - name: browser.display.document_color_use
1021   type: RelaxedAtomicUint32
1022 #if defined(XP_WIN)
1023   value: 0
1024 #else
1025   value: 1
1026 #endif
1027   mirror: always
1028   rust: true
1030 # 0 = always native
1031 # 1 = never native
1032 # other = default
1033 - name: browser.display.windows.non_native_menus
1034   type: RelaxedAtomicUint32
1035   value: 2
1036   mirror: always
1037   rust: true
1039 # This pref dictates whether or not backplates and background images
1040 # are to be drawn, when in high-contrast mode:
1041 #   false: do not draw backplates or render background images
1042 #   true: render background images and draw backplates
1043 # This condition is only considered when high-contrast mode is enabled
1044 # in Firefox, ie. when the user has:
1045 #   (1) mUseAccessibilityMode set to true (Widows high-contrast mode is on)
1046 #       AND browser.display.document_color_use set to 0
1047 #       (only with high-contrast themes) OR
1048 #   (2) browser.display.document_color_use set to 2 (always)
1049 - name: browser.display.permit_backplate
1050   type: RelaxedAtomicBool
1051   value: true
1052   mirror: always
1053   rust: true
1055 # Whether we should suppress the background-image of the canvas (the root
1056 # frame) if we're in forced colors mode.
1058 # This is important because some sites use background-image with a plain color
1059 # and it causes undesirable results in high-contrast mode.
1061 # See bug 1614921 for example.
1062 - name: browser.display.suppress_canvas_background_image_on_forced_colors
1063   type: bool
1064   value: true
1065   mirror: always
1067 - name: browser.display.focus_ring_on_anything
1068   type: bool
1069   value: false
1070   mirror: always
1072 - name: browser.display.focus_ring_width
1073   type: uint32_t
1074   value: 1
1075   mirror: always
1077 - name: browser.display.focus_background_color
1078   type: String
1079   value: "#117722"
1080   mirror: never
1082 # Focus ring border style.
1083 # 0 = solid border, 1 = dotted border
1084 - name: browser.display.focus_ring_style
1085   type: uint32_t
1086   value: 1
1087   mirror: always
1089 - name: browser.display.focus_text_color
1090   type: String
1091   value: "#ffffff"
1092   mirror: never
1094 - name: browser.display.foreground_color
1095   type: String
1096   value: "#000000"
1097   mirror: never
1099 - name: browser.display.foreground_color.dark
1100   type: String
1101   value: "#FBFBFE"
1102   mirror: never
1104 # Whether focus rings are always shown by default.
1106 # This is the initial value of nsWindowRoot::mShowFocusRings, but it can be
1107 # overridden by system preferences.
1108 - name: browser.display.show_focus_rings
1109   type: bool
1110   value: false
1111   mirror: always
1113 # Whether we should always enable focus rings after focus was moved by keyboard.
1115 # This behavior matches both historical and GTK / Windows focus behavior.
1117 # :focus-visible is intended to provide better heuristics than this.
1118 - name: browser.display.always_show_rings_after_key_focus
1119   type: bool
1120   value: false
1121   mirror: always
1123 # In theory: 0 = never, 1 = quick, 2 = always, though we always just use it as
1124 # a bool!
1125 - name: browser.display.use_document_fonts
1126   type: RelaxedAtomicInt32
1127   value: 1
1128   mirror: always
1129   rust: true
1131 - name: browser.display.use_focus_colors
1132   type: bool
1133   value: false
1134   mirror: always
1136 - name: browser.display.use_system_colors
1137   type: RelaxedAtomicBool
1138 #ifdef XP_WIN
1139   value: true
1140 #else
1141   value: false
1142 #endif
1143   mirror: always
1145 - name: browser.dom.window.dump.enabled
1146   type: RelaxedAtomicBool
1147   value: @IS_NOT_MOZILLA_OFFICIAL@
1148   mirror: always
1150 # See bug 1710926
1151 - name: browser.download.improvements_to_download_panel
1152   type: bool
1153   value: true
1154   mirror: always
1156 # See bug 1747343
1157 - name: browser.download.always_ask_before_handling_new_types
1158   type: bool
1159   value: false
1160   mirror: always
1162 # See bug 1731668
1163 - name: browser.download.enable_spam_prevention
1164   type: bool
1165   value: false
1166   mirror: always
1168 - name: browser.download.sanitize_non_media_extensions
1169   type: bool
1170   value: true
1171   mirror: always
1173 # Image document's automatic image sizing.
1174 - name: browser.enable_automatic_image_resizing
1175   type: bool
1176   value: true
1177   mirror: always
1179 # Image document's click-to-resize.
1180 - name: browser.enable_click_image_resizing
1181   type: bool
1182   value: @IS_NOT_ANDROID@
1183   mirror: always
1185 - name: browser.find.ignore_ruby_annotations
1186   type: bool
1187   value: true
1188   mirror: always
1190 #if defined(XP_MACOSX)
1191 # Whether pressing Esc will exit fullscreen.
1192 - name: browser.fullscreen.exit_on_escape
1193   type: bool
1194   value: true
1195   mirror: always
1196 #endif
1198 # The max url length we'll store in history.
1200 # The default value is mostly a guess based on various facts:
1202 # * IE didn't support urls longer than 2083 chars
1203 # * Sitemaps protocol used to support a maximum of 2048 chars
1204 # * Various SEO guides suggest to not go over 2000 chars
1205 # * Various apps/services are known to have issues over 2000 chars
1206 # * RFC 2616 - HTTP/1.1 suggests being cautious about depending
1207 #   on URI lengths above 255 bytes
1209 - name: browser.history.maxUrlLength
1210   type: uint32_t
1211   value: 2000
1212   mirror: always
1214 # Max size of push/replaceState data parameter
1215 - name: browser.history.maxStateObjectSize
1216   type: int32_t
1217   value: 16777216
1218   mirror: always
1220 # True to collect wireframes upon navigations / pushState
1221 - name: browser.history.collectWireframes
1222   type: bool
1223   value: false
1224   mirror: always
1226 # The minimum area for a rect to be included in a wireframe, in CSS pixels.
1228 # The current value of 50 is pretty arbitrary, and will be tuned as we refine
1229 # and test the wireframing capability.
1230 - name: browser.history.wireframeAreaThreshold
1231   type: uint32_t
1232   value: 50
1233   mirror: always
1235 #if defined(XP_WIN) || defined(XP_LINUX)
1236   # Notify TabUnloader or send the memory pressure if the memory resource
1237   # notification is signaled AND the available commit space is lower than
1238   # this value.
1239 -   name: browser.low_commit_space_threshold_mb
1240     type: RelaxedAtomicUint32
1241     value: 200
1242     mirror: always
1243 #endif
1245 #ifdef XP_LINUX
1246   # On Linux we also check available memory in comparison to total memory,
1247   # and use this percent value (out of 100) to determine if we are in a
1248   # low memory scenario.
1249 -   name: browser.low_commit_space_threshold_percent
1250     type: RelaxedAtomicUint32
1251     value: 5
1252     mirror: always
1253 #endif
1255 # Render animations and videos as a solid color
1256 - name: browser.measurement.render_anims_and_video_solid
1257   type: RelaxedAtomicBool
1258   value: false
1259   mirror: always
1261 - name: browser.navigation.requireUserInteraction
1262   type: bool
1263   value: false
1264   mirror: always
1266 # Indicates if about:newtab shows content (enabled) or just blank.
1267 - name: browser.newtabpage.enabled
1268   type: bool
1269   value: true
1270   mirror: always
1272 # Open PDFs in Edge with the --app flag if it is the default.
1273 - name: browser.pdf.launchDefaultEdgeAsApp
1274   type: bool
1275   value: true
1276   mirror: always
1278 # Maximium delay between keystrokes that will be considered typing (milliseconds).
1279 - name: browser.places.interactions.typing_timeout_ms
1280   type: RelaxedAtomicUint32
1281   value: 3000
1282   mirror: always
1284 # Maximum delay between scroll input events that will be considered a scrolling interaction (milliseconds).
1285 - name: browser.places.interactions.scrolling_timeout_ms
1286   type: RelaxedAtomicUint32
1287   value: 5000
1288   mirror: always
1290 # Force usage of in-memory (rather than file on disk) media cache for video streaming when private browsing
1291 - name: browser.privatebrowsing.forceMediaMemoryCache
1292   type: bool
1293   value: false
1294   mirror: always
1296 # Communicates the toolbar color to platform (for e.g., prefers-color-scheme).
1298 # Returns whether the toolbar is dark (0), light (1), or system (2).
1300 # Default to "light" on macOS / Windows, and "system" elsewhere. The theming
1301 # code sets it appropriately.
1302 - name: browser.theme.toolbar-theme
1303   type: RelaxedAtomicUint32
1304 #if defined(XP_WIN) || defined(XP_MACOSX)
1305   value: 1
1306 #else
1307   value: 2
1308 #endif
1309   mirror: always
1311 # Communicates the preferred content theme color to platform (for e.g.,
1312 # prefers-color-scheme).
1314 # dark (0), light (1), system (2), or toolbar (3).
1316 # Default to "toolbar", the theming code sets it appropriately.
1317 - name: browser.theme.content-theme
1318   type: RelaxedAtomicUint32
1319   value: 2
1320   mirror: always
1321   rust: true
1323 # Blocked plugin content
1324 - name: browser.safebrowsing.blockedURIs.enabled
1325   type: bool
1326   value: true
1327   mirror: always
1329 # Malware protection
1330 - name: browser.safebrowsing.malware.enabled
1331   type: bool
1332   value: true
1333   mirror: always
1335 # Password protection
1336 - name: browser.safebrowsing.passwords.enabled
1337   type: bool
1338   value: false
1339   mirror: always
1341 # Phishing protection
1342 - name: browser.safebrowsing.phishing.enabled
1343   type: bool
1344   value: true
1345   mirror: always
1347 # Maximum size for an array to store the safebrowsing prefixset.
1348 - name: browser.safebrowsing.prefixset_max_array_size
1349   type: RelaxedAtomicUint32
1350   value: 512*1024
1351   mirror: always
1353 # SessionStore prefs
1354 # Maximum number of bytes of DOMSessionStorage data we collect per origin.
1355 - name: browser.sessionstore.dom_storage_limit
1356   type: uint32_t
1357   value: 2048
1358   mirror: always
1360 # Maximum number of characters of form field data per field we collect.
1361 - name: browser.sessionstore.dom_form_limit
1362   type: uint32_t
1363   value: 1024*1024*2
1364   mirror: always
1366 # Maximum number of characters of form data we collect per origin.
1367 - name: browser.sessionstore.dom_form_max_limit
1368   type: uint32_t
1369   value: 1024*1024*50
1370   mirror: always
1372 # Minimal interval between two save operations in milliseconds (while the user is active).
1373 - name: browser.sessionstore.interval
1374   type: RelaxedAtomicUint32
1375   value: 15000
1376   mirror: always
1378 # Causes SessionStore to ignore non-final update messages from
1379 # browser tabs that were not caused by a flush from the parent.
1380 # This is a testing flag and should not be used by end-users.
1381 - name: browser.sessionstore.debug.no_auto_updates
1382   type: RelaxedAtomicBool
1383   value: false
1384   mirror: always
1386 # Whether we should draw the tabs on top of the titlebar.
1388 # no (0), yes (1), or default (2), which is true everywhere except Linux.
1389 - name: browser.tabs.inTitlebar
1390   type: int32_t
1391   value: 2
1392   mirror: always
1394 # If set, use DocumentChannel to directly initiate loads entirely
1395 # from parent-process BrowsingContexts
1396 - name: browser.tabs.documentchannel.parent-controlled
1397   type: bool
1398   value: false
1399   mirror: always
1401 # Testing-only pref which makes data: URIs be loaded in a "web" content process
1402 # instead of within a process based on the URI's loader.
1403 - name: browser.tabs.remote.dataUriInDefaultWebProcess
1404   type: bool
1405   value: false
1406   mirror: always
1408 # Testing-only pref to force system-triggered about:blank loads to not change
1409 # content processes. This is used for performance tests which load an
1410 # about:blank document between navigations for historical reasons to avoid
1411 # unnecessary process switches.
1412 - name: browser.tabs.remote.systemTriggeredAboutBlankAnywhere
1413   type: bool
1414   value: false
1415   mirror: always
1417 # Testing-only pref to cause PBrowser creation for a specific BrowsingContext to
1418 # fail, to test the errored codepath.
1419 - name: browser.tabs.remote.testOnly.failPBrowserCreation.enabled
1420   type: bool
1421   value: false
1422   mirror: always
1424 - name: browser.tabs.remote.desktopbehavior
1425   type: bool
1426   value: false
1427   mirror: always
1429 - name: browser.tabs.remote.force-paint
1430   type: bool
1431   value: true
1432   mirror: always
1434 # When this pref is enabled document loads with a mismatched
1435 # Cross-Origin-Embedder-Policy header will fail to load
1436 - name: browser.tabs.remote.useCrossOriginEmbedderPolicy
1437   type: RelaxedAtomicBool
1438   value: true
1439   mirror: always
1441 # When this pref is enabled top level loads with a mismatched
1442 # Cross-Origin-Opener-Policy header will be loaded in a separate process.
1443 - name: browser.tabs.remote.useCrossOriginOpenerPolicy
1444   type: RelaxedAtomicBool
1445   value: true
1446   mirror: always
1448 # When this pref is enabled then we use a separate content process for
1449 # top-level load of file:// URIs
1450 - name: browser.tabs.remote.separateFileUriProcess
1451   type: RelaxedAtomicBool
1452 #if !defined(ANDROID)
1453   value: true
1454 #else
1455   value: false
1456 #endif
1457   mirror: always
1459 # Pref to control whether we use a separate privileged content process
1460 # for certain mozilla webpages (which are listed in the pref
1461 # browser.tabs.remote.separatedMozillaDomains).
1462 - name: browser.tabs.remote.separatePrivilegedMozillaWebContentProcess
1463   type: bool
1464   value: false
1465   mirror: always
1467 # Whether or not process selection for subframes will prefer re-using an
1468 # existing content process over creating a new one. Enabling this pref should
1469 # reduce the number of processes allocated for non-first-party domains if
1470 # dom.ipc.processCount.webIsolated > 1.
1471 - name: browser.tabs.remote.subframesPreferUsed
1472   type: bool
1473   value: true
1474   mirror: always
1476 # When this pref is enabled, opaque response is only allowed to enter the
1477 # content process if it's a response for media (audio, image, video), CSS, or
1478 # JavaScript.
1479 - name: browser.opaqueResponseBlocking
1480   type: RelaxedAtomicBool
1481   value: @IS_NIGHTLY_BUILD@
1482   mirror: always
1484 # When true, zooming will be enabled on all sites, even ones that declare
1485 # user-scalable=no.
1486 - name: browser.ui.zoom.force-user-scalable
1487   type: RelaxedAtomicBool
1488   value: false
1489   mirror: always
1491 - name: browser.underline_anchors
1492   type: bool
1493   value: true
1494   mirror: always
1496 - name: browser.viewport.desktopWidth
1497   type: RelaxedAtomicInt32
1498   value: 980
1499   mirror: always
1501 - name: browser.visited_color
1502   type: String
1503   value: "#551A8B"
1504   mirror: never
1506 # If you change this, you probably also want to change
1507 # nsXPLookAndFeel::GenericDarkColor for MozNativevisitedhyperlinktext.
1508 - name: browser.visited_color.dark
1509   type: String
1510   value: "#FFADFF"
1511   mirror: never
1513 # When true, soft reloads (including location.reload())
1514 # will only froce validate the top level document, subresources will
1515 # be loaded normally as-if users normally navigated to the page.
1516 - name: browser.soft_reload.only_force_validate_top_level_document
1517   type: bool
1518   value: true
1519   mirror: always
1521 #---------------------------------------------------------------------------
1522 # Prefs starting with "canvas."
1523 #---------------------------------------------------------------------------
1525 # Limit for the canvas image cache. 0 means unlimited.
1526 - name: canvas.image.cache.limit
1527   type: int32_t
1528   value: 0
1529   mirror: always
1531 # Add support for canvas path objects
1532 - name: canvas.path.enabled
1533   type: RelaxedAtomicBool
1534   value: true
1535   mirror: always
1537 - name: canvas.capturestream.enabled
1538   type: bool
1539   value: true
1540   mirror: always
1542 # Is support for CanvasRenderingContext2D.filter enabled?
1543 - name: canvas.filters.enabled
1544   type: bool
1545   value: true
1546   mirror: always
1548 # Provide ability to turn on support for canvas focus rings.
1549 - name: canvas.focusring.enabled
1550   type: bool
1551   value: true
1552   mirror: always
1554 # Is support for CanvasRenderingContext2D's hitRegion APIs enabled?
1555 - name: canvas.hitregions.enabled
1556   type: bool
1557   value: false
1558   mirror: always
1560 # Is support for CanvasRenderingContext2D's createConicGradient API enabled?
1561 - name: canvas.createConicGradient.enabled
1562   type: RelaxedAtomicBool
1563   value: true
1564   mirror: always
1566 #---------------------------------------------------------------------------
1567 # Prefs starting with "channelclassifier."
1568 #---------------------------------------------------------------------------
1570 - name: channelclassifier.allowlist_example
1571   type: bool
1572   value: false
1573   mirror: always
1575 #---------------------------------------------------------------------------
1576 # Prefs starting with "clipboard."
1577 #---------------------------------------------------------------------------
1579 # Clipboard behavior.
1580 - name: clipboard.autocopy
1581   type: bool
1582 #if !defined(ANDROID) && !defined(XP_MACOSX) && defined(XP_UNIX)
1583   value: true
1584 #else
1585   value: false
1586 #endif
1587   mirror: always
1589 #ifdef XP_WIN
1590   # allow to copy clipboard data to Clipboard History/Cloud
1591   # (used on sensitive data in about:logins and Private Browsing)
1592 -   name: clipboard.copyPrivateDataToClipboardCloudOrHistory
1593     type: bool
1594     value: false
1595     mirror: always
1596 #endif
1598 #---------------------------------------------------------------------------
1599 # Prefs starting with "consoleservice."
1600 #---------------------------------------------------------------------------
1602 #if defined(ANDROID)
1603   # Disable sending console to logcat on release builds.
1604 -   name: consoleservice.logcat
1605     type: RelaxedAtomicBool
1606     value: @IS_NOT_RELEASE_OR_BETA@
1607     mirror: always
1608 #endif
1610 #---------------------------------------------------------------------------
1611 # Prefs starting with "content."
1612 #---------------------------------------------------------------------------
1614 - name: content.cors.disable
1615   type: bool
1616   value: false
1617   mirror: always
1619 # Back off timer notification after count.
1620 # -1 means never.
1621 - name: content.notify.backoffcount
1622   type: int32_t
1623   value: -1
1624   mirror: always
1626 # Notification interval in microseconds.
1627 # The notification interval has a dramatic effect on how long it takes to
1628 # initially display content for slow connections. The current value
1629 # provides good incremental display of content without causing an increase
1630 # in page load time. If this value is set below 1/10 of a second it starts
1631 # to impact page load performance.
1632 # See bugzilla bug 72138 for more info.
1633 - name: content.notify.interval
1634   type: int32_t
1635   value: 120000
1636   mirror: always
1638 # Do we notify based on time?
1639 - name: content.notify.ontimer
1640   type: bool
1641   value: true
1642   mirror: always
1644 # How many times to deflect in interactive mode.
1645 - name: content.sink.interactive_deflect_count
1646   type: int32_t
1647   value: 0
1648   mirror: always
1650 # How many times to deflect in perf mode.
1651 - name: content.sink.perf_deflect_count
1652   type: int32_t
1653   value: 200
1654   mirror: always
1656 # Parse mode for handling pending events.
1657 # 0 = don't check for pending events
1658 # 1 = don't deflect if there are pending events
1659 # 2 = bail if there are pending events
1660 - name: content.sink.pending_event_mode
1661   type: int32_t
1662 #ifdef XP_WIN
1663   value: 1
1664 #else
1665   value: 0
1666 #endif
1667   mirror: always
1669 # How often to probe for pending events. 1 = every token.
1670 - name: content.sink.event_probe_rate
1671   type: int32_t
1672   value: 1
1673   mirror: always
1675 # How long to stay off the event loop in interactive mode (microseconds).
1676 - name: content.sink.interactive_parse_time
1677   type: int32_t
1678   value: 3000
1679   mirror: always
1681 # How long to stay off the event loop in perf mode.
1682 - name: content.sink.perf_parse_time
1683   type: int32_t
1684   value: 360000
1685   mirror: always
1687 #  How long to be in interactive mode after an event.
1688 - name: content.sink.interactive_time
1689   type: uint32_t
1690   value: 750000
1691   mirror: always
1693 # How long to stay in perf mode after initial loading.
1694 - name: content.sink.initial_perf_time
1695   type: uint32_t
1696   value: 2000000
1697   mirror: always
1699 # Should we switch between perf-mode and interactive-mode?
1700 # 0 = Switch
1701 # 1 = Interactive mode
1702 # 2 = Perf mode
1703 - name: content.sink.enable_perf_mode
1704   type: int32_t
1705   value: 0
1706   mirror: always
1708 #---------------------------------------------------------------------------
1709 # Prefs starting with "converter."
1710 #---------------------------------------------------------------------------
1712 # Whether we include ruby annotation in the text despite whether it
1713 # is requested. This was true because we didn't explicitly strip out
1714 # annotations. Set false by default to provide a better behavior, but
1715 # we want to be able to pref-off it if user doesn't like it.
1716 - name: converter.html2txt.always_include_ruby
1717   type: bool
1718   value: false
1719   mirror: always
1721 #---------------------------------------------------------------------------
1722 # Prefs starting with "datareporting."
1723 #---------------------------------------------------------------------------
1725 - name: datareporting.healthreport.uploadEnabled
1726   type: RelaxedAtomicBool
1727   value: false
1728   mirror: always
1729   rust: true
1731 #---------------------------------------------------------------------------
1732 # Prefs starting with "device."
1733 #---------------------------------------------------------------------------
1735 # Is support for the device sensors API enabled?
1736 - name: device.sensors.enabled
1737   type: bool
1738   value: true
1739   mirror: always
1741 # KaiOS-only, see https://bugzilla.mozilla.org/show_bug.cgi?id=1699707#c10
1742 - name: device.sensors.ambientLight.enabled
1743   type: bool
1744   value: false
1745   mirror: always
1747 - name: device.sensors.motion.enabled
1748   type: bool
1749   value: true
1750   mirror: always
1752 - name: device.sensors.orientation.enabled
1753   type: bool
1754   value: true
1755   mirror: always
1757 # KaiOS-only, see https://bugzilla.mozilla.org/show_bug.cgi?id=1699707#c10
1758 - name: device.sensors.proximity.enabled
1759   type: bool
1760   value: false
1761   mirror: always
1763 - name: device.sensors.test.events
1764   type: bool
1765   value: false
1766   mirror: always
1768 #---------------------------------------------------------------------------
1769 # Prefs starting with "devtools."
1770 #---------------------------------------------------------------------------
1772 - name: devtools.console.stdout.chrome
1773   type: RelaxedAtomicBool
1774   value: @IS_NOT_MOZILLA_OFFICIAL@
1775   mirror: always
1777 - name: devtools.console.stdout.content
1778   type: RelaxedAtomicBool
1779   value: false
1780   mirror: always
1782 - name: devtools.toolbox.force-chrome-prefs
1783   type: RelaxedAtomicBool
1784   value: true
1785   mirror: always
1787 #---------------------------------------------------------------------------
1788 # Prefs starting with "docshell."
1789 #---------------------------------------------------------------------------
1791 # Used to indicate whether session history listeners should be notified
1792 # about content viewer eviction. Used only for testing.
1793 - name: docshell.shistory.testing.bfevict
1794   type: bool
1795   value: false
1796   mirror: always
1798 # If true, pages with an opener won't be bfcached.
1799 - name: docshell.shistory.bfcache.require_no_opener
1800   type: bool
1801   value: @IS_ANDROID@
1802   mirror: always
1804 # If true, page with beforeunload or unload event listeners can be bfcached.
1805 - name: docshell.shistory.bfcache.allow_unload_listeners
1806   type: bool
1807   value: @IS_ANDROID@
1808   mirror: always
1810 # If true, page with beforeunload event listeners can be bfcached.
1811 # This only works when sessionHistoryInParent is enabled.
1812 - name: docshell.shistory.bfcache.ship_allow_beforeunload_listeners
1813   type: bool
1814   value: @IS_NIGHTLY_BUILD@
1815   mirror: always
1817 #---------------------------------------------------------------------------
1818 # Prefs starting with "dom."
1819 #---------------------------------------------------------------------------
1821 # Whether window.mozPaintCount is exposed to the web.
1822 - name: dom.mozPaintCount.enabled
1823   type: bool
1824   value: false
1825   mirror: always
1827 # Allow cut/copy
1828 - name: dom.allow_cut_copy
1829   type: bool
1830   value: true
1831   mirror: always
1833 - name: dom.allow_XUL_XBL_for_file
1834   type: bool
1835   value: false
1836   mirror: always
1838 # Checks if offscreen animation throttling is enabled.
1839 - name: dom.animations.offscreen-throttling
1840   type: bool
1841   value: true
1842   mirror: always
1844 # Is support for automatically removing replaced filling animations enabled?
1845 - name: dom.animations-api.autoremove.enabled
1846   type: bool
1847   value: true
1848   mirror: always
1850 # Is support for composite operations from the Web Animations API enabled?
1851 - name: dom.animations-api.compositing.enabled
1852   type: bool
1853   value: true
1854   mirror: always
1856 # Is support for the core interfaces of Web Animations API enabled?
1857 - name: dom.animations-api.core.enabled
1858   type: bool
1859   value: true
1860   mirror: always
1862 # Is support for Document.getAnimations() and Element.getAnimations()
1863 # supported?
1864 - name: dom.animations-api.getAnimations.enabled
1865   type: bool
1866   value: true
1867   mirror: always
1869 # Is support for animations from the Web Animations API without 0%/100%
1870 # keyframes enabled?
1871 - name: dom.animations-api.implicit-keyframes.enabled
1872   type: bool
1873   value: true
1874   mirror: always
1876 # Is support for timelines from the Web Animations API enabled?
1877 - name: dom.animations-api.timelines.enabled
1878   type: bool
1879   value: true
1880   mirror: always
1882 # Synchronize transform animations with geometric animations on the
1883 # main thread.
1884 - name: dom.animations.mainthread-synchronization-with-geometric-animations
1885   type: bool
1886   value: @IS_NOT_NIGHTLY_BUILD@
1887   mirror: always
1889 # Is support for AudioWorklet enabled?
1890 - name: dom.audioworklet.enabled
1891   type: bool
1892   value: true
1893   mirror: always
1895 # Is support for Navigator.getBattery enabled?
1896 - name: dom.battery.enabled
1897   type: bool
1898   value: true
1899   mirror: always
1901 # Block multiple external protocol URLs in iframes per single event.
1902 - name: dom.block_external_protocol_in_iframes
1903   type: bool
1904   value: true
1905   mirror: always
1907 # Block sandboxed BrowsingContexts from navigating to external protocols.
1908 - name: dom.block_external_protocol_navigation_from_sandbox
1909   type: bool
1910   value: true
1911   mirror: always
1913 # Block Insecure downloads from Secure Origins
1914 - name: dom.block_download_insecure
1915   type: bool
1916   value: true
1917   mirror: always
1919 # Block all downloads in iframes with the sandboxed attribute
1920 - name: dom.block_download_in_sandboxed_iframes
1921   type: bool
1922   value: true
1923   mirror: always
1925 # Block multiple window.open() per single event.
1926 - name: dom.block_multiple_popups
1927   type: bool
1928   value: true
1929   mirror: always
1931 # The maximum number of popup that is allowed to be opened. Set to -1 for no
1932 # limit.
1933 - name: dom.popup_maximum
1934   type: int32_t
1935   value: 20
1936   mirror: always
1938 # Whether window.location.reload() and window.history.go(0) should be blocked
1939 # if called directly from a window resize event handler.
1941 # This used to be necessary long ago to prevent terrible UX when using stuff
1942 # like TypeAheadFind (bug 258917), but it also causes compat issues on mobile
1943 # (bug 1570566).
1945 # So for now disable it on Android and Desktop Nightly, to see if we have any
1946 # desktop regression before removing it completely. Note that this means that
1947 # non-nightly RDM behaves different than Android in this case.
1948 - name: dom.block_reload_from_resize_event_handler
1949   type: bool
1950 #if defined(MOZ_WIDGET_ANDROID) || defined(NIGHTLY_BUILD)
1951   value: false
1952 #else
1953   value: true
1954 #endif
1955   mirror: always
1957 # SW Cache API
1958 - name: dom.caches.enabled
1959   type: RelaxedAtomicBool
1960   value: true
1961   mirror: always
1963 - name: dom.caches.testing.enabled
1964   type: RelaxedAtomicBool
1965   value: false
1966   mirror: always
1968 # Disable capture attribute for input elements; only supported on GeckoView.
1969 - name: dom.capture.enabled
1970   type: bool
1971   value: false
1972   mirror: always
1974 # Allow control characters appear in composition string.
1975 # When this is false, control characters except
1976 # CHARACTER TABULATION (horizontal tab) are removed from
1977 # both composition string and data attribute of compositionupdate
1978 # and compositionend events.
1979 - name: dom.compositionevent.allow_control_characters
1980   type: bool
1981   value: false
1982   mirror: always
1984 - name: dom.crypto.randomUUID.enabled
1985   type: RelaxedAtomicBool
1986   value: true
1987   mirror: always
1989 # Is support for CSSPseudoElement enabled?
1990 - name: dom.css_pseudo_element.enabled
1991   type: bool
1992   value: false
1993   mirror: always
1995 # After how many seconds we allow external protocol URLs in iframe when not in
1996 # single events
1997 - name: dom.delay.block_external_protocol_in_iframes
1998   type: uint32_t
1999   value: 10   # in seconds
2000   mirror: always
2002 # Whether the above pref has any effect at all.
2003 - name: dom.delay.block_external_protocol_in_iframes.enabled
2004   type: bool
2005   value: @IS_NOT_NIGHTLY_BUILD@
2006   mirror: always
2008 # HTML <dialog> element
2009 - name: dom.dialog_element.enabled
2010   type: bool
2011   value: true
2012   mirror: always
2014 # Only propagate the open window click permission if the setTimeout() is equal
2015 # to or less than this value.
2016 - name: dom.disable_open_click_delay
2017   type: int32_t
2018   value: 1000
2019   mirror: always
2021 - name: dom.disable_open_during_load
2022   type: bool
2023   value: false
2024   mirror: always
2026 - name: dom.disable_beforeunload
2027   type: bool
2028   value: false
2029   mirror: always
2031 - name: dom.require_user_interaction_for_beforeunload
2032   type: bool
2033   value: true
2034   mirror: always
2036 # Enable/disable Gecko specific edit commands
2037 - name: dom.document.edit_command.contentReadOnly.enabled
2038   type: bool
2039   value: @IS_NOT_NIGHTLY_BUILD@
2040   mirror: always
2042 - name: dom.document.edit_command.decreasefontsize.enabled
2043   type: bool
2044   value: false
2045   mirror: always
2047 - name: dom.document.edit_command.gethtml.enabled
2048   type: bool
2049   value: false
2050   mirror: always
2052 - name: dom.document.edit_command.heading.enabled
2053   type: bool
2054   value: false
2055   mirror: always
2057 - name: dom.document.edit_command.increasefontsize.enabled
2058   type: bool
2059   value: false
2060   mirror: always
2062 - name: dom.document.edit_command.insertBrOnReturn.enabled
2063   type: bool
2064   value: @IS_NOT_NIGHTLY_BUILD@
2065   mirror: always
2067 - name: dom.document.edit_command.readonly.enabled
2068   type: bool
2069   value: false
2070   mirror: always
2072 # If set this to true, `Document.execCommand` may be performed nestedly.
2073 # Otherwise, nested calls just return false.
2074 - name: dom.document.exec_command.nested_calls_allowed
2075   type: bool
2076   value: false
2077   mirror: always
2079 - name: dom.enable_window_print
2080   type: bool
2081   value: @IS_NOT_ANDROID@
2082   mirror: always
2084 # Only intended for fuzzing purposes, this will break mozPrintCallback, etc.
2085 - name: dom.window_print.fuzzing.block_while_printing
2086   type: bool
2087   value: false
2088   mirror: always
2090 - name: dom.element.transform-getters.enabled
2091   type: bool
2092   value: false
2093   mirror: always
2095 - name: dom.mouse_capture.enabled
2096   type: bool
2097   value: true
2098   mirror: always
2100 # Is support for Performance.mozMemory enabled?
2101 - name: dom.enable_memory_stats
2102   type: bool
2103   value: false
2104   mirror: always
2106 # Enable Performance API
2107 # Whether nonzero values can be returned from performance.timing.*
2108 - name: dom.enable_performance
2109   type: RelaxedAtomicBool
2110   value: true
2111   mirror: always
2113 # Enable Performance Observer API
2114 - name: dom.enable_performance_observer
2115   type: RelaxedAtomicBool
2116   value: true
2117   mirror: always
2119 # Whether resource timing will be gathered and returned by performance.GetEntries*
2120 - name: dom.enable_resource_timing
2121   type: bool
2122   value: true
2123   mirror: always
2125 # Whether event timing will be gathered and returned by performance observer*
2126 - name: dom.enable_event_timing
2127   type: RelaxedAtomicBool
2128   value: true
2129   mirror: always
2131 # Whether performance.GetEntries* will contain an entry for the active document
2132 - name: dom.enable_performance_navigation_timing
2133   type: bool
2134   value: true
2135   mirror: always
2137 # Whether the scheduler interface will be exposed
2138 - name: dom.enable_web_task_scheduling
2139   type: RelaxedAtomicBool
2140   value: @IS_NIGHTLY_BUILD@
2141   mirror: always
2143 # If this is true, it's allowed to fire "cut", "copy" and "paste" events.
2144 # Additionally, "input" events may expose clipboard content when inputType
2145 # is "insertFromPaste" or something.
2146 - name: dom.event.clipboardevents.enabled
2147   type: bool
2148   value: true
2149   mirror: always
2151 # Whether touch event listeners are passive by default.
2152 - name: dom.event.default_to_passive_touch_listeners
2153   type: bool
2154   value: true
2155   mirror: always
2157 # Whether wheel listeners are passive by default.
2158 - name: dom.event.default_to_passive_wheel_listeners
2159   type: bool
2160   value: true
2161   mirror: always
2163 - name: dom.event.dragexit.enabled
2164   type: bool
2165   value: @IS_NOT_NIGHTLY_BUILD@
2166   mirror: always
2168 # Whether WheelEvent should return pixels instead of lines for
2169 # WheelEvent.deltaX/Y/Z, when deltaMode hasn't been checked.
2171 # Other browsers don't use line deltas and websites forget to check for it, see
2172 # bug 1392460.
2173 - name: dom.event.wheel-deltaMode-lines.disabled
2174   type: bool
2175   value: true
2176   mirror: always
2178 # Mostly for debugging. Whether we should do the same as
2179 # dom.event.wheel-deltaMode-lines.disabled, but unconditionally rather than
2180 # only when deltaMode hasn't been checked.
2181 - name: dom.event.wheel-deltaMode-lines.always-disabled
2182   type: bool
2183   value: false
2184   mirror: always
2186 # A blocklist (list of domains) for the
2187 # dom.event.wheel-deltaMode-lines.disabled behavior, in case potential
2188 # unforeseen problems with it arrive.
2189 - name: dom.event.wheel-deltaMode-lines.always-enabled
2190   type: String
2191   value: ""
2192   mirror: never
2194 #if defined(XP_MACOSX)
2195 # Whether to disable treating ctrl click as right click
2196 - name: dom.event.treat_ctrl_click_as_right_click.disabled
2197   type: bool
2198   value: @IS_NIGHTLY_BUILD@
2199   mirror: always
2200 #endif
2202 # Whether .offset{X,Y} for events targeted at SVG nodes returns bounds relative
2203 # to the outer SVG.
2204 - name: dom.events.offset-in-svg-relative-to-svg-root
2205   type: bool
2206   value: true
2207   mirror: always
2209 # Disable clipboard.read(), clipboard.write() and ClipboardItem by default
2210 - name: dom.events.asyncClipboard.clipboardItem
2211   type: bool
2212   value: false
2213   mirror: always
2215 # Should only be enabled in tests.
2216 # Access with Clipboard::IsTestingPrefEnabled().
2217 - name: dom.events.testing.asyncClipboard
2218   type: bool
2219   value: false
2220   mirror: always
2221   do_not_use_directly: true
2223 # This pref controls whether or not the `protected` dataTransfer state is
2224 # enabled. If the `protected` dataTransfer stae is disabled, then the
2225 # DataTransfer will be read-only whenever it should be protected, and will not
2226 # be disconnected after a drag event is completed.
2227 - name: dom.events.dataTransfer.protected.enabled
2228   type: bool
2229   value: false
2230   mirror: always
2232 # User interaction timer interval, in ms
2233 - name: dom.events.user_interaction_interval
2234   type: uint32_t
2235   value: 5000
2236   mirror: always
2238 # Whether to try to compress touchmove events on IPC layer.
2239 - name: dom.events.compress.touchmove
2240   type: bool
2241   value: true
2242   mirror: always
2244 # In addition to the above IPC layer compresison, allow touchmove
2245 # events to be further coalesced in the child side after they
2246 # are sent.
2247 - name: dom.events.coalesce.touchmove
2248   type: bool
2249   value: true
2250   mirror: always
2252 # Allow mousemove events to be coalesced in the child side after they are sent.
2253 - name: dom.events.coalesce.mousemove
2254   type: bool
2255   value: true
2256   mirror: always
2258 # Whether to expose test interfaces of various sorts
2259 - name: dom.expose_test_interfaces
2260   type: bool
2261   value: false
2262   mirror: always
2264 - name: dom.fetchObserver.enabled
2265   type: RelaxedAtomicBool
2266   value: false
2267   mirror: always
2269 # Allow the content process to create a File from a path. This is allowed just
2270 # on parent process, on 'file' Content process, or for testing.
2271 - name: dom.file.createInChild
2272   type: RelaxedAtomicBool
2273   value: false
2274   mirror: always
2276 # Support @autocomplete values for form autofill feature.
2277 - name: dom.forms.autocomplete.formautofill
2278   type: bool
2279   value: false
2280   mirror: always
2282 # Only trusted submit event could trigger form submission.
2283 - name: dom.forms.submit.trusted_event_only
2284   type: bool
2285   value: false
2286   mirror: always
2288 # This pref just controls whether we format the number with grouping separator
2289 # characters when the internal value is set or updated. It does not stop the
2290 # user from typing in a number and using grouping separators.
2291 - name: dom.forms.number.grouping
2292   type: bool
2293   value: false
2294   mirror: always
2296 # Whether the Gamepad API is enabled
2297 - name: dom.gamepad.enabled
2298   type: bool
2299   value: true
2300   mirror: always
2302 # Is Gamepad Extension API enabled?
2303 - name: dom.gamepad.extensions.enabled
2304   type: bool
2305   value: true
2306   mirror: always
2308 # Is LightIndicator API enabled in Gamepad Extension API?
2309 - name: dom.gamepad.extensions.lightindicator
2310   type: bool
2311   value: false
2312   mirror: always
2314 # Is MultiTouch API enabled in Gamepad Extension API?
2315 - name: dom.gamepad.extensions.multitouch
2316   type: bool
2317   value: false
2318   mirror: always
2320 # Is Gamepad vibrate haptic feedback function enabled?
2321 - name: dom.gamepad.haptic_feedback.enabled
2322   type: bool
2323   value: true
2324   mirror: always
2326 - name: dom.gamepad.non_standard_events.enabled
2327   type: bool
2328   value: @IS_NOT_RELEASE_OR_BETA@
2329   mirror: always
2331 - name: dom.gamepad.test.enabled
2332   type: RelaxedAtomicBool
2333   value: false
2334   mirror: always
2336 # W3C draft ImageCapture API
2337 - name: dom.imagecapture.enabled
2338   type: bool
2339   value: false
2340   mirror: always
2342 # <img loading="lazy">
2344 # See https://github.com/whatwg/html/pull/3752
2345 - name: dom.image-lazy-loading.enabled
2346   type: RelaxedAtomicBool
2347   value: true
2348   mirror: always
2350 # The root margin for image lazy loading, defined as four (value, percentage)
2351 # pairs.
2352 - name: dom.image-lazy-loading.root-margin.top
2353   type: float
2354 #if defined(EARLY_BETA_OR_EARLIER)
2355   value: 100 # 100%
2356 #else
2357   value: 300
2358 #endif
2359   mirror: always
2361 - name: dom.image-lazy-loading.root-margin.top.percentage
2362   type: bool
2363 #if defined(EARLY_BETA_OR_EARLIER)
2364   value: true
2365 #else
2366   value: false
2367 #endif
2368   mirror: always
2370 - name: dom.image-lazy-loading.root-margin.bottom
2371   type: float
2372 #if defined(EARLY_BETA_OR_EARLIER)
2373   value: 100 # 100%
2374 #else
2375   value: 300
2376 #endif
2377   mirror: always
2379 - name: dom.image-lazy-loading.root-margin.bottom.percentage
2380   type: bool
2381 #if defined(EARLY_BETA_OR_EARLIER)
2382   value: true
2383 #else
2384   value: false
2385 #endif
2386   mirror: always
2388 - name: dom.image-lazy-loading.root-margin.left
2389   type: float
2390 #if defined(EARLY_BETA_OR_EARLIER)
2391   value: 100 # 100%
2392 #else
2393   value: 300
2394 #endif
2395   mirror: always
2397 - name: dom.image-lazy-loading.root-margin.left.percentage
2398   type: bool
2399 #if defined(EARLY_BETA_OR_EARLIER)
2400   value: true
2401 #else
2402   value: false
2403 #endif
2404   mirror: always
2406 - name: dom.image-lazy-loading.root-margin.right
2407   type: float
2408 #if defined(EARLY_BETA_OR_EARLIER)
2409   value: 100 # 100%
2410 #else
2411   value: 300
2412 #endif
2413   mirror: always
2415 - name: dom.image-lazy-loading.root-margin.right.percentage
2416   type: bool
2417 #if defined(EARLY_BETA_OR_EARLIER)
2418   value: true
2419 #else
2420   value: false
2421 #endif
2422   mirror: always
2424 # Enable passing the "storage" option to indexedDB.open.
2425 - name: dom.indexedDB.storageOption.enabled
2426   type: RelaxedAtomicBool
2427   value: false
2428   mirror: always
2430 # Enable indexedDB in private browsing mode.
2431 - name: dom.indexedDB.privateBrowsing.enabled
2432   type: RelaxedAtomicBool
2433   value: false
2434   mirror: always
2436 - name: dom.input_events.beforeinput.enabled
2437   type: bool
2438   value: true
2439   mirror: always
2441 # Whether innerWidth / innerHeight return rounded or fractional sizes.
2443 # NOTE(emilio): Fractional sizes are not web-compatible, see the regressions
2444 # from bug 1676843, but we want to expose the fractional sizes (probably in
2445 # another API) one way or another, see [1], so we're keeping the code for the
2446 # time being.
2448 # [1]: https://github.com/w3c/csswg-drafts/issues/5260
2449 - name: dom.innerSize.rounded
2450   type: bool
2451   value: true
2452   mirror: always
2454 # Whether we conform to Input Events Level 1 or Input Events Level 2.
2455 # true:  conforming to Level 1
2456 # false: conforming to Level 2
2457 - name: dom.input_events.conform_to_level_1
2458   type: bool
2459   value: true
2460   mirror: always
2462 # Whether we allow BrowsingContextGroup to suspend input events
2463 - name: dom.input_events.canSuspendInBCG.enabled
2464   type: bool
2465   value: false
2466   mirror: always
2468 # Whether we perform a more strict alignment with vsync for input events
2469 - name: dom.input_events.strict_input_vsync_alignment
2470   type: bool
2471   value: true
2472   mirror: always
2474 # Enable not moving the cursor to end when a text input or textarea has .value
2475 # set to the value it already has.  By default, enabled.
2476 - name: dom.input.skip_cursor_move_for_same_value_set
2477   type: bool
2478   value: true
2479   mirror: always
2481 - name: dom.ipc.cancel_content_js_when_navigating
2482   type: bool
2483   value: true
2484   mirror: always
2486 # How often to check for CPOW timeouts (ms). CPOWs are only timed
2487 # out by the hang monitor.
2488 - name: dom.ipc.cpow.timeout
2489   type: uint32_t
2490   value: 500
2491   mirror: always
2493 #ifdef MOZ_ENABLE_FORKSERVER
2494 - name: dom.ipc.forkserver.enable
2495   type: bool
2496   value: false
2497   mirror: once
2498 #endif
2500 #ifdef MOZ_WIDGET_GTK
2502 # Avoid the use of GTK in content processes if possible, by running
2503 # them in headless mode, to conserve resources (e.g., connections to
2504 # the X server).  See the usage in `ContentParent.cpp` for the full
2505 # definition of "if possible".
2507 # This does not affect sandbox policies; content processes may still
2508 # dynamically connect to the display server for, e.g., WebGL.
2509 - name: dom.ipc.avoid-gtk
2510   type: bool
2511   value: true
2512   mirror: always
2513 #endif
2515 # Whether or not to collect a paired minidump when force-killing a
2516 # content process.
2517 - name: dom.ipc.tabs.createKillHardCrashReports
2518   type: bool
2519   value: @IS_NOT_RELEASE_OR_BETA@
2520   mirror: once
2522 # Allow Flash async drawing mode in 64-bit release builds.
2523 - name: dom.ipc.plugins.asyncdrawing.enabled
2524   type: RelaxedAtomicBool
2525   value: true
2526   mirror: always
2528 # How long we wait before unloading an idle plugin process.
2529 - name: dom.ipc.plugins.unloadTimeoutSecs
2530   type: RelaxedAtomicUint32
2531   value: 30
2532   mirror: always
2534 - name: dom.ipc.plugins.allow_dxgi_surface
2535   type: bool
2536   value: true
2537   mirror: always
2539 # Enable e10s hang monitoring (slow script checking and plugin hang detection).
2540 - name: dom.ipc.processHangMonitor
2541   type: bool
2542   value: true
2543   mirror: once
2545 # Whether we report such process hangs
2546 - name: dom.ipc.reportProcessHangs
2547   type: RelaxedAtomicBool
2548 # Don't report hangs in DEBUG builds. They're too slow and often a
2549 # debugger is attached.
2550 #ifdef DEBUG
2551   value: false
2552 #else
2553   value: true
2554 #endif
2555   mirror: always
2557 - name: dom.ipc.tabs.disabled
2558   type: bool
2559   value: false
2560   mirror: always
2562 # Process launch delay (in milliseconds).
2563 - name: dom.ipc.processPrelaunch.delayMs
2564   type: uint32_t
2565 # This number is fairly arbitrary ... the intention is to put off
2566 # launching another app process until the last one has finished
2567 # loading its content, to reduce CPU/memory/IO contention.
2568   value: 1000
2569   mirror: always
2571 - name: dom.ipc.processPrelaunch.startupDelayMs
2572   type: uint32_t
2573 # delay starting content processes for a short time after browser start
2574 # to provide time for the UI to come up
2575   value: 1000
2576   mirror: always
2578 # Process preallocation cache
2579 # Only used in fission; in e10s we use 1 always
2580 - name: dom.ipc.processPrelaunch.fission.number
2581   type: uint32_t
2582   value: 3
2583   mirror: always
2585 # Limit preallocated processes below this memory size (in MB)
2586 - name: dom.ipc.processPrelaunch.lowmem_mb
2587   type: uint32_t
2588   value: 4096
2589   mirror: always
2591 - name: dom.ipc.processPriorityManager.enabled
2592   type: bool
2593   value: false
2594   mirror: always
2596 - name: dom.ipc.processPriorityManager.testMode
2597   type: bool
2598   value: false
2599   mirror: always
2601 - name: dom.ipc.processPriorityManager.backgroundPerceivableGracePeriodMS
2602   type: uint32_t
2603 #if defined(MOZ_WIDGET_ANDROID) && defined(NIGHTLY_BUILD)
2604   value: 3000
2605 #else
2606   value: 0
2607 #endif
2608   mirror: always
2610 - name: dom.ipc.processPriorityManager.backgroundGracePeriodMS
2611   type: uint32_t
2612 #if defined(MOZ_WIDGET_ANDROID) && defined(NIGHTLY_BUILD)
2613   value: 3000
2614 #else
2615   value: 0
2616 #endif
2617   mirror: always
2619 # Is support for HTMLElement.autocapitalize enabled?
2620 - name: dom.forms.autocapitalize
2621   type: bool
2622   value: @IS_NIGHTLY_BUILD@
2623   mirror: always
2625 # Support for input type=month, type=week. By default, disabled.
2626 - name: dom.forms.datetime.others
2627   type: bool
2628   value: @IS_ANDROID@
2629   mirror: always
2631 # Is support for HTMLElement.enterKeyHint enabled?
2632 - name: dom.forms.enterkeyhint
2633   type: bool
2634   value: true
2635   mirror: always
2637 # Is support for HTMLElement.inputMode enabled?
2638 - name: dom.forms.inputmode
2639   type: bool
2640   value: true
2641   mirror: always
2643 # Is support for HTMLInputElement.showPicker enabled?
2644 - name: dom.input.showPicker
2645   type: bool
2646   value: true
2647   mirror: always
2649 # Whether to allow or disallow web apps to cancel `beforeinput` events caused
2650 # by MozEditableElement#setUserInput() which is used by autocomplete, autofill
2651 # and password manager.
2652 - name: dom.input_event.allow_to_cancel_set_user_input
2653   type: bool
2654   value: false
2655   mirror: always
2657 # How long a content process can take before closing its IPC channel
2658 # after shutdown is initiated.  If the process exceeds the timeout,
2659 # we fear the worst and kill it.
2660 - name: dom.ipc.tabs.shutdownTimeoutSecs
2661   type: RelaxedAtomicUint32
2662 #if !defined(DEBUG) && !defined(MOZ_ASAN) && !defined(MOZ_VALGRIND) && !defined(MOZ_TSAN)
2663   value: 20
2664 #else
2665   value: 0
2666 #endif
2667   mirror: always
2669 # Whether a native event loop should be used in the content process.
2670 - name: dom.ipc.useNativeEventProcessing.content
2671   type: RelaxedAtomicBool
2672 #if defined(XP_WIN) || defined(XP_MACOSX)
2673   value: false
2674 #else
2675   value: true
2676 #endif
2677   mirror: always
2679 # If this is true, TextEventDispatcher dispatches keydown and keyup events
2680 # even during composition (keypress events are never fired during composition
2681 # even if this is true).
2682 - name: dom.keyboardevent.dispatch_during_composition
2683   type: bool
2684   value: true
2685   mirror: always
2687 # Enable/disable KeyboardEvent.initKeyEvent function
2688 - name: dom.keyboardevent.init_key_event.enabled
2689   type: bool
2690   value: false
2691   mirror: always
2693 # Enable/disable KeyboardEvent.initKeyEvent function in addons even if it's
2694 # disabled.
2695 - name: dom.keyboardevent.init_key_event.enabled_in_addons
2696   type: bool
2697   value: true
2698   mirror: always
2700 # If this is true, keypress events for non-printable keys are dispatched only
2701 # for event listeners of the system event group in web content.
2702 - name: dom.keyboardevent.keypress.dispatch_non_printable_keys_only_system_group_in_content
2703   type: bool
2704   value: true
2705   mirror: always
2707 # If this is true, "keypress" event's keyCode value and charCode value always
2708 # become same if the event is not created/initialized by JS.
2709 - name: dom.keyboardevent.keypress.set_keycode_and_charcode_to_same_value
2710   type: bool
2711   value: true
2712   mirror: always
2714 # Whether "W3C Web Manifest" processing is enabled
2715 - name: dom.manifest.enabled
2716   type: bool
2717   value: true
2718   mirror: always
2720 # Enable mapped array buffer by default.
2721 - name: dom.mapped_arraybuffer.enabled
2722   type: bool
2723   value: true
2724   mirror: always
2726 # This pref is used to enable/disable the `document.autoplayPolicy` API which
2727 # returns a enum string which presents current autoplay policy and can change
2728 # overtime based on user session activity.
2729 - name: dom.media.autoplay.autoplay-policy-api
2730   type: bool
2731   value: false
2732   mirror: always
2734 # Media Session API
2735 - name: dom.media.mediasession.enabled
2736   type: bool
2737   value: true
2738   mirror: always
2740 # Number of seconds of very quiet or silent audio before considering the audio
2741 # inaudible.
2742 - name: dom.media.silence_duration_for_audibility
2743   type: AtomicFloat
2744   value: 2.0f
2745   mirror: always
2747 - name: dom.menuitem.enabled
2748   type: bool
2749   value: false
2750   mirror: always
2752 # Enable meta-viewport support in remote APZ-enabled frames.
2753 - name: dom.meta-viewport.enabled
2754   type: RelaxedAtomicBool
2755   value: false
2756   mirror: always
2758 # Timeout clamp in ms for timeouts we clamp.
2759 - name: dom.min_timeout_value
2760   type: RelaxedAtomicInt32
2761   value: 4
2762   mirror: always
2764 # Timeout clamp in ms for background windows.
2765 - name: dom.min_background_timeout_value
2766   type: int32_t
2767   value: 1000
2768   mirror: always
2770 # Timeout clamp in ms for background windows when throttling isn't enabled.
2771 - name: dom.min_background_timeout_value_without_budget_throttling
2772   type: int32_t
2773   value: 1000
2774   mirror: always
2776 # Are missing-property use counters for certain DOM attributes enabled?
2777 - name: dom.missing_prop_counters.enabled
2778   type: bool
2779   value: true
2780   mirror: always
2782 # Is support for module scripts (<script type="module">) enabled for content?
2783 - name: dom.moduleScripts.enabled
2784   type: bool
2785   value: true
2786   mirror: always
2788 # Is support for import maps (<script type="importmap">) enabled for content?
2789 - name: dom.importMaps.enabled
2790   type: bool
2791   value: false
2792   mirror: always
2794 # Whether we disable triggering mutation events for changes to style
2795 # attribute via CSSOM.
2796 # NOTE: This preference is used in unit tests. If it is removed or its default
2797 # value changes, please update test_sharedMap_static_prefs.js accordingly.
2798 - name: dom.mutation-events.cssom.disabled
2799   type: bool
2800   value: true
2801   mirror: always
2803 # Limit of location change caused by content scripts in a time span per
2804 # BrowsingContext. This includes calls to History and Location APIs.
2805 - name: dom.navigation.locationChangeRateLimit.count
2806   type: uint32_t
2807   value: 200
2808   mirror: always
2810 # Time span in seconds for location change rate limit.
2811 - name: dom.navigation.locationChangeRateLimit.timespan
2812   type: uint32_t
2813   value: 10
2814   mirror: always
2816 # Network Information API
2817 # This feature is not available on Firefox desktop. It exposes too much
2818 # user information. Let's be consistent and disable it on Android.
2819 # But let's keep it around in case it becomes necessary for webcompat
2820 # reasons
2821 # https://bugzilla.mozilla.org/show_bug.cgi?id=1637922
2822 - name: dom.netinfo.enabled
2823   type: RelaxedAtomicBool
2824   value: false
2825   mirror: always
2827 # Whether we should open noopener links in a new process.
2828 - name: dom.noopener.newprocess.enabled
2829   type: bool
2830   value: true
2831   mirror: always
2833 # Whether we shouldn't show an error page for unknown protocols (and should
2834 # show a console warning instead).
2835 - name: dom.no_unknown_protocol_error.enabled
2836   type: bool
2837   value: true
2838   mirror: always
2840 # Whether origin trials are enabled.
2841 - name: dom.origin-trials.enabled
2842   type: bool
2843   value: false
2844   mirror: always
2846 # Whether we use the test key to verify tokens.
2847 - name: dom.origin-trials.test-key.enabled
2848   type: bool
2849   value: false
2850   mirror: always
2852 # Origin trial state for "TestTrial".
2853 # 0: normal, 1: always-enabled, 2: always-disabled
2854 - name: dom.origin-trials.test-trial.state
2855   type: RelaxedAtomicInt32
2856   value: 0
2857   mirror: always
2859 # Origin trial state for OffscreenCanvas.
2860 # 0: normal, 1: always-enabled, 2: always-disabled
2861 - name: dom.origin-trials.offscreen-canvas.state
2862   type: RelaxedAtomicInt32
2863   value: 0
2864   mirror: always
2866 # Is support for Window.paintWorklet enabled?
2867 - name: dom.paintWorklet.enabled
2868   type: bool
2869   value: false
2870   mirror: always
2872 # Enable/disable the PaymentRequest API
2873 - name: dom.payments.request.enabled
2874   type: bool
2875   value: false
2876   mirror: always
2878 # Whether a user gesture is required to call PaymentRequest.prototype.show().
2879 - name: dom.payments.request.user_interaction_required
2880   type: bool
2881   value: true
2882   mirror: always
2884 # Time in milliseconds for PaymentResponse to wait for
2885 # the Web page to call complete().
2886 - name: dom.payments.response.timeout
2887   type: uint32_t
2888   value: 5000
2889   mirror: always
2891 # Enable printing performance marks/measures to log
2892 - name: dom.performance.enable_user_timing_logging
2893   type: RelaxedAtomicBool
2894   value: false
2895   mirror: always
2897 - name: dom.performance.children_results_ipc_timeout
2898   type: uint32_t
2899   value: 1000
2900   mirror: always
2902 # Enable notification of performance timing
2903 - name: dom.performance.enable_notify_performance_timing
2904   type: bool
2905   value: false
2906   mirror: always
2908 # Is support for PerformanceTiming.timeToContentfulPaint enabled?
2909 - name: dom.performance.time_to_contentful_paint.enabled
2910   type: bool
2911   value: false
2912   mirror: always
2914 # Is support for PerformanceTiming.timeToDOMContentFlushed enabled?
2915 - name: dom.performance.time_to_dom_content_flushed.enabled
2916   type: bool
2917   value: false
2918   mirror: always
2920 # Is support for PerformanceTiming.timeToFirstInteractive enabled?
2921 - name: dom.performance.time_to_first_interactive.enabled
2922   type: bool
2923   value: false
2924   mirror: always
2926 # Is support for PerformanceTiming.timeToNonBlankPaint enabled?
2927 - name: dom.performance.time_to_non_blank_paint.enabled
2928   type: bool
2929   value: false
2930   mirror: always
2932 # Is support for Permissions.revoke enabled?
2933 - name: dom.permissions.revoke.enable
2934   type: bool
2935   value: false
2936   mirror: always
2938 # Is support for Element.requestPointerLock enabled?
2939 # This is added for accessibility purpose. When user has no way to exit
2940 # pointer lock (e.g. no keyboard available), they can use this pref to
2941 # disable the Pointer Lock API altogether.
2942 - name: dom.pointer-lock.enabled
2943   type: bool
2944   value: true
2945   mirror: always
2947 # re-SAB: Whether to allow postMessage of a SharedArrayBuffer if various
2948 # preconditions related to COOP and COEP are met
2949 - name: dom.postMessage.sharedArrayBuffer.withCOOP_COEP
2950   type: bool
2951   value: true
2952   mirror: once
2954 # Overridden in all.js on RELEASE_OR_BETA in order to add the locked attribute.
2955 - name: dom.postMessage.sharedArrayBuffer.bypassCOOP_COEP.insecure.enabled
2956   type: RelaxedAtomicBool
2957   value: false
2958   mirror: always
2960 # This currently only affects XHTML. For XUL the cache is always allowed.
2961 - name: dom.prototype_document_cache.enabled
2962   type: bool
2963   value: true
2964   mirror: always
2966 # Push
2967 - name: dom.push.enabled
2968   type: RelaxedAtomicBool
2969   value: false
2970   mirror: always
2972 # This enables the SVGPathSeg APIs
2973 - name: dom.svg.pathSeg.enabled
2974   type: bool
2975   value: false
2976   mirror: always
2978 # Preference that is primarily used for testing of problematic file paths.
2979 # It can also be used for switching between different storage directories, but
2980 # such feature is not officially supported.
2981 - name: dom.quotaManager.storageName
2982   type: String
2983   value: "storage"
2984   mirror: never
2986 # An upper limit for the "age" of an origin. Any origin which is older than the
2987 # threshold is considered as unaccessed. That doesn't necessarily mean that
2988 # such origins will be immediatelly archived. They will be archived only when
2989 # dom.quotaManager.checkQuotaInfoLoadTime is true and loading of quota info
2990 # takes a long time (dom.quotaManager.longQuotaInfoLoadTimeThresholdMs is used
2991 # to decide what is a long quota info load time).
2992 - name: dom.quotaManager.unaccessedForLongTimeThresholdSec
2993   type: RelaxedAtomicUint32
2994   value: 33696000 # 13 months
2995   mirror: always
2997 # Should we try to load origin information from the cache?
2998 # See bug 1563023 for more details.
2999 - name: dom.quotaManager.loadQuotaFromCache
3000   type: RelaxedAtomicBool
3001   value: true
3002   mirror: always
3004 # Should we check build ID as part of the cache validation?
3005 # When enabled, the cache is invalidated on any upgrade (or downgrade),
3006 # ensuring that changes in how quota usage is calculated can't cause
3007 # inconsistencies at the cost of a slower initialization. Currently, this
3008 # should only be set to false in tests using a packaged profile that inherently
3009 # includes a build id different from the building running the tests. In the
3010 # future this may be set to false if we are confident that we have sufficiently
3011 # thorough schema versioning.
3012 - name: dom.quotaManager.caching.checkBuildId
3013   type: RelaxedAtomicBool
3014   value: true
3015   mirror: always
3017 # Should we check quota info load time and eventually archive some unaccessed
3018 # origins if loading of quota info takes a long time ?
3019 - name: dom.quotaManager.checkQuotaInfoLoadTime
3020   type: RelaxedAtomicBool
3021   value: true
3022   mirror: always
3024 # An upper limit for quota info load time, anything which takes longer than the
3025 # threshold is considered as long quota info load time.
3026 - name: dom.quotaManager.longQuotaInfoLoadTimeThresholdMs
3027   type: RelaxedAtomicUint32
3028   value: 21000 # 21 seconds
3029   mirror: always
3031 # Preference that users can set to override temporary storage smart limit
3032 # calculation.
3033 - name: dom.quotaManager.temporaryStorage.fixedLimit
3034   type: RelaxedAtomicInt32
3035   value: -1
3036   mirror: always
3038 # A pref that is used to enable testing features.
3039 - name: dom.quotaManager.testing
3040   type: SequentiallyConsistentAtomicBool
3041   value: false
3042   mirror: always
3044 #ifdef XP_WIN
3045   # Preference that is used to set nsILocalFileWin::useDOSDevicePathSyntax
3046   # attribute for all local file instances created by QuotaManager and its
3047   # clients. The value of this preference is cached so changing the preference
3048   # during runtime has no effect.
3049   # See bug 1626846 for setting this to false by default.
3050 -   name: dom.quotaManager.useDOSDevicePathSyntax
3051     type: RelaxedAtomicBool
3052     value: true
3053     mirror: always
3054     do_not_use_directly: true
3056   # Preference that is used to enable the hack for overrriding xFullPathname in
3057   # TelemetryVFS.
3058 -   name: dom.quotaManager.overrideXFullPathname
3059     type: RelaxedAtomicBool
3060     value: true
3061     mirror: always
3062 #endif
3064 # How many times we should retry directory removal or renaming if access was
3065 # denied?
3066 - name: dom.quotaManager.directoryRemovalOrRenaming.maxRetries
3067   type: RelaxedAtomicUint32
3068 #ifdef XP_WIN
3069   value: 10
3070 #else
3071   value: 0
3072 #endif
3073   mirror: always
3075 # How long we should wait between retries (in milliseconds)?
3076 - name: dom.quotaManager.directoryRemovalOrRenaming.delayMs
3077   type: RelaxedAtomicUint32
3078   value: 200
3079   mirror: always
3081 # Reporting API.
3082 - name: dom.reporting.enabled
3083   type: RelaxedAtomicBool
3084   value: @IS_NIGHTLY_BUILD@
3085   mirror: always
3087 - name: dom.reporting.testing.enabled
3088   type: RelaxedAtomicBool
3089   value: false
3090   mirror: always
3092 - name: dom.reporting.featurePolicy.enabled
3093   type: RelaxedAtomicBool
3094   value: @IS_NIGHTLY_BUILD@
3095   mirror: always
3097 - name: dom.reporting.crash.enabled
3098   type: RelaxedAtomicBool
3099   value: false
3100   mirror: always
3102 - name: dom.reporting.header.enabled
3103   type: RelaxedAtomicBool
3104   value: false
3105   mirror: always
3107 # In seconds. The timeout to remove not-active report-to endpoints.
3108 - name: dom.reporting.cleanup.timeout
3109   type: uint32_t
3110   value: 3600
3111   mirror: always
3113 # Any X seconds the reports are dispatched to endpoints.
3114 - name: dom.reporting.delivering.timeout
3115   type: uint32_t
3116   value: 5
3117   mirror: always
3119 # How many times the delivering of a report should be tried.
3120 - name: dom.reporting.delivering.maxFailures
3121   type: uint32_t
3122   value: 3
3123   mirror: always
3125 # How many reports should be stored in the report queue before being delivered.
3126 - name: dom.reporting.delivering.maxReports
3127   type: uint32_t
3128   value: 100
3129   mirror: always
3131 # Enable requestIdleCallback API
3132 - name: dom.requestIdleCallback.enabled
3133   type: bool
3134   value: true
3135   mirror: always
3137 # Enable Screen Orientation lock
3138 - name: dom.screenorientation.allow-lock
3139   type: bool
3140   value: false
3141   mirror: always
3143 # Whether to enable the JavaScript start-up cache. This causes one of the first
3144 # execution to record the bytecode of the JavaScript function used, and save it
3145 # in the existing cache entry. On the following loads of the same script, the
3146 # bytecode would be loaded from the cache instead of being generated once more.
3147 - name: dom.script_loader.bytecode_cache.enabled
3148   type: bool
3149   value: true
3150   mirror: always
3152 # Ignore the heuristics of the bytecode cache, and always record on the first
3153 # visit. (used for testing purposes).
3155 # Choose one strategy to use to decide when the bytecode should be encoded and
3156 # saved. The following strategies are available right now:
3157 #   * -2 : (reader mode) The bytecode cache would be read, but it would never
3158 #          be saved.
3159 #   * -1 : (eager mode) The bytecode would be saved as soon as the script is
3160 #          seen for the first time, independently of the size or last access
3161 #          time.
3162 #   *  0 : (default) The bytecode would be saved in order to minimize the
3163 #          page-load time.
3165 # Other values might lead to experimental strategies. For more details, have a
3166 # look at: ScriptLoader::ShouldCacheBytecode function.
3167 - name: dom.script_loader.bytecode_cache.strategy
3168   type: int32_t
3169   value: 0
3170   mirror: always
3172 # Select which parse/delazification strategy should be used while parsing
3173 # scripts off-main-thread. (see CompileOptions.h, DelazificationOption enum)
3175 #   0: On-demand only. Delazification will be triggered only on the main thread
3176 #      before the execution of the function.
3178 #   1: Depth-first. Delazify all functions off-thread in the order of appearance
3179 #      in the source.
3181 # 255: Parse everything eagerly, from the first parse. All functions are parsed
3182 #      at the same time as the top-level of a file.
3183 - name: dom.script_loader.delazification.strategy
3184   type: uint32_t
3185   value: 255
3186   mirror: always
3188 # Maximum total size after which the delazification strategy, specified by
3189 # `dom.script_loader.delazification.strategy`, is no longer applied, and the
3190 # on-demand strategy is used by default.
3192 # -1 disable the threshold, and delazification strategy is applied to all
3193 # scripts.
3195 # Default value is 10MB for utf8 scripts.
3196 - name: dom.script_loader.delazification.max_size
3197   type: int32_t
3198   value: 10485760
3199   mirror: always
3201 # Minimum memory, in GB, required to enable delazification strategy, specified
3202 # by `dom.script_loader.delazification.strategy`. Otherwise, the on-demand
3203 # delazification strategy is used.
3204 - name: dom.script_loader.delazification.min_mem
3205   type: int32_t
3206   value: 2
3207   mirror: always
3209 # Is support for decoding external (non-inline) classic or module DOM scripts
3210 # (i.e. anything but workers) as UTF-8, then directly compiling without
3211 # inflating to UTF-16, enabled?
3212 - name: dom.script_loader.external_scripts.utf8_parsing.enabled
3213   type: bool
3214   value: true
3215   mirror: always
3217 # Enable  speculative off main thread parsing of external scripts as
3218 # soon as they are fetched.
3219 - name: dom.script_loader.external_scripts.speculative_omt_parse.enabled
3220   type: bool
3221   value: true
3222   mirror: always
3224 # Speculatively compile non parser inserted scripts
3225 - name: dom.script_loader.external_scripts.speculate_non_parser_inserted.enabled
3226   type: bool
3227   value: false
3228   mirror: always
3230 # Speculatively compile async scripts
3231 - name: dom.script_loader.external_scripts.speculate_async.enabled
3232   type: bool
3233   value: false
3234   mirror: always
3236 # Speculatively compile link preload scripts
3237 - name: dom.script_loader.external_scripts.speculate_link_preload.enabled
3238   type: bool
3239   value: false
3240   mirror: always
3242 - name: dom.securecontext.allowlist_onions
3243   type: bool
3244   value: false
3245   mirror: always
3247 # This pref enables Sec-Fetch-* logic and causes corresponding
3248 # request headers to be set.
3249 - name: dom.security.secFetch.enabled
3250   type: RelaxedAtomicBool
3251   value: true
3252   mirror: always
3254 # This pref enables the featurePolicy header support.
3255 - name: dom.security.featurePolicy.header.enabled
3256   type: bool
3257   value: false
3258   mirror: always
3260 - name: dom.security.featurePolicy.experimental.enabled
3261   type: bool
3262   value: false
3263   mirror: always
3265 # Expose the 'featurePolicy' attribute in document and HTMLIFrameElement
3266 - name: dom.security.featurePolicy.webidl.enabled
3267   type: bool
3268   value: false
3269   mirror: always
3271 # Perform IPC based Principal vetting in ContentParent
3272 - name: dom.security.enforceIPCBasedPrincipalVetting
3273   type: RelaxedAtomicBool
3274   value: true
3275   mirror: always
3277 # For testing purposes only: Flipping this pref to true allows
3278 # to skip the allowlist for about: pages and do not ship with a
3279 # CSP and NS_ASSERT right away.
3280 - name: dom.security.skip_about_page_csp_allowlist_and_assert
3281   type: RelaxedAtomicBool
3282   value: false
3283   mirror: always
3285 # For testing purposes only: Flipping this pref to true allows
3286 # to skip the assertion that every about page ships with a CSP.
3287 - name: dom.security.skip_about_page_has_csp_assert
3288   type: RelaxedAtomicBool
3289   value: false
3290   mirror: always
3292 # For testing purposes only: Flipping this pref to true allows
3293 # to skip the assertion that HTML fragments (e.g. innerHTML) can
3294 # not be used within chrome code or about: pages.
3295 - name: dom.security.skip_html_fragment_assertion
3296   type: RelaxedAtomicBool
3297   value: false
3298   mirror: always
3300 # For testing purposes only; Flipping this pref to true allows
3301 # to skip the assertion that remote scripts can not be loaded
3302 # in system privileged contexts.
3303 - name: dom.security.skip_remote_script_assertion_in_system_priv_context
3304   type: RelaxedAtomicBool
3305   value: false
3306   mirror: always
3308 # If true, all content requests will get upgraded to HTTPS://
3309 # (some Firefox functionality requests, like OCSP will not be affected)
3310 - name: dom.security.https_only_mode
3311   type: RelaxedAtomicBool
3312   value: false
3313   mirror: always
3315 # If true, all content requests in Private Browsing Mode will get
3316 # upgraded to HTTPS://. (If dom.security.https_only_mode is set
3317 # to true then this pref has no effect)
3318 - name: dom.security.https_only_mode_pbm
3319   type: RelaxedAtomicBool
3320   value: false
3321   mirror: always
3323 # If true, sends http background request for top-level sites to
3324 # counter long timeouts.
3325 - name: dom.security.https_only_mode_send_http_background_request
3326   type: RelaxedAtomicBool
3327   value: true
3328   mirror: always
3330 # Time limit, in milliseconds, before sending the http background
3331 # request for HTTPS-Only and HTTPS-First
3332 - name: dom.security.https_only_fire_http_request_background_timer_ms
3333   type: RelaxedAtomicUint32
3334   value: 3000
3335   mirror: always
3337 # If true, tries to break upgrade downgrade cycles where https-only tries
3338 # to upgrad ethe connection, but the website tries to downgrade again.
3339 - name: dom.security.https_only_mode_break_upgrade_downgrade_endless_loop
3340   type: RelaxedAtomicBool
3341   value: true
3342   mirror: always
3344 # If true, when checking if it's upgrade downgrade cycles, the URI path will be
3345 # also checked.
3346 - name: dom.security.https_only_check_path_upgrade_downgrade_endless_loop
3347   type: RelaxedAtomicBool
3348   value: true
3349   mirror: always
3351 # If true and HTTPS-only mode is enabled, requests
3352 # to local IP addresses are also upgraded
3353 - name: dom.security.https_only_mode.upgrade_local
3354   type: RelaxedAtomicBool
3355   value: false
3356   mirror: always
3358 # If true and HTTPS-only mode is enabled, requests
3359 # to .onion hosts are also upgraded
3360 - name: dom.security.https_only_mode.upgrade_onion
3361   type: RelaxedAtomicBool
3362   value: false
3363   mirror: always
3365 # WARNING: Don't ever update that pref manually! It is only used
3366 # for telemetry purposes and allows to reason about retention of
3367 # the pref dom.security.https_only_mode from above.
3368 - name: dom.security.https_only_mode_ever_enabled
3369   type: RelaxedAtomicBool
3370   value: false
3371   mirror: always
3373 # WARNING: Don't ever update that pref manually! It is only used
3374 # for telemetry purposes and allows to reason about retention of
3375 # the pref dom.security.https_only_mode_pbm from above.
3376 - name: dom.security.https_only_mode_ever_enabled_pbm
3377   type: RelaxedAtomicBool
3378   value: false
3379   mirror: always
3381 # If true checks for secure www connections when https fails
3382 # and gives the user suggestions on the error page
3383 - name: dom.security.https_only_mode_error_page_user_suggestions
3384   type: RelaxedAtomicBool
3385   value: false
3386   mirror: always
3388 # If true, top-level request will get upgraded to HTTPS and
3389 # downgraded again if the request failed.
3390 - name: dom.security.https_first
3391   type: RelaxedAtomicBool
3392   value: false
3393   mirror: always
3395 # If true, top-level requests in Private Browsing Mode will get
3396 # upgraded to HTTPS. (If dom.security.https_first
3397 # is set to true then this pref has no effect)
3398 - name: dom.security.https_first_pbm
3399   type: RelaxedAtomicBool
3400   value: true
3401   mirror: always
3403 - name: dom.security.unexpected_system_load_telemetry_enabled
3404   type: bool
3405   value: true
3406   mirror: always
3408 # pref controls `Sanitizer` API being exposed
3409 - name: dom.security.sanitizer.enabled
3410   type: bool
3411   value: false
3412   mirror: always
3414 # Whether or not selection events on text controls are enabled.
3415 - name: dom.select_events.textcontrols.selectionchange.enabled
3416   type: bool
3417   value: true
3418   mirror: always
3420 - name: dom.select_events.textcontrols.selectstart.enabled
3421   type: bool
3422   value: @IS_NIGHTLY_BUILD@
3423   mirror: always
3425 - name: dom.separate_event_queue_for_post_message.enabled
3426   type: bool
3427   value: true
3428   mirror: always
3430 - name: dom.arena_allocator.enabled
3431   type: bool
3432   value: true
3433   mirror: once
3435 - name: dom.serviceWorkers.enabled
3436   type: RelaxedAtomicBool
3437   value: false
3438   mirror: always
3440 - name: dom.serviceWorkers.navigationPreload.enabled
3441   type: RelaxedAtomicBool
3442   value: true
3443   mirror: always
3445 # Mitigates ServiceWorker navigation faults by bypassing the ServiceWorker on
3446 # navigation faults.  This is more extensive than just resetting interception
3447 # because we also mark the page as uncontrolled so that subresources will not
3448 # go to the ServiceWorker either.
3449 - name: dom.serviceWorkers.mitigations.bypass_on_fault
3450   type: bool
3451   value: true
3452   mirror: always
3454 # Additional ServiceWorker navigation mitigation control to unregister the
3455 # ServiceWorker after multiple faults are encountered. The mitigation is
3456 # disabled when this is set to zero, otherwise this is the number of faults that
3457 # need to occur for a specific ServiceWorker before it will be unregistered.
3458 - name: dom.serviceWorkers.mitigations.navigation_fault_threshold
3459   type: uint32_t
3460   value: 3
3461   mirror: always
3463 # This is the group usage head room for service workers.
3464 # The quota usage mitigation algorithm uses this preference to determine if the
3465 # origin or also group data should be cleared or not.
3466 # The default value is 400 MiB.
3467 - name: dom.serviceWorkers.mitigations.group_usage_headroom_kb
3468   type: uint32_t
3469   value: 400 * 1024
3470   mirror: always
3472 - name: dom.serviceWorkers.testing.enabled
3473   type: RelaxedAtomicBool
3474   value: false
3475   mirror: always
3477 # Whether ServiceWorkerManager should persist the service worker
3478 # registered by temporary installed extension (only meant to be used
3479 # for testing purpose, to make it easier to test some particular scenario
3480 # with a temporary installed addon, which doesn't need to be signed to be
3481 # installed on release channel builds).
3482 - name: dom.serviceWorkers.testing.persistTemporarilyInstalledAddons
3483   type: RelaxedAtomicBool
3484   value: false
3485   mirror: always
3487 - name: dom.workers.requestAnimationFrame
3488   type: RelaxedAtomicBool
3489   value: true
3490   mirror: always
3492 - name: dom.workers.serialized-sab-access
3493   type: RelaxedAtomicBool
3494   value: false
3495   mirror: always
3497 # Whether automatic storage access granting heuristics should be turned on.
3498 - name: dom.storage_access.auto_grants
3499   type: bool
3500   value: true
3501   mirror: always
3503 - name: dom.storage_access.auto_grants.delayed
3504   type: bool
3505   value: true
3506   mirror: always
3508 # Storage-access API.
3509 - name: dom.storage_access.enabled
3510   type: bool
3511   value: false
3512   mirror: always
3514 # The maximum number of origins that a given third-party tracker is allowed
3515 # to have concurrent access to before the user is presented with a storage
3516 # access prompt.  Only effective when the auto_grants pref is turned on.
3517 - name: dom.storage_access.max_concurrent_auto_grants
3518   type: int32_t
3519   value: 5
3520   mirror: always
3522 # Enable Storage API for all platforms except Android.
3523 - name: dom.storageManager.enabled
3524   type: RelaxedAtomicBool
3525   value: @IS_NOT_ANDROID@
3526   mirror: always
3528 # Whether the File System API is enabled
3529 - name: dom.fs.enabled
3530   type: RelaxedAtomicBool
3531   value: false
3532   mirror: always
3534 # LocalStorage data limit as determined by summing up the lengths of all string
3535 # keys and values. This is consistent with the legacy implementation and other
3536 # browser engines. This value should really only ever change in unit testing
3537 # where being able to lower it makes it easier for us to test certain edge
3538 # cases. Measured in KiBs.
3539 - name: dom.storage.default_quota
3540   type: RelaxedAtomicUint32
3541   # Only allow relatively small amounts of data since performance of the
3542   # synchronous IO is very bad. We are enforcing simple per-origin quota only.
3543   value: 5 * 1024
3544   mirror: always
3546 # Per-site quota for legacy LocalStorage implementation.
3547 - name: dom.storage.default_site_quota
3548   type: RelaxedAtomicUint32
3549   value: 25 * 1024
3550   mirror: always
3552 # Whether or not the unsupported legacy implemenation should be enabled. Please
3553 # don't advertise this pref as a way for disabling LSNG. This pref is intended
3554 # for internal testing only and will be removed in near future. Accidental
3555 # disabling of LSNG can lead to a data loss in a combination with disabled
3556 # shadow writes. Disabling of shadow writes is the initial step towards
3557 # removing legacy implementation and will be done soon.
3558 - name: dom.storage.enable_unsupported_legacy_implementation
3559   type: RelaxedAtomicBool
3560   value: false
3561   mirror: always
3562   do_not_use_directly: true
3564 # The amount of snapshot peak usage which is attempted to be pre-incremented
3565 # during snapshot creation.
3566 - name: dom.storage.snapshot_peak_usage.initial_preincrement
3567   type: RelaxedAtomicUint32
3568   value: 16384
3569   mirror: always
3571 # The amount of snapshot peak usage which is attempted to be pre-incremented
3572 # during snapshot creation if the LocalStorage usage was already close to the
3573 # limit (a fallback for dom.storage.snapshot_peak_usage.initial_preincrement).
3574 - name: dom.storage.snapshot_peak_usage.reduced_initial_preincrement
3575   type: RelaxedAtomicUint32
3576   value: 4096
3577   mirror: always
3579 # The amount of snapshot peak usage which is attempted to be pre-incremented
3580 # beyond the specific values which are subsequently requested after snapshot
3581 # creation.
3582 - name: dom.storage.snapshot_peak_usage.gradual_preincrement
3583   type: RelaxedAtomicUint32
3584   value: 4096
3585   mirror: always
3587 # The amount of snapshot peak usage which is attempted to be pre-incremented
3588 # beyond the specific values which are subsequently requested after snapshot
3589 # creation if the LocalStorage total usage was already close to the limit
3590 # (a fallback for dom.storage.snapshot_peak_usage.gradual_preincrement).
3591 - name: dom.storage.snapshot_peak_usage.reduced_gradual_preincrement
3592   type: RelaxedAtomicUint32
3593   value: 1024
3594   mirror: always
3596 # How long between a snapshot becomes idle and when we actually finish the
3597 # snapshot. This preference is only used when "dom.storage.snapshot_reusing"
3598 # is true.
3599 - name: dom.storage.snapshot_idle_timeout_ms
3600   type: uint32_t
3601   value: 5000
3602   mirror: always
3604 # Is support for Storage test APIs enabled?
3605 - name: dom.storage.testing
3606   type: bool
3607   value: false
3608   mirror: always
3610 # DOM Streams Prefs
3612 ## Exposure Prefs: To ensure the DOM Streams don't expose more
3613 # than existing JS Streams implementation, we want to hide some
3614 # interfaces from the global until later.
3615 - name: dom.streams.readable_stream_default_controller.enabled
3616   type: RelaxedAtomicBool
3617   value: true
3618   mirror: always
3620 - name: dom.streams.readable_stream_default_reader.enabled
3621   type: RelaxedAtomicBool
3622   value: true
3623   mirror: always
3625 - name: dom.streams.byte_streams.enabled
3626   type: RelaxedAtomicBool
3627   value: true
3628   mirror: always
3630 - name: dom.streams.writable_streams.enabled
3631   type: RelaxedAtomicBool
3632   value: true
3633   mirror: always
3635 - name: dom.streams.transform_streams.enabled
3636   type: RelaxedAtomicBool
3637   value: @IS_NIGHTLY_BUILD@
3638   mirror: always
3640 - name: dom.streams.pipeTo.enabled
3641   type: RelaxedAtomicBool
3642   value: true
3643   mirror: always
3645 # For area and anchor elements with target=_blank and no rel set to
3646 # opener/noopener.
3647 - name: dom.targetBlankNoOpener.enabled
3648   type: bool
3649   value: true
3650   mirror: always
3652 # Is support for Selection.GetRangesForInterval enabled?
3653 - name: dom.testing.selection.GetRangesForInterval
3654   type: bool
3655   value: false
3656   mirror: always
3658 - name: dom.testing.structuredclonetester.enabled
3659   type: RelaxedAtomicBool
3660   value: false
3661   mirror: always
3663 - name: dom.testing.sync-content-blocking-notifications
3664   type: bool
3665   value: false
3666   mirror: always
3668 # To enable TestUtils interface on WPT
3669 - name: dom.testing.testutils.enabled
3670   type: RelaxedAtomicBool
3671   value: false
3672   mirror: always
3674 - name: dom.textMetrics.actualBoundingBox.enabled
3675   type: RelaxedAtomicBool
3676   value: true
3677   mirror: always
3679 - name: dom.textMetrics.baselines.enabled
3680   type: RelaxedAtomicBool
3681   value: false
3682   mirror: always
3684 - name: dom.textMetrics.emHeight.enabled
3685   type: RelaxedAtomicBool
3686   value: false
3687   mirror: always
3689 - name: dom.textMetrics.fontBoundingBox.enabled
3690   type: RelaxedAtomicBool
3691   value: false
3692   mirror: always
3694 # Time (in ms) that it takes to regenerate 1ms.
3695 - name: dom.timeout.background_budget_regeneration_rate
3696   type: int32_t
3697   value: 100
3698   mirror: always
3700 # Time (in ms) that it takes to regenerate 1ms.
3701 - name: dom.timeout.foreground_budget_regeneration_rate
3702   type: int32_t
3703   value: 1
3704   mirror: always
3706 # Maximum value (in ms) for the background budget. Only valid for
3707 # values greater than 0.
3708 - name: dom.timeout.background_throttling_max_budget
3709   type: int32_t
3710   value: 50
3711   mirror: always
3713 # Maximum value (in ms) for the foreground budget. Only valid for
3714 # values greater than 0.
3715 - name: dom.timeout.foreground_throttling_max_budget
3716   type: int32_t
3717   value: -1
3718   mirror: always
3720 # The maximum amount a timeout can be delayed by budget throttling.
3721 - name: dom.timeout.budget_throttling_max_delay
3722   type: int32_t
3723   value: 15000
3724   mirror: always
3726 # Turn on budget throttling by default.
3727 - name: dom.timeout.enable_budget_timer_throttling
3728   type: bool
3729   value: true
3730   mirror: always
3732 # Should we defer timeouts and intervals while loading a page.  Released
3733 # on Idle or when the page is loaded.
3734 - name: dom.timeout.defer_during_load
3735   type: bool
3736   value: true
3737   mirror: always
3739 # Maximum amount of time in milliseconds consecutive setTimeout()/setInterval()
3740 # callback are allowed to run before yielding the event loop.
3741 - name: dom.timeout.max_consecutive_callbacks_ms
3742   type: uint32_t
3743   value: 4
3744   mirror: always
3746 # Maximum deferral time for setTimeout/Interval in milliseconds
3747 - name: dom.timeout.max_idle_defer_ms
3748   type: uint32_t
3749   value: 10*1000
3750   mirror: always
3752 # Delay in ms from document load until we start throttling background timeouts.
3753 - name: dom.timeout.throttling_delay
3754   type: int32_t
3755   value: 30000
3756   mirror: always
3758 # UDPSocket API
3759 - name: dom.udpsocket.enabled
3760   type: bool
3761   value: false
3762   mirror: always
3764 # Time limit, in milliseconds, for user gesture transient activation.
3765 - name: dom.user_activation.transient.timeout
3766   type: uint32_t
3767   value: 5000
3768   mirror: always
3770 # Whether to shim a Components object on untrusted windows.
3771 - name: dom.use_components_shim
3772   type: bool
3773   value: @IS_NOT_NIGHTLY_BUILD@
3774   mirror: always
3776 - name: dom.vibrator.enabled
3777   type: bool
3778   value: true
3779   mirror: always
3781 - name: dom.vibrator.max_vibrate_ms
3782   type: RelaxedAtomicUint32
3783   value: 10000
3784   mirror: always
3786 - name: dom.vibrator.max_vibrate_list_len
3787   type: RelaxedAtomicUint32
3788   value: 128
3789   mirror: always
3791 # Is support for Window.visualViewport enabled?
3792 - name: dom.visualviewport.enabled
3793   type: bool
3794   value: true
3795   mirror: always
3797 # Is support for WebVR APIs enabled?
3798 # Disabled everywhere, but not removed.
3799 - name: dom.vr.enabled
3800   type: RelaxedAtomicBool
3801   value: false
3802   mirror: always
3804 # Should VR sessions always be reported as supported, without first
3805 # checking for VR runtimes?  This will prevent permission prompts
3806 # from being suppressed on machines without VR runtimes and cause
3807 # navigator.xr.isSessionSupported to always report that immersive-vr
3808 # is supported.
3809 - name: dom.vr.always_support_vr
3810   type: RelaxedAtomicBool
3811   value: false
3812   mirror: always
3814 # Should AR sessions always be reported as supported, without first
3815 # checking for AR runtimes?  This will prevent permission prompts
3816 # from being suppressed on machines without AR runtimes and cause
3817 # navigator.xr.isSessionSupported to always report that immersive-ar
3818 # is supported.
3819 - name: dom.vr.always_support_ar
3820   type: RelaxedAtomicBool
3821   value: false
3822   mirror: always
3824 # It is often desirable to automatically start vr presentation when
3825 # a user puts on the VR headset.  This is done by emitting the
3826 # Window.vrdisplayactivate event when the headset's sensors detect it
3827 # being worn.  This can result in WebVR content taking over the headset
3828 # when the user is using it outside the browser or inadvertent start of
3829 # presentation due to the high sensitivity of the proximity sensor in some
3830 # headsets, so it is off by default.
3831 - name: dom.vr.autoactivate.enabled
3832   type: RelaxedAtomicBool
3833   value: false
3834   mirror: always
3836 # Minimum number of milliseconds that the browser will wait before
3837 # attempting to poll again for connected VR controllers.  The browser
3838 # will not attempt to poll for VR controllers until it needs to use them.
3839 - name: dom.vr.controller.enumerate.interval
3840   type: RelaxedAtomicInt32
3841   value: 1000
3842   mirror: always
3844 # The threshold value of trigger inputs for VR controllers.
3845 - name: dom.vr.controller_trigger_threshold
3846   type: AtomicFloat
3847   value: 0.1f
3848   mirror: always
3850 # Minimum number of milliseconds that the browser will wait before
3851 # attempting to poll again for connected VR displays.  The browser
3852 # will not attempt to poll for VR displays until it needs to use
3853 # them, such as when detecting a WebVR site.
3854 - name: dom.vr.display.enumerate.interval
3855   type: RelaxedAtomicInt32
3856   value: 5000
3857   mirror: always
3859 # The number of milliseconds since last frame start before triggering a new
3860 # frame. When content is failing to submit frames on time or the lower level
3861 # VR platform APIs are rejecting frames, it determines the rate at which RAF
3862 # callbacks will be called.
3863 - name: dom.vr.display.rafMaxDuration
3864   type: RelaxedAtomicUint32
3865   value: 50
3866   mirror: always
3868 # Minimum number of milliseconds the browser will wait before attempting
3869 # to re-start the VR service after an enumeration returned no devices.
3870 - name: dom.vr.external.notdetected.timeout
3871   type: RelaxedAtomicInt32
3872   value: 60000
3873   mirror: always
3875 # Minimum number of milliseconds the browser will wait before attempting
3876 # to re-start the VR service after a VR API (eg, OpenVR or Oculus)
3877 # requests that we shutdown and unload its libraries.
3878 # To ensure that we don't interfere with VR runtime software auto-updates,
3879 # we will not attempt to re-load the service until this timeout has elapsed.
3880 - name: dom.vr.external.quit.timeout
3881   type: RelaxedAtomicInt32
3882   value: 10000
3883   mirror: always
3885 # Minimum number of milliseconds that the VR session will be kept
3886 # alive after the browser and content no longer are using the
3887 # hardware.  If a VR multitasking environment, this should be set
3888 # very low or set to 0.
3889 - name: dom.vr.inactive.timeout
3890   type: RelaxedAtomicInt32
3891   value: 5000
3892   mirror: always
3894 # Maximum number of milliseconds the browser will wait for content to call
3895 # VRDisplay.requestPresent after emitting vrdisplayactivate during VR
3896 # link traversal.  This prevents a long running event handler for
3897 # vrdisplayactivate from later calling VRDisplay.requestPresent, which would
3898 # result in a non-responsive browser in the VR headset.
3899 - name: dom.vr.navigation.timeout
3900   type: RelaxedAtomicInt32
3901   value: 5000
3902   mirror: always
3904 # Oculus device
3905 - name: dom.vr.oculus.enabled
3906   type: RelaxedAtomicBool
3907 #if defined(HAVE_64BIT_BUILD) && !defined(ANDROID)
3908   # We are only enabling WebVR by default on 64-bit builds (Bug 1384459).
3909   value: true
3910 #else
3911   # On Android, this pref is irrelevant.
3912   value: false
3913 #endif
3914   mirror: always
3916 # When enabled, Oculus sessions may be created with the ovrInit_Invisible
3917 # flag if a page is using tracking but not presenting.  When a page
3918 # begins presenting VR frames, the session will be re-initialized without
3919 # the flag.  This eliminates the "Firefox not responding" warnings in
3920 # the headset, but might not be compatible with all versions of the Oculus
3921 # runtime.
3922 - name: dom.vr.oculus.invisible.enabled
3923   type: RelaxedAtomicBool
3924   value: true
3925   mirror: always
3927 # Minimum number of milliseconds after content has stopped VR presentation
3928 # before the Oculus session is re-initialized to an invisible / tracking
3929 # only mode.  If this value is too high, users will need to wait longer
3930 # after stopping WebVR presentation before automatically returning to the
3931 # Oculus home interface.  (They can immediately return to the Oculus Home
3932 # interface through the Oculus HUD without waiting this duration)
3933 # If this value is too low, the Oculus Home interface may be visible
3934 # momentarily during VR link navigation.
3935 - name: dom.vr.oculus.present.timeout
3936   type: RelaxedAtomicInt32
3937   value: 500
3938   mirror: always
3940 # OpenVR device
3941 - name: dom.vr.openvr.enabled
3942   type: RelaxedAtomicBool
3943 #if !defined(HAVE_64BIT_BUILD) && !defined(ANDROID)
3944   # We are only enabling WebVR by default on 64-bit builds (Bug 1384459).
3945   value: false
3946 #elif defined(XP_WIN) || defined(XP_MACOSX)
3947   # We enable OpenVR by default for Windows and macOS.
3948   value: true
3949 #else
3950   # See Bug 1310663 (Linux).  On Android, this pref is irrelevant.
3951   value: false
3952 #endif
3953   mirror: always
3955 # OSVR device
3956 - name: dom.vr.osvr.enabled
3957   type: RelaxedAtomicBool
3958   value: false
3959   mirror: always
3961 # Pose prediction reduces latency effects by returning future predicted HMD
3962 # poses to callers of the WebVR API.  This currently only has an effect for
3963 # Oculus Rift on SDK 0.8 or greater.
3964 - name: dom.vr.poseprediction.enabled
3965   type: RelaxedAtomicBool
3966   value: true
3967   mirror: always
3969 # Enable a separate process for VR module.
3970 - name: dom.vr.process.enabled
3971   type: bool
3972 #if defined(XP_WIN)
3973   value: true
3974 #else
3975   value: false
3976 #endif
3977   mirror: once
3979 - name: dom.vr.process.startup_timeout_ms
3980   type: int32_t
3981   value: 5000
3982   mirror: once
3984 # Puppet device, used for simulating VR hardware within tests and dev tools.
3985 - name: dom.vr.puppet.enabled
3986   type: RelaxedAtomicBool
3987   value: false
3988   mirror: always
3990 # Starting VR presentation is only allowed within a user gesture or event such
3991 # as VRDisplayActivate triggered by the system. dom.vr.require-gesture allows
3992 # this requirement to be disabled for special cases such as during automated
3993 # tests or in a headless kiosk system.
3994 - name: dom.vr.require-gesture
3995   type: RelaxedAtomicBool
3996   value: true
3997   mirror: always
3999 # Is support for WebXR APIs enabled?
4000 - name: dom.vr.webxr.enabled
4001   type: RelaxedAtomicBool
4002   value: false
4003   mirror: always
4005 # Points in the native bounds geometry are required to be quantized
4006 # sufficiently to prevent fingerprinting. The WebXR spec suggests
4007 # quantizing to the nearest 5 centimeters.
4008 - name: dom.vr.webxr.quantization
4009   type: AtomicFloat
4010   value: 0.05f
4011   mirror: always
4013 #ifdef XP_WIN
4014   # Control firing WidgetMouseEvent by handling Windows pointer messages or
4015   # mouse messages.
4016 -   name: dom.w3c_pointer_events.dispatch_by_pointer_messages
4017     type: bool
4018     value: true
4019     mirror: always
4021 -   name: dom.w3c_pointer_events.scroll_by_pen.enabled
4022     type: bool
4023     value: true
4024     mirror: always
4025 #endif
4027 # If the value is >= 0, it will be used for max touch points in child processes.
4028 - name: dom.maxtouchpoints.testing.value
4029   type: int32_t
4030   value: -1
4031   mirror: always
4033 # Maximum value of navigator.hardwareConcurrency.
4034 - name: dom.maxHardwareConcurrency
4035   type: RelaxedAtomicUint32
4036 #ifdef NIGHTLY_BUILD
4037   value: 128
4038 #else
4039   value: 16
4040 #endif
4041   mirror: always
4043 # W3C pointer events draft.
4044 - name: dom.w3c_pointer_events.implicit_capture
4045   type: bool
4046   value: true
4047   mirror: always
4049 # In case Touch API is enabled, this pref controls whether to support
4050 # ontouch* event handlers, document.createTouch, document.createTouchList and
4051 # document.createEvent("TouchEvent").
4052 - name: dom.w3c_touch_events.legacy_apis.enabled
4053   type: bool
4054   value: @IS_ANDROID@
4055   mirror: always
4057 # W3C touch events
4058 # 0 - disabled, 1 - enabled, 2 - autodetect
4059 # Autodetection is currently only supported on Windows and GTK3 (and assumed on
4060 # Android).
4061 - name: dom.w3c_touch_events.enabled
4062   type: int32_t
4063 #if defined(XP_MACOSX)
4064   value: 0
4065 #else
4066   value: 2
4067 #endif
4068   mirror: always
4070 # Is support for the Web Audio API enabled?
4071 - name: dom.webaudio.enabled
4072   type: bool
4073   value: true
4074   mirror: always
4076 - name: dom.webkitBlink.dirPicker.enabled
4077   type: RelaxedAtomicBool
4078   value: @IS_NOT_ANDROID@
4079   mirror: always
4081 # Is the 'delegatesFocus' attribute for shadow dom
4082 - name: dom.shadowdom.delegatesFocus.enabled
4083   type: bool
4084   value: true
4085   mirror: always
4087 # Is the 'assign' API for slot element enabled?
4088 - name: dom.shadowdom.slot.assign.enabled
4089   type: bool
4090   value: true
4091   mirror: always
4093 # NOTE: This preference is used in unit tests. If it is removed or its default
4094 # value changes, please update test_sharedMap_static_prefs.js accordingly.
4095 - name: dom.webcomponents.shadowdom.report_usage
4096   type: bool
4097   value: false
4098   mirror: always
4100 # Is support for custom element disabledFeatures enabled?
4101 - name: dom.webcomponents.disabledFeatures.enabled
4102   type: bool
4103   value: true
4104   mirror: always
4106 # Is support for custom element elementInternals enabled?
4107 - name: dom.webcomponents.elementInternals.enabled
4108   type: bool
4109   value: true
4110   mirror: always
4112 # Is support for form-associated custom element enabled?
4113 - name: dom.webcomponents.formAssociatedCustomElement.enabled
4114   type: bool
4115   value: true
4116   mirror: always
4118 # Is support for the Web GPU API enabled?
4119 - name: dom.webgpu.enabled
4120   type: RelaxedAtomicBool
4121   value: false
4122   mirror: always
4124 # Is support for HTMLInputElement.webkitEntries enabled?
4125 - name: dom.webkitBlink.filesystem.enabled
4126   type: bool
4127   value: @IS_NOT_ANDROID@
4128   mirror: always
4130 # Whether the Web Locks API is enabled
4131 - name: dom.weblocks.enabled
4132   type: RelaxedAtomicBool
4133   value: true
4134   mirror: always
4136 # Whether the WebMIDI API is enabled
4137 - name: dom.webmidi.enabled
4138   type: bool
4139 #if !defined(MOZ_WIDGET_ANDROID) && defined(EARLY_BETA_OR_EARLIER)
4140   value: true
4141 #else
4142   value: false
4143 #endif
4144   mirror: always
4146 # midi permission is addon-gated
4147 - name: dom.webmidi.gated
4148   type: bool
4149   value: true
4150   mirror: always
4152 - name: dom.webnotifications.allowinsecure
4153   type: RelaxedAtomicBool
4154   value: false
4155   mirror: always
4157 - name: dom.webnotifications.allowcrossoriginiframe
4158   type: RelaxedAtomicBool
4159   value: false
4160   mirror: always
4162 - name: dom.webnotifications.enabled
4163   type: RelaxedAtomicBool
4164   value: true
4165   mirror: always
4167 - name: dom.webnotifications.requireuserinteraction
4168   type: RelaxedAtomicBool
4169   value: true
4170   mirror: always
4172 - name: dom.webnotifications.requireinteraction.enabled
4173   type: RelaxedAtomicBool
4174   value: @IS_NIGHTLY_BUILD@
4175   mirror: always
4177 - name: dom.webnotifications.silent.enabled
4178   type: RelaxedAtomicBool
4179 #if defined(MOZ_WIDGET_ANDROID)
4180   value: @IS_NIGHTLY_BUILD@
4181 #else
4182   value: false
4183 #endif
4184   mirror: always
4186 - name: dom.webnotifications.vibrate.enabled
4187   type: RelaxedAtomicBool
4188 #if defined(MOZ_WIDGET_ANDROID)
4189   value: @IS_NIGHTLY_BUILD@
4190 #else
4191   value: false
4192 #endif
4193   mirror: always
4195 - name: dom.webnotifications.serviceworker.enabled
4196   type: RelaxedAtomicBool
4197   value: true
4198   mirror: always
4200 # Is support for Window.event enabled?
4201 - name: dom.window.event.enabled
4202   type: bool
4203   value: true
4204   mirror: always
4206 - name: dom.window.history.async
4207   type: bool
4208   value: true
4209   mirror: always
4211 # Enable the "noreferrer" feature argument for window.open()
4212 - name: dom.window.open.noreferrer.enabled
4213   type: bool
4214   value: true
4215   mirror: always
4217 - name: dom.window.content.untrusted.enabled
4218   type: bool
4219   value: false
4220   mirror: always
4222 - name: dom.window.clientinformation.enabled
4223   type: bool
4224   value: true
4225   mirror: always
4227 - name: dom.window.sidebar.enabled
4228   type: bool
4229   value: false
4230   mirror: always
4232 - name: dom.worker.canceling.timeoutMilliseconds
4233   type: RelaxedAtomicUint32
4234   value: 30000    # 30 seconds
4235   mirror: always
4237 # Is support for compiling DOM worker scripts directly from UTF-8 (without ever
4238 # inflating to UTF-16) enabled?
4239 - name: dom.worker.script_loader.utf8_parsing.enabled
4240   type: RelaxedAtomicBool
4241   value: true
4242   mirror: always
4244 - name: dom.worker.use_medium_high_event_queue
4245   type: RelaxedAtomicBool
4246   value: true
4247   mirror: always
4249 # Enables the dispatching of console log events from worker threads to the
4250 # main-thread.
4251 - name: dom.worker.console.dispatch_events_to_main_thread
4252   type: RelaxedAtomicBool
4253   value: true
4254   mirror: always
4256 - name: dom.workers.testing.enabled
4257   type: RelaxedAtomicBool
4258   value: false
4259   mirror: always
4261 - name: dom.worklet.enabled
4262   type: bool
4263   value: true
4264   mirror: always
4266 # Enable content type normalization of XHR uploads via MIME Sniffing standard
4267 - name: dom.xhr.standard_content_type_normalization
4268   type: RelaxedAtomicBool
4269   value: true
4270   mirror: always
4272 # When this pref is set, parent documents may consider child iframes have
4273 # loaded while they are still loading.
4274 - name: dom.cross_origin_iframes_loaded_in_background
4275   type: bool
4276   value: false
4277   mirror: always
4279 # WebIDL test prefs.
4280 - name: dom.webidl.test1
4281   type: bool
4282   value: true
4283   mirror: always
4284 - name: dom.webidl.test2
4285   type: bool
4286   value: true
4287   mirror: always
4289 - name: dom.webidl.crosscontext_hasinstance.enabled
4290   type: RelaxedAtomicBool
4291   value: @IS_NOT_EARLY_BETA_OR_EARLIER@
4292   mirror: always
4294 # WebShare API - exposes navigator.share()
4295 - name: dom.webshare.enabled
4296   type: bool
4297 #ifdef XP_WIN
4298   value: @IS_EARLY_BETA_OR_EARLIER@
4299 #else
4300   value: false
4301 #endif
4302   mirror: always
4304 # WebShare API - allows WebShare without user interaction (for tests only).
4305 - name: dom.webshare.requireinteraction
4306   type: bool
4307   value: true
4308   mirror: always
4310 # about:home and about:newtab include remote snippets that contain arbitrarily
4311 # placed anchor tags in their content; we want sanitization to be turned off
4312 # in order to render them correctly
4313 - name: dom.about_newtab_sanitization.enabled
4314   type: bool
4315   value: false
4316   mirror: always
4318 # Hide the confirm dialog when a POST request is reloaded.
4319 - name: dom.confirm_repost.testing.always_accept
4320   type: bool
4321   value: false
4322   mirror: always
4324 # Whether we should suspend inactive tabs or not
4325 - name: dom.suspend_inactive.enabled
4326   type: bool
4327   value: @IS_ANDROID@
4328   mirror: always
4330 # The following three prefs control the maximum script run time before slow
4331 # script warning.
4333 # Controls the time that a content script can run before showing a
4334 # notification.
4335 - name: dom.max_script_run_time
4336   type: int32_t
4337   value: 10
4338   mirror: always
4340 # Controls whether we want to wait for user input before surfacing notifying
4341 # the parent process about a long-running script.
4342 - name: dom.max_script_run_time.require_critical_input
4343   type: bool
4344 # On desktop, we don't want to annoy the user with a notification if they're
4345 # not interacting with the browser. On Android however, we automatically
4346 # terminate long-running scripts, so we want to make sure we don't get in the
4347 # way of that by waiting for input.
4348 #if defined(MOZ_WIDGET_ANDROID)
4349   value: false
4350 #else
4351   value: true
4352 #endif
4353   mirror: always
4355 - name: dom.max_chrome_script_run_time
4356   type: int32_t
4357   value: 0
4358   mirror: always
4360 - name: dom.max_ext_content_script_run_time
4361   type: int32_t
4362   value: 5
4363   mirror: always
4365 #---------------------------------------------------------------------------
4366 # Prefs starting with "editor"
4367 #---------------------------------------------------------------------------
4369 # Default background color of HTML editor.  This is referred only when
4370 # "editor.use_custom_colors" is set to `true`.
4371 - name: editor.background_color
4372   type: String
4373   value: "#FFFFFF"
4374   mirror: never
4376 # Default length unit of indent blocks with CSS.
4377 # TODO: Delete this pref after checking the compatibility with the other
4378 #       browsers.
4379 - name: editor.css.default_length_unit
4380   type: String
4381   value: "px"
4382   mirror: never
4384 # Allow or disallow to delete `<hr>` element when caret is at start of
4385 # following line of the element.  If false, Backspace from start of following
4386 # line of an `<hr>` element causes moving caret to immediatly after the `<hr>`
4387 # element, and then, another Backspace can delete it.
4388 - name: editor.hr_element.allow_to_delete_from_following_line
4389   type: bool
4390   value: true
4391   mirror: always
4393 # Whether editor initializes attributes and/or child nodes of newly inserting
4394 # element before or after connecting to the DOM tree.
4395 - name: editor.initialize_element_before_connect
4396   type: bool
4397   value: true
4398   mirror: always
4400 # Delay to mask last input character in password fields.
4401 # If negative value, to use platform's default behavior.
4402 # If 0, no delay to mask password.
4403 # Otherwise, password fields unmask last input character(s) during specified
4404 # time (in milliseconds).
4405 - name: editor.password.mask_delay
4406   type: int32_t
4407   value: -1
4408   mirror: always
4410 # Set to true when you test mask_delay of password editor.  If this is set
4411 # to true, "MozLastInputMasked" is fired when last input characters are
4412 # masked by timeout.
4413 - name: editor.password.testing.mask_delay
4414   type: bool
4415   value: false
4416   mirror: always
4418 # When an element becomes absolutely positioned, this offset is applied to
4419 # both `left` and `top`.
4420 # TODO: Delete this pref after verifying that nobody uses this pref.
4421 - name: editor.positioning.offset
4422   type: int32_t
4423   value: 0
4424   mirror: always
4426 # Whether resizer keeps aspect ratio of `<img>` or can change its width/height
4427 # independently.
4428 # TODO: Delete this pref after verifying that nobody uses this pref.
4429 - name: editor.resizing.preserve_ratio
4430   type: bool
4431   value: true
4432   mirror: always
4434 # How line breakers are treated in single line editor:
4435 # * 0: Only remove the leading and trailing newlines.
4436 # * 1: Remove the first newline and all characters following it.
4437 # * 2: Replace newlines with spaces (default of Firefox).
4438 # * 3: Remove newlines from the string.
4439 # * 4: Replace newlines with commas (default of Thunderbird).
4440 # * 5: Collapse newlines and surrounding white space characters and
4441 #      remove them from the string.
4442 # Other values are treated as 1.
4443 - name: editor.singleLine.pasteNewlines
4444   type: int32_t
4445   value: 2
4446   mirror: always
4448 # Whether user pastes should be truncated.
4449 - name: editor.truncate_user_pastes
4450   type: bool
4451   value: true
4452   mirror: always
4454 # When this is set to `true`, "editor.background_color" must be set, then,
4455 # the value is treated as default background color of the HTML editor.
4456 # If `false` and "browser.display.use_system_colors" is set to `true`,
4457 # "browser.display.background_color" is used instead.
4458 # Otherwise, no color is used as default background color.
4459 # This pref is for Thunderbird and SeaMonkey.
4460 - name: editor.use_custom_colors
4461   type: bool
4462   value: false
4463   mirror: always
4465 # If this is set to `true`, CSS mode of style editor is enabled by default
4466 # unless it's a mail editor.
4467 # This pref is for Thunderbird and SeaMonkey.
4468 - name: editor.use_css
4469   type: bool
4470   value: false
4471   mirror: always
4473 # Whether inserting <div> when typing Enter in a block element which can
4474 # contain <div>.  If false, inserts <br> instead.
4475 # TODO: Delete this pref after verifying nobody uses this pref.
4476 - name: editor.use_div_for_default_newlines
4477   type: bool
4478   value: true
4479   mirror: always
4481 # Whether enabling blink compatible white-space normalizer or keep using
4482 # Gecko's traditional white-space normalizer.
4483 - name: editor.white_space_normalization.blink_compatible
4484   type: bool
4485   value: false
4486   mirror: always
4488 # General prefs for editor, indicating whether Gecko-specific editing UI is
4489 # enabled by default. Those UIs are not implemented by any other browsers.  So,
4490 # only Firefox users can change some styles with them. This means that Firefox
4491 # users may get unexpected result of some web apps if they assume that users
4492 # cannot change such styles.
4493 - name: editor.resizing.enabled_by_default
4494   type: bool
4495   value: false
4496   mirror: always
4497 - name: editor.inline_table_editing.enabled_by_default
4498   type: bool
4499   value: false
4500   mirror: always
4501 - name: editor.positioning.enabled_by_default
4502   type: bool
4503   value: false
4504   mirror: always
4506 #---------------------------------------------------------------------------
4507 # Prefs starting with "extensions."
4508 #---------------------------------------------------------------------------
4510 # Whether the InstallTrigger implementation should be enabled (or hidden and
4511 # none of its methods available).
4512 - name: extensions.InstallTriggerImpl.enabled
4513   type: bool
4514   value: true
4515   mirror: always
4517 # Whether the InstallTrigger implementation should be enabled (or completely
4518 # hidden), separate from InstallTriggerImpl because InstallTrigger is improperly
4519 # used also for UA detection.
4520 - name: extensions.InstallTrigger.enabled
4521   type: bool
4522   value: true
4523   mirror: always
4526 # Whether the background.service_worker in the extension manifest.json file
4527 # is enabled.
4528 - name: extensions.backgroundServiceWorker.enabled
4529   type: bool
4530   value: false
4531   mirror: once
4533 # Maximum number of misspelled words in a text.
4534 - name: extensions.spellcheck.inline.max-misspellings
4535   type: int32_t
4536   value: 500
4537   mirror: always
4539 # Whether the extensions can register a service worker on its own.
4540 # NOTE: WebExtensions Framework ability to register a background service worker
4541 # is not controlled by this pref, only the extension code ability to use
4542 # navigator.serviceWorker.register is locked behind this pref.
4543 - name: extensions.serviceWorkerRegister.allowed
4544   type: bool
4545   value: false
4546   mirror: always
4548 # Legacy behavior on filterResponse calls on intercepted sw script requests.
4549 - name: extensions.filterResponseServiceWorkerScript.disabled
4550   type: bool
4551   value: false
4552   mirror: always
4554 # This pref governs whether we run webextensions in a separate process (true)
4555 # or the parent/main process (false)
4556 - name: extensions.webextensions.remote
4557   type: RelaxedAtomicBool
4558   value: false
4559   mirror: always
4561 # Whether to expose the MockExtensionAPI test interface in tests.
4562 # The interface MockExtensionAPI doesn't represent a real extension API,
4563 # it is only available in test and does include a series of cases useful
4564 # to test the API request handling without tying the unit test to a
4565 # specific WebExtensions API.
4566 - name: extensions.webidl-api.expose_mock_interface
4567   type: RelaxedAtomicBool
4568   value: false
4569   mirror: always
4571 #---------------------------------------------------------------------------
4572 # Prefs starting with "fission."
4573 #---------------------------------------------------------------------------
4575 # Whether to enable Fission in new windows by default.
4576 # IMPORTANT: This preference should *never* be checked directly, since any
4577 # session can contain a mix of Fission and non-Fission windows. Instead,
4578 # callers should check whether the relevant nsILoadContext has the
4579 # `useRemoteSubframes` flag set.
4580 # Callers which cannot use `useRemoteSubframes` must use
4581 # `Services.appinfo.fissionAutostart` or `mozilla::FissionAutostart()` to check
4582 # if fission is enabled by default.
4583 - name: fission.autostart
4584   type: bool
4585   value: @IS_NOT_ANDROID@
4586   mirror: never
4588 # Prefs used by normandy to orchestrate the fission experiment. For more
4589 # details, see the comments in nsAppRunner.cpp.
4590 - name: fission.experiment.enrollmentStatus
4591   type: uint32_t
4592   value: 0
4593   mirror: never
4595 - name: fission.experiment.startupEnrollmentStatus
4596   type: uint32_t
4597   value: 0
4598   mirror: never
4600 # This pref has no effect within fission windows, it only controls the
4601 # behaviour within non-fission windows. If true, preserve browsing contexts
4602 # between process swaps.
4603 - name: fission.preserve_browsing_contexts
4604   type: bool
4605   value: true
4606   mirror: always
4608 # Store the session history in the parent process, and access it over IPC
4609 # from the child processes.
4610 - name: fission.sessionHistoryInParent
4611   type: bool
4612   value: false
4613   mirror: once
4614   do_not_use_directly: true
4616 # If session history is stored in the parent process, enable bfcache for it.
4617 - name: fission.bfcacheInParent
4618   type: bool
4619   value: true
4620   mirror: always
4621   do_not_use_directly: true
4623 # Allow renaming of processes from Private Windows to the eTLD+1 on nightly
4624 # Setting this pref creates a privacy leak, but helps greatly with
4625 # debugging.
4626 - name: fission.processPrivateWindowSiteNames
4627   type: bool
4628   value: false
4629   mirror: always
4631 # Allow renaming of process names to the eTLD+1 on all versions, NOT
4632 # including processes from Private Windows
4633 # Setting this pref creates a privacy leak, but helps greatly with
4634 # debugging
4635 - name: fission.processSiteNames
4636   type: bool
4637   value: false
4638   mirror: always
4640 # If true, allow process-switching documents loaded by <object> and <embed>
4641 # elements into a remote process.
4642 # NOTE: This pref has no impact outside of windows with the
4643 # `useRemoteSubframes` flag set.
4644 - name: fission.remoteObjectEmbed
4645   type: bool
4646   value: true
4647   mirror: always
4649 # The strategy used to control how sites are isolated into separate processes
4650 # when Fisison is enabled. This pref has no effect if Fission is disabled.
4651 # See the `WebContentIsolationStrategy` enum in `ProcessIsolation.cpp`.
4652 - name: fission.webContentIsolationStrategy
4653   type: uint32_t
4654   value: 1
4655   mirror: always
4657 # Time in seconds before a site loaded with the Cross-Origin-Opener-Policy
4658 # header is no longer considered high-value and isolated in the "highValueCOOP"
4659 # configuration.
4660 - name: fission.highValue.coop.expiration
4661   type: uint32_t
4662   value: 2592000   # 30 days (in seconds)
4663   mirror: always
4665 # Time in seconds before a site are considered high-value by the login detection
4666 # service is no longer considered high-value and isolated in the "highValueHasSavedLogin"
4667 # or "highValueIsLoggedIn" configuration.
4668 - name: fission.highValue.login.expiration
4669   type: uint32_t
4670   value: 2592000   # 30 days (in seconds)
4671   mirror: always
4673 # If true, capture login attemp, and add "highValueIsLoggedIn" permission to
4674 # the permission manager no matter whether fission is enabled and
4675 # WebContentIsolationStrateg is set to IsolateHighvalue.
4676 - name: fission.highValue.login.monitor
4677   type: bool
4678   value: @IS_ANDROID@
4679   mirror: always
4681 # If true, do not send blocklisted preference values to the subprocess
4682 - name: fission.omitBlocklistedPrefsInSubprocesses
4683   type: RelaxedAtomicBool
4684   value: false
4685   mirror: always
4687 # If true, crash when a blocklisted preference is accessed in a subprocess
4688 - name: fission.enforceBlocklistedPrefsInSubprocesses
4689   type: RelaxedAtomicBool
4690   value: false
4691   mirror: always
4693 #---------------------------------------------------------------------------
4694 # Prefs starting with "font."
4695 #---------------------------------------------------------------------------
4697 # A value greater than zero enables font size inflation for
4698 # pan-and-zoom UIs, so that the fonts in a block are at least the size
4699 # that, if a block's width is scaled to match the device's width, the
4700 # fonts in the block are big enough that at most the pref value ems of
4701 # text fit in *the width of the device*.
4703 # When both this pref and the next are set, the larger inflation is used.
4704 - name: font.size.inflation.emPerLine
4705   type: uint32_t
4706   value: 0
4707   mirror: always
4709 # A value greater than zero enables font size inflation for
4710 # pan-and-zoom UIs, so that if a block's width is scaled to match the
4711 # device's width, the fonts in a block are at least the given font size.
4712 # The value given is in twips, i.e., 1/20 of a point, or 1/1440 of an inch.
4714 # When both this pref and the previous are set, the larger inflation is used.
4715 - name: font.size.inflation.minTwips
4716   type: uint32_t
4717   value: 0
4718   mirror: always
4720 # In products with multi-mode pan-and-zoom and non-pan-and-zoom UIs,
4721 # this pref forces font inflation to always be enabled in all modes.
4722 # That is, any heuristics used to detect pan-and-zoom
4723 # vs. non-pan-and-zoom modes are disabled and all content is treated
4724 # as pan-and-zoom mode wrt font inflation.
4726 # This pref has no effect if font inflation is not enabled through
4727 # either of the prefs above.  It has no meaning in single-mode UIs.
4728 - name: font.size.inflation.forceEnabled
4729   type: bool
4730   value: false
4731   mirror: always
4733 # In products with multi-mode pan-and-zoom and non-pan-and-zoom UIs,
4734 # this pref disables font inflation in master-process contexts where
4735 # existing heuristics can't be used determine enabled-ness.
4737 # This pref has no effect if font inflation is not enabled through
4738 # either of the prefs above.  The "forceEnabled" pref above overrides
4739 # this pref.
4740 - name: font.size.inflation.disabledInMasterProcess
4741   type: bool
4742   value: false
4743   mirror: always
4745 # Defines the font size inflation mapping intercept parameter.
4747 # Font size inflation computes a minimum font size, m, based on
4748 # other preferences (see font.size.inflation.minTwips and
4749 # font.size.inflation.emPerLine, above) and the width of the
4750 # frame in which the text resides. Using this minimum, a specified
4751 # font size, s, is mapped to an inflated font size, i, using an
4752 # equation that varies depending on the value of the font size
4753 # inflation mapping intercept parameter, P.
4755 # If the intercept parameter is negative, then the following mapping
4756 # function is used:
4758 # i = m + s
4760 # If the intercept parameter is non-negative, then the mapping function
4761 # is a function such that its graph meets the graph of i = s at the
4762 # point where both i and s are (1 + P/2) * m for values of s that are
4763 # large enough. This means that when s=0, i is always equal to m.
4764 - name: font.size.inflation.mappingIntercept
4765   type: int32_t
4766   value: 1
4767   mirror: always
4769 # Since the goal of font size inflation is to avoid having to
4770 # repeatedly scroll side to side to read a block of text, and there are
4771 # a number of page layouts where a relatively small chunk of text is
4772 # better off not being inflated according to the same algorithm we use
4773 # for larger chunks of text, we want a threshold for an amount of text
4774 # that triggers font size inflation.  This preference controls that
4775 # threshold.
4777 # It controls the threshold used within an *approximation* of the
4778 # number of lines of text we use.  In particular, if we assume that
4779 # each character (collapsing collapsible whitespace) has a width the
4780 # same as the em-size of the font (when, normally, it's actually quite
4781 # a bit smaller on average), this preference gives the percentage of a
4782 # number of lines of text we'd need to trigger inflation.  This means
4783 # that a percentage of 100 means that we'd need a number of characters
4784 # (we know the font size and the width) equivalent to one line of
4785 # square text (which is actually a lot less than a real line of text).
4787 # A value of 0 means there's no character length threshold.
4788 - name: font.size.inflation.lineThreshold
4789   type: uint32_t
4790   value: 400
4791   mirror: always
4793 # This controls the percentage that fonts will be inflated, if font
4794 # size inflation is enabled. Essentially, if we have a specified font
4795 # size, s, and an inflated font size, i, this specifies that the ratio
4796 # i/s * 100 should never exceed the value of this preference. In order
4797 # for this preference to have any effect, its value must be greater
4798 # than 100, since font inflation can never decrease the ratio i/s.
4799 - name: font.size.inflation.maxRatio
4800   type: uint32_t
4801   value: 0
4802   mirror: always
4804 # This setting corresponds to a global text zoom setting affecting
4805 # all content that is not already subject to font size inflation.
4806 # It is interpreted as a percentage value that is applied on top
4807 # of the document's current text zoom setting.
4809 # The resulting total zoom factor (text zoom * system font scale)
4810 # will be limited by zoom.minPercent and maxPercent.
4811 - name: font.size.systemFontScale
4812   type: uint32_t
4813   value: 100
4814   mirror: always
4816 #---------------------------------------------------------------------------
4817 # Prefs starting with "full-screen-api."
4818 #---------------------------------------------------------------------------
4820 - name: full-screen-api.enabled
4821   type: bool
4822   value: false
4823   mirror: always
4825 - name: full-screen-api.allow-trusted-requests-only
4826   type: bool
4827   value: true
4828   mirror: always
4830 - name: full-screen-api.mouse-event-allow-left-button-only
4831   type: bool
4832   value: true
4833   mirror: always
4835 - name: full-screen-api.exit-on.windowOpen
4836   type: bool
4837   value: true
4838   mirror: always
4840 - name: full-screen-api.exit-on.windowRaise
4841   type: bool
4842   value: true
4843   mirror: always
4845 - name: full-screen-api.pointer-lock.enabled
4846   type: bool
4847   value: true
4848   mirror: always
4850 #---------------------------------------------------------------------------
4851 # Prefs starting with "fuzzing.". It's important that these can only be
4852 # checked in fuzzing builds (when FUZZING is defined), otherwise you could
4853 # enable the fuzzing stuff on your regular build which would be bad :)
4854 #---------------------------------------------------------------------------
4856 #ifdef FUZZING
4857 -   name: fuzzing.enabled
4858     type: bool
4859 #ifdef FUZZING_SNAPSHOT
4860     value: true
4861 #else
4862     value: false
4863 #endif
4864     mirror: always
4866 -   name: fuzzing.necko.enabled
4867     type: RelaxedAtomicBool
4868     value: false
4869     mirror: always
4871 -   name: fuzzing.necko.http3
4872     type: RelaxedAtomicBool
4873     value: false
4874     mirror: always
4875     rust: true
4876 #endif
4878 #---------------------------------------------------------------------------
4879 # Prefs starting with "general."
4880 #---------------------------------------------------------------------------
4882 - name: general.aboutConfig.enable
4883   type: bool
4884   value: true
4885   mirror: always
4887 # Limits the depth of recursive conversion of data when opening
4888 # a content to view.  This is mostly intended to prevent infinite
4889 # loops with faulty converters involved.
4890 - name: general.document_open_conversion_depth_limit
4891   type: uint32_t
4892   value: 20
4893   mirror: always
4895 - name: general.smoothScroll
4896   type: RelaxedAtomicBool
4897   value: true
4898   mirror: always
4900 # This pref and general.smoothScroll.stopDecelerationWeighting determine
4901 # the timing function.
4902 - name: general.smoothScroll.currentVelocityWeighting
4903   type: AtomicFloat
4904   value: 0.25
4905   mirror: always
4907 # To connect consecutive scroll events into a continuous flow, the animation's
4908 # duration should be longer than scroll events intervals (or else the scroll
4909 # will stop before the next event arrives - we're guessing the next interval
4910 # by averaging recent intervals).
4911 # This defines how much longer the duration is compared to the events
4912 # interval (percentage).
4913 - name: general.smoothScroll.durationToIntervalRatio
4914   type: RelaxedAtomicInt32
4915   value: 200
4916   mirror: always
4918 - name: general.smoothScroll.lines
4919   type: RelaxedAtomicBool
4920   value: true
4921   mirror: always
4923 - name: general.smoothScroll.lines.durationMaxMS
4924   type: RelaxedAtomicInt32
4925   value: 150
4926   mirror: always
4928 - name: general.smoothScroll.lines.durationMinMS
4929   type: RelaxedAtomicInt32
4930   value: 150
4931   mirror: always
4933 - name: general.smoothScroll.mouseWheel
4934   type: RelaxedAtomicBool
4935   value: true
4936   mirror: always
4938 - name: general.smoothScroll.mouseWheel.durationMaxMS
4939   type: RelaxedAtomicInt32
4940   value: 200
4941   mirror: always
4943 - name: general.smoothScroll.mouseWheel.durationMinMS
4944   type: RelaxedAtomicInt32
4945   value: 50
4946   mirror: always
4948 - name: general.smoothScroll.other
4949   type: RelaxedAtomicBool
4950   value: true
4951   mirror: always
4953 - name: general.smoothScroll.other.durationMaxMS
4954   type: RelaxedAtomicInt32
4955   value: 150
4956   mirror: always
4958 - name: general.smoothScroll.other.durationMinMS
4959   type: RelaxedAtomicInt32
4960   value: 150
4961   mirror: always
4963 - name: general.smoothScroll.pages
4964   type: RelaxedAtomicBool
4965   value: true
4966   mirror: always
4968 - name: general.smoothScroll.pages.durationMaxMS
4969   type: RelaxedAtomicInt32
4970   value: 150
4971   mirror: always
4973 - name: general.smoothScroll.pages.durationMinMS
4974   type: RelaxedAtomicInt32
4975   value: 150
4976   mirror: always
4978 - name: general.smoothScroll.scrollbars
4979   type: RelaxedAtomicBool
4980   value: true
4981   mirror: always
4983 - name: general.smoothScroll.scrollbars.durationMaxMS
4984   type: RelaxedAtomicInt32
4985   value: 150
4986   mirror: always
4988 - name: general.smoothScroll.scrollbars.durationMinMS
4989   type: RelaxedAtomicInt32
4990   value: 150
4991   mirror: always
4993 - name: general.smoothScroll.pixels
4994   type: RelaxedAtomicBool
4995   value: true
4996   mirror: always
4998 - name: general.smoothScroll.pixels.durationMaxMS
4999   type: RelaxedAtomicInt32
5000   value: 150
5001   mirror: always
5003 - name: general.smoothScroll.pixels.durationMinMS
5004   type: RelaxedAtomicInt32
5005   value: 150
5006   mirror: always
5008 # This pref and general.smoothScroll.currentVelocityWeighting determine
5009 # the timing function.
5010 - name: general.smoothScroll.stopDecelerationWeighting
5011   type: AtomicFloat
5012   value: 0.4f
5013   mirror: always
5015 # Alternative smooth scroll physics. ("MSD" = Mass-Spring-Damper)
5016 - name: general.smoothScroll.msdPhysics.enabled
5017   type: RelaxedAtomicBool
5018   value: false
5019   mirror: always
5021 - name: general.smoothScroll.msdPhysics.continuousMotionMaxDeltaMS
5022   type: RelaxedAtomicInt32
5023   value: 120
5024   mirror: always
5026 - name: general.smoothScroll.msdPhysics.motionBeginSpringConstant
5027   type: RelaxedAtomicInt32
5028   value: 1250
5029   mirror: always
5031 - name: general.smoothScroll.msdPhysics.slowdownMinDeltaMS
5032   type: RelaxedAtomicInt32
5033   value: 12
5034   mirror: always
5036 - name: general.smoothScroll.msdPhysics.slowdownMinDeltaRatio
5037   type: AtomicFloat
5038   value: 1.3f
5039   mirror: always
5041 - name: general.smoothScroll.msdPhysics.slowdownSpringConstant
5042   type: RelaxedAtomicInt32
5043   value: 2000
5044   mirror: always
5046 - name: general.smoothScroll.msdPhysics.regularSpringConstant
5047   type: RelaxedAtomicInt32
5048   value: 1000
5049   mirror: always
5051 - name: general.utility-process.startup_timeout_ms
5052   type: RelaxedAtomicInt32
5053   value: 5000
5054   mirror: always
5056 #---------------------------------------------------------------------------
5057 # Prefs starting with "geo."
5058 #---------------------------------------------------------------------------
5060 # Is support for Navigator.geolocation enabled?
5061 - name: geo.enabled
5062   type: bool
5063   value: true
5064   mirror: always
5066 # Time, in milliseconds, to wait for the location provider to spin up.
5067 - name: geo.timeout
5068   type: int32_t
5069   value: 6000
5070   mirror: always
5072 #---------------------------------------------------------------------------
5073 # Prefs starting with "gfx."
5074 #---------------------------------------------------------------------------
5076 - name: gfx.allow-texture-direct-mapping
5077   type: bool
5078   value: true
5079   mirror: once
5081 # Allow 24-bit colour when the hardware supports it.
5082 - name: gfx.android.rgb16.force
5083   type: bool
5084   value: false
5085   mirror: once
5087 - name: gfx.apitrace.enabled
5088   type: bool
5089   value: false
5090   mirror: once
5092 # Nb: we ignore this pref on release and beta.
5093 - name: gfx.blocklist.all
5094   type: int32_t
5095   value: 0
5096   mirror: once
5098 - name: gfx.canvas.accelerated
5099   type: RelaxedAtomicBool
5100   value: false
5101   mirror: always
5103 - name: gfx.canvas.accelerated.cache-items
5104   type: RelaxedAtomicUint32
5105   value: 2048
5106   mirror: always
5108 - name: gfx.canvas.accelerated.cache-size
5109   type: RelaxedAtomicUint32
5110   value: 256
5111   mirror: always
5113 - name: gfx.canvas.accelerated.reserve-empty-cache
5114   type: RelaxedAtomicUint32
5115   value: 36
5116   mirror: always
5118 - name: gfx.canvas.accelerated.max-size
5119   type: RelaxedAtomicInt32
5120   value: 0
5121   mirror: always
5123 - name: gfx.canvas.accelerated.min-size
5124   type: RelaxedAtomicInt32
5125   value: 128
5126   mirror: always
5128 - name: gfx.canvas.accelerated.max-surface-size
5129   type: RelaxedAtomicUint32
5130   value: 5280
5131   mirror: always
5133 - name: gfx.canvas.accelerated.shared-page-size
5134   type: RelaxedAtomicUint32
5135   value: 1024
5136   mirror: always
5138 # The minimum number of frames before acting on performance profile info
5139 - name: gfx.canvas.accelerated.profile-frames
5140   type: RelaxedAtomicUint32
5141   value: 10
5142   mirror: always
5144 # The ratio of failed frames to total frames when to fall back from acceleration
5145 - name: gfx.canvas.accelerated.profile-fallback-ratio
5146   type: AtomicFloat
5147   value: 0.3
5148   mirror: always
5150 # The ratio of cache misses at which to fail a profile frame
5151 - name: gfx.canvas.accelerated.profile-cache-miss-ratio
5152   type: AtomicFloat
5153   value: 0.66
5154   mirror: always
5156 # 0x7fff is the maximum supported xlib surface size and is more than enough for canvases.
5157 - name: gfx.canvas.max-size
5158   type: RelaxedAtomicInt32
5159   value: 0x7fff
5160   mirror: always
5162 - name: gfx.canvas.remote
5163   type: RelaxedAtomicBool
5164 #if defined(XP_WIN)
5165   value: true
5166 #else
5167   value: false
5168 #endif
5169   mirror: always
5171 - name: gfx.color_management.force_srgb
5172   type: RelaxedAtomicBool
5173   value: false
5174   mirror: always
5176 - name: gfx.color_management.native_srgb
5177   type: RelaxedAtomicBool
5178 #if defined(XP_MACOSX)
5179   value: true
5180 #else
5181   value: false
5182 #endif
5183   mirror: always
5185 - name: gfx.color_management.enablev4
5186   type: RelaxedAtomicBool
5187 #if defined(XP_MACOSX) || defined(NIGHTLY_BUILD)
5188   value: true
5189 #else
5190   value: false
5191 #endif
5192   mirror: always
5194 # 0 = Off, 1 = Full, 2 = Tagged Images Only.
5195 # See CMSMode in gfx/thebes/gfxPlatform.h.
5196 - name: gfx.color_management.mode
5197   type: RelaxedAtomicInt32
5198   value: 2
5199   mirror: always
5201 # The zero default here should match QCMS_INTENT_DEFAULT from qcms.h
5202 - name: gfx.color_management.rendering_intent
5203   type: RelaxedAtomicInt32
5204   value: 0
5205   mirror: always
5207 - name: gfx.compositor.clearstate
5208   type: RelaxedAtomicBool
5209   value: false
5210   mirror: always
5212 # Whether GL contexts can be migrated to a different GPU (to match the one the
5213 # OS is using for composition).
5215 # 0 = force disable migration
5216 # 1 = use migration where in safe configurations (the default)
5217 # 2 = force enable migration (for testing)
5218 - name: gfx.compositor.gpu-migration
5219   type: RelaxedAtomicInt32
5220   value: 1
5221   mirror: always
5223 - name: gfx.core-animation.tint-opaque
5224   type: RelaxedAtomicBool
5225   value: false
5226   mirror: always
5228 #ifdef XP_MACOSX
5229   # Create specialized video-only layers for video content, and
5230   # attempt to isolate video layers in fullscreen windows.
5231 -   name: gfx.core-animation.specialize-video
5232     type: RelaxedAtomicBool
5233     value: @IS_EARLY_BETA_OR_EARLIER@
5234     mirror: always
5235 #endif
5237 #if defined(XP_MACOSX) && defined(NIGHTLY_BUILD)
5238   # Spoof the timing of the video sample instead of marking the untimed
5239   # sample to be displayed immediately.
5240 -   name: gfx.core-animation.specialize-video.spoof-timing
5241     type: RelaxedAtomicBool
5242     value: false
5243     mirror: always
5245   # Check that the sample has a color space and if it doesn't, log that
5246   # and supply the default color space from the main display.
5247 -   name: gfx.core-animation.specialize-video.check-color-space
5248     type: RelaxedAtomicBool
5249     value: false
5250     mirror: always
5252   # Log properties of the video surface, buffer, and format.
5253 -   name: gfx.core-animation.specialize-video.log
5254     type: RelaxedAtomicBool
5255     value: false
5256     mirror: always
5257 #endif
5259 #if defined(MOZ_WIDGET_ANDROID)
5260   # Overrides the glClear color used when the surface origin is not (0, 0)
5261   # Used for drawing a border around the content.
5262 -   name: gfx.compositor.override.clear-color.r
5263     type: AtomicFloat
5264     value: 0.0f
5265     mirror: always
5267 -   name: gfx.compositor.override.clear-color.g
5268     type: AtomicFloat
5269     value: 0.0f
5270     mirror: always
5272 -   name: gfx.compositor.override.clear-color.b
5273     type: AtomicFloat
5274     value: 0.0f
5275     mirror: always
5277 -   name: gfx.compositor.override.clear-color.a
5278     type: AtomicFloat
5279     value: 0.0f
5280     mirror: always
5281 #endif  # defined(MOZ_WIDGET_ANDROID)
5283 - name: gfx.content.always-paint
5284   type: RelaxedAtomicBool
5285   value: false
5286   mirror: always
5288 # Size in megabytes
5289 - name: gfx.content.skia-font-cache-size
5290   type: int32_t
5291   value: 5
5292   mirror: once
5294 - name: gfx.device-reset.limit
5295   type: int32_t
5296   value: 10
5297   mirror: once
5299 - name: gfx.device-reset.threshold-ms
5300   type: int32_t
5301   value: -1
5302   mirror: once
5305 # Whether to disable the automatic detection and use of direct2d.
5306 - name: gfx.direct2d.disabled
5307   type: bool
5308   value: false
5309   mirror: once
5311 # Whether to attempt to enable Direct2D regardless of automatic detection or
5312 # blacklisting.
5313 - name: gfx.direct2d.force-enabled
5314   type: bool
5315   value: false
5316   mirror: once
5318 # Whether to defer destruction of Direct2D DrawTargets to the paint thread
5319 # when using OMTP.
5320 - name: gfx.direct2d.destroy-dt-on-paintthread
5321   type: RelaxedAtomicBool
5322   value: true
5323   mirror: always
5325 - name: gfx.direct3d11.reuse-decoder-device
5326   type: RelaxedAtomicInt32
5327 #ifdef NIGHTLY_BUILD
5328   value: 1
5329 #else
5330   value: -1
5331 #endif
5332   mirror: always
5334 - name: gfx.direct3d11.allow-keyed-mutex
5335   type: RelaxedAtomicBool
5336   value: true
5337   mirror: always
5339 - name: gfx.direct3d11.use-double-buffering
5340   type: RelaxedAtomicBool
5341   value: false
5342   mirror: always
5344 - name: gfx.direct3d11.enable-debug-layer
5345   type: bool
5346   value: false
5347   mirror: once
5349 - name: gfx.direct3d11.break-on-error
5350   type: bool
5351   value: false
5352   mirror: once
5354 - name: gfx.direct3d11.sleep-on-create-device
5355   type: int32_t
5356   value: 0
5357   mirror: once
5359 # Rate by which the frame rate is divided. I.e. at a number higher than 1 we
5360 # will only refresh every <x> frames.
5361 - name: gfx.display.frame-rate-divisor
5362   type: RelaxedAtomicInt32
5363   value: 1
5364   mirror: always
5366 # Whether to preserve color bitmap tables in fonts (bypassing OTS).
5367 # Currently these are supported only on platforms where we use Freetype
5368 # to render fonts (Linux/Gtk and Android).
5369 - name: gfx.downloadable_fonts.keep_color_bitmaps
5370   type: RelaxedAtomicBool
5371   value: false
5372   mirror: always
5374 # Whether font sanitization is performed on the main thread or not.
5375 - name: gfx.downloadable_fonts.sanitize_omt
5376   type: RelaxedAtomicBool
5377   value: true
5378   mirror: always
5380 # Whether to validate OpenType variation tables in fonts.
5381 - name: gfx.downloadable_fonts.validate_variation_tables
5382   type: RelaxedAtomicBool
5383   value: true
5384   mirror: always
5386 # Whether OTS validation should be applied to OpenType Layout (OTL) tables.
5387 - name: gfx.downloadable_fonts.otl_validation
5388   type: RelaxedAtomicBool
5389   value: @IS_NOT_RELEASE_OR_BETA@
5390   mirror: always
5392 - name: gfx.draw-color-bars
5393   type: RelaxedAtomicBool
5394   value: false
5395   mirror: always
5397 - name: gfx.e10s.hide-plugins-for-scroll
5398   type: bool
5399   value: true
5400   mirror: once
5402 - name: gfx.e10s.font-list.shared
5403   type: bool
5404   value: true
5405   mirror: once
5407 # Do we fire a notification about missing fonts, so the front-end can decide
5408 # whether to try and do something about it (e.g. download additional fonts)?
5409 - name: gfx.missing_fonts.notify
5410   type: RelaxedAtomicBool
5411   value: false
5412   mirror: always
5414 #if !defined(MOZ_WIDGET_ANDROID)
5415 - name: gfx.egl.prefer-gles.enabled
5416   type: bool
5417   value: false
5418   mirror: once
5419 #endif
5421 # [Windows] Whether registry FontSubstitutes entries are used unconditionally,
5422 # or only if the original font is not available.
5423 #if defined(XP_WIN)
5424 - name: gfx.windows-font-substitutes.always
5425   type: bool
5426   value: false
5427   mirror: once
5428 #endif
5430 - name: gfx.font-list-omt.enabled
5431   type: bool
5432 #if defined(XP_MACOSX)
5433   value: true
5434 #else
5435   value: false
5436 #endif
5437   mirror: once
5439 # Whether to load fonts (e.g. Twemoji Mozilla) bundled with the application:
5440 #  -1 - Auto behavior based on OS version (currently, disables loading on
5441 #       "low-memory" Android devices)
5442 #   0 - Skip loading any bundled fonts
5443 #   1 - Always load bundled fonts
5444 - name: gfx.bundled-fonts.activate
5445   type: int32_t
5446   value: -1
5447   mirror: once
5449 - name: gfx.font_loader.delay
5450   type: uint32_t
5451 #if defined(XP_WIN)
5452   value: 60000
5453 #else
5454   value: 8000
5455 #endif
5456   mirror: once
5458 # Disable antialiasing of Ahem, for use in tests.
5459 - name: gfx.font_rendering.ahem_antialias_none
5460   type: RelaxedAtomicBool
5461   value: false
5462   mirror: always
5464 #if defined(XP_MACOSX)
5465   # Set to true to revert from HarfBuzz AAT shaping to the old Core Text
5466   # backend.
5467 -   name: gfx.font_rendering.coretext.enabled
5468     type: RelaxedAtomicBool
5469     value: false
5470     mirror: always
5471 #endif
5473 - name: gfx.font_rendering.opentype_svg.enabled
5474   type: RelaxedAtomicBool
5475   value: true
5476   mirror: always
5477   rust: true
5479 - name: gfx.font_rendering.fallback.async
5480   type: RelaxedAtomicBool
5481   value: true
5482   mirror: always
5484 #if defined(XP_WIN)
5485 # Whether the DirectWrite bold simulation should be used when a bold font-weight
5486 # is requested but no bold face available in the family. This renders poorly with
5487 # some third-party fonts, so by default we disable it for webfonts and allow it
5488 # only with locally-installed fonts.
5489 # Values:
5490 #   0 - never use DWrite bold simulation; always multi-strike instead
5491 #   1 - use DWrite bold for installed fonts, multi-strike for webfont resources
5492 #   2 - use DWrite bold for all fonts
5493 - name: gfx.font_rendering.directwrite.bold_simulation
5494   type: RelaxedAtomicUint32
5495   value: 1
5496   mirror: always
5497 #endif
5499 # The level of logging:
5500 # - 0: no logging;
5501 # - 1: adds errors;
5502 # - 2: adds warnings;
5503 # - 3 or 4: adds debug logging.
5504 # If you set the value to 4, you will also need to set the environment
5505 # variable MOZ_LOG to gfx:4. See mozilla/Logging.h for details.
5506 - name: gfx.logging.level
5507   type: RelaxedAtomicInt32
5508   value: mozilla::gfx::LOG_DEFAULT
5509   mirror: always
5510   include: mozilla/gfx/LoggingConstants.h
5512 - name: gfx.logging.crash.length
5513   type: uint32_t
5514   value: 16
5515   mirror: once
5517 # The maximums here are quite conservative, we can tighten them if problems show up.
5518 - name: gfx.logging.texture-usage.enabled
5519   type: bool
5520   value: false
5521   mirror: once
5523 - name: gfx.logging.peak-texture-usage.enabled
5524   type: bool
5525   value: false
5526   mirror: once
5528 - name: gfx.logging.slow-frames.enabled
5529   type: bool
5530   value: false
5531   mirror: once
5533 # Use gfxPlatform::MaxAllocSize instead of the pref directly.
5534 - name: gfx.max-alloc-size
5535   type: int32_t
5536   value: (int32_t)500000000
5537   mirror: once
5538   do_not_use_directly: true
5540 # Use gfxPlatform::MaxTextureSize instead of the pref directly.
5541 - name: gfx.max-texture-size
5542   type: int32_t
5543   value: (int32_t)32767
5544   mirror: once
5545   do_not_use_directly: true
5547 # Enable OffscreenCanvas everywhere.
5548 - name: gfx.offscreencanvas.enabled
5549   type: RelaxedAtomicBool
5550   value: false
5551   mirror: always
5553 # Enable OffscreenCanvas based on the domain allowlist.
5554 - name: gfx.offscreencanvas.domain-enabled
5555   type: RelaxedAtomicBool
5556   value: true
5557   mirror: always
5559 # Domains included in the allowlist.
5560 - name: gfx.offscreencanvas.domain-allowlist
5561   type: String
5562   value: "*.zoom.us,zoom.us"
5563   mirror: never
5565 - name: gfx.omta.background-color
5566   type: bool
5567   value: true
5568   mirror: always
5570 - name: gfx.partialpresent.force
5571   type: RelaxedAtomicInt32
5572   value: 0
5573   mirror: always
5575 # SwapInterval
5576 - name: gfx.swap-interval.glx
5577   type: RelaxedAtomicBool
5578   value: true
5579   mirror: always
5581 - name: gfx.swap-interval.egl
5582   type: RelaxedAtomicBool
5583   mirror: always
5584 #ifdef MOZ_WIDGET_ANDROID
5585   value: true
5586 #else
5587   value: false
5588 #endif
5591 # Log severe performance warnings to the error console and profiles.
5592 # This should be use to quickly find which slow paths are used by test cases.
5593 - name: gfx.perf-warnings.enabled
5594   type: RelaxedAtomicBool
5595   value: false
5596   mirror: always
5598 #ifdef MOZ_X11
5599 # Whether to force using GLX over EGL.
5600 - name: gfx.x11-egl.force-disabled
5601   type: bool
5602   value: false
5603   mirror: once
5605 # Whether to force using EGL over GLX.
5606 - name: gfx.x11-egl.force-enabled
5607   type: bool
5608   value: false
5609   mirror: once
5610 #endif
5612 - name: gfx.testing.device-fail
5613   type: RelaxedAtomicBool
5614   value: false
5615   mirror: always
5617 - name: gfx.testing.device-reset
5618   type: RelaxedAtomicInt32
5619   value: 0
5620   mirror: always
5622 - name: gfx.text.disable-aa
5623   type: bool
5624   value: false
5625   mirror: once
5627 - name: gfx.text.subpixel-position.force-enabled
5628   type: bool
5629   value: false
5630   mirror: once
5632 - name: gfx.text.subpixel-position.force-disabled
5633   type: bool
5634   value: false
5635   mirror: once
5637 - name: gfx.use-iosurface-textures
5638   type: bool
5639   value: false
5640   mirror: once
5642 - name: gfx.use-mutex-on-present
5643   type: bool
5644   value: false
5645   mirror: once
5647 - name: gfx.use-ahardwarebuffer-content
5648   type: bool
5649   value: false
5650   mirror: once
5652 # Use SurfaceTextures as preferred backend for TextureClient/Host.
5653 - name: gfx.use-surfacetexture-textures
5654   type: bool
5655   value: false
5656   mirror: once
5658 - name: gfx.vsync.collect-scroll-transforms
5659   type: RelaxedAtomicBool
5660   value: false
5661   mirror: always
5663 - name: gfx.vsync.compositor.unobserve-count
5664   type: int32_t
5665   value: 10
5666   mirror: once
5668 - name: gfx.vsync.force-disable-waitforvblank
5669   type: RelaxedAtomicBool
5670   value: false
5671   mirror: always
5673 - name: gfx.will-change.ignore-opacity
5674   type: RelaxedAtomicBool
5675   value: true
5676   mirror: always
5678 # Should we override the blocklist to enable WebGPU?
5679 - name: gfx.webgpu.force-enabled
5680   type: bool
5681   value: false
5682   mirror: once
5684 # We expose two prefs: gfx.webrender.all and gfx.webrender.enabled.
5685 # The first enables WR+additional features, and the second just enables WR.
5686 # For developer convenience, building with --enable-webrender=true or just
5687 # --enable-webrender will set gfx.webrender.enabled to true by default.
5689 # We also have a pref gfx.webrender.all.qualified which is not exposed via
5690 # about:config. That pref enables WR but only on qualified hardware. This is
5691 # the pref we'll eventually flip to deploy WebRender to the target population.
5692 - name: gfx.webrender.all
5693   type: bool
5694   value: false
5695   mirror: once
5697 - name: gfx.webrender.enabled
5698   type: bool
5699   value: false
5700   mirror: once
5701   do_not_use_directly: true
5703 #ifdef XP_WIN
5704 - name: gfx.webrender.force-angle
5705   type: bool
5706   value: true
5707   mirror: once
5708 #endif
5710 # WebRender is not enabled when there is no GPU process on window when
5711 # WebRender uses ANGLE. It is for avoiding that WebGL and WebRender use ANGLE
5712 # at once. But there is a case that we want to enable WebRender for testing.
5713 #ifdef XP_WIN
5714 - name: gfx.webrender.enabled-no-gpu-process-with-angle-win
5715   type: bool
5716   value: true
5717   mirror: once
5718 #endif
5720 - name: gfx.webrender.blob-images
5721   type: RelaxedAtomicBool
5722   value: true
5723   mirror: always
5725 - name: gfx.webrender.svg-images
5726   type: RelaxedAtomicBool
5727   value: true
5728   mirror: always
5730 - name: gfx.webrender.debug.blob.paint-flashing
5731   type: RelaxedAtomicBool
5732   value: false
5733   mirror: always
5735 - name: gfx.webrender.debug.enable-capture
5736   type: bool
5737   value: false
5738   mirror: once
5740 - name: gfx.webrender.debug.dl.dump-parent
5741   type: RelaxedAtomicBool
5742   value: false
5743   mirror: always
5745 - name: gfx.webrender.debug.dl.dump-content
5746   type: RelaxedAtomicBool
5747   value: false
5748   mirror: always
5750 - name: gfx.webrender.debug.dl.dump-content-serialized
5751   type: RelaxedAtomicBool
5752   value: false
5753   mirror: always
5755 #ifdef MOZ_WIDGET_GTK
5756 - name: gfx.webrender.reject-software-driver
5757   type: bool
5758   value: true
5759   mirror: once
5760 #endif
5762 - name: gfx.webrender.debug.highlight-painted-layers
5763   type: RelaxedAtomicBool
5764   value: false
5765   mirror: always
5767 - name: gfx.webrender.late-scenebuild-threshold
5768   type: RelaxedAtomicInt32
5769   value: 4
5770   mirror: always
5772 - name: gfx.webrender.max-filter-ops-per-chain
5773   type: RelaxedAtomicUint32
5774   value: 64
5775   mirror: always
5777 - name: gfx.webrender.batching.lookback
5778   type: uint32_t
5779   value: 10
5780   mirror: always
5782 - name: gfx.webrender.blob-tile-size
5783   type: uint32_t
5784   value: 256
5785   mirror: always
5787 - name: gfx.webrender.batched-upload-threshold
5788   type: int32_t
5789 #if defined(MOZ_WIDGET_ANDROID)
5790   value: 262144
5791 #else
5792   value: 65536
5793 #endif
5794   mirror: always
5796 - name: gfx.webrender.compositor
5797   type: bool
5798 #if defined(XP_WIN) || defined(XP_MACOSX)
5799   value: true
5800 #else
5801   value: false
5802 #endif
5803   mirror: once
5805 - name: gfx.webrender.compositor.force-enabled
5806   type: bool
5807   value: false
5808   mirror: once
5810 - name: gfx.webrender.compositor.max_update_rects
5811   type: uint32_t
5812   value: 1
5813   mirror: once
5815 - name: gfx.webrender.compositor.surface-pool-size
5816   type: uint32_t
5817   value: 25
5818   mirror: once
5820 # Number of damage rects we can give to the compositor for a new frame with
5821 # partial present. This controls whether partial present is used or not.
5822 - name: gfx.webrender.max-partial-present-rects
5823   type: uint32_t
5824 #if defined(XP_WIN) || defined(MOZ_WIDGET_ANDROID) || defined(MOZ_WIDGET_GTK)
5825   value: 1
5826 #else
5827   value: 0
5828 #endif
5829   mirror: once
5831 # Whether or not we can reuse the buffer contents using the GL buffer age
5832 # extension, if supported by the platform. This requires partial present
5833 # to be used.
5834 - name: gfx.webrender.allow-partial-present-buffer-age
5835   type: bool
5836   value: true
5837   mirror: once
5839 # Whether or not we should force partial present on.
5840 - name: gfx.webrender.force-partial-present
5841   type: bool
5842   value: false
5843   mirror: once
5845 - name: gfx.webrender.enable-gpu-markers
5846   type: bool
5847 #ifdef DEBUG
5848   value: true
5849 #else
5850   value: false
5851 #endif
5852   mirror: once
5854 - name: gfx.webrender.enable-item-cache
5855   type: bool
5856   value: true
5857   mirror: once
5859 # Whether or not to fallback from WebRender to Software WebRender.
5860 - name: gfx.webrender.fallback.software
5861   type: bool
5862   value: true
5863   mirror: once
5865 #ifdef XP_WIN
5866   # Whether or not to fallback from WebRender to Software WebRender + D3D11.
5867 -   name: gfx.webrender.fallback.software-d3d11
5868     type: bool
5869     value: true
5870     mirror: once
5871   # Whether to use a video overlay layers with DirectComposition
5872 -   name: gfx.webrender.dcomp-video-overlay-win
5873     type: bool
5874     value: true
5875     mirror: once
5876   # Enable video overlay even when it is blocked.
5877 -   name: gfx.webrender.dcomp-video-overlay-win-force-enabled
5878     type: bool
5879     value: false
5880     mirror: once
5881   # Whether to use a yuv video overlay layers with DirectComposition
5882 -   name: gfx.webrender.dcomp-video-yuv-overlay-win
5883     type: bool
5884     value: true
5885     mirror: once
5886 -   name: gfx.webrender.dcomp-video-vp-scaling-win
5887     type: bool
5888     value: true
5889     mirror: once
5890 #endif
5892 # Whether or not fallback to Software WebRender requires the GPU process.
5893 - name: gfx.webrender.fallback.software.requires-gpu-process
5894   type: bool
5895   value: false
5896   mirror: once
5898 - name: gfx.webrender.program-binary-disk
5899   type: bool
5900 #if defined(XP_WIN) || defined(ANDROID)
5901   value: true
5902 #else
5903   value: false
5904 #endif
5905   mirror: once
5907 - name: gfx.webrender.use-optimized-shaders
5908   type: bool
5909   value: true
5910   mirror: once
5912 - name: gfx.webrender.precache-shaders
5913   type: bool
5914   value: false
5915   mirror: once
5917 # When gl debug message is a high severity message, forwward it to gfx critical
5918 # note.
5919 - name: gfx.webrender.gl-debug-message-critical-note
5920   type: bool
5921 #if defined(XP_WIN) && defined(NIGHTLY_BUILD)
5922   value: true
5923 #else
5924   value: false
5925 #endif
5926   mirror: once
5928 # Enable printing gl debug messages
5929 - name: gfx.webrender.gl-debug-message-print
5930   type: bool
5931   value: false
5932   mirror: once
5934 #ifdef NIGHTLY_BUILD
5935   # Keep this pref hidden on non-nightly builds to avoid people accidentally
5936   # turning it on.
5937 - name: gfx.webrender.panic-on-gl-error
5938   type: bool
5939   value: false
5940   mirror: once
5941 #endif
5943 #ifdef XP_WIN
5944   # Enables display of performance debugging counters when DirectComposition
5945   # is used.
5946   # Performance counters are displayed on the top-right corner of the screen.
5947 -   name: gfx.webrender.debug.dcomp-counter
5948     type: RelaxedAtomicBool
5949     value: false
5950     mirror: always
5951   # Enables highlighting redraw regions of DCompositionVisual
5952 -   name: gfx.webrender.debug.dcomp-redraw-regions
5953     type: RelaxedAtomicBool
5954     value: false
5955     mirror: always
5956 #endif
5958 #ifdef XP_MACOSX
5959   # Files show up in $HOME/Desktop/nativelayerdumps-PID/frame-123.html
5960 -   name: gfx.webrender.debug.dump-native-layer-tree-to-file
5961     type: RelaxedAtomicBool
5962     value: false
5963     mirror: always
5964 #endif
5966 - name: gfx.webrender.enable-low-priority-pool
5967   type: RelaxedAtomicBool
5968 #if defined(ANDROID)
5969   value: false
5970 #else
5971   value: true
5972 #endif
5973   mirror: always
5975   # Force subpixel anti-aliasing as much as possible, despite performance cost.
5976 - name: gfx.webrender.quality.force-subpixel-aa-where-possible
5977   type: bool
5978   value: false
5979   mirror: always
5981 #ifdef XP_MACOSX
5982 - name: gfx.webrender.enable-client-storage
5983   type: bool
5984   value: true
5985   mirror: once
5986 #endif
5988  # Width of WebRender tile size
5989 - name: gfx.webrender.picture-tile-width
5990   type: RelaxedAtomicInt32
5991   value: 1024
5992   mirror: always
5994  # Width of WebRender tile size
5995 - name: gfx.webrender.picture-tile-height
5996   type: RelaxedAtomicInt32
5997   value: 512
5998   mirror: always
6000 # Whether to use EGL robustness or not.
6001 - name: gfx.webrender.prefer-robustness
6002   type: bool
6003 #if defined(XP_WIN) || defined(MOZ_WIDGET_GTK)
6004   value: true
6005 #else
6006   value: false
6007 #endif
6008   mirror: once
6010 # Whether to use the WebRender software backend
6011 - name: gfx.webrender.software
6012   type: bool
6013   value: false
6014   mirror: once
6016 # Whether to use the D3D11 RenderCompositor when using WebRender software backend
6017 - name: gfx.webrender.software.d3d11
6018   type: bool
6019   value: true
6020   mirror: once
6022 - name: gfx.webrender.software.opengl
6023   type: bool
6024 #if defined(MOZ_WIDGET_ANDROID)
6025   value: true
6026 #else
6027   value: false
6028 #endif
6029   mirror: once
6031 - name: gfx.webrender.software.d3d11.upload-mode
6032   type: RelaxedAtomicInt32
6033   value: 4
6034   mirror: always
6036 # Whether to force widgets to don't support acceleration to use WebRender
6037 # despite that
6038 - name: gfx.webrender.unaccelerated-widget.force
6039   type: RelaxedAtomicBool
6040   value: false
6041   mirror: always
6043 # Enable a lower quality, but higher performance pinch-zoom mode. Primarily
6044 # for devices with weak GPUs, or when running SWGL.
6045 - name: gfx.webrender.low-quality-pinch-zoom
6046   type: bool
6047 #if defined(MOZ_WIDGET_ANDROID) && defined(NIGHTLY_BUILD)
6048   value: true
6049 #else
6050   value: false
6051 #endif
6052   mirror: once
6054 # Use vsync events generated by hardware
6055 - name: gfx.work-around-driver-bugs
6056   type: bool
6057   value: true
6058   mirror: once
6060 - name: gfx.ycbcr.accurate-conversion
6061   type: RelaxedAtomicBool
6062   value: false
6063   mirror: always
6065 #---------------------------------------------------------------------------
6066 # Prefs starting with "gl." (OpenGL)
6067 #---------------------------------------------------------------------------
6069 - name: gl.allow-high-power
6070   type: RelaxedAtomicBool
6071   value: true
6072   mirror: always
6074 - name: gl.ignore-dx-interop2-blacklist
6075   type: RelaxedAtomicBool
6076   value: false
6077   mirror: always
6079 - name: gl.use-tls-is-current
6080   type: RelaxedAtomicInt32
6081   value: 0
6082   mirror: always
6084 #---------------------------------------------------------------------------
6085 # Prefs starting with "html5."
6086 #---------------------------------------------------------------------------
6088 # Turn HTML:inert on or off.
6090 # Do not enable this by default until there's consensus in:
6091 # https://github.com/whatwg/html/issues/7796
6092 - name: html5.inert.enabled
6093   type: bool
6094   value: @IS_EARLY_BETA_OR_EARLIER@
6095   mirror: always
6097 # Toggle which thread the HTML5 parser uses for stream parsing.
6098 - name: html5.offmainthread
6099   type: bool
6100   value: true
6101   mirror: always
6103 # Time in milliseconds between the time a network buffer is seen and the timer
6104 # firing when the timer hasn't fired previously in this parse in the
6105 # off-the-main-thread HTML5 parser.
6106 - name: html5.flushtimer.initialdelay
6107   type: RelaxedAtomicInt32
6108   value: 16
6109   mirror: always
6111 # Time in milliseconds between the time a network buffer is seen and the timer
6112 # firing when the timer has already fired previously in this parse.
6113 - name: html5.flushtimer.subsequentdelay
6114   type: RelaxedAtomicInt32
6115   value: 16
6116   mirror: always
6118 #---------------------------------------------------------------------------
6119 # Prefs starting with "idle_period."
6120 #---------------------------------------------------------------------------
6122 - name: idle_period.min
6123   type: uint32_t
6124   value: 3
6125   mirror: always
6127 - name: idle_period.during_page_load.min
6128   type: uint32_t
6129   value: 12
6130   mirror: always
6132 - name: idle_period.cross_process_scheduling
6133   type: RelaxedAtomicBool
6134   value: true
6135   mirror: always
6137 #---------------------------------------------------------------------------
6138 # Prefs starting with "image."
6139 #---------------------------------------------------------------------------
6141 # The maximum size (in kB) that the aggregate frames of an animation can use
6142 # before it starts to discard already displayed frames and redecode them as
6143 # necessary.
6144 - name: image.animated.decode-on-demand.threshold-kb
6145   type: RelaxedAtomicUint32
6146   value: 20*1024
6147   mirror: always
6149 # The minimum number of frames we want to have buffered ahead of an
6150 # animation's currently displayed frame.
6151 - name: image.animated.decode-on-demand.batch-size
6152   type: RelaxedAtomicUint32
6153   value: 6
6154   mirror: always
6156 # Whether we should recycle already displayed frames instead of discarding
6157 # them. This saves on the allocation itself, and may be able to reuse the
6158 # contents as well. Only applies if generating full frames.
6159 - name: image.animated.decode-on-demand.recycle
6160   type: bool
6161   value: true
6162   mirror: once
6164 # Resume an animated image from the last displayed frame rather than
6165 # advancing when out of view.
6166 - name: image.animated.resume-from-last-displayed
6167   type: RelaxedAtomicBool
6168   value: true
6169   mirror: always
6171 # Maximum number of surfaces for an image before entering "factor of 2" mode.
6172 # This in addition to the number of "native" sizes of an image. A native size
6173 # is a size for which we can decode a frame without up or downscaling. Most
6174 # images only have 1, but some (i.e. ICOs) may have multiple frames for the
6175 # same data at different sizes.
6176 - name: image.cache.factor2.threshold-surfaces
6177   type: RelaxedAtomicInt32
6178   value: 4
6179   mirror: always
6181 # Maximum size of a surface in KB we are willing to produce when rasterizing
6182 # an SVG.
6183 - name: image.cache.max-rasterized-svg-threshold-kb
6184   type: RelaxedAtomicInt32
6185   value: 200*1024
6186   mirror: always
6188 # The maximum size, in bytes, of the decoded images we cache.
6189 - name: image.cache.size
6190   type: int32_t
6191   value: 5*1024*1024
6192   mirror: once
6194 # A weight, from 0-1000, to place on time when comparing to size.
6195 # Size is given a weight of 1000 - timeweight.
6196 - name: image.cache.timeweight
6197   type: int32_t
6198   value: 500
6199   mirror: once
6201 # Decode all images automatically on load, ignoring our normal heuristics.
6202 - name: image.decode-immediately.enabled
6203   type: RelaxedAtomicBool
6204   value: false
6205   mirror: always
6207 # Whether we attempt to downscale images during decoding.
6208 - name: image.downscale-during-decode.enabled
6209   type: RelaxedAtomicBool
6210   value: true
6211   mirror: always
6213 # Whether we use EXIF metadata for image density.
6214 - name: image.exif-density-correction.enabled
6215   type: RelaxedAtomicBool
6216   value: true
6217   mirror: always
6219 # Whether EXIF density metadata is sanity checked against PixelXDimension and PixelYDimension
6220 - name: image.exif-density-correction.sanity-check.enabled
6221   type: RelaxedAtomicBool
6222   value: true
6223   mirror: always
6225 # The threshold for inferring that changes to an <img> element's |src|
6226 # attribute by JavaScript represent an animation, in milliseconds. If the |src|
6227 # attribute is changing more frequently than this value, then we enter a
6228 # special "animation mode" which is designed to eliminate flicker. Set to 0 to
6229 # disable.
6230 - name: image.infer-src-animation.threshold-ms
6231   type: RelaxedAtomicUint32
6232   value: 2000
6233   mirror: always
6235 # Whether the network request priority should be adjusted according
6236 # the layout and view frame position of each particular image.
6237 - name: image.layout_network_priority
6238   type: RelaxedAtomicBool
6239   value: true
6240   mirror: always
6242 # Chunk size for calls to the image decoders.
6243 - name: image.mem.decode_bytes_at_a_time
6244   type: uint32_t
6245   value: 16384
6246   mirror: once
6248 # Discards inactive image frames and re-decodes them on demand from
6249 # compressed data.
6250 - name: image.mem.discardable
6251   type: RelaxedAtomicBool
6252   value: true
6253   mirror: always
6255 # Discards inactive image frames of _animated_ images and re-decodes them on
6256 # demand from compressed data. Has no effect if image.mem.discardable is false.
6257 - name: image.mem.animated.discardable
6258   type: bool
6259   value: true
6260   mirror: once
6262 # Whether the heap should be used for frames from animated images. On Android,
6263 # volatile memory keeps file handles open for each buffer.
6264 - name: image.mem.animated.use_heap
6265   type: RelaxedAtomicBool
6266   value: @IS_ANDROID@
6267   mirror: always
6269 # Enable extra information for debugging in the image memory reports.
6270 - name: image.mem.debug-reporting
6271   type: RelaxedAtomicBool
6272   value: false
6273   mirror: always
6275 # Decodes images into shared memory to allow direct use in separate
6276 # rendering processes. Only applicable with WebRender.
6277 - name: image.mem.shared
6278   type: RelaxedAtomicBool
6279   value: true
6280   mirror: always
6282 # Force unmapping of unused shared surfaces after a timeout period or when we
6283 # encounter virtual memory pressure. By default this is only enabled on 32-bit
6284 # Firefox.
6285 - name: image.mem.shared.unmap.force-enabled
6286   type: bool
6287   value: false
6288   mirror: once
6290 # Minimum timeout to unmap shared surfaces since they have been last used,
6291 # in milliseconds.
6292 - name: image.mem.shared.unmap.min_expiration_ms
6293   type: uint32_t
6294   value: 60*1000
6295   mirror: once
6297 # Mininum size for shared surfaces to consider unmapping, in kilobytes.
6298 - name: image.mem.shared.unmap.min_threshold_kb
6299   type: uint32_t
6300   value: 100
6301   mirror: once
6303 # How much of the data in the surface cache is discarded when we get a memory
6304 # pressure notification, as a fraction. The discard factor is interpreted as a
6305 # reciprocal, so a discard factor of 1 means to discard everything in the
6306 # surface cache on memory pressure, a discard factor of 2 means to discard half
6307 # of the data, and so forth. The default should be a good balance for desktop
6308 # and laptop systems, where we never discard visible images.
6309 - name: image.mem.surfacecache.discard_factor
6310   type: uint32_t
6311   value: 1
6312   mirror: once
6314 # Maximum size for the surface cache, in kilobytes.
6315 - name: image.mem.surfacecache.max_size_kb
6316   type: uint32_t
6317   value: 2024 * 1024
6318   mirror: once
6320 # Minimum timeout for expiring unused images from the surface cache, in
6321 # milliseconds. This controls how long we store cached temporary surfaces.
6322 - name: image.mem.surfacecache.min_expiration_ms
6323   type: uint32_t
6324   value: 60*1000
6325   mirror: once
6327 # The surface cache's size, within the constraints of the maximum size set
6328 # above, is determined as a fraction of main memory size. The size factor is
6329 # interpreted as a reciprocal, so a size factor of 4 means to use no more than
6330 # 1/4 of main memory.  The default should be a good balance for most systems.
6331 - name: image.mem.surfacecache.size_factor
6332   type: uint32_t
6333   value: 4
6334   mirror: once
6336 # Minimum buffer size in KB before using volatile memory over the heap.
6337 - name: image.mem.volatile.min_threshold_kb
6338   type: RelaxedAtomicInt32
6339 #if defined(ANDROID)
6340   # On Android, volatile memory keeps file handles open for each buffer.
6341   value: 100
6342 #else
6343   value: -1
6344 #endif
6345   mirror: always
6347 # How long in ms before we should start shutting down idle decoder threads.
6348 - name: image.multithreaded_decoding.idle_timeout
6349   type: int32_t
6350   value: 600000
6351   mirror: once
6353 # How many threads we'll use for multithreaded decoding. If < 0, will be
6354 # automatically determined based on the system's number of cores.
6355 - name: image.multithreaded_decoding.limit
6356   type: int32_t
6357   value: -1
6358   mirror: once
6360 # Whether we record SVG images as blobs or not.
6361 - name: image.svg.blob-image
6362   type: RelaxedAtomicBool
6363   value: false
6364   mirror: always
6366 # Whether we attempt to decode WebP images or not.
6367 - name: image.webp.enabled
6368   type: RelaxedAtomicBool
6369   value: true
6370   mirror: always
6372 # Whether we attempt to decode AVIF images or not.
6373 - name: image.avif.enabled
6374   type: RelaxedAtomicBool
6375 #if defined(MOZ_AV1)
6376   value: true
6377 #else
6378   value: false
6379 #endif
6380   mirror: always
6382 # How strict we are in accepting/rejecting AVIF inputs according to whether they
6383 # conform to the specification
6384 # 0 = Permissive: accept whatever we can simply, unambiguously interpret
6385 # 1 = Normal: reject violations of "shall" specification directives
6386 # 2 = Strict: reject violations of "should" specification directives
6387 - name: image.avif.compliance_strictness
6388   type: RelaxedAtomicInt32
6389   value: 1
6390   mirror: always
6392 # Whether we apply container-level transforms like mirroring and rotation
6393 - name: image.avif.apply_transforms
6394   type: RelaxedAtomicBool
6395   value: true
6396   mirror: always
6398 # Whether we use dav1d (true) or libaom (false) to decode AVIF image
6399 - name: image.avif.use-dav1d
6400   type: RelaxedAtomicBool
6401   value: true
6402   mirror: always
6404 # Whether we attempt to decode JXL images or not.
6405 - name: image.jxl.enabled
6406   type: RelaxedAtomicBool
6407   value: false
6408   mirror: always
6410 #---------------------------------------------------------------------------
6411 # Prefs starting with "intl."
6412 #---------------------------------------------------------------------------
6414 # If true, dispatch the keydown and keyup events on any web apps even during
6415 # composition.
6416 - name: intl.ime.hack.on_any_apps.fire_key_events_for_composition
6417   type: bool
6418   value: @IS_ANDROID@
6419   mirror: always
6421 # Android-specific pref to control if keydown and keyup events are fired even
6422 # during composition.  Note that those prefs are ignored if
6423 # dom.keyboardevent.dispatch_during_composition is false.
6424 - name: intl.ime.hack.on_ime_unaware_apps.fire_key_events_for_composition
6425   type: bool
6426 # If true and intl.ime.hack.on_any_apps.fire_key_events_for_composition is
6427 # false, dispatch the keydown and keyup events only on IME-unaware web apps.
6428 # So, this supports web apps which listen to only keydown or keyup events
6429 # to get a change to do something at every text input.
6430   value: @IS_ANDROID@
6431   mirror: always
6433 #ifdef XP_WIN
6434   # If true, automatically extend selection to cluster boundaries when
6435   # TSF/TIP requests to select from/by middle of a cluster.
6436 -   name: intl.tsf.hack.extend_setting_selection_range_to_cluster_boundaries
6437     type: bool
6438     value: @IS_NOT_EARLY_BETA_OR_EARLIER@
6439     mirror: always
6441 #if defined(ENABLE_TESTS)
6442   # If true, NS_GetComplexLineBreaks compares the line breaks produced in the
6443   # content process using the Uniscribe line breaker, with those from a
6444   # brokered call to the parent.
6445 -   name: intl.compare_against_brokered_complex_line_breaks
6446     type: bool
6447     value: false
6448     mirror: always
6449 #endif
6450 #endif
6452 # If you use legacy Chinese IME which puts an ideographic space to composition
6453 # string as placeholder, this pref might be useful.  If this is true and when
6454 # web contents forcibly commits composition (e.g., moving focus), the
6455 # ideographic space will be ignored (i.e., commits with empty string).
6456 - name: intl.ime.remove_placeholder_character_at_commit
6457   type: bool
6458   value: false
6459   mirror: always
6461 #if defined(XP_MACOSX) || defined(MOZ_WIDGET_GTK)
6462 # Whether text input without keyboard press nor IME composition should cause a
6463 # set of composition events or not.  E.g., when you use Emoji picker on macOS,
6464 # it inserts an Emoji character directly.  If set to true, `compositionstart`,
6465 # `compositionupdate` and `compositionend` events will be fired, and the
6466 # correspnding `beforeinput` events are not cancelable.  Otherwise, if set to
6467 # false, any user input events are not exposed to web apps but only
6468 # `beforeinput` event is fired as "insert text" as a cancelable event.
6469 - name: intl.ime.use_composition_events_for_insert_text
6470   type: bool
6471   value: false
6472   mirror: always
6473 #endif
6475 #---------------------------------------------------------------------------
6476 # Prefs starting with "javascript."
6478 # NOTE: SpiderMonkey starts up before `mirror: once` preferences are sealed and
6479 #       we cannot use them (Bug 1698311). Instead, we use `mirror: always`
6480 #       prefs but mark as `do_not_use_directly` and `LoadStartupJSPrefs` will
6481 #       mirror them into SpiderMonkey.
6482 #---------------------------------------------------------------------------
6484 # The JavaScript JIT compilers. These are read once on startup so a browser may
6485 # need to be restarted if toggling them. In general each subsequent JIT depends
6486 # on the ones before it being enabled.
6487 - name: javascript.options.blinterp
6488   type: bool
6489   value: true
6490   mirror: always  # LoadStartupJSPrefs
6491   do_not_use_directly: true
6493 - name: javascript.options.baselinejit
6494   type: bool
6495   value: true
6496   mirror: always  # LoadStartupJSPrefs
6497   do_not_use_directly: true
6499 - name: javascript.options.ion
6500   type: bool
6501   value: true
6502   mirror: always  # LoadStartupJSPrefs
6503   do_not_use_directly: true
6505 # The irregexp JIT for regex evaluation.
6506 - name: javascript.options.native_regexp
6507   type: bool
6508   value: true
6509   mirror: always  # LoadStartupJSPrefs
6510   do_not_use_directly: true
6512 # "Warm-up" thresholds at which we attempt to compile a script/function with
6513 # the next JIT tier.
6515 # NOTE: These must match JitOptions defaults.
6516 - name: javascript.options.blinterp.threshold
6517   type: int32_t
6518   value: 10
6519   mirror: always  # LoadStartupJSPrefs
6520   do_not_use_directly: true
6522 - name: javascript.options.baselinejit.threshold
6523   type: int32_t
6524   value: 100
6525   mirror: always  # LoadStartupJSPrefs
6526   do_not_use_directly: true
6528 - name: javascript.options.ion.threshold
6529   type: int32_t
6530   value: 1500
6531   mirror: always  # LoadStartupJSPrefs
6532   do_not_use_directly: true
6534 # Enable off-main-thread Warp compilation.
6535 - name: javascript.options.ion.offthread_compilation
6536   type: bool
6537   value: true
6538   mirror: always  # LoadStartupJSPrefs
6539   do_not_use_directly: true
6541 #ifdef DEBUG
6542   # Enable extra correctness checks in the JITs that are slow and only available
6543   # in debug builds.
6544 -   name: javascript.options.jit.full_debug_checks
6545     type: bool
6546     value: false
6547     mirror: always  # LoadStartupJSPrefs
6548     do_not_use_directly: true
6549 #endif
6551 # Heuristic threshold for Warp/Ion to decide that too many bailouts are
6552 # happening and an IonScript should be discarded.
6554 # NOTE: This must match JitOptions defaults.
6555 - name: javascript.options.ion.frequent_bailout_threshold
6556   type: int32_t
6557   value: 10
6558   mirror: always  # LoadStartupJSPrefs
6559   do_not_use_directly: true
6561 # A threshold for Warp to decide whether a function can be inlined.
6562 # If the size of a function is smaller than this threshold, then it
6563 # may be inlined.
6565 # NOTE: These must match JitOptions defaults.
6566 - name: javascript.options.inlining_bytecode_max_length
6567   type: uint32_t
6568   value: 130
6569   mirror: always
6570   do_not_use_directly: true
6572 # Whether the megamorphic property lookup cache is enabled.
6574 # NOTE: This must match JitOptions defaults.
6575 - name: javascript.options.watchtower.megamorphic
6576   type: bool
6577   value: true
6578   mirror: always  # LoadStartupJSPrefs
6579   do_not_use_directly: true
6581 - name: javascript.options.compact_on_user_inactive
6582   type: bool
6583   value: true
6584   mirror: always
6586 # The default amount of time to wait from the user being idle to starting a
6587 # shrinking GC. Measured in milliseconds.
6588 - name: javascript.options.compact_on_user_inactive_delay
6589   type: uint32_t
6590 #ifdef NIGHTLY_BUILD
6591   value: 15000
6592 #else
6593   value: 300000
6594 #endif
6595   mirror: always
6597 # Use better error message when accessing property of null or undefined.
6598 - name: javascript.options.property_error_message_fix
6599   type: bool
6600   value: @IS_NIGHTLY_OR_DEV_EDITION@
6601   mirror: always
6603 # Support for weak references in JavaScript (WeakRef and FinalizationRegistry).
6604 - name: javascript.options.weakrefs
6605   type: bool
6606   value: true
6607   mirror: always
6609 # Whether to expose the FinalizationRegistry.prototype.cleanupSome method.
6610 - name: javascript.options.experimental.weakrefs.expose_cleanupSome
6611   type: bool
6612   value: false
6613   mirror: always
6615 #ifdef NIGHTLY_BUILD
6616   # Experimental support for Iterator Helpers in JavaScript.
6617 -   name: javascript.options.experimental.iterator_helpers
6618     type: bool
6619     value: false
6620     mirror: always
6622   # Experimental support for Array Grouping in JavaScript.
6623 -   name: javascript.options.experimental.array_grouping
6624     type: bool
6625     value: true
6626     mirror: always
6627 #endif  // NIGHTLY_BUILD
6629 # Experimental support for class static blocks in JavaScript.
6630 -   name: javascript.options.experimental.class_static_blocks
6631     type: bool
6632     value: true
6633     mirror: always
6635 #ifdef NIGHTLY_BUILD
6636   # Experimental support for Import Assertions in JavaScript.
6637 -   name: javascript.options.experimental.import_assertions
6638     type: bool
6639     value: false
6640     mirror: always
6641 #endif  // NIGHTLY_BUILD
6643   # Support for Private Fields in JavaScript.
6644 - name: javascript.options.experimental.private_fields
6645   type: bool
6646   value: true
6647   mirror: always
6649   # Experimental support for Private Methods in JavaScript.
6650 - name: javascript.options.experimental.private_methods
6651   type: bool
6652   value: true
6653   mirror: always
6655   # Experimental support for the ergonomic brand check proposal.
6656 - name: javascript.options.experimental.ergonomic_brand_checks
6657   type: bool
6658   value: true
6659   mirror: always
6661   # Experimental support for change-array-by-copy methods
6662 - name: javascript.options.experimental.enable_change_array_by_copy
6663   type: bool
6664   value: false
6665   mirror: always
6667 #if defined(ENABLE_NEW_SET_METHODS)
6668   # Experimental support for New Set methods
6669 - name: javascript.options.experimental.enable_new_set_methods
6670   type: bool
6671   value: false
6672   mirror: always
6673 #endif
6675   # Experimental support for Top-level Await in JavaScript.
6676 -   name: javascript.options.experimental.top_level_await
6677     type: bool
6678     value: true
6679     mirror: always
6681 - name: javascript.options.wasm_caching
6682   type: bool
6683   value: true
6684   mirror: always
6686 # The amount of time we wait between a request to GC (due to leaving a page) and doing the actual GC, in ms.
6687 - name: javascript.options.gc_delay
6688   type: uint32_t
6689   value: 4000
6690   mirror: always
6692 # The amount of time we wait from the first request to GC to actually doing the first GC, in ms.
6693 - name: javascript.options.gc_delay.first
6694   type: uint32_t
6695   value: 10000
6696   mirror: always
6698 # After doing a zonal GC, wait this much time (in ms) and then do a full GC,
6699 # unless one is already pending.
6700 - name: javascript.options.gc_delay.full
6701   type: uint32_t
6702   value: 60000
6703   mirror: always
6705 # Maximum amount of time that should elapse between incremental GC slices, in ms.
6706 - name: javascript.options.gc_delay.interslice
6707   type: uint32_t
6708   value: 100
6709   mirror: always
6711 # nsJSEnvironmentObserver observes the memory-pressure notifications and
6712 # forces a garbage collection and cycle collection when it happens, if the
6713 # appropriate pref is set.
6714 - name: javascript.options.gc_on_memory_pressure
6715   type: bool
6716   # Disable the JS engine's GC on memory pressure, since we do one in the
6717   # mobile browser (bug 669346).
6718   # XXX: this value possibly should be changed, or the pref removed entirely.
6719   #      See bug 1450787.
6720   value: @IS_NOT_ANDROID@
6721   mirror: always
6723 # We allow at most MIN(max, MAX(NUM_CPUS / cpu_divisor, 1)) concurrent GCs
6724 # between processes
6725 - name: javascript.options.concurrent_multiprocess_gcs.cpu_divisor
6726   type: RelaxedAtomicUint32
6727   value: 4
6728   mirror: always
6730 # See 'cpu_divisor' above, 0 means UINT_32_MAX.
6731 - name: javascript.options.concurrent_multiprocess_gcs.max
6732   type: RelaxedAtomicUint32
6733   value: 0
6734   mirror: always
6736 - name: javascript.options.mem.log
6737   type: bool
6738   value: false
6739   mirror: always
6741 - name: javascript.options.mem.notify
6742   type: bool
6743   value: false
6744   mirror: always
6746 # Whether the Parent process allocates and shares memory with all content
6747 # processes. This is mirrored once, as the parent process will do this
6748 # allocation early on.
6749 - name: javascript.options.self_hosted.use_shared_memory
6750   type: bool
6751   value: true
6752   mirror: always  # LoadStartupJSPrefs
6753   do_not_use_directly: true
6755 - name: javascript.options.main_thread_stack_quota_cap
6756   type: uint32_t
6757 #if defined(MOZ_ASAN)
6758   value: 6 * 1024 * 1024
6759 #else
6760   value: 2 * 1024 * 1024
6761 #endif
6762   mirror: always
6764 - name: javascript.options.wasm_optimizingjit
6765   type: bool
6766   value: true
6767   mirror: always
6769 #if defined(ENABLE_WASM_SIMD)
6770 -   name: javascript.options.wasm_simd
6771     type: bool
6772     value: true
6773     mirror: always
6774 #endif  // defined(ENABLE_WASM_SIMD)
6776 #if defined(ENABLE_WASM_RELAXED_SIMD)
6777 -   name: javascript.options.wasm_relaxed_simd
6778     type: bool
6779     value: @IS_NIGHTLY_BUILD@
6780     mirror: always
6781 #endif  // defined(ENABLE_WASM_RELAXED_SIMD)
6783 #if defined(ENABLE_WASM_MOZ_INTGEMM)
6784 -   name: javascript.options.wasm_moz_intgemm
6785     type: bool
6786     value: @IS_NIGHTLY_BUILD@
6787     mirror: always
6788 #endif  // defined(ENABLE_WASM_MOZ_INTGEMM)
6790 #if defined(ENABLE_WASM_EXTENDED_CONST)
6791 -   name: javascript.options.wasm_extended_const
6792     type: bool
6793     value: @IS_NIGHTLY_BUILD@
6794     mirror: always
6795 #endif  // defined(ENABLE_WASM_EXTENDED_CONST)
6797 #if defined(ENABLE_WASM_EXCEPTIONS)
6798 -   name: javascript.options.wasm_exceptions
6799     type: bool
6800     value: true
6801     mirror: always
6802 #endif // defined(ENABLE_WASM_EXCEPTIONS)
6804 #if defined(ENABLE_WASM_FUNCTION_REFERENCES)
6805 -   name: javascript.options.wasm_function_references
6806     type: bool
6807     value: false
6808     mirror: always
6809 #endif // defined(ENABLE_WASM_FUNCTION_REFERENCES)
6811 #if defined(ENABLE_WASM_GC)
6812 -   name: javascript.options.wasm_gc
6813     type: bool
6814     value: false
6815     mirror: always
6816 #endif // defined(ENABLE_WASM_GC)
6818 #if defined(ENABLE_WASM_SIMD_WORMHOLE) && defined(EARLY_BETA_OR_EARLIER)
6819   # This is x64-only and it would break unified macOS builds if
6820   # it were in all.js.  The feature rides the trains but not the
6821   # pref to control it; in late beta and release, it is only
6822   # available to privileged content.
6823 -   name: javascript.options.wasm_simd_wormhole
6824     type: bool
6825     value: false
6826     mirror: always
6827 #endif
6829 #if defined(ENABLE_WASM_SIMD)
6830 #if defined(JS_CODEGEN_X64) || defined(JS_CODEGEN_X86)
6831   # Enables AVX instructions support on X86/X64 platforms.
6832   # Changing these prefs requires a restart.
6833 -   name: javascript.options.wasm_simd_avx
6834     type: bool
6835     value: true
6836     mirror: always
6837 #endif
6838 #endif
6840 #if defined(ENABLE_WASM_MEMORY64)
6841 -   name: javascript.options.wasm_memory64
6842     type: bool
6843     value: @IS_NIGHTLY_BUILD@
6844     mirror: always
6845 #endif  // defined(ENABLE_WASM_MEMORY64)
6847 # Support for ArrayBuffers larger than 2 GB on 64-bit systems
6848 - name: javascript.options.large_arraybuffers
6849   type: bool
6850   value: true
6851   mirror: always  # LoadStartupJSPrefs
6852   do_not_use_directly: true
6854 # Support for pretenuring allocations based on their allocation site.
6855 - name: javascript.options.site_based_pretenuring
6856   type: bool
6857   value: true
6858   mirror: always  # LoadStartupJSPrefs
6859   do_not_use_directly: true
6861 #if !defined(JS_CODEGEN_MIPS32) && !defined(JS_CODEGEN_MIPS64)
6862   # Spectre security vulnerability mitigations for the JS JITs.
6863   #
6864   # NOTE: The MIPS backends do not support these mitigations (and generally
6865   #       do not need them). In that case, leave the pref unlisted with its
6866   #       default value of false.
6867 -   name: javascript.options.spectre.index_masking
6868     type: bool
6869     value: true
6870     mirror: always  # LoadStartupJSPrefs
6871     do_not_use_directly: true
6873 -   name: javascript.options.spectre.object_mitigations
6874     type: bool
6875     value: true
6876     mirror: always  # LoadStartupJSPrefs
6877     do_not_use_directly: true
6879 -   name: javascript.options.spectre.string_mitigations
6880     type: bool
6881     value: true
6882     mirror: always  # LoadStartupJSPrefs
6883     do_not_use_directly: true
6885 -   name: javascript.options.spectre.value_masking
6886     type: bool
6887     value: true
6888     mirror: always  # LoadStartupJSPrefs
6889     do_not_use_directly: true
6891 -   name: javascript.options.spectre.jit_to_cxx_calls
6892     type: bool
6893     value: true
6894     mirror: always  # LoadStartupJSPrefs
6895     do_not_use_directly: true
6896 #endif  // !defined(JS_CODEGEN_MIPSXX)
6898 # Whether to use the XPCOM thread pool for JS helper tasks.
6899 - name: javascript.options.external_thread_pool
6900   type: bool
6901   value: true
6902   mirror: always
6903   do_not_use_directly: true
6905 # Whether to use fdlibm for Math.sin, Math.cos, and Math.tan. When
6906 # privacy.resistFingerprinting is true, this pref is ignored and fdlibm is used
6907 # anyway.
6908 - name: javascript.options.use_fdlibm_for_sin_cos_tan
6909   type: bool
6910   value: false
6911   mirror: always
6913 #---------------------------------------------------------------------------
6914 # Prefs starting with "layers."
6915 #---------------------------------------------------------------------------
6917 # Whether to disable acceleration for all widgets.
6918 - name: layers.acceleration.disabled
6919   type: bool
6920   value: false
6921   mirror: once
6922   do_not_use_directly: true
6923 # Instead, use gfxConfig::IsEnabled(Feature::HW_COMPOSITING).
6925 # Whether to force acceleration on, ignoring blacklists.
6927 # bug 838603 -- on Android, accidentally blacklisting OpenGL layers
6928 # means a startup crash for everyone.
6929 # Temporarily force-enable GL compositing.  This is default-disabled
6930 # deep within the bowels of the widgetry system.  Remove me when GL
6931 # compositing isn't default disabled in widget/android.
6932 - name: layers.acceleration.force-enabled
6933   type: bool
6934   value: @IS_ANDROID@
6935   mirror: once
6936   do_not_use_directly: true
6938 # Whether we allow AMD switchable graphics.
6939 - name: layers.amd-switchable-gfx.enabled
6940   type: bool
6941   value: true
6942   mirror: once
6944 # Whether to use async panning and zooming.
6945 - name: layers.async-pan-zoom.enabled
6946   type: bool
6947   value: true
6948   mirror: once
6949   do_not_use_directly: true
6951 - name: layers.child-process-shutdown
6952   type: RelaxedAtomicBool
6953   value: true
6954   mirror: always
6956 - name: layers.d3d11.force-warp
6957   type: bool
6958   value: false
6959   mirror: once
6961 - name: layers.d3d11.enable-blacklist
6962   type: bool
6963   value: true
6964   mirror: once
6966 # Enable DEAA antialiasing for transformed layers in the compositor.
6967 - name: layers.deaa.enabled
6968   type: RelaxedAtomicBool
6969 #if defined(MOZ_WIDGET_ANDROID)
6970   value: false
6971 #else
6972   value: true
6973 #endif
6974   mirror: always
6976 # Force all possible layers to be always active layers.
6977 - name: layers.force-active
6978   type: bool
6979   value: false
6980   mirror: always
6982 - name: layers.force-shmem-tiles
6983   type: bool
6984   value: false
6985   mirror: once
6987 - name: layers.draw-mask-debug
6988   type: RelaxedAtomicBool
6989   value: false
6990   mirror: always
6992 - name: layers.force-synchronous-resize
6993   type: RelaxedAtomicBool
6994 #ifdef MOZ_WAYLAND
6995   # We want to control it by nsWindow::SynchronouslyRepaintOnResize() on Linux/Wayland.
6996   value: false
6997 #else
6998   value: true
6999 #endif
7000   mirror: always
7002 - name: layers.gpu-process.allow-software
7003   type: bool
7004 #if defined(XP_WIN)
7005   value: true
7006 #else
7007   value: false
7008 #endif
7009   mirror: once
7011 - name: layers.gpu-process.enabled
7012   type: bool
7013 #if defined(XP_WIN) || defined(MOZ_WIDGET_ANDROID)
7014   value: true
7015 #else
7016   value: false
7017 #endif
7018   mirror: once
7020 - name: layers.gpu-process.force-enabled
7021   type: bool
7022   value: false
7023   mirror: once
7025 - name: layers.gpu-process.ipc_reply_timeout_ms
7026   type: int32_t
7027   value: 10000
7028   mirror: once
7030 # How many unstable GPU process restarts we allow for a given configuration.
7031 - name: layers.gpu-process.max_restarts
7032   type: RelaxedAtomicInt32
7033 #if defined(XP_WIN) || defined(MOZ_WIDGET_GTK) || defined(MOZ_WIDGET_ANDROID)
7034   #if defined(NIGHTLY_BUILD)
7035   value: 6
7036   #else
7037   value: 3
7038   #endif
7039 #else
7040   value: 1
7041 #endif
7042   mirror: always
7044 # How many frames we must render before declaring the GPU process stable, and
7045 # allow restarts without it counting against our maximum restarts.
7046 - name: layers.gpu-process.stable.frame-threshold
7047   type: RelaxedAtomicUint32
7048   value: 10
7049   mirror: always
7051 # How many milliseconds the GPU process must have lived before we accept that
7052 # it is stable, and allow restarts without it counting against our maximum
7053 # restarts.
7054 - name: layers.gpu-process.stable.min-uptime-ms
7055   type: RelaxedAtomicInt32
7056   value: 4 * 60000
7057   mirror: always
7059 # Note: This pref will only be used if it is less than layers.gpu-process.max_restarts.
7060 - name: layers.gpu-process.max_restarts_with_decoder
7061   type: RelaxedAtomicInt32
7062   value: 0
7063   mirror: always
7065 - name: layers.gpu-process.startup_timeout_ms
7066   type: int32_t
7067   value: 5000
7068   mirror: once
7070 - name: layers.gpu-process.crash-also-crashes-browser
7071   type: bool
7072   value: false
7073   mirror: always
7075 - name: layers.low-precision-buffer
7076   type: RelaxedAtomicBool
7077   value: false
7078   mirror: always
7080 - name: layers.low-precision-resolution
7081   type: AtomicFloat
7082   value: 0.25f
7083   mirror: always
7085 # Whether to animate simple opacity and transforms on the compositor.
7086 - name: layers.offmainthreadcomposition.async-animations
7087   type: bool
7088   value: true
7089   mirror: always
7091 # Whether to log information about off main thread animations to stderr.
7092 - name: layers.offmainthreadcomposition.log-animations
7093   type: bool
7094   value: false
7095   mirror: always
7097 - name: layers.offmainthreadcomposition.force-disabled
7098   type: bool
7099   value: false
7100   mirror: once
7102 # Compositor target frame rate. NOTE: If vsync is enabled the compositor
7103 # frame rate will still be capped.
7104 # -1 -> default (match layout.frame_rate or 60 FPS)
7105 # 0  -> full-tilt mode: Recomposite even if not transaction occured.
7106 - name: layers.offmainthreadcomposition.frame-rate
7107   type: RelaxedAtomicInt32
7108   value: -1
7109   mirror: always
7111 #ifdef XP_WIN
7112 -   name: layers.prefer-opengl
7113     type: bool
7114     value: false
7115     mirror: once
7116 #endif
7118 # Copy-on-write canvas.
7119 - name: layers.shared-buffer-provider.enabled
7120   type: RelaxedAtomicBool
7121   value: true
7122   mirror: always
7124 - name: layers.recycle-allocator-rdd
7125   type: bool
7126   value: true
7127   mirror: once
7129 - name: layers.iosurfaceimage.recycle-limit
7130   type: RelaxedAtomicUint32
7131   value: 15
7132   mirror: always
7134 - name: layers.iosurfaceimage.use-nv12
7135   type: bool
7136   value: true
7137   mirror: once
7139 #---------------------------------------------------------------------------
7140 # Prefs starting with "layout."
7141 #---------------------------------------------------------------------------
7143 # Debug-only pref to force enable the AccessibleCaret. If you want to
7144 # control AccessibleCaret by mouse, you'll need to set
7145 # "layout.accessiblecaret.hide_carets_for_mouse_input" to false.
7146 - name: layout.accessiblecaret.enabled
7147   type: bool
7148   value: false
7149   mirror: always
7151 # Enable the accessible caret on platforms/devices
7152 # that we detect have touch support. Note that this pref is an
7153 # additional way to enable the accessible carets, rather than
7154 # overriding the layout.accessiblecaret.enabled pref.
7155 - name: layout.accessiblecaret.enabled_on_touch
7156   type: bool
7157   value: true
7158   mirror: always
7160 # By default, carets become tilt only when they are overlapping.
7161 - name: layout.accessiblecaret.always_tilt
7162   type: bool
7163   value: false
7164   mirror: always
7166 # Show caret in cursor mode when long tapping on an empty content. This
7167 # also changes the default update behavior in cursor mode, which is based
7168 # on the emptiness of the content, into something more heuristic. See
7169 # AccessibleCaretManager::UpdateCaretsForCursorMode() for the details.
7170 - name: layout.accessiblecaret.caret_shown_when_long_tapping_on_empty_content
7171   type: bool
7172   value: false
7173   mirror: always
7175 # 0 = by default, always hide carets for selection changes due to JS calls.
7176 # 1 = update any visible carets for selection changes due to JS calls,
7177 #     but don't show carets if carets are hidden.
7178 # 2 = always show carets for selection changes due to JS calls.
7179 - name: layout.accessiblecaret.script_change_update_mode
7180   type: int32_t
7181   value: 0
7182   mirror: always
7184 # Allow one caret to be dragged across the other caret without any limitation.
7185 # This matches the built-in convention for all desktop platforms.
7186 - name: layout.accessiblecaret.allow_dragging_across_other_caret
7187   type: bool
7188   value: true
7189   mirror: always
7191 # Optionally provide haptic feedback on long-press selection events.
7192 - name: layout.accessiblecaret.hapticfeedback
7193   type: bool
7194   value: false
7195   mirror: always
7197 # Smart phone-number selection on long-press is not enabled by default.
7198 - name: layout.accessiblecaret.extend_selection_for_phone_number
7199   type: bool
7200   value: false
7201   mirror: always
7203 # Keep the accessible carets hidden when the user is using mouse input (as
7204 # opposed to touch/pen/etc.).
7205 - name: layout.accessiblecaret.hide_carets_for_mouse_input
7206   type: bool
7207   value: true
7208   mirror: always
7210 # CSS attributes (width, height, margin-left) of the AccessibleCaret in CSS
7211 # pixels.
7212 - name: layout.accessiblecaret.width
7213   type: float
7214   value: 34.0f
7215   mirror: always
7217 - name: layout.accessiblecaret.height
7218   type: float
7219   value: 36.0f
7220   mirror: always
7222 - name: layout.accessiblecaret.margin-left
7223   type: float
7224   value: -18.5f
7225   mirror: always
7227 - name: layout.accessiblecaret.transition-duration
7228   type: float
7229   value: 250.0f
7230   mirror: always
7232 # Simulate long tap events to select words. Mainly used in manual testing
7233 # with mouse.
7234 - name: layout.accessiblecaret.use_long_tap_injector
7235   type: bool
7236   value: false
7237   mirror: always
7239 # To support magnify glass, whether we dispatch additional chrome event such as
7240 # dragcaret.
7241 - name: layout.accessiblecaret.magnifier.enabled
7242   type: bool
7243   value: @IS_ANDROID@
7244   mirror: always
7246 # One of several prefs affecting the maximum area to pre-render when animating
7247 # a large element on the compositor.
7248 # This pref enables transform (and transform like properties) animations on a
7249 # large element run on the compositor with rendering partial area of the
7250 # element on the main thread instead of rendering the whole area.  Once the
7251 # animation tried to composite out of the partial rendered area, the animation
7252 # is rendered again with the latest visible partial area.
7253 - name: layout.animation.prerender.partial
7254   type: RelaxedAtomicBool
7255   value: false
7256   mirror: always
7258 # One of several prefs affecting the maximum area to pre-render when animating
7259 # a large element on the compositor.
7260 # This value is applied to both x and y axes and a perfect square contructed
7261 # by the greater axis value which will be capped by the absolute limits is used
7262 # for the partial pre-render area.
7263 - name: layout.animation.prerender.viewport-ratio-limit
7264   type: AtomicFloat
7265   value: 1.125f
7266   mirror: always
7268 # One of several prefs affecting the maximum area to pre-render when animating
7269 # a large element on the compositor.
7270 - name: layout.animation.prerender.absolute-limit-x
7271   type: RelaxedAtomicUint32
7272   value: 4096
7273   mirror: always
7275 # One of several prefs affecting the maximum area to pre-render when animating
7276 # a large element on the compositor.
7277 - name: layout.animation.prerender.absolute-limit-y
7278   type: RelaxedAtomicUint32
7279   value: 4096
7280   mirror: always
7282 # Test-only pref, if this is true, partial pre-rendered transform animations
7283 # get stuck when it reaches to the pre-rendered boundaries and the pre-render
7284 # region is never updated.
7285 - name: layout.animation.prerender.partial.jank
7286   type: RelaxedAtomicBool
7287   value: false
7288   mirror: always
7290 # Override DPI. A value of -1 means use the maximum of 96 and the system DPI.
7291 # A value of 0 means use the system DPI. A positive value is used as the DPI.
7292 # This sets the physical size of a device pixel and thus controls the
7293 # interpretation of physical units such as "pt".
7294 - name: layout.css.dpi
7295   type: int32_t
7296   value: -1
7297   mirror: always
7299 # Whether non-standard caption-side values are enabled
7300 - name: layout.css.caption-side-non-standard.enabled
7301   type: RelaxedAtomicBool
7302   value: false
7303   mirror: always
7304   rust: true
7306 # Whether @layer is enabled
7307 - name: layout.css.cascade-layers.enabled
7308   type: RelaxedAtomicBool
7309   value: true
7310   mirror: always
7311   rust: true
7313 # Whether Container Queries are enabled
7314 - name: layout.css.container-queries.enabled
7315   type: RelaxedAtomicBool
7316   value: false
7317   mirror: always
7318   rust: true
7320 # Whether Constructable Stylesheets are enabled in script.
7321 - name: layout.css.constructable-stylesheets.enabled
7322   type: bool
7323   value: true
7324   mirror: always
7326 # Whether trigonometric constants and functions are enabled in calc().
7327 - name: layout.css.trig.enabled
7328   type: RelaxedAtomicBool
7329   value: false
7330   mirror: always
7331   rust: true
7333 # Should we look for counter ancestor scopes first?
7334 - name: layout.css.counter-ancestor-scope.enabled
7335   type: bool
7336   value: true
7337   mirror: always
7339 # Whether we get notified of history queries for visited even if unvisited.
7340 - name: layout.css.notify-of-unvisited
7341   type: RelaxedAtomicBool
7342   value: true
7343   mirror: always
7345 # Whether we always restyle / repaint as a result of a visited query
7346 - name: layout.css.always-repaint-on-unvisited
7347   type: RelaxedAtomicBool
7348   value: true
7349   mirror: always
7351 # Make `zoom` a `transform` + `transform-origin` alias.
7352 - name: layout.css.zoom-transform-hack.enabled
7353   type: RelaxedAtomicBool
7354   value: false
7355   mirror: always
7356   rust: true
7358 # Whether the `-moz-control-character-visibility` property is exposed to
7359 # content.
7361 # Only for testing purposes.
7362 - name: layout.css.moz-control-character-visibility.enabled
7363   type: RelaxedAtomicBool
7364   value: false
7365   mirror: always
7366   rust: true
7368 # Whether the `accent-color` css property is enabled.
7369 - name: layout.css.accent-color.enabled
7370   type: RelaxedAtomicBool
7371   value: true
7372   mirror: always
7373   rust: true
7375 # Whether the `color-scheme` css property and meta tags are enabled.
7376 - name: layout.css.color-scheme.enabled
7377   type: RelaxedAtomicBool
7378   value: true
7379   mirror: always
7380   rust: true
7382 # The minimum contrast ratio between the accent color foreground and background
7383 # colors.
7385 # We don't use this for text, so we need a contrast of at least AA (for user
7386 # interface components and graphical objects), which per WCAG is 3:1
7387 - name: layout.css.accent-color.min-contrast-ratio
7388   type: AtomicFloat
7389   value: 3.0
7390   mirror: always
7392 # The target contrast ratio between the accent color foreground and background
7393 # colors when darkening.
7395 # We aim a bit further than the minimum contrast ratio, which seems to provide
7396 # nice results in practice.
7397 - name: layout.css.accent-color.darkening-target-contrast-ratio
7398   type: AtomicFloat
7399   value: 6.0
7400   mirror: always
7403 # Whether the `aspect-ratio` in css-sizing-4 is enabled.
7404 - name: layout.css.aspect-ratio.enabled
7405   type: bool
7406   value: true
7407   mirror: always
7408   rust: true
7410 # Is the codepath for using cached scrollbar styles enabled?
7411 - name: layout.css.cached-scrollbar-styles.enabled
7412   type: bool
7413   value: true
7414   mirror: always
7416 # Whether we should return an empty style on invalid pseudo-elements starting
7417 # with a colon.
7419 # Old behavior is returning an empty style if the string starts with a double
7420 # colon, and return the regular style otherwise.
7421 - name: layout.css.computed-style.new-invalid-pseudo-element-behavior
7422   type: bool
7423   value: true
7424   mirror: always
7426 # Whether computed local-fragment-only image urls serialize using the same
7427 # rules as filter/mask/etc (not resolving the URL for local refs).
7429 # See https://github.com/w3c/csswg-drafts/issues/3195
7430 - name: layout.css.computed-style.dont-resolve-image-local-refs
7431   type: RelaxedAtomicBool
7432   value: true
7433   mirror: always
7434   rust: true
7436 # Whether we should expose all shorthands in getComputedStyle().
7437 - name: layout.css.computed-style.shorthands
7438   type: bool
7439   value: true
7440   mirror: always
7442 # Whether we should avoid exposing styles of elements outside the flat tree in getComputedStyle().
7443 - name: layout.css.computed-style.styles-outside-flat-tree
7444   type: bool
7445   value: @IS_NOT_NIGHTLY_BUILD@
7446   mirror: always
7448 # Are implicit tracks in computed grid templates serialized?
7449 - name: layout.css.serialize-grid-implicit-tracks
7450   type: RelaxedAtomicBool
7451   value: true
7452   mirror: always
7454 # Whether the system-ui generic family is enabled.
7455 - name: layout.css.system-ui.enabled
7456   type: RelaxedAtomicBool
7457   value: true
7458   mirror: always
7459   rust: true
7461 # Whether the rule hash is applied to attribute names too, not
7462 # only classes / id / namespaces / etc.
7463 - name: layout.css.bucket-attribute-names.enabled
7464   type: RelaxedAtomicBool
7465   value: true
7466   mirror: always
7467   rust: true
7469 # Set the number of device pixels per CSS pixel. A value <= 0 means choose
7470 # automatically based on user settings for the platform (e.g., "UI scale factor"
7471 # on Mac). A positive value is used as-is. This effectively controls the size
7472 # of a CSS "px". This is only used for windows on the screen, not for printing.
7473 - name: layout.css.devPixelsPerPx
7474   type: AtomicFloat
7475   value: -1.0f
7476   mirror: always
7478 # Is support for CSS backdrop-filter enabled?
7479 - name: layout.css.backdrop-filter.enabled
7480   type: bool
7481   value: false
7482   mirror: always
7484 # Should stray control characters be rendered visibly?
7485 - name: layout.css.control-characters.visible
7486   type: RelaxedAtomicBool
7487   value: @IS_NOT_RELEASE_OR_BETA@
7488   mirror: always
7489   rust: true
7491 # Whether the `content-visibility` CSS property is enabled
7492 - name: layout.css.content-visibility.enabled
7493   type: RelaxedAtomicBool
7494   value: false
7495   mirror: always
7496   rust: true
7498 # Is support for GeometryUtils.convert*FromNode enabled?
7499 - name: layout.css.convertFromNode.enabled
7500   type: bool
7501   value: @IS_NOT_RELEASE_OR_BETA@
7502   mirror: always
7504 - name: layout.css.cross-fade.enabled
7505   type: RelaxedAtomicBool
7506   value: false
7507   mirror: always
7508   rust: true
7510 # Is support for color-mix on content enabled?
7511 - name: layout.css.color-mix.enabled
7512   type: RelaxedAtomicBool
7513   value: @IS_NIGHTLY_BUILD@
7514   mirror: always
7515   rust: true
7517 # Is support for color-mix with non-SRGB color spaces on content enabled?
7518 - name: layout.css.color-mix.color-spaces.enabled
7519   type: RelaxedAtomicBool
7520   value: @IS_NIGHTLY_BUILD@
7521   mirror: always
7522   rust: true
7524 # Is support for d property for SVG path element?
7525 - name: layout.css.d-property.enabled
7526   type: bool
7527   value: true
7528   mirror: always
7530 # Are we emulating -moz-{inline}-box layout using CSS flexbox?
7531 - name: layout.css.emulate-moz-box-with-flex
7532   type: bool
7533   value: false
7534   mirror: always
7536 # Is support for fit-content() enabled?
7537 - name: layout.css.fit-content-function.enabled
7538   type: RelaxedAtomicBool
7539   value: false
7540   mirror: always
7541   rust: true
7543 # Is support for the font-display @font-face descriptor enabled?
7544 - name: layout.css.font-display.enabled
7545   type: RelaxedAtomicBool
7546   value: true
7547   mirror: always
7548   rust: true
7550 # Is support for document.fonts enabled?
7551 - name: layout.css.font-loading-api.enabled
7552   type: bool
7553   value: true
7554   mirror: always
7556 # Is support for the @font-face metrics override descriptors enabled?
7557 - name: layout.css.font-metrics-overrides.enabled
7558   type: RelaxedAtomicBool
7559   value: true
7560   mirror: always
7561   rust: true
7563 # Is support for variation fonts enabled?
7564 - name: layout.css.font-variations.enabled
7565   type: RelaxedAtomicBool
7566   value: true
7567   mirror: always
7568   rust: true
7570 # Is support for the size-adjust @font-face descriptor enabled?
7571 - name: layout.css.size-adjust.enabled
7572   type: RelaxedAtomicBool
7573   value: true
7574   mirror: always
7575   rust: true
7577 # Is the optional adjustment-basis value for font-size-adjust enabled?
7578 - name: layout.css.font-size-adjust.basis.enabled
7579   type: RelaxedAtomicBool
7580   value: true
7581   mirror: always
7582   rust: true
7584 # Visibility level of font families available to CSS font-matching:
7585 #   1 - only base system fonts
7586 #   2 - also fonts from optional language packs
7587 #   3 - also user-installed fonts
7588 - name: layout.css.font-visibility.standard
7589   type: int32_t
7590   value: 3
7591   mirror: always
7593 # font-visibility setting when Tracking Protection is enabled
7594 - name: layout.css.font-visibility.trackingprotection
7595   type: int32_t
7596   value: 3
7597   mirror: always
7599 # font-visibility setting when Resist Fingerprinting is enabled
7600 - name: layout.css.font-visibility.resistFingerprinting
7601   type: int32_t
7602   value: 1
7603   mirror: always
7605 # Max font-visibility setting for Private Browsing contexts
7606 # (The actual value used in a private-browsing context will be the lesser of
7607 # the appropriate standard/trackingprotection/RFP value from above, and the
7608 # private-browsing level specified by this pref.)
7609 - name: layout.css.font-visibility.private
7610   type: int32_t
7611   value: 3
7612   mirror: always
7614 # Is support for GeometryUtils.getBoxQuads enabled?
7615 - name: layout.css.getBoxQuads.enabled
7616   type: bool
7617   value: @IS_NOT_RELEASE_OR_BETA@
7618   mirror: always
7620 # Is support for CSS "grid-template-{columns,rows}: subgrid X" enabled?
7621 - name: layout.css.grid-template-subgrid-value.enabled
7622   type: RelaxedAtomicBool
7623   value: true
7624   mirror: always
7625   rust: true
7627 # Is support for caching an grid item's block axis measurement enabled?
7628 - name: layout.css.grid-item-baxis-measurement.enabled
7629   type: bool
7630   value: true
7631   mirror: always
7633 # Is support for CSS masonry layout enabled?
7634 - name: layout.css.grid-template-masonry-value.enabled
7635   type: RelaxedAtomicBool
7636   value: @IS_NIGHTLY_BUILD@
7637   mirror: always
7638   rust: true
7640 # Is support for CSS hyphenate-character enabled?
7641 - name: layout.css.hyphenate-character.enabled
7642   type: RelaxedAtomicBool
7643   value: true
7644   mirror: always
7646 # Is support for CSS individual transform enabled?
7647 - name: layout.css.individual-transform.enabled
7648   type: bool
7649   value: true
7650   mirror: always
7652 # Is support for CSS initial-letter property enabled?
7653 - name: layout.css.initial-letter.enabled
7654   type: bool
7655   value: false
7656   mirror: always
7658 # Pref to control whether line-height: -moz-block-height is exposed to content.
7659 - name: layout.css.line-height-moz-block-height.content.enabled
7660   type: RelaxedAtomicBool
7661   value: false
7662   mirror: always
7663   rust: true
7665 # Is support for motion-path enabled?
7666 - name: layout.css.motion-path.enabled
7667   type: bool
7668   value: true
7669   mirror: always
7671 # Is support for motion-path ray() enabled?
7672 - name: layout.css.motion-path-ray.enabled
7673   type: RelaxedAtomicBool
7674   value: @IS_NIGHTLY_BUILD@
7675   mirror: always
7676   rust: true
7678 # Pref to control whether the ::marker property restrictions defined in [1]
7679 # apply.
7681 # [1]: https://drafts.csswg.org/css-pseudo-4/#selectordef-marker
7682 - name: layout.css.marker.restricted
7683   type: RelaxedAtomicBool
7684   value: true
7685   mirror: always
7686   rust: true
7688 # Is support for math-style enabled?
7689 - name: layout.css.math-style.enabled
7690   type: RelaxedAtomicBool
7691   value: @IS_NIGHTLY_BUILD@
7692   mirror: always
7693   rust: true
7695 # Is support for math-depth enabled?
7696 # This must not be enabled until implementation is complete (see bug 1667090).
7697 - name: layout.css.math-depth.enabled
7698   type: RelaxedAtomicBool
7699   value: false
7700   mirror: always
7701   rust: true
7703 # Pref to control whether @-moz-document rules are enabled in content pages.
7704 - name: layout.css.moz-document.content.enabled
7705   type: RelaxedAtomicBool
7706   value: false
7707   mirror: always
7708   rust: true
7710 # Is -moz-osx-font-smoothing enabled? (Only supported in OSX builds)
7711 - name: layout.css.osx-font-smoothing.enabled
7712   type: bool
7713 #if defined(XP_MACOSX)
7714   value: true
7715 #else
7716   value: false
7717 #endif
7718   mirror: always
7720 # Is support for CSS overflow-clip-box enabled for non-UA sheets?
7721 - name: layout.css.overflow-clip-box.enabled
7722   type: bool
7723   value: false
7724   mirror: always
7726 # Is support for CSS overflow: -moz-hidden-unscrollable enabled
7727 - name: layout.css.overflow-moz-hidden-unscrollable.enabled
7728   type: RelaxedAtomicBool
7729   value: @IS_NOT_NIGHTLY_BUILD@
7730   mirror: always
7731   rust: true
7733 # Is support for overscroll-behavior enabled?
7734 - name: layout.css.overscroll-behavior.enabled
7735   type: bool
7736   value: true
7737   mirror: always
7739 - name: layout.css.overflow-logical.enabled
7740   type: bool
7741   value: true
7742   mirror: always
7744 # Enables support for the size property inside of CSS @page rules.
7745 - name: layout.css.page-size.enabled
7746   type: RelaxedAtomicBool
7747   value: true
7748   mirror: always
7749   rust: true
7751 # Enables support for the named pages
7752 - name: layout.css.named-pages.enabled
7753   type: RelaxedAtomicBool
7754   value: false
7755   mirror: always
7756   rust: true
7758 # Dictates whether or not the prefers contrast media query will be
7759 # usable.
7760 #   true: prefers-contrast will toggle based on OS and browser settings.
7761 #   false: prefers-contrast will only parse and toggle in the browser
7762 #   chrome and ua.
7763 - name: layout.css.prefers-contrast.enabled
7764   type: RelaxedAtomicBool
7765   value: true
7766   mirror: always
7767   rust: true
7769 # An override for prefers-color-scheme for content documents.
7771 # Dark (0), light (1), system (2) or browser (3).
7772 - name: layout.css.prefers-color-scheme.content-override
7773   type: RelaxedAtomicInt32
7774   value: 3
7775   mirror: always
7777 # Dictates whether or not the forced-colors media query is enabled.
7778 - name: layout.css.forced-colors.enabled
7779   type: RelaxedAtomicBool
7780   value: true
7781   mirror: always
7782   rust: true
7784 # Is support for -moz-prefixed animation properties enabled?
7785 - name: layout.css.prefixes.animations
7786   type: bool
7787   value: true
7788   mirror: always
7790 # Is support for -moz-border-image enabled?
7791 - name: layout.css.prefixes.border-image
7792   type: bool
7793   value: true
7794   mirror: always
7796 # Is support for -moz-box-sizing enabled?
7797 - name: layout.css.prefixes.box-sizing
7798   type: bool
7799   value: true
7800   mirror: always
7802 # Is support for -moz-prefixed font feature properties enabled?
7803 - name: layout.css.prefixes.font-features
7804   type: bool
7805   value: true
7806   mirror: always
7808 # Is support for -moz-prefixed transform properties enabled?
7809 - name: layout.css.prefixes.transforms
7810   type: bool
7811   value: true
7812   mirror: always
7814 # Is support for -moz-prefixed transition properties enabled?
7815 - name: layout.css.prefixes.transitions
7816   type: bool
7817   value: true
7818   mirror: always
7820 # Is CSS error reporting enabled?
7821 - name: layout.css.report_errors
7822   type: bool
7823   value: true
7824   mirror: always
7826 # Are inter-character ruby annotations enabled?
7827 - name: layout.css.ruby.intercharacter.enabled
7828   type: bool
7829   value: false
7830   mirror: always
7832 - name: layout.css.scroll-behavior.damping-ratio
7833   type: AtomicFloat
7834   value: 1.0f
7835   mirror: always
7837 - name: layout.css.supports-selector.enabled
7838   type: RelaxedAtomicBool
7839   value: true
7840   mirror: always
7841   rust: true
7843 # Tuning of the smooth scroll motion used by CSSOM-View scroll-behavior.
7844 # Spring-constant controls the strength of the simulated MSD
7845 # (Mass-Spring-Damper).
7846 - name: layout.css.scroll-behavior.spring-constant
7847   type: AtomicFloat
7848   value: 250.0f
7849   mirror: always
7851 # Whether the scroll-linked animations generated by CSS is enabled. This
7852 # includes @scroll-timeline css rule and animation-timelime property.
7853 - name: layout.css.scroll-linked-animations.enabled
7854   type: RelaxedAtomicBool
7855   value: false
7856   mirror: always
7857   rust: true
7859 # When selecting the snap point for CSS scroll snapping, the velocity of the
7860 # scroll frame is clamped to this speed, in CSS pixels / s.
7861 - name: layout.css.scroll-snap.prediction-max-velocity
7862   type: RelaxedAtomicInt32
7863   value: 2000
7864   mirror: always
7866 #  When selecting the snap point for CSS scroll snapping, the velocity of the
7867 # scroll frame is integrated over this duration, in seconds.  The snap point
7868 # best suited for this position is selected, enabling the user to perform fling
7869 # gestures.
7870 - name: layout.css.scroll-snap.prediction-sensitivity
7871   type: AtomicFloat
7872   value: 0.750f
7873   mirror: always
7875 # Set the threshold distance in CSS pixels below which scrolling will snap to
7876 # an edge, when scroll snapping is set to "proximity".
7877 - name: layout.css.scroll-snap.proximity-threshold
7878   type: RelaxedAtomicInt32
7879   value: 200
7880   mirror: always
7882 # Is steps(jump-*) supported in easing functions?
7883 - name: layout.css.step-position-jump.enabled
7884   type: RelaxedAtomicBool
7885   value: true
7886   mirror: always
7887   rust: true
7889 # Are counters for implemented CSS properties enabled?
7890 - name: layout.css.use-counters.enabled
7891   type: bool
7892   value: true
7893   mirror: always
7895 # Are counters for unimplemented CSS properties enabled?
7896 - name: layout.css.use-counters-unimplemented.enabled
7897   type: RelaxedAtomicBool
7898   value: true
7899   mirror: always
7900   rust: true
7902 # Should the :visited selector ever match (otherwise :link matches instead)?
7903 - name: layout.css.visited_links_enabled
7904   type: bool
7905   value: true
7906   mirror: always
7908 - name: layout.css.xul-display-values.content.enabled
7909   type: RelaxedAtomicBool
7910   value: false
7911   mirror: always
7912   rust: true
7914 # Pref to control whether display: -moz-box and display: -moz-inline-box are
7915 # parsed in content pages.
7916 - name: layout.css.xul-box-display-values.content.enabled
7917   type: RelaxedAtomicBool
7918   value: false
7919   mirror: always
7920   rust: true
7922 # Whether to block large cursors intersecting UI.
7923 - name: layout.cursor.block.enabled
7924   type: bool
7925   value: true
7926   mirror: always
7928 # The maximum width or height of the cursor we should allow when intersecting
7929 # the UI, in CSS pixels.
7930 - name: layout.cursor.block.max-size
7931   type: uint32_t
7932   value: 32
7933   mirror: always
7935 - name: layout.display-list.build-twice
7936   type: RelaxedAtomicBool
7937   value: false
7938   mirror: always
7940 # Toggle retaining display lists between paints.
7941 - name: layout.display-list.retain
7942   type: RelaxedAtomicBool
7943   value: true
7944   mirror: always
7946 # Toggle retaining display lists between paints.
7947 - name: layout.display-list.retain.chrome
7948   type: RelaxedAtomicBool
7949   value: true
7950   mirror: always
7952 - name: layout.display-list.retain.sc
7953   type: RelaxedAtomicBool
7954   value: false
7955   mirror: always
7957 # Set the maximum number of modified frames allowed before doing a full
7958 # display list rebuild.
7959 - name: layout.display-list.rebuild-frame-limit
7960   type: RelaxedAtomicUint32
7961   value: 500
7962   mirror: always
7964 # Pref to dump the display list to the log. Useful for debugging drawing.
7965 - name: layout.display-list.dump
7966   type: RelaxedAtomicBool
7967   value: false
7968   mirror: always
7970 # Pref to dump the display list to the log. Useful for debugging drawing.
7971 - name: layout.display-list.dump-content
7972   type: RelaxedAtomicBool
7973   value: false
7974   mirror: always
7976 # Pref to dump the display list to the log. Useful for debugging drawing.
7977 - name: layout.display-list.dump-parent
7978   type: RelaxedAtomicBool
7979   value: false
7980   mirror: always
7982 - name: layout.display-list.show-rebuild-area
7983   type: RelaxedAtomicBool
7984   value: false
7985   mirror: always
7987 - name: layout.display-list.flatten-transform
7988   type: RelaxedAtomicBool
7989   value: true
7990   mirror: always
7992 - name: layout.display-list.improve-fragmentation
7993   type: RelaxedAtomicBool
7994   value: true
7995   mirror: always
7997 # Are dynamic reflow roots enabled?
7998 - name: layout.dynamic-reflow-roots.enabled
7999   type: bool
8000   value: @IS_EARLY_BETA_OR_EARLIER@
8001   mirror: always
8003 # Enables the mechanism to optimize away flex item's final reflow.
8004 # Warning: Disabling the pref will impact the performance. This is useful only for
8005 # debugging flexbox issues.
8006 - name: layout.flexbox.item-final-reflow-optimization.enabled
8007   type: bool
8008   value: true
8009   mirror: always
8011 # Enables the <input type=search> custom layout frame with a clear icon.
8012 # Still needs tests and a web-exposed way to remove that icon, see bug 1654288.
8013 - name: layout.forms.input-type-search.enabled
8014   type: bool
8015   value: false
8016   mirror: always
8018 # Enables the Reveal Password button inside a <input type=password>.
8019 - name: layout.forms.reveal-password-button.enabled
8020   type: bool
8021   value: false
8022   mirror: always
8024 # Enables the Reveal Password context-menu entry.
8025 - name: layout.forms.reveal-password-context-menu.enabled
8026   type: bool
8027   value: false
8028   mirror: always
8030 # Pref to control browser frame rate, in Hz. A value <= 0 means choose
8031 # automatically based on knowledge of the platform (or 60Hz if no platform-
8032 # specific information is available).
8033 - name: layout.frame_rate
8034   type: RelaxedAtomicInt32
8035   value: -1
8036   mirror: always
8038 # If it has been this many frame periods since a refresh, assume that painting
8039 # is quiescent (will not happen again soon).
8040 - name: layout.idle_period.required_quiescent_frames
8041   type: uint32_t
8042   value: 2
8043   mirror: always
8045 # The amount of time (milliseconds) needed between an idle period's
8046 # end and the start of the next tick to avoid jank.
8047 - name: layout.idle_period.time_limit
8048   type: uint32_t
8049   value: 1
8050   mirror: always
8052 # The minimum amount of time (milliseconds) required to be remaining
8053 # in the current vsync interval for us to attempt an extra tick, or
8054 # <0 to disable extra ticks entirely.
8055 - name: layout.extra-tick.minimum-ms
8056   type: int32_t
8057   value: 4
8058   mirror: always
8060 # Enable/disable interruptible reflow, which allows reflows to stop
8061 # before completion (and display the partial results) when user events
8062 # are pending.
8063 - name: layout.interruptible-reflow.enabled
8064   type: bool
8065   value: true
8066   mirror: always
8068 - name: layout.min-active-layer-size
8069   type: int32_t
8070   value: 64
8071   mirror: always
8073 # On Android, don't synth mouse move events after scrolling, as they cause
8074 # unexpected user-visible behaviour. Can remove this after bug 1633450 is
8075 # satisfactorily resolved.
8076 - name: layout.reflow.synthMouseMove
8077   type: bool
8078   value: @IS_NOT_ANDROID@
8079   mirror: always
8081 # This pref is to be set by test code only.
8082 - name: layout.scrollbars.always-layerize-track
8083   type: RelaxedAtomicBool
8084   value: false
8085   mirror: always
8087 # Whether anchor is kept selected.
8088 - name: layout.selectanchor
8089   type: bool
8090   value: false
8091   mirror: always
8093 # Controls caret style and word-delete during text selection.
8094 # 0: Use platform default
8095 # 1: Caret moves and blinks as when there is no selection; word
8096 #    delete deselects the selection and then deletes word.
8097 # 2: Caret moves to selection edge and is not visible during selection;
8098 #    word delete deletes the selection (Mac and Linux default).
8099 # 3: Caret moves and blinks as when there is no selection; word delete
8100 #    deletes the selection.
8101 # Windows default is 1 for word delete behavior, the rest as for 2.
8102 - name: layout.selection.caret_style
8103   type: int32_t
8104   value: 0
8105   mirror: always
8107 # If layout.show_previous_page is true then during loading of a new page we
8108 # will draw the previous page if the new page has painting suppressed.
8109 - name: layout.show_previous_page
8110   type: bool
8111   value: true
8112   mirror: always
8114 # Pref to stop overlay scrollbars from fading out, for testing purposes.
8115 - name: layout.testing.overlay-scrollbars.always-visible
8116   type: bool
8117   value: false
8118   mirror: always
8120 # Throttled frame rate, in frames per second.
8121 - name: layout.throttled_frame_rate
8122   type: uint32_t
8123   value: 1
8124   mirror: always
8126 # Activity granted to out-of-process iframes in the foreground tab, in milliseconds.
8127 - name: layout.oopif_activity_grace_period_ms
8128   type: uint32_t
8129   value: 1000
8130   mirror: always
8132 - name: layout.lower_priority_refresh_driver_during_load
8133   type: bool
8134   value: true
8135   mirror: always
8137 # If > 0, nsRefreshDriver will keep ticking this amount of milliseconds after
8138 # top level page load.
8139 - name: layout.keep_ticking_after_load_ms
8140   type: uint32_t
8141   value: 1000
8142   mirror: always
8144 # Is layout of CSS outline-style:auto enabled?
8145 - name: layout.css.outline-style-auto.enabled
8146   type: bool
8147   value: true
8148   mirror: always
8150 # Pref to control enabling scroll anchoring.
8151 - name: layout.css.scroll-anchoring.enabled
8152   type: bool
8153   value: true
8154   mirror: always
8156 # Pref to control how many consecutive scroll-anchoring adjustments (since the
8157 # most recent user scroll) we'll average, before we consider whether to
8158 # automatically turn off scroll anchoring. When we hit this threshold, the
8159 # actual decision to disable also depends on the
8160 # min-average-adjustment-threshold pref, see below for more details.
8162 # Zero disables the heuristic.
8163 - name: layout.css.scroll-anchoring.max-consecutive-adjustments
8164   type: uint32_t
8165   value: 10
8166   mirror: always
8168 # Pref to control whether we should disable scroll anchoring on a scroller
8169 # where at least max-consecutive-adjustments have happened, and which the
8170 # average adjustment ends up being less than this number, in CSS pixels.
8172 # So, for example, given max-consecutive-adjustments=10 and
8173 # min-average-adjustment-treshold=3, we'll block scroll anchoring if there have
8174 # been 10 consecutive adjustments without a user scroll or more, and the
8175 # average offset difference between them amount to less than 3 CSS pixels.
8176 - name: layout.css.scroll-anchoring.min-average-adjustment-threshold
8177   type: uint32_t
8178   value: 3
8179   mirror: always
8181 # Pref to control disabling scroll anchoring suppression triggers, see
8183 # https://drafts.csswg.org/css-scroll-anchoring/#suppression-triggers
8185 # Those triggers should be unnecessary after bug 1561450.
8186 - name: layout.css.scroll-anchoring.suppressions.enabled
8187   type: bool
8188   value: true
8189   mirror: always
8191 - name: layout.css.scroll-anchoring.highlight
8192   type: bool
8193   value: false
8194   mirror: always
8196 # Pref to control whether we reselect scroll anchors if sub-optimal
8198 # See https://github.com/w3c/csswg-drafts/issues/6787
8199 - name: layout.css.scroll-anchoring.reselect-if-suboptimal
8200   type: bool
8201   value: true
8202   mirror: always
8204 # Are shared memory User Agent style sheets enabled?
8205 - name: layout.css.shared-memory-ua-sheets.enabled
8206   type: bool
8207   value: true
8208   mirror: always
8210 # Is support for -webkit-line-clamp enabled?
8211 - name: layout.css.webkit-line-clamp.enabled
8212   type: bool
8213   value: true
8214   mirror: always
8216 # Is 'content:none' supported on (non-pseudo) elements?
8217 - name: layout.css.element-content-none.enabled
8218   type: RelaxedAtomicBool
8219   value: false
8220   mirror: always
8221   rust: true
8223 # Is 'font-synthesis: small-caps' supported?
8224 - name: layout.css.font-synthesis-small-caps.enabled
8225   type: RelaxedAtomicBool
8226   value: true
8227   mirror: always
8228   rust: true
8230 # Whether we want scrollbar-width: thin to behave as scrollbar-width: auto.
8231 - name: layout.css.scrollbar-width-thin.disabled
8232   type: RelaxedAtomicBool
8233   value: false
8234   mirror: always
8236 # Whether the `scrollbar-gutter` CSS property is enabled.
8237 - name: layout.css.scrollbar-gutter.enabled
8238   type: RelaxedAtomicBool
8239   value: true
8240   mirror: always
8241   rust: true
8243 # Whether frame visibility tracking is enabled globally.
8244 - name: layout.framevisibility.enabled
8245   type: bool
8246   value: true
8247   mirror: always
8249 # The fraction of the scrollport we allow to horizontally scroll by before we
8250 # schedule an update of frame visibility.
8251 - name: layout.framevisibility.amountscrollbeforeupdatehorizontal
8252   type: int32_t
8253   value: 2
8254   mirror: always
8256 # The fraction of the scrollport we allow to vertically scroll by before we
8257 # schedule an update of frame visibility.
8258 - name: layout.framevisibility.amountscrollbeforeupdatevertical
8259   type: int32_t
8260   value: 2
8261   mirror: always
8263 # The number of scrollports wide to expand when tracking frame visibility.
8264 - name: layout.framevisibility.numscrollportwidths
8265   type: uint32_t
8266 #ifdef ANDROID
8267   value: 1
8268 #else
8269   value: 0
8270 #endif
8271   mirror: always
8273 # The number of scrollports high to expand when tracking frame visibility.
8274 - name: layout.framevisibility.numscrollportheights
8275   type: uint32_t
8276   value: 1
8277   mirror: always
8279 # Test only.
8280 - name: layout.dynamic-toolbar-max-height
8281   type: RelaxedAtomicInt32
8282   value: 0
8283   mirror: always
8285 # Whether outlines should include all overflowing descendants, or just the
8286 # border-box of a given element.
8288 # Historically we have included descendants but other browsers have not.
8289 - name: layout.outline.include-overflow
8290   type: bool
8291   value: false
8292   mirror: always
8294 - name: layout.visibility.min-recompute-interval-ms
8295   type: uint32_t
8296   value: 1000
8297   mirror: always
8299 # Controls double click and Alt+Arrow word selection behavior.
8300 - name: layout.word_select.eat_space_to_next_word
8301   type: bool
8302 #ifdef XP_WIN
8303   value: true
8304 #else
8305   value: false
8306 #endif
8307   mirror: always
8309 - name: layout.word_select.stop_at_punctuation
8310   type: bool
8311   value: true
8312   mirror: always
8314 # Whether underscore should be treated as a word-breaking character for
8315 # word selection/arrow-key movement purposes.
8316 - name: layout.word_select.stop_at_underscore
8317   type: bool
8318   value: false
8319   mirror: always
8321 # Should deprecated plugin behavior fallback to normal behavior or use
8322 # the experimental design.
8323 - name: layout.use-plugin-fallback
8324   type: bool
8325   value: false
8326   mirror: always
8328 # Whether to draw images in CSS backgrounds if we only have a partial frame.
8329 - name: layout.display_partial_background_images
8330   type: bool
8331   value: @IS_NIGHTLY_BUILD@
8332   mirror: always
8334 #---------------------------------------------------------------------------
8335 # Prefs starting with "mathml."
8336 #---------------------------------------------------------------------------
8338 # Whether to disable deprecated style attributes background, color, fontfamily,
8339 # fontsize, fontstyle and fontweight.
8340 - name: mathml.deprecated_style_attributes.disabled
8341   type: bool
8342   value: true
8343   mirror: always
8345 # Whether to disable deprecated "radical" notation for the menclose element.
8346 - name: mathml.deprecated_menclose_notation_radical.disabled
8347   type: bool
8348   value: true
8349   mirror: always
8351 # Whether to disable legacy names "small", "normal" and "big" for the
8352 # mathsize attribute.
8353 - name: mathml.mathsize_names.disabled
8354   type: bool
8355   value: true
8356   mirror: always
8358 # Whether to disable legacy names "thickmathspace", "mediummathspace",
8359 # "thickmathspace" etc for length attributes.
8360 - name: mathml.mathspace_names.disabled
8361   type: bool
8362   value: @IS_NIGHTLY_BUILD@
8363   mirror: always
8365 # Whether to disable the mfrac bevelled  attribute.
8366 - name: mathml.mfrac_bevelled_attribute.disabled
8367   type: bool
8368   value: true
8369   mirror: always
8371 # Whether to disable legacy names "thin", "thick" and "medium" for the
8372 # linethickness attribute of the mfrac element.
8373 - name: mathml.mfrac_linethickness_names.disabled
8374   type: bool
8375   value: true
8376   mirror: always
8378 # Whether to disable deprecated numalign/denomalign/align attributes
8379 - name: mathml.deprecated_alignment_attributes.disabled
8380   type: bool
8381   value: true
8382   mirror: always
8384 # Whether to disable subscriptshift and superscriptshift attributes.
8385 - name: mathml.script_shift_attributes.disabled
8386   type: bool
8387   value: true
8388   mirror: always
8390 # Whether to disable the scriptminsize attribute.
8391 # Note that this only disables parsing, not the default effect when no attribute
8392 # is unspecified.
8393 - name: mathml.scriptminsize_attribute.disabled
8394   type: bool
8395   value: @IS_NIGHTLY_BUILD@
8396   mirror: always
8398 # Whether to disable the scriptsizemultiplier attribute.
8399 - name: mathml.scriptsizemultiplier_attribute.disabled
8400   type: bool
8401   value: @IS_NIGHTLY_BUILD@
8402   mirror: always
8404 # Whether to disable support for stretching operators with STIXGeneral fonts.
8405 # macos still has the deprecated STIXGeneral font pre-installed.
8406 - name: mathml.stixgeneral_operator_stretching.disabled
8407   type: bool
8408 #if defined(XP_MACOSX)
8409   value: @IS_NIGHTLY_BUILD@
8410 #else
8411   value: true
8412 #endif
8413   mirror: always
8415 #---------------------------------------------------------------------------
8416 # Prefs starting with "media."
8417 #---------------------------------------------------------------------------
8420 # This pref defines what the blocking policy would be used in blocking autoplay.
8421 # 0 : use sticky activation (default)
8422 # https://html.spec.whatwg.org/multipage/interaction.html#sticky-activation
8423 # 1 : use transient activation (the transient activation duration can be
8424 #     adjusted by the pref `dom.user_activation.transient.timeout`)
8425 # https://html.spec.whatwg.org/multipage/interaction.html#transient-activation
8426 # 2 : user input depth (allow autoplay when the play is trigged by user input
8427 #     which is determined by the user input depth)
8428 - name: media.autoplay.blocking_policy
8429   type: uint32_t
8430   value: 0
8431   mirror: always
8433 # File-backed MediaCache size.
8434 - name: media.cache_size
8435   type: RelaxedAtomicUint32
8436   value: 512000   # Measured in KiB
8437   mirror: always
8439 # Size of file backed MediaCache while on a connection which is cellular (3G,
8440 # etc), and thus assumed to be "expensive".
8441 - name: media.cache_size.cellular
8442   type: RelaxedAtomicUint32
8443   value: 32768   # Measured in KiB
8444   mirror: always
8446 # Whether cubeb is sandboxed (AudioIPC)
8447 - name: media.cubeb.sandbox
8448   type: bool
8449   mirror: always
8450 #if defined(XP_LINUX) && !defined(MOZ_WIDGET_ANDROID)
8451   value: true
8452 #elif defined(XP_WIN) && !defined(_ARM64_)
8453   value: true
8454 #elif defined(XP_MACOSX)
8455   value: false
8456 #else
8457   value: false
8458 #endif
8460 # Whether cubeb sandbox (AudioIPC) is v2
8461 - name: media.cubeb.sandbox_v2
8462   type: bool
8463   mirror: always
8464 #if defined(XP_LINUX) && !defined(MOZ_WIDGET_ANDROID)
8465   value: false
8466 #elif defined(XP_WIN) && !defined(_ARM64_)
8467   value: true
8468 #elif defined(XP_MACOSX)
8469   value: false
8470 #else
8471   value: false
8472 #endif
8474 # Whether or not to pass AUDCLNT_STREAMOPTIONS_RAW when initializing audio
8475 # streams when using WASAPI.
8476 # 0 - don't use RAW streams
8477 # 1 - use RAW streams for input streams only
8478 # 2 - use RAW streams for output streams only
8479 # 3 - use RAW streams for input and output streams
8480 #if defined (XP_WIN)
8481 - name: media.cubeb.wasapi-raw
8482   type: RelaxedAtomicUint32
8483   mirror: always
8484   value: 0
8485 #endif // XP_WIN
8487 # ClockDrift desired buffering in milliseconds
8488 - name: media.clockdrift.buffering
8489   type: RelaxedAtomicUint32
8490   mirror: always
8491   value: 50
8493 # If a resource is known to be smaller than this size (in kilobytes), a
8494 # memory-backed MediaCache may be used; otherwise the (single shared global)
8495 # file-backed MediaCache is used.
8496 - name: media.memory_cache_max_size
8497   type: uint32_t
8498   value: 8192        # Measured in KiB
8499   mirror: always
8501 # Don't create more memory-backed MediaCaches if their combined size would go
8502 # above this absolute size limit.
8503 - name: media.memory_caches_combined_limit_kb
8504   type: uint32_t
8505   value: 524288
8506   mirror: always
8508 # Don't create more memory-backed MediaCaches if their combined size would go
8509 # above this relative size limit (a percentage of physical memory).
8510 - name: media.memory_caches_combined_limit_pc_sysmem
8511   type: uint32_t
8512   value: 5           # A percentage
8513   mirror: always
8515 # When a network connection is suspended, don't resume it until the amount of
8516 # buffered data falls below this threshold (in seconds).
8517 - name: media.cache_resume_threshold
8518   type: RelaxedAtomicUint32
8519   value: 30
8520   mirror: always
8521 - name: media.cache_resume_threshold.cellular
8522   type: RelaxedAtomicUint32
8523   value: 10
8524   mirror: always
8526 # Stop reading ahead when our buffered data is this many seconds ahead of the
8527 # current playback position. This limit can stop us from using arbitrary
8528 # amounts of network bandwidth prefetching huge videos.
8529 - name: media.cache_readahead_limit
8530   type: RelaxedAtomicUint32
8531   value: 60
8532   mirror: always
8533 - name: media.cache_readahead_limit.cellular
8534   type: RelaxedAtomicUint32
8535   value: 30
8536   mirror: always
8538 # MediaCapabilities
8539 - name: media.mediacapabilities.drop-threshold
8540   type: RelaxedAtomicInt32
8541   value: 95
8542   mirror: always
8544 - name: media.mediacapabilities.from-database
8545   type: RelaxedAtomicBool
8546   value: @IS_NIGHTLY_BUILD@
8547   mirror: always
8549 # AudioSink
8550 - name: media.resampling.enabled
8551   type: RelaxedAtomicBool
8552   value: false
8553   mirror: always
8555 # libcubeb backend implements .get_preferred_channel_layout
8556 - name: media.forcestereo.enabled
8557   type: RelaxedAtomicBool
8558 #if defined(XP_WIN) || defined(XP_DARWIN) || defined(MOZ_PULSEAUDIO)
8559   value: false
8560 #else
8561   value: true
8562 #endif
8563   mirror: always
8565 # MediaSource
8567 # Whether to enable MediaSource support.
8568 - name: media.mediasource.enabled
8569   type: RelaxedAtomicBool
8570   value: true
8571   mirror: always
8573 - name: media.mediasource.mp4.enabled
8574   type: RelaxedAtomicBool
8575   value: true
8576   mirror: always
8578 - name: media.mediasource.webm.enabled
8579   type: RelaxedAtomicBool
8580   value: true
8581   mirror: always
8583 # Check if vp9 is enabled by default in mediasource. False on Android.
8584 # If disabled, vp9 will only be enabled under some conditions:
8585 # - h264 HW decoding is not supported
8586 # - mp4 is not enabled
8587 # - Device was deemed fast enough to decode VP9 via the VP9Benchmark utility
8588 # - A VP9 HW decoder is present.
8589 - name: media.mediasource.vp9.enabled
8590   type: RelaxedAtomicBool
8591   value: @IS_NOT_ANDROID@
8592   mirror: always
8594 - name: media.mediasource.webm.audio.enabled
8595   type: RelaxedAtomicBool
8596   value: true
8597   mirror: always
8599 # Whether to enable MediaSource v2 support.
8600 - name: media.mediasource.experimental.enabled
8601   type: RelaxedAtomicBool
8602   value: false
8603   mirror: always
8605 # VideoSink
8606 - name: media.ruin-av-sync.enabled
8607   type: RelaxedAtomicBool
8608   value: false
8609   mirror: always
8611 # Encrypted Media Extensions
8612 - name: media.eme.enabled
8613   type: bool
8614 #if defined(XP_LINUX) && !defined(MOZ_WIDGET_ANDROID)
8615   # On Linux EME is visible but disabled by default. This is so that the "Play
8616   # DRM content" checkbox in the Firefox UI is unchecked by default. DRM
8617   # requires downloading and installing proprietary binaries, which users on an
8618   # open source operating systems didn't opt into. The first time a site using
8619   # EME is encountered, the user will be prompted to enable DRM, whereupon the
8620   # EME plugin binaries will be downloaded if permission is granted.
8621   value: false
8622 #else
8623   value: true
8624 #endif
8625   mirror: always
8627 # Whether we expose the functionality proposed in
8628 # https://github.com/WICG/encrypted-media-encryption-scheme/blob/master/explainer.md
8629 # I.e. if true, apps calling navigator.requestMediaKeySystemAccess() can pass
8630 # an optional encryption scheme as part of MediaKeySystemMediaCapability
8631 # objects. If a scheme is present when we check for support, we must ensure we
8632 # support that scheme in order to provide key system access.
8633 - name: media.eme.encrypted-media-encryption-scheme.enabled
8634   type: bool
8635   value: false
8636   mirror: always
8638 # Do we need explicit approval from the application to allow access to EME?
8639 # If true, Gecko will ask for permission before allowing MediaKeySystemAccess.
8640 # At time of writing this is aimed at GeckoView, and setting this to true
8641 # outside of GeckoView or test environments will likely break EME.
8642 - name: media.eme.require-app-approval
8643   type: bool
8644   value: false
8645   mirror: always
8647 - name: media.eme.audio.blank
8648   type: RelaxedAtomicBool
8649   value: false
8650   mirror: always
8652 - name: media.eme.video.blank
8653   type: RelaxedAtomicBool
8654   value: false
8655   mirror: always
8657 - name: media.eme.chromium-api.video-shmems
8658   type: RelaxedAtomicUint32
8659   value: 6
8660   mirror: always
8662 # Is support for MediaKeys.getStatusForPolicy enabled?
8663 - name: media.eme.hdcp-policy-check.enabled
8664   type: bool
8665   value: false
8666   mirror: always
8668 - name: media.eme.max-throughput-ms
8669   type: RelaxedAtomicUint32
8670   value: 500
8671   mirror: always
8673 - name: media.clearkey.persistent-license.enabled
8674   type: bool
8675   value: false
8676   mirror: always
8678 # Are test specific clearkey key systems enabled and exposed?
8679 - name: media.clearkey.test-key-systems.enabled
8680   type: bool
8681   value: false
8682   mirror: always
8684 - name: media.cloneElementVisually.testing
8685   type: bool
8686   value: false
8687   mirror: always
8689 #if defined(XP_LINUX) && defined(MOZ_SANDBOX)
8690   # Whether to allow, on a Linux system that doesn't support the necessary
8691   # sandboxing features, loading Gecko Media Plugins unsandboxed.  However, EME
8692   # CDMs will not be loaded without sandboxing even if this pref is changed.
8693 -   name: media.gmp.insecure.allow
8694     type: RelaxedAtomicBool
8695     value: false
8696     mirror: always
8697 #endif
8699 #ifdef XP_MACOSX
8700   # These prefs control whether or not a universal build running on
8701   # an Apple Silicon machine will attempt to use an x64 Widevine or
8702   # OpenH264 plugin. This requires launching the GMP child process
8703   # executable in x64 mode. We expect to allow this for Widevine until
8704   # an arm64 version of Widevine is made available. We don't expect
8705   # to need to allow this for OpenH264.
8706   #
8707   # Allow a Widevine GMP x64 process to be executed on ARM builds.
8708 - name: media.gmp-widevinecdm.allow-x64-plugin-on-arm64
8709   type: RelaxedAtomicBool
8710   value: true
8711   mirror: always
8713   # Don't allow an OpenH264 GMP x64 process to be executed on ARM builds.
8714 - name: media.gmp-gmpopenh264.allow-x64-plugin-on-arm64
8715   type: RelaxedAtomicBool
8716   value: false
8717   mirror: always
8718 #endif
8720 # Specifies whether the PDMFactory can create a test decoder that just outputs
8721 # blank frames/audio instead of actually decoding. The blank decoder works on
8722 # all platforms.
8723 - name: media.use-blank-decoder
8724   type: RelaxedAtomicBool
8725   value: false
8726   mirror: always
8728 - name: media.gpu-process-decoder
8729   type: RelaxedAtomicBool
8730 #if defined(XP_WIN)
8731   value: true
8732 #else
8733   value: false
8734 #endif
8735   mirror: always
8737 - name: media.rdd-process.enabled
8738   type: RelaxedAtomicBool
8739 #if defined(XP_WIN)
8740   value: true
8741 #elif defined(XP_MACOSX)
8742   value: true
8743 #elif defined(XP_LINUX) && !defined(ANDROID)
8744   value: true
8745 #elif defined(XP_OPENBSD)
8746   value: true
8747 #else
8748   value: false
8749 #endif
8750   mirror: always
8752 - name: media.rdd-retryonfailure.enabled
8753   type: RelaxedAtomicBool
8754   value: true
8755   mirror: always
8757 - name: media.rdd-process.startup_timeout_ms
8758   type: RelaxedAtomicInt32
8759   value: 5000
8760   mirror: always
8762 # Specifies how many times we restart RDD process after crash till we give up.
8763 # After first RDD restart we disable HW acceleration on Linux.
8764 - name: media.rdd-process.max-crashes
8765   type: RelaxedAtomicInt32
8766   value: 2
8767   mirror: always
8769 #ifdef MOZ_FFMPEG
8770 - name: media.rdd-ffmpeg.enabled
8771   type: RelaxedAtomicBool
8772   value: true
8773   mirror: always
8774 #endif
8776 #ifdef MOZ_FFVPX
8777 - name: media.rdd-ffvpx.enabled
8778   type: RelaxedAtomicBool
8779 #if defined(XP_WIN)
8780   value: true
8781 #elif defined(XP_MACOSX)
8782   value: true
8783 #elif defined(XP_LINUX) && !defined(ANDROID)
8784   value: true
8785 #elif defined(XP_OPENBSD)
8786   value: true
8787 #else
8788   value: false
8789 #endif
8790   mirror: always
8791 #endif
8793 #ifdef MOZ_WMF
8794 - name: media.rdd-wmf.enabled
8795   type: RelaxedAtomicBool
8796   value: true
8797   mirror: always
8798 #endif
8800 #ifdef MOZ_APPLEMEDIA
8801 - name: media.rdd-applemedia.enabled
8802   type: RelaxedAtomicBool
8803   value: true
8804   mirror: always
8805 #endif
8807 - name: media.rdd-theora.enabled
8808   type: RelaxedAtomicBool
8809 #if defined(XP_WIN)
8810   value: true
8811 #elif defined(XP_MACOSX)
8812   value: true
8813 #elif defined(XP_LINUX) && !defined(ANDROID)
8814   value: true
8815 #elif defined(XP_OPENBSD)
8816   value: true
8817 #else
8818   value: false
8819 #endif
8820   mirror: always
8822 - name: media.rdd-vorbis.enabled
8823   type: RelaxedAtomicBool
8824 #if defined(XP_WIN)
8825   value: true
8826 #elif defined(XP_MACOSX)
8827   value: true
8828 #elif defined(XP_LINUX) && !defined(ANDROID)
8829   value: true
8830 #elif defined(XP_OPENBSD)
8831   value: true
8832 #else
8833   value: false
8834 #endif
8835   mirror: always
8837 - name: media.rdd-vpx.enabled
8838   type: RelaxedAtomicBool
8839 #if defined(XP_WIN)
8840   value: true
8841 #elif defined(XP_MACOSX)
8842   value: true
8843 #elif defined(XP_LINUX) && !defined(ANDROID)
8844   value: true
8845 #elif defined(XP_OPENBSD)
8846   value: true
8847 #else
8848   value: false
8849 #endif
8850   mirror: always
8852 - name: media.rdd-wav.enabled
8853   type: RelaxedAtomicBool
8854 #if defined(XP_WIN)
8855   value: true
8856 #elif defined(XP_MACOSX)
8857   value: true
8858 #elif defined(XP_LINUX) && !defined(ANDROID)
8859   value: true
8860 #elif defined(XP_OPENBSD)
8861   value: true
8862 #else
8863   value: false
8864 #endif
8865   mirror: always
8867 - name: media.rdd-opus.enabled
8868   type: RelaxedAtomicBool
8869 #if defined(XP_WIN)
8870   value: true
8871 #elif defined(XP_MACOSX)
8872   value: true
8873 #elif defined(XP_LINUX) && !defined(ANDROID)
8874   value: true
8875 #elif defined(XP_OPENBSD)
8876   value: true
8877 #else
8878   value: false
8879 #endif
8880   mirror: always
8882 - name: media.rdd-webaudio.batch.size
8883   type: RelaxedAtomicInt32
8884   value: 100
8885   mirror: always
8887 # This pref is here to control whether we want to perform audio decoding by
8888 # using the IPC actor within the Utility process rather than the RDD process.
8889 # When it is set to true, then the utility process will take precedence over RDD
8890 # to perform audio decoding.
8891 - name: media.utility-process.enabled
8892   type: RelaxedAtomicBool
8893   value: false
8894   mirror: always
8896 #ifdef MOZ_FFMPEG
8897 - name: media.utility-ffmpeg.enabled
8898   type: RelaxedAtomicBool
8899   value: true
8900   mirror: always
8901 #endif
8903 #ifdef MOZ_FFVPX
8904 - name: media.utility-ffvpx.enabled
8905   type: RelaxedAtomicBool
8906 #if defined(XP_WIN)
8907   value: true
8908 #elif defined(XP_MACOSX)
8909   value: true
8910 #elif defined(XP_LINUX) && !defined(ANDROID)
8911   value: true
8912 #elif defined(XP_OPENBSD)
8913   value: true
8914 #else
8915   value: false
8916 #endif
8917   mirror: always
8918 #endif
8920 #ifdef MOZ_WMF
8921 - name: media.utility-wmf.enabled
8922   type: RelaxedAtomicBool
8923   value: true
8924   mirror: always
8925 #endif
8927 #ifdef MOZ_APPLEMEDIA
8928 - name: media.utility-applemedia.enabled
8929   type: RelaxedAtomicBool
8930   value: true
8931   mirror: always
8932 #endif
8934 - name: media.utility-vorbis.enabled
8935   type: RelaxedAtomicBool
8936   value: true
8937   mirror: always
8939 - name: media.utility-wav.enabled
8940   type: RelaxedAtomicBool
8941   value: true
8942   mirror: always
8944 - name: media.utility-opus.enabled
8945   type: RelaxedAtomicBool
8946   value: true
8947   mirror: always
8949 #ifdef ANDROID
8950   # Enable the MediaCodec PlatformDecoderModule by default.
8951 -   name: media.android-media-codec.enabled
8952     type: RelaxedAtomicBool
8953     value: true
8954     mirror: always
8956 -   name: media.android-media-codec.preferred
8957     type: RelaxedAtomicBool
8958     value: true
8959     mirror: always
8960 #endif  # ANDROID
8962 #ifdef MOZ_OMX
8963 -   name: media.omx.enabled
8964     type: bool
8965     value: false
8966     mirror: always
8967 #endif
8969 # Allow ffmpeg decoder to decode directly onto shmem buffer
8970 - name: media.ffmpeg.customized-buffer-allocation
8971   type: RelaxedAtomicBool
8972   value: true
8973   mirror: always
8975 #ifdef MOZ_FFMPEG
8976 -   name: media.ffmpeg.enabled
8977     type: RelaxedAtomicBool
8978   #if defined(XP_MACOSX)
8979     value: false
8980   #else
8981     value: true
8982   #endif
8983     mirror: always
8985 -   name: media.libavcodec.allow-obsolete
8986     type: bool
8987     value: false
8988     mirror: always
8990 #ifdef MOZ_WAYLAND
8991 # Use VA-API for ffmpeg video playback on Linux
8992 - name: media.ffmpeg.vaapi.enabled
8993   type: RelaxedAtomicBool
8994   value: false
8995   mirror: always
8996 #endif # MOZ_WAYLAND
8997 #endif  # MOZ_FFMPEG
8999 -   name: media.ffvpx.enabled
9000     type: RelaxedAtomicBool
9001 #ifdef MOZ_FFVPX
9002     value: true
9003 #else
9004     value: false
9005 #endif
9006     mirror: always
9008 -   name: media.ffvpx.mp3.enabled
9009     type: RelaxedAtomicBool
9010 #ifdef MOZ_FFVPX
9011     value: true
9012 #else
9013     value: false
9014 #endif
9015     mirror: always
9017 # Set to true in marionette tests to disable the sanity test
9018 # which would lead to unnecessary start of the RDD process.
9019 -   name: media.sanity-test.disabled
9020     type: RelaxedAtomicBool
9021     value: false
9022     mirror: always
9024 #ifdef MOZ_WMF
9026 -   name: media.wmf.enabled
9027     type: RelaxedAtomicBool
9028     value: true
9029     mirror: always
9031   # Whether DD should consider WMF-disabled a WMF failure, useful for testing.
9032 -   name: media.decoder-doctor.wmf-disabled-is-failure
9033     type: RelaxedAtomicBool
9034     value: false
9035     mirror: always
9037 -   name: media.wmf.dxva.d3d11.enabled
9038     type: RelaxedAtomicBool
9039     value: true
9040     mirror: always
9042 -   name: media.wmf.dxva.max-videos
9043     type: RelaxedAtomicUint32
9044     value: 8
9045     mirror: always
9047 -   name: media.wmf.use-nv12-format
9048     type: RelaxedAtomicBool
9049     value: true
9050     mirror: always
9052 -   name: media.wmf.no-copy-nv12-textures
9053     type: bool
9054     value: true
9055     mirror: once
9056 # Enable hardware decoded video no copy even when it is blocked.
9057 -   name: media.wmf.no-copy-nv12-textures-force-enabled
9058     type: bool
9059     value: false
9060     mirror: once
9062 -   name: media.wmf.force.allow-p010-format
9063     type: RelaxedAtomicBool
9064     value: false
9065     mirror: always
9067 -   name: media.wmf.use-sync-texture
9068     type: bool
9069     value: true
9070     mirror: once
9072 -   name: media.wmf.low-latency.enabled
9073     type: RelaxedAtomicBool
9074     value: false
9075     mirror: always
9077 -   name: media.wmf.low-latency.force-disabled
9078     type: RelaxedAtomicBool
9079     value: false
9080     mirror: always
9082 -   name: media.wmf.skip-blacklist
9083     type: RelaxedAtomicBool
9084     value: false
9085     mirror: always
9087 -   name: media.wmf.amd.highres.enabled
9088     type: RelaxedAtomicBool
9089     value: true
9090     mirror: always
9092 -   name: media.wmf.allow-unsupported-resolutions
9093     type: RelaxedAtomicBool
9094     value: false
9095     mirror: always
9097 -   name: media.wmf.vp9.enabled
9098     type: RelaxedAtomicBool
9099     value: true
9100     mirror: always
9102 -   name: media.wmf.av1.enabled
9103     type: RelaxedAtomicBool
9104     value: true
9105     mirror: always
9107 # Using Windows Media Foundation Media Engine for encrypted playback
9108 -   name: media.wmf.media-engine.enabled
9109     type: RelaxedAtomicBool
9110     value: false
9111     mirror: always
9113 #endif  # MOZ_WMF
9115 - name: media.decoder-doctor.testing
9116   type: bool
9117   value: false
9118   mirror: always
9120 - name: media.hardware-video-decoding.force-enabled
9121   type: bool
9122   value: false
9123   mirror: once
9125 # Whether to check the decoder supports recycling.
9126 - name: media.decoder.recycle.enabled
9127   type: RelaxedAtomicBool
9128   value: @IS_ANDROID@
9129   mirror: always
9131 # Should MFR try to skip to the next key frame?
9132 - name: media.decoder.skip-to-next-key-frame.enabled
9133   type: RelaxedAtomicBool
9134   value: true
9135   mirror: always
9137 # When video continues later than the current media time for this period of
9138 # time, then it will trigger skip-to-next-keyframe mechanism. As this aims to
9139 # solve the drop frames issue where video decoding too slow for high
9140 # resolution videos. eg. 4k+. Therefore, the value is is determined by the
9141 # telemetry probe `video_inter_keyframe_max_ms` in the key of `AV,h>2160` which
9142 # shows that 95% video's key frame interval are less than ~5000. We use its
9143 # half value as a threashold to decide whether we should keep decoding in the
9144 # current video position or jump to the next keyframe in order to decode future
9145 # frames in advance.
9146 - name: media.decoder.skip_when_video_too_slow_ms
9147   type: RelaxedAtomicInt32
9148   value: 2500
9149   mirror: always
9151 - name: media.gmp.decoder.enabled
9152   type: RelaxedAtomicBool
9153   value: false
9154   mirror: always
9156 # Whether to suspend decoding of videos in background tabs.
9157 - name: media.suspend-bkgnd-video.enabled
9158   type: RelaxedAtomicBool
9159   value: true
9160   mirror: always
9162 # Delay, in ms, from time window goes to background to suspending
9163 # video decoders. Defaults to 10 seconds.
9164 - name: media.suspend-bkgnd-video.delay-ms
9165   type: RelaxedAtomicUint32
9166   value: 10000
9167   mirror: always
9169 - name: media.dormant-on-pause-timeout-ms
9170   type: RelaxedAtomicInt32
9171   value: 5000
9172   mirror: always
9174 # AudioTrack and VideoTrack support
9175 - name: media.track.enabled
9176   type: bool
9177   value: false
9178   mirror: always
9180 # This pref disables the reception of RTCP. It is used for testing.
9181 - name: media.webrtc.net.force_disable_rtcp_reception
9182   type: ReleaseAcquireAtomicBool
9183   value: false
9184   mirror: always
9186 # TextTrack WebVTT Region extension support.
9187 - name: media.webvtt.regions.enabled
9188   type: bool
9189   value: true
9190   mirror: always
9192 # This pref controls whether dispatch testing-only events.
9193 - name: media.webvtt.testing.events
9194   type: bool
9195   value: true
9196   mirror: always
9198 - name: media.webspeech.synth.force_global_queue
9199   type: bool
9200   value: false
9201   mirror: always
9203 - name: media.webspeech.test.enable
9204   type: bool
9205   value: false
9206   mirror: always
9208 - name: media.webspeech.test.fake_fsm_events
9209   type: bool
9210   value: false
9211   mirror: always
9213 - name: media.webspeech.test.fake_recognition_service
9214   type: bool
9215   value: false
9216   mirror: always
9218 #ifdef MOZ_WEBSPEECH
9219 -   name: media.webspeech.recognition.enable
9220     type: bool
9221     value: false
9222     mirror: always
9223 #endif
9225 - name: media.webspeech.recognition.force_enable
9226   type: bool
9227   value: false
9228   mirror: always
9230 #ifdef MOZ_WEBSPEECH
9231 -   name: media.webspeech.synth.enabled
9232     type: bool
9233     value: false
9234     mirror: always
9235 #endif  # MOZ_WEBSPEECH
9237 - name: media.encoder.webm.enabled
9238   type: RelaxedAtomicBool
9239   value: true
9240   mirror: always
9242 - name: media.audio-max-decode-error
9243   type: uint32_t
9244 #if defined(RELEASE_OR_BETA)
9245   value: 3
9246 #else
9247   # Zero tolerance in pre-release builds to detect any decoder regression.
9248   value: 0
9249 #endif
9250   mirror: always
9252 - name: media.video-max-decode-error
9253   type: uint32_t
9254 #if defined(RELEASE_OR_BETA)
9255   value: 2
9256 #else
9257   # Zero tolerance in pre-release builds to detect any decoder regression.
9258   value: 0
9259 #endif
9260   mirror: always
9262 # Are video stats enabled? (Disabling can help prevent fingerprinting.)
9263 - name: media.video_stats.enabled
9264   type: bool
9265   value: true
9266   mirror: always
9268 # forces the number of dropped frames to 0
9269 - name: media.video.dropped_frame_stats.enabled
9270   type: bool
9271   value: true
9272   mirror: always
9274 # Opus
9275 - name: media.opus.enabled
9276   type: RelaxedAtomicBool
9277   value: true
9278   mirror: always
9280 # Wave
9281 - name: media.wave.enabled
9282   type: RelaxedAtomicBool
9283   value: true
9284   mirror: always
9286 # Ogg
9287 - name: media.ogg.enabled
9288   type: RelaxedAtomicBool
9289   value: true
9290   mirror: always
9292 # WebM
9293 - name: media.webm.enabled
9294   type: RelaxedAtomicBool
9295   value: true
9296   mirror: always
9298 # AV1
9299 - name: media.av1.enabled
9300   type: RelaxedAtomicBool
9301 #if defined(XP_WIN) && !defined(_ARM64_)
9302   value: true
9303 #elif defined(XP_MACOSX)
9304   value: true
9305 #elif defined(MOZ_WIDGET_ANDROID)
9306   value: @IS_EARLY_BETA_OR_EARLIER@
9307 #elif defined(XP_UNIX)
9308   value: true
9309 #else
9310   value: false
9311 #endif
9312   mirror: always
9314 - name: media.av1.use-dav1d
9315   type: RelaxedAtomicBool
9316 #if defined(XP_WIN) && !defined(_ARM64_)
9317   value: true
9318 #elif defined(XP_MACOSX)
9319   value: true
9320 #elif defined(XP_UNIX)
9321   value: true
9322 #else
9323   value: false
9324 #endif
9325   mirror: always
9327 - name: media.flac.enabled
9328   type: RelaxedAtomicBool
9329   value: true
9330   mirror: always
9332 # Hls
9333 - name: media.hls.enabled
9334   type: RelaxedAtomicBool
9335   value: @IS_ANDROID@
9336   mirror: always
9338 # Max number of HLS players that can be created concurrently. Used only on
9339 # Android and when "media.hls.enabled" is true.
9340 #ifdef ANDROID
9341 -   name: media.hls.max-allocations
9342     type: uint32_t
9343     value: 20
9344     mirror: always
9345 #endif
9347 - name: media.mp4.enabled
9348   type: RelaxedAtomicBool
9349 #ifdef MOZ_FMP4
9350   value: true
9351 #else
9352   value: false
9353 #endif
9354   mirror: always
9356 - name: media.mp4.sniff_iso_brand
9357   type: RelaxedAtomicBool
9358   value: true
9359   mirror: always
9361 # Error/warning handling, Decoder Doctor.
9363 # Set to true to force demux/decode warnings to be treated as errors.
9364 - name: media.playback.warnings-as-errors
9365   type: RelaxedAtomicBool
9366   value: false
9367   mirror: always
9369 # Resume video decoding when the cursor is hovering on a background tab to
9370 # reduce the resume latency and improve the user experience.
9371 - name: media.resume-bkgnd-video-on-tabhover
9372   type: bool
9373   value: true
9374   mirror: always
9376 - name: media.videocontrols.lock-video-orientation
9377   type: bool
9378   value: @IS_ANDROID@
9379   mirror: always
9381 # Media Seamless Looping
9382 - name: media.seamless-looping
9383   type: RelaxedAtomicBool
9384   value: true
9385   mirror: always
9387 - name: media.autoplay.block-event.enabled
9388   type: bool
9389   value: false
9390   mirror: always
9392 - name: media.media-capabilities.enabled
9393   type: RelaxedAtomicBool
9394   value: true
9395   mirror: always
9397 - name: media.media-capabilities.screen.enabled
9398   type: RelaxedAtomicBool
9399   value: false
9400   mirror: always
9402 - name: media.benchmark.vp9.fps
9403   type: RelaxedAtomicUint32
9404   value: 0
9405   mirror: always
9407 - name: media.benchmark.vp9.threshold
9408   type: RelaxedAtomicUint32
9409   value: 150
9410   mirror: always
9412 - name: media.benchmark.vp9.versioncheck
9413   type: RelaxedAtomicUint32
9414   value: 0
9415   mirror: always
9417 - name: media.benchmark.frames
9418   type: RelaxedAtomicUint32
9419   value: 300
9420   mirror: always
9422 - name: media.benchmark.timeout
9423   type: RelaxedAtomicUint32
9424   value: 1000
9425   mirror: always
9427 - name: media.test.video-suspend
9428   type: RelaxedAtomicBool
9429   value: false
9430   mirror: always
9432 # MediaCapture prefs follow
9434 # Enables navigator.mediaDevices and getUserMedia() support. See also
9435 # media.peerconnection.enabled
9436 - name: media.navigator.enabled
9437   type: bool
9438   value: true
9439   mirror: always
9441 # This pref turns off window-focus checks on the navigator.mediaDevices methods,
9442 # for partner testing frameworks.
9443 # Prefer "focusmanager.testmode", which is already set by default for
9444 # web-platform tests.
9445 - name: media.devices.unfocused.enabled
9446   type: bool
9447   value: false
9448   mirror: always
9450 # This pref turns off [SecureContext] on the navigator.mediaDevices object, for
9451 # more compatible legacy behavior.
9452 - name: media.devices.insecure.enabled
9453   type: bool
9454   value: false
9455   mirror: always
9457 # If the above pref is also enabled, this pref enabled getUserMedia() support
9458 # in http, bypassing the instant NotAllowedError you get otherwise.
9459 - name: media.getusermedia.insecure.enabled
9460   type: bool
9461   value: false
9462   mirror: always
9464 # Enable tab sharing
9465 - name: media.getusermedia.browser.enabled
9466   type: RelaxedAtomicBool
9467   value: false
9468   mirror: always
9470 # The getDisplayMedia method is always SecureContext regardless of the above two
9471 # prefs. But it is not implemented on android, and can be turned off elsewhere.
9472 - name: media.getdisplaymedia.enabled
9473   type: bool
9474   value: @IS_NOT_ANDROID@
9475   mirror: always
9477 # Turn off any cameras (but not mics) while in the background. This is desirable
9478 # on mobile.
9479 - name: media.getusermedia.camera.background.mute.enabled
9480   type: bool
9481   value: @IS_ANDROID@
9482   mirror: always
9484 # WebRTC prefs follow
9486 # Enables RTCPeerConnection support. Note that, when true, this pref enables
9487 # navigator.mediaDevices and getUserMedia() support as well.
9488 # See also media.navigator.enabled
9489 - name: media.peerconnection.enabled
9490   type: bool
9491   value: true
9492   mirror: always
9494 - name: media.peerconnection.dtmf.enabled
9495   type: bool
9496   value: true
9497   mirror: always
9499 - name: media.peerconnection.identity.enabled
9500   type: bool
9501   value: true
9502   mirror: always
9504 #ifdef MOZ_WEBRTC
9505   # Use MediaDataDecoder API for VP8/VP9 in WebRTC. This includes hardware
9506   # acceleration for decoding.
9507 -   name: media.navigator.mediadatadecoder_vpx_enabled
9508     type: RelaxedAtomicBool
9509 #if defined(NIGHTLY_BUILD)
9510     value: true
9511 #else
9512     value: false
9513 #endif
9514     mirror: always
9516   # Use MediaDataDecoder API for H264 in WebRTC. This includes hardware
9517   # acceleration for decoding.
9518 -   name: media.navigator.mediadatadecoder_h264_enabled
9519     type: RelaxedAtomicBool
9520   #if defined(_ARM64_) && defined(XP_WIN)
9521     value: false
9522   #else
9523     value: true
9524   #endif
9525     mirror: always
9527 #endif  # MOZ_WEBRTC
9529 # HTMLMediaElement.allowedToPlay should be exposed to web content when
9530 # block autoplay rides the trains to release. Until then, Nightly only.
9531 - name: media.allowed-to-play.enabled
9532   type: bool
9533   value: @IS_NIGHTLY_BUILD@
9534   mirror: always
9536 # Is support for MediaDevices.ondevicechange enabled?
9537 - name: media.ondevicechange.enabled
9538   type: bool
9539   value: true
9540   mirror: always
9542 # Is support for HTMLMediaElement.seekToNextFrame enabled?
9543 - name: media.seekToNextFrame.enabled
9544   type: bool
9545   value: true
9546   mirror: always
9548 # setSinkId will be enabled in bug 1498512. Till then the
9549 # implementation will remain hidden behind this pref (Bug 1152401, Bug 934425).
9550 - name: media.setsinkid.enabled
9551   type: bool
9552   value: false
9553   mirror: always
9555 # Turn on this pref can enable test-only events for media element.
9556 - name: media.testing-only-events
9557   type: bool
9558   value: false
9559   mirror: always
9561 - name: media.useAudioChannelService.testing
9562   type: bool
9563   value: false
9564   mirror: always
9566 - name: media.audioFocus.management
9567   type: bool
9568 #if defined(MOZ_WIDGET_ANDROID)
9569   value: true
9570 #else
9571   value: false
9572 #endif
9573   mirror: always
9575 - name: media.hardwaremediakeys.enabled
9576   type: bool
9577   value: true
9578   mirror: always
9580 # If this pref is on, then `media.mediacontrol.stopcontrol.timer.ms` would take
9581 # effect and determine the timing to stop controlling media.
9582 - name: media.mediacontrol.stopcontrol.timer
9583   type: bool
9584   value: true
9585   mirror: always
9587 # If media is being paused after a certain period, then we would think that
9588 # media doesn't need to be controlled anymore. Therefore, that media would stop
9589 # listening to the media control key events. The value of this pref is how long
9590 # media would stop listening to the event after it's paused. The default value
9591 # is set to 24 hrs (24*60*60*1000)
9592 - name: media.mediacontrol.stopcontrol.timer.ms
9593   type: RelaxedAtomicUint32
9594   value: 86400000
9595   mirror: always
9597 # If this pref is on, we would stop controlling media after it reaches to the
9598 # end.
9599 - name: media.mediacontrol.stopcontrol.aftermediaends
9600   type: bool
9601   value: true
9602   mirror: always
9604 # We would only use media control to control media which duration is longer
9605 # than this value.
9606 - name: media.mediacontrol.eligible.media.duration.s
9607   type: AtomicFloat
9608   value: 3.0f
9609   mirror: always
9611 - name: media.webrtc.platformencoder
9612   type: RelaxedAtomicBool
9613 #if defined(MOZ_WIDGET_ANDROID)
9614   value: true
9615 #else
9616   value: false
9617 #endif
9618   mirror: always
9620 - name: media.webrtc.software_encoder.fallback
9621   type: RelaxedAtomicBool
9622 #if !defined(MOZ_WIDGET_GTK)
9623   value: true
9624 #else
9625   value: false
9626 #endif
9627   mirror: always
9629 - name: media.webrtc.platformencoder.sw_mft
9630   type: RelaxedAtomicBool
9631   value: @IS_EARLY_BETA_OR_EARLIER@
9632   mirror: always
9634 - name: media.block-autoplay-until-in-foreground
9635   type: bool
9636 #if !defined(MOZ_WIDGET_ANDROID)
9637   value: true
9638 #else
9639   value: false
9640 #endif
9641   mirror: always
9643 - name: media.webrtc.hw.h264.enabled
9644   type: bool
9645 #if defined(MOZ_WIDGET_ANDROID)
9646   value: true
9647 #else
9648   value: false
9649 #endif
9650   mirror: always
9652  # If true, then we require explicit approval from the embedding app (ex. Fenix)
9653  # on GeckoView to know if we can allow audible, inaudible media or both kinds
9654  # of media to autoplay.
9655 - name: media.geckoview.autoplay.request
9656   type: bool
9657   value: false
9658   mirror: always
9660  # This is used in testing only, in order to skip the prompting process. This
9661  # pref works only when enabling the pref `media.geckoview.autoplay.request`.
9662  # 0=prompt as normal, 1=allow all, 2=deny all, 3=allow audible request,
9663  # 4=deny audible request, 5=allow inaudible request, 6=deny inaudible request.
9664  # 7=leave all requests pending.
9665 - name: media.geckoview.autoplay.request.testing
9666   type: uint32_t
9667   value: 0
9668   mirror: always
9670 - name: media.mediacontrol.testingevents.enabled
9671   type: bool
9672   value: false
9673   mirror: always
9675 #if defined(XP_MACOSX)
9676 - name: media.macos.screenrecording.oscheck.enabled
9677   type: bool
9678   value: true
9679   mirror: always
9680 #endif
9682 # When the playback rate of an HTMLMediaElement is greater than this value, or
9683 # lower than the inverse of this value, the audio is muted.
9684 - name: media.audio.playbackrate.muting_threshold
9685   type: uint32_t
9686   value: 8
9687   mirror: always
9689 # Time-stretch algorithm single processing sequence length in milliseconds.
9690 # This determines to how long sequences the original sound is chopped in the
9691 # time-stretch algorithm.
9692 - name: media.audio.playbackrate.soundtouch_sequence_ms
9693   type: RelaxedAtomicInt32
9694   value: 10
9695   mirror: always
9697 # Time-stretch algorithm seeking window length in milliseconds for algorithm
9698 # that finds the best possible overlapping location. This determines from how
9699 # wide window the algorithm may look for an optimal joining location when mixing
9700 # the sound sequences back together.
9701 - name: media.audio.playbackrate.soundtouch_seekwindow_ms
9702   type: RelaxedAtomicInt32
9703   value: 15
9704   mirror: always
9706 # Time-stretch algorithm overlap length in milliseconds. When the chopped sound
9707 # sequences are mixed back together, to form a continuous sound stream, this
9708 # parameter defines over how long period the two consecutive sequences are let
9709 # to overlap each other.
9710 - name: media.audio.playbackrate.soundtouch_overlap_ms
9711   type: RelaxedAtomicInt32
9712   value: 8
9713   mirror: always
9715 # The duration, in milliseconds, of decoded audio to keep around in the
9716 # AudioSink ring-buffer. New decoding operations are started when this limit is
9717 # reached. The total size of the ring-buffer is slightly bigger than this.
9718 - name: media.audio.audiosink.threshold_ms
9719   type: AtomicFloat
9720 #if defined(XP_MACOSX) && defined(MOZ_AARCH64)
9721   value: 1000.0
9722 #else
9723   value: 200.0
9724 #endif
9725   mirror: always
9728 #---------------------------------------------------------------------------
9729 # Prefs starting with "midi."
9730 #---------------------------------------------------------------------------
9732 - name: midi.testing
9733   type: RelaxedAtomicBool
9734   value: false
9735   mirror: always
9737 #---------------------------------------------------------------------------
9738 # Prefs starting with "mousewheel."
9739 #---------------------------------------------------------------------------
9741 # This affects how line scrolls from wheel events will be accelerated.
9742 # Factor to be multiplied for constant acceleration.
9743 - name: mousewheel.acceleration.factor
9744   type: RelaxedAtomicInt32
9745   value: 10
9746   mirror: always
9748 # This affects how line scrolls from wheel events will be accelerated.
9749 # Number of mousewheel clicks when acceleration starts.
9750 # Acceleration can be turned off if pref is set to -1.
9751 - name: mousewheel.acceleration.start
9752   type: RelaxedAtomicInt32
9753   value: -1
9754   mirror: always
9756 # Auto-dir is a feature which treats any single-wheel scroll as a scroll in the
9757 # only one scrollable direction if the target has only one scrollable
9758 # direction. For example, if the user scrolls a vertical wheel inside a target
9759 # which is horizontally scrollable but vertical unscrollable, then the vertical
9760 # scroll is converted to a horizontal scroll for that target.
9761 # Note that auto-dir only takes effect for |mousewheel.*.action|s and
9762 # |mousewheel.*.action.override_x|s whose values are 1.
9763 - name: mousewheel.autodir.enabled
9764   type: bool
9765   value: false
9766   mirror: always
9768 # When a wheel scroll is converted due to auto-dir, which side the converted
9769 # scroll goes towards is decided by one thing called "honoured target". If the
9770 # content of the honoured target horizontally starts from right to left, then
9771 # an upward scroll maps to a rightward scroll and a downward scroll maps to a
9772 # leftward scroll; otherwise, an upward scroll maps to a leftward scroll and a
9773 # downward scroll maps to a rightward scroll.
9774 # If this pref is set to false, then consider the scrolling target as the
9775 # honoured target.
9776 # If set to true, then consider the root element in the document where the
9777 # scrolling target is as the honoured target. But note that there's one
9778 # exception: for targets in an HTML document, the real root element(I.e. the
9779 # <html> element) is typically not considered as a root element, but the <body>
9780 # element is typically considered as a root element. If there is no <body>
9781 # element, then consider the <html> element instead.
9782 - name: mousewheel.autodir.honourroot
9783   type: bool
9784   value: false
9785   mirror: always
9787 - name: mousewheel.system_scroll_override.enabled
9788   type: RelaxedAtomicBool
9789 #if defined(XP_WIN) || defined(MOZ_WIDGET_GTK)
9790   value: true
9791 #else
9792   value: false
9793 #endif
9794   mirror: always
9796 # Prefs for overriding the system mouse wheel scrolling speed on
9797 # content of the web pages.  When
9798 # "mousewheel.system_scroll_override.enabled" is true and the
9799 # system scrolling speed isn't customized by the user, the content scrolling
9800 # speed is multiplied by the following factors.  The value will be used as
9801 # 1/100.  E.g., 200 means 2.00.
9802 # NOTE: Even if "mousewheel.system_scroll_override.enabled" is
9803 # true, when Gecko detects the user customized the system scrolling speed
9804 # settings, the override isn't executed.
9805 - name: mousewheel.system_scroll_override.horizontal.factor
9806   type: RelaxedAtomicInt32
9807   value: 200
9808   mirror: always
9809 - name: mousewheel.system_scroll_override.vertical.factor
9810   type: RelaxedAtomicInt32
9811   value: 200
9812   mirror: always
9814 # Mouse wheel scroll transaction is held even if the mouse cursor is moved.
9815 - name: mousewheel.transaction.ignoremovedelay
9816   type: RelaxedAtomicInt32
9817   value: 100
9818   mirror: always
9820 # Mouse wheel scroll transaction period of time (in milliseconds).
9821 - name: mousewheel.transaction.timeout
9822   type: RelaxedAtomicInt32
9823   value: 1500
9824   mirror: always
9826 # Mouse wheel scroll position is determined by GetMessagePos rather than
9827 # LPARAM msg value
9828 - name: mousewheel.ignore_cursor_position_in_lparam
9829   type: RelaxedAtomicBool
9830   value: false
9831   mirror: always
9833 # If line-height is lower than this value (in device pixels), 1 line scroll
9834 # scrolls this height.
9835 - name: mousewheel.min_line_scroll_amount
9836   type: int32_t
9837   value: 5
9838   mirror: always
9840 #---------------------------------------------------------------------------
9841 # Prefs starting with "mozilla."
9842 #---------------------------------------------------------------------------
9844 - name: mozilla.widget.raise-on-setfocus
9845   type: bool
9846   value: true
9847   mirror: once
9849 #---------------------------------------------------------------------------
9850 # Prefs starting with "network."
9851 #---------------------------------------------------------------------------
9853 # Force less-secure NTLMv1 when needed (NTLMv2 is the default).
9854 - name: network.auth.force-generic-ntlm-v1
9855   type: RelaxedAtomicBool
9856   value: false
9857   mirror: always
9859 # Sub-resources HTTP-authentication:
9860 #   0 - don't allow sub-resources to open HTTP authentication credentials
9861 #       dialogs
9862 #   1 - allow sub-resources to open HTTP authentication credentials dialogs,
9863 #       but don't allow it for cross-origin sub-resources
9864 #   2 - allow the cross-origin authentication as well.
9865 - name: network.auth.subresource-http-auth-allow
9866   type: uint32_t
9867   value: 2
9868   mirror: always
9870 # Sub-resources HTTP-authentication for cross-origin images:
9871 # - true: It is allowed to present http auth. dialog for cross-origin images.
9872 # - false: It is not allowed.
9873 # If network.auth.subresource-http-auth-allow has values 0 or 1 this pref does
9874 # not have any effect.
9875 - name: network.auth.subresource-img-cross-origin-http-auth-allow
9876   type: bool
9877   value: false
9878   mirror: always
9880 # Resources that are triggered by some non-web-content:
9881 # - true: They are allow to present http auth. dialog
9882 # - false: They are not allow to present http auth. dialog.
9883 - name: network.auth.non-web-content-triggered-resources-http-auth-allow
9884   type: bool
9885   value: false
9886   mirror: always
9888 # Whether to show anti-spoof confirmation prompts when navigating to a url
9889 # with userinfo
9890 - name: network.auth.confirmAuth.enabled
9891   type: bool
9892   value: true
9893   mirror: always
9895 # Whether to use new implementation of ParseReasm
9896 - name: network.auth.use_new_parse_realm
9897   type: RelaxedAtomicBool
9898   value: true
9899   mirror: always
9901 # Whether to use new implementation of ParseReasm
9902 - name: network.auth.allow_multiple_challenges_same_line
9903   type: RelaxedAtomicBool
9904   value: true
9905   mirror: always
9907 # Whether to use challenges in the most secure order. See bug 650091.
9908 - name: network.auth.choose_most_secure_challenge
9909   type: RelaxedAtomicBool
9910   value: true
9911   mirror: always
9913 # See the full list of values in nsICookieService.idl.
9914 - name: network.cookie.cookieBehavior
9915   type: RelaxedAtomicInt32
9916   value: 0 # accept all cookies
9917   mirror: always
9919 # See the full list of values in nsICookieService.idl.
9920 - name: network.cookie.rejectForeignWithExceptions.enabled
9921   type: bool
9922   value: false
9923   mirror: always
9925 # The cookieBehavior to be used in Private Browsing mode.
9926 - name: network.cookie.cookieBehavior.pbmode
9927   type: RelaxedAtomicInt32
9928   value: 0 # accept all cookies
9929   mirror: always
9931 # Stale threshold for cookies in seconds.
9932 - name: network.cookie.staleThreshold
9933   type: uint32_t
9934   value: 60
9935   mirror: always
9937 # Cookie lifetime policy. Possible values:
9938 # 0 - accept all cookies
9939 # 1 - deprecated. don't use it.
9940 # 2 - accept as session cookies
9941 # 3 - deprecated. don't use it.
9942 - name: network.cookie.lifetimePolicy
9943   type: RelaxedAtomicInt32
9944   value: 0
9945   mirror: always
9947 - name: network.cookie.sameSite.laxByDefault
9948   type: RelaxedAtomicBool
9949   value: @IS_EARLY_BETA_OR_EARLIER@
9950   mirror: always
9952 # lax-by-default 2 minutes tollerance for unsafe methods. The value is in seconds.
9953 - name: network.cookie.sameSite.laxPlusPOST.timeout
9954   type: uint32_t
9955   value: 120
9956   mirror: always
9958 - name: network.cookie.sameSite.noneRequiresSecure
9959   type: bool
9960   value: @IS_EARLY_BETA_OR_EARLIER@
9961   mirror: always
9963 - name: network.cookie.sameSite.schemeful
9964   type: bool
9965   value: @IS_EARLY_BETA_OR_EARLIER@
9966   mirror: always
9968 - name: network.cookie.thirdparty.sessionOnly
9969   type: bool
9970   value: false
9971   mirror: always
9973 - name: network.cookie.thirdparty.nonsecureSessionOnly
9974   type: bool
9975   value: false
9976   mirror: always
9978 # If we should not store "persistent" cookies at all, i.e., make the
9979 # "persistent" storage be like "private" storage.  This value is only read when
9980 # instantiating persistent storage for the cookie service, which usually only
9981 # happens when the cookie service singleton is created.
9982 - name: network.cookie.noPersistentStorage
9983   type: bool
9984   value: false
9985   mirror: always
9987 # If we should attempt to race the cache and network.
9988 - name: network.http.rcwn.enabled
9989   type: bool
9990   value: true
9991   mirror: always
9993 - name: network.http.rcwn.cache_queue_normal_threshold
9994   type: uint32_t
9995   value: 8
9996   mirror: always
9998 - name: network.http.rcwn.cache_queue_priority_threshold
9999   type: uint32_t
10000   value: 2
10001   mirror: always
10003 # We might attempt to race the cache with the network only if a resource
10004 # is smaller than this size.
10005 - name: network.http.rcwn.small_resource_size_kb
10006   type: uint32_t
10007   value: 256
10008   mirror: always
10010 - name: network.http.rcwn.min_wait_before_racing_ms
10011   type: uint32_t
10012   value: 0
10013   mirror: always
10015 - name: network.http.rcwn.max_wait_before_racing_ms
10016   type: uint32_t
10017   value: 500
10018   mirror: always
10020 # false=real referer, true=spoof referer (use target URI as referer).
10021 - name: network.http.referer.spoofSource
10022   type: bool
10023   value: false
10024   mirror: always
10026 # Check whether we need to hide referrer when leaving a .onion domain.
10027 # false=allow onion referer, true=hide onion referer (use empty referer).
10028 - name: network.http.referer.hideOnionSource
10029   type: bool
10030   value: false
10031   mirror: always
10033 # Include an origin header on non-GET and non-HEAD requests regardless of CORS.
10034 # 0=never send, 1=send when same-origin only, 2=always send.
10035 - name: network.http.sendOriginHeader
10036   type: uint32_t
10037   value: 2
10038   mirror: always
10040 # Prefs allowing granular control of referers.
10041 # 0=don't send any, 1=send only on clicks, 2=send on image requests as well
10042 - name: network.http.sendRefererHeader
10043   type: uint32_t
10044   value: 2
10045   mirror: always
10046   do_not_use_directly: true
10048 # The maximum allowed length for a referrer header - 4096 default.
10049 # 0 means no limit.
10050 - name: network.http.referer.referrerLengthLimit
10051   type: uint32_t
10052   value: 4096
10053   mirror: always
10055 #  0=always send, 1=send iff base domains match, 2=send iff hosts match.
10056 - name: network.http.referer.XOriginPolicy
10057   type: uint32_t
10058   value: 0
10059   mirror: always
10060   do_not_use_directly: true
10062 # 0=full URI, 1=scheme+host+port+path, 2=scheme+host+port.
10063 - name: network.http.referer.trimmingPolicy
10064   type: uint32_t
10065   value: 0
10066   mirror: always
10067   do_not_use_directly: true
10069 # 0=full URI, 1=scheme+host+port+path, 2=scheme+host+port.
10070 - name: network.http.referer.XOriginTrimmingPolicy
10071   type: uint32_t
10072   value: 0
10073   mirror: always
10074   do_not_use_directly: true
10076 # Set the default Referrer Policy; to be used unless overriden by the site.
10077 # 0=no-referrer, 1=same-origin, 2=strict-origin-when-cross-origin,
10078 # 3=no-referrer-when-downgrade.
10079 - name: network.http.referer.defaultPolicy
10080   type: uint32_t
10081   value: 2
10082   mirror: always
10084 # Set the default Referrer Policy applied to third-party trackers when the
10085 # default cookie policy is set to reject third-party trackers, to be used
10086 # unless overriden by the site.
10087 # 0=no-referrer, 1=same-origin, 2=strict-origin-when-cross-origin,
10088 # 3=no-referrer-when-downgrade.
10089 # Trim referrers from trackers to origins by default.
10090 - name: network.http.referer.defaultPolicy.trackers
10091   type: uint32_t
10092   value: 2
10093   mirror: always
10095 # Set the Private Browsing Default Referrer Policy, to be used
10096 # unless overriden by the site.
10097 # 0=no-referrer, 1=same-origin, 2=strict-origin-when-cross-origin,
10098 # 3=no-referrer-when-downgrade.
10099 - name: network.http.referer.defaultPolicy.pbmode
10100   type: uint32_t
10101   value: 2
10102   mirror: always
10104 # Set to ignore referrer policies which is less restricted than the default for
10105 # cross-site requests, including 'unsafe-url', 'no-referrer-when-downgrade' and
10106 # 'origin-when-cross-origin'.
10107 - name: network.http.referer.disallowCrossSiteRelaxingDefault
10108   type: bool
10109   value: true
10110   mirror: always
10112 # Whether we ignore less restricted referrer policies for top navigations.
10113 - name: network.http.referer.disallowCrossSiteRelaxingDefault.top_navigation
10114   type: bool
10115   value: false
10116   mirror: always
10119 # Set to ignore referrer policies which is less restricted than the default for
10120 # cross-site requests in the private browsing mode, including 'unsafe-url',
10121 # 'no-referrer-when-downgrade' and 'origin-when-cross-origin'.
10122 - name: network.http.referer.disallowCrossSiteRelaxingDefault.pbmode
10123   type: bool
10124   value: true
10125   mirror: always
10127 # Whether we ignore less restricted referrer policies for top navigations in the
10128 # private browsing mode.
10129 - name: network.http.referer.disallowCrossSiteRelaxingDefault.pbmode.top_navigation
10130   type: bool
10131   value: true
10132   mirror: always
10134 # Set the Private Browsing Default Referrer Policy applied to third-party
10135 # trackers when the default cookie policy is set to reject third-party
10136 # trackers, to be used unless overriden by the site.
10137 # 0=no-referrer, 1=same-origin, 2=strict-origin-when-cross-origin,
10138 # 3=no-referrer-when-downgrade.
10139 # No need to change this pref for trimming referrers from trackers since in
10140 # private windows we already trim all referrers to origin only.
10141 - name: network.http.referer.defaultPolicy.trackers.pbmode
10142   type: uint32_t
10143   value: 2
10144   mirror: always
10146 # Whether certain http header values should be censored out in logs.
10147 # Specifically filters out "authorization" and "proxy-authorization".
10148 - name: network.http.sanitize-headers-in-logs
10149   type: RelaxedAtomicBool
10150   value: true
10151   mirror: always
10153 # Set this pref to an integer like 99 to override the User-Agent string's
10154 # Firefox version. The value 0 means use the default Firefox version. If
10155 # enterprise users rely on sites that aren't compatible with Firefox version
10156 # 100's three-digit version number, enterprise admins can set this pref to a
10157 # known-good version (like 99) in an enterprise policy file.
10158 - name: network.http.useragent.forceVersion
10159   type: uint32_t
10160   value: 0
10161   mirror: always
10163 # Whether or not we use Windows for SSO to Microsoft sites.
10164 - name: network.http.windows-sso.enabled
10165   type: RelaxedAtomicBool
10166   value: false
10167   mirror: always
10169 # The factor by which to increase the keepalive timeout when the
10170 # NS_HTTP_LARGE_KEEPALIVE flag is used for a connection
10171 - name: network.http.largeKeepaliveFactor
10172   type: RelaxedAtomicUint32
10173   value: 10
10174   mirror: always
10176 # If set to true, IOService.offline depends on IOService.connectivity.
10177 - name: network.offline-mirrors-connectivity
10178   type: RelaxedAtomicBool
10179   value: false
10180   mirror: always
10182 # If set to true, disallow localhost connections when offline.
10183 - name: network.disable-localhost-when-offline
10184   type: RelaxedAtomicBool
10185   value: false
10186   mirror: always
10188 # Enables the predictive service.
10189 - name: network.predictor.enabled
10190   type: bool
10191   value: true
10192   mirror: always
10194 # Set true to allow resolving proxy for localhost
10195 - name: network.proxy.allow_hijacking_localhost
10196   type: RelaxedAtomicBool
10197   value: false
10198   mirror: always
10200 # This pref will still treat localhost URLs as secure even when hijacked
10201 # during testing. This is necessary for automated testing to check that we
10202 # actually treat localhost as a secure origin.
10203 - name: network.proxy.testing_localhost_is_secure_when_hijacked
10204   type: RelaxedAtomicBool
10205   value: false
10206   mirror: always
10208 # Allow CookieJarSettings to be unblocked for channels without a document.
10209 # This is for testing only.
10210 - name: network.cookieJarSettings.unblocked_for_testing
10211   type: bool
10212   value: false
10213   mirror: always
10215 - name: network.predictor.enable-hover-on-ssl
10216   type: bool
10217   value: false
10218   mirror: always
10220 - name: network.predictor.enable-prefetch
10221   type: bool
10222   value: @IS_EARLY_BETA_OR_EARLIER@
10223   mirror: always
10225 - name: network.predictor.page-degradation.day
10226   type: int32_t
10227   value: 0
10228   mirror: always
10229 - name: network.predictor.page-degradation.week
10230   type: int32_t
10231   value: 5
10232   mirror: always
10233 - name: network.predictor.page-degradation.month
10234   type: int32_t
10235   value: 10
10236   mirror: always
10237 - name: network.predictor.page-degradation.year
10238   type: int32_t
10239   value: 25
10240   mirror: always
10241 - name: network.predictor.page-degradation.max
10242   type: int32_t
10243   value: 50
10244   mirror: always
10246 - name: network.predictor.subresource-degradation.day
10247   type: int32_t
10248   value: 1
10249   mirror: always
10250 - name: network.predictor.subresource-degradation.week
10251   type: int32_t
10252   value: 10
10253   mirror: always
10254 - name: network.predictor.subresource-degradation.month
10255   type: int32_t
10256   value: 25
10257   mirror: always
10258 - name: network.predictor.subresource-degradation.year
10259   type: int32_t
10260   value: 50
10261   mirror: always
10262 - name: network.predictor.subresource-degradation.max
10263   type: int32_t
10264   value: 100
10265   mirror: always
10267 - name: network.predictor.prefetch-rolling-load-count
10268   type: int32_t
10269   value: 10
10270   mirror: always
10272 - name: network.predictor.prefetch-min-confidence
10273   type: int32_t
10274   value: 100
10275   mirror: always
10276 - name: network.predictor.preconnect-min-confidence
10277   type: int32_t
10278   value: 90
10279   mirror: always
10280 - name: network.predictor.preresolve-min-confidence
10281   type: int32_t
10282   value: 60
10283   mirror: always
10285 - name: network.predictor.prefetch-force-valid-for
10286   type: int32_t
10287   value: 10
10288   mirror: always
10290 - name: network.predictor.max-resources-per-entry
10291   type: int32_t
10292   value: 100
10293   mirror: always
10295 # This is selected in concert with max-resources-per-entry to keep memory
10296 # usage low-ish. The default of the combo of the two is ~50k.
10297 - name: network.predictor.max-uri-length
10298   type: uint32_t
10299   value: 500
10300   mirror: always
10302 # A testing flag.
10303 - name: network.predictor.doing-tests
10304   type: bool
10305   value: false
10306   mirror: always
10308 # Enables `<link rel="preload">` tag and `Link: rel=preload` response header handling.
10309 - name: network.preload
10310   type: RelaxedAtomicBool
10311   value: true
10312   mirror: always
10314 # Enable 103 Early Hint status code (RFC 8297)
10315 - name: network.early-hints.enabled
10316   type: RelaxedAtomicBool
10317   value: false
10318   mirror: always
10320 # Whether to use the network process or not
10321 # Start a separate socket process. Performing networking on the socket process
10322 # is control by a sepparate pref
10323 # ("network.http.network_access_on_socket_process.enabled").
10324 # Changing these prefs requires a restart.
10325 - name: network.process.enabled
10326   type: RelaxedAtomicBool
10327   mirror: always
10328 #if defined(ANDROID) || defined(MOZ_THUNDERBIRD)
10329   value: false # see bug 1641427
10330 #else
10331   value: true
10332 #endif
10334 # Whether we can send OnDataAvailable to content process directly.
10335 - name: network.send_ODA_to_content_directly
10336   type: RelaxedAtomicBool
10337   value: true
10338   mirror: always
10340 # Perform all network access on the socket process.
10341 # The pref requires "network.process.enabled" to be true.
10342 # Changing these prefs requires a restart.
10343 - name: network.http.network_access_on_socket_process.enabled
10344   type: RelaxedAtomicBool
10345   mirror: always
10346   value: false
10348 # Telemetry of traffic categories. Whether or not to enable HttpTrafficAnalyzer.
10349 - name: network.traffic_analyzer.enabled
10350   type: RelaxedAtomicBool
10351   value: true
10352   mirror: always
10354 # Whether DNS resolution is limited to literals and cached entries.
10355 - name: network.dns.disabled
10356   type: RelaxedAtomicBool
10357   value: false
10358   mirror: always
10360 # Whether DNS resolution is limited to literals and cached entries.
10361 - name: network.dns.skipTRR-when-parental-control-enabled
10362   type: RelaxedAtomicBool
10363   value: true
10364   mirror: always
10366 - name: network.dns.disablePrefetchFromHTTPS
10367   type: bool
10368   value: true
10369   mirror: always
10371 # Max time to shutdown the resolver threads
10372 - name: network.dns.resolver_shutdown_timeout_ms
10373   type: uint32_t
10374   value: 2000
10375   mirror: always
10377 # When true on Windows DNS resolutions for single label domains
10378 # (domains that don't contain a dot) will be resolved using the DnsQuery
10379 # API instead of PR_GetAddrInfoByName
10380 - name: network.dns.dns_query_single_label
10381   type: RelaxedAtomicBool
10382   value: false
10383   mirror: always
10385 # When this pref is true we enforce a 253 character limit on domains we try to
10386 # resolve. See bug 1264117. If it doesn't cause any web-compat issues we can
10387 # remove it in a few releases
10388 - name: network.dns.limit_253_chars
10389   type: RelaxedAtomicBool
10390   value: true
10391   mirror: always
10393 # When this pref is true, we copy the host name to a fresh string before
10394 # calling into getaddrinfo.
10395 - name: network.dns.copy_string_before_call
10396   type: RelaxedAtomicBool
10397   value: true
10398   mirror: always
10400 # The proxy type. See nsIProtocolProxyService.idl
10401 #     PROXYCONFIG_DIRECT   = 0
10402 #     PROXYCONFIG_MANUAL   = 1
10403 #     PROXYCONFIG_PAC      = 2
10404 #     PROXYCONFIG_WPAD     = 4
10405 #     PROXYCONFIG_SYSTEM   = 5
10406 - name: network.proxy.type
10407   type: RelaxedAtomicUint32
10408   value: 5
10409   mirror: always
10411 # Whether the SOCKS proxy should be in charge of DNS resolution.
10412 - name: network.proxy.socks_remote_dns
10413   type: RelaxedAtomicBool
10414   value: false
10415   mirror: always
10417 # When receiving a network change event, the time (in ms) we wait to reload the
10418 # PAC url.
10419 - name: network.proxy.reload_pac_delay
10420   type: RelaxedAtomicUint32
10421   value: 2000
10422   mirror: always
10424 # When parsing "SOCKS" in PAC string, the default version of SOCKS that will be
10425 # used.
10426 - name: network.proxy.default_pac_script_socks_version
10427   type: RelaxedAtomicUint32
10428   value: 4
10429   mirror: always
10431 # Whether to force failover to direct for system requests.
10432 #ifdef MOZ_PROXY_DIRECT_FAILOVER
10433 - name: network.proxy.failover_direct
10434   type: bool
10435   value: true
10436   mirror: always
10437 #endif
10439 # Whether to allow a bypass flag to be set on httpChannel that will
10440 # prevent proxies from being used for that specific request.
10441 - name: network.proxy.allow_bypass
10442   type: bool
10443   value: true
10444   mirror: always
10446 - name: network.proxy.parse_pac_on_socket_process
10447   type: RelaxedAtomicBool
10448   value: false
10449   mirror: always
10451 - name: network.proxy.detect_system_proxy_changes
10452   type: RelaxedAtomicBool
10453   value: false
10454   mirror: always
10456 # Some requests during a page load are marked as "tail", mainly trackers, but not only.
10457 # This pref controls whether such requests are put to the tail, behind other requests
10458 # emerging during page loading process.
10459 - name: network.http.tailing.enabled
10460   type: bool
10461   value: true
10462   mirror: always
10464 # Whether to run proxy checks when processing Alt-Svc headers.
10465 - name: network.http.altsvc.proxy_checks
10466   type: bool
10467   value: true
10468   mirror: always
10470 - name: network.http.stale_while_revalidate.enabled
10471   type: RelaxedAtomicBool
10472   value: true
10473   mirror: always
10475 # Whether to cache SSL resumption tokens in necko.
10476 - name: network.ssl_tokens_cache_enabled
10477   type: RelaxedAtomicBool
10478   value: true
10479   mirror: always
10481 # Capacity of the above cache, in kilobytes.
10482 - name: network.ssl_tokens_cache_capacity
10483   type: RelaxedAtomicUint32
10484   value: 2048
10485   mirror: always
10487 # The maximum allowed length for a URL - 1MB default.
10488 - name: network.standard-url.max-length
10489   type: RelaxedAtomicUint32
10490   value: 1048576
10491   mirror: always
10493 # Default global TRR provider
10494 - name: network.trr.default_provider_uri
10495   type: String
10496   value: "https://mozilla.cloudflare-dns.com/dns-query"
10497   mirror: never
10499 # If true, don't fallback to native DNS upon network errors.
10500 - name: network.trr.strict_native_fallback
10501   type: RelaxedAtomicBool
10502   value: @IS_NIGHTLY_BUILD@
10503   mirror: always
10505 # If true, we'll fallback to native if the retry also times out.
10506 - name: network.trr.strict_native_fallback_allow_timeouts
10507   type: RelaxedAtomicBool
10508   value: true
10509   mirror: always
10511 # Single TRR request timeout (ms) when strict native fallback is enabled.
10512 - name: network.trr.strict_fallback_request_timeout_ms
10513   type: RelaxedAtomicUint32
10514   value: 6000
10515   mirror: always
10517 # If false, the temporary blocklisting feature is disabled.
10518 # This is useful for tests to prevent bleeding extra reqs
10519 # between tasks, since we may attempt to look up the
10520 # parent domain in the background when blocklisting a host.
10521 - name: network.trr.temp_blocklist
10522   type: RelaxedAtomicBool
10523   value: true
10524   mirror: always
10526 # TRR blocklist entry expire time (in seconds). Default is one minute.
10527 # Meant to survive basically a page load.
10528 - name: network.trr.temp_blocklist_duration_sec
10529   type: RelaxedAtomicUint32
10530   value: 60
10531   mirror: always
10533 # Single TRR request timeout, in milliseconds
10534 - name: network.trr.request_timeout_ms
10535   type: RelaxedAtomicUint32
10536   value: 1500
10537   mirror: always
10539 # Single TRR request timeout, in milliseconds for mode 3
10540 - name: network.trr.request_timeout_mode_trronly_ms
10541   type: RelaxedAtomicUint32
10542   value: 30000
10543   mirror: always
10545 # The timeout of the TRR confirmation request
10546 - name: network.trr.confirmation_timeout_ms
10547   type: RelaxedAtomicUint32
10548   value: 6000
10549   mirror: always
10551 # The timeout of the TRR confirmation request
10552 - name: network.trr.confirmation_telemetry_enabled
10553   type: RelaxedAtomicBool
10554   value: true
10555   mirror: always
10557 # Whether to send the Accept-Language header for TRR requests
10558 - name: network.trr.send_accept-language_headers
10559   type: RelaxedAtomicBool
10560   value: false
10561   mirror: always
10563 # Whether to send an empty Accept-Encoding header for TRR requests
10564 - name: network.trr.send_empty_accept-encoding_headers
10565   type: RelaxedAtomicBool
10566   value: true
10567   mirror: always
10569 # Whether to send the User-Agent header for TRR requests
10570 - name: network.trr.send_user-agent_headers
10571   type: RelaxedAtomicBool
10572   value: false
10573   mirror: always
10575 # This pref controls whether to use TRRServiceChannel off main thread.
10576 - name: network.trr.fetch_off_main_thread
10577   type: RelaxedAtomicBool
10578   value: true
10579   mirror: always
10581 # If we should wait for captive portal confirmation before enabling TRR
10582 - name: network.trr.wait-for-portal
10583   type: RelaxedAtomicBool
10584   value: false
10585   mirror: always
10587 # If we should wait for TRR service confirmation to complete before enabling
10588 # TRR for lookups when fallback is enabled. Confirmation is always skipped when
10589 # global mode is TRR-only (no fallback).
10590 - name: network.trr.wait-for-confirmation
10591   type: RelaxedAtomicBool
10592   value: false
10593   mirror: always
10595 # Normally when confirmation fails we wait for the confirmation to succeed
10596 # before attempting to do TRR. When this pref is true, we optimistically
10597 # assume the confirmation will succeed and might attempt TRR anyway.
10598 # If network.trr.wait-for-confirmation is true, this pref is ignored.
10599 - name: network.trr.attempt-when-retrying-confirmation
10600   type: RelaxedAtomicBool
10601   value: false
10602   mirror: always
10604 # Use GET (rather than POST)
10605 - name: network.trr.useGET
10606   type: RelaxedAtomicBool
10607   value: false
10608   mirror: always
10610 # Allow RFC1918 address in responses?
10611 - name: network.trr.allow-rfc1918
10612   type: RelaxedAtomicBool
10613   value: false
10614   mirror: always
10616 # When true, it only sends AAAA when the system has IPv6 connectivity
10617 - name: network.trr.skip-AAAA-when-not-supported
10618   type: RelaxedAtomicBool
10619   value: true
10620   mirror: always
10622 # Whether to apply split horizon mitigations when using TRR.
10623 # These include adding the DNS suffix to the excluded domains
10624 - name: network.trr.split_horizon_mitigations
10625   type: RelaxedAtomicBool
10626   value: true
10627   mirror: always
10629 # Explicitly disable ECS (EDNS Client Subnet, RFC 7871)
10630 - name: network.trr.disable-ECS
10631   type: RelaxedAtomicBool
10632   value: true
10633   mirror: always
10635 # When true, the DNS+TRR cache will be cleared when a relevant TRR pref
10636 # changes. (uri, bootstrapAddress, excluded-domains)
10637 - name: network.trr.clear-cache-on-pref-change
10638   type: RelaxedAtomicBool
10639   value: true
10640   mirror: always
10642 # After this many failed TRR requests in a row, consider TRR borked
10643 - name: network.trr.max-fails
10644   type: RelaxedAtomicUint32
10645   value: 15
10646   mirror: always
10648 # When the TRR confirmation is set to CONFIRM_FAILED due to many failures in
10649 # a row, we set a timer to retry. This has an exponential backoff up to
10650 # 64 seconds.
10651 - name: network.trr.retry-timeout-ms
10652   type: RelaxedAtomicUint32
10653   value: 125
10654   mirror: always
10656 # Retry with no TRR when the response contained only 0.0.0.0 or ::
10657 - name: network.trr.fallback-on-zero-response
10658   type: RelaxedAtomicBool
10659   value: false
10660   mirror: always
10662 # If true we parse the /etc/hosts file and exclude any host names from TRR.
10663 # Reading the file is only done once, when TRR is first enabled - this could be
10664 # soon after startup or when the pref is flipped.
10665 - name: network.trr.exclude-etc-hosts
10666   type: RelaxedAtomicBool
10667   value: true
10668   mirror: always
10670 # Whether to enable odoh.
10671 - name: network.trr.odoh.enabled
10672   type: RelaxedAtomicBool
10673   value: false
10674   mirror: always
10676 # The uri of Oblivious Proxy.
10677 - name: network.trr.odoh.proxy_uri
10678   type: String
10679   value: ""
10680   mirror: never
10682 # The host name of Oblivious Target.
10683 - name: network.trr.odoh.target_host
10684   type: String
10685   value: ""
10686   mirror: never
10688 # The uri path of the odoh uri.
10689 - name: network.trr.odoh.target_path
10690   type: String
10691   value: ""
10692   mirror: never
10694 # The minimum ttl of the DNS record that contains ODoHConfigs.
10695 - name: network.trr.odoh.min_ttl
10696   type: RelaxedAtomicUint32
10697   value: 60
10698   mirror: always
10700 # The uri indicates where to get ODoHConfigs.
10701 - name: network.trr.odoh.configs_uri
10702   type: String
10703   value: ""
10704   mirror: never
10706 # Whether to add padding in the doh dns queries (rfc 7830)
10707 - name: network.trr.padding
10708   type: RelaxedAtomicBool
10709   value: true
10710   mirror: always
10712 # The block size to pad to. Capped at 1024 bytes.
10713 # Setting it to 0 doesn't add additional padding, but allows the server to
10714 # respond with padding (RFC7930 Sec 4)
10715 - name: network.trr.padding.length
10716   type: RelaxedAtomicUint32
10717   value: 128
10718   mirror: always
10720 # Whether to skip the NS check for the blocked host.
10721 # Note this is used for test only.
10722 - name: network.trr.skip-check-for-blocked-host
10723   type: RelaxedAtomicBool
10724   value: false
10725   mirror: always
10727 # Whether to use the connection info that is generated asynchronously.
10728 - name: network.trr.async_connInfo
10729   type: RelaxedAtomicBool
10730   value: false
10731   mirror: always
10733 # Allow the network changed event to get sent when a network topology or setup
10734 # change is noticed while running.
10735 - name: network.notify.changed
10736   type: RelaxedAtomicBool
10737   value: true
10738   mirror: always
10740 # Allow network detection of IPv6 related changes (bug 1245059)
10741 - name: network.notify.IPv6
10742   type: RelaxedAtomicBool
10743 #ifdef XP_WIN
10744   value: false
10745 #else
10746   value: true
10747 #endif
10748   mirror: always
10750 # Whether to check the dnsSuffix on network changes
10751 - name: network.notify.dnsSuffixList
10752   type: RelaxedAtomicBool
10753   value: true
10754   mirror: always
10756 # Whether to check the registry for proxies on network changes that indicate
10757 # that TRR should not be used.
10758 - name: network.notify.checkForProxies
10759   type: RelaxedAtomicBool
10760   value: true
10761   mirror: always
10763 # Whether to check the registry for NRPT rules on network changes that
10764 # indicate that TRR should not be used.
10765 - name: network.notify.checkForNRPT
10766   type: RelaxedAtomicBool
10767   value: true
10768   mirror: always
10770 # Whether NotifyIpInterfaceChange should be called immediately after
10771 # registration in order to record the initial state of the network adapters.
10772 - name: network.notify.initial_call
10773   type: RelaxedAtomicBool
10774   value: true
10775   mirror: always
10777 # Whether to check for DNS resolvers
10778 - name: network.notify.resolvers
10779   type: RelaxedAtomicBool
10780   value: true
10781   mirror: always
10783 # Whether to use the rust implemented DefaultURI for unknown scheme types
10784 - name: network.url.useDefaultURI
10785   type: RelaxedAtomicBool
10786   value: false
10787   mirror: always
10789 # The maximum allowed length for a URL - 32MB default.
10790 # If 0 that means no limit.
10791 - name: network.url.max-length
10792   type: RelaxedAtomicUint32
10793   value: 32 * 1024 * 1024
10794   mirror: always
10796 # Force remapping of remote port numbers to allow reaching local testing
10797 # servers or port forwarders listening on non-standard ports.  Note that
10798 # this is not changing the origin URL in the addressbar, only internally
10799 # the port number used.  This is intended to be used along with the
10800 # `network.dns.forceResolve` preference.
10802 # The form is:
10803 #   "80,443,808-888=8080; 563=8081"
10804 # this will remap ports for HTTP, HTTPS and the range of 808-888 included
10805 # to use port 8080, and port 563 to go to 8081.
10806 - name: network.socket.forcePort
10807   type: String
10808   value: ""
10809   mirror: never
10811 # Try and use HTTP2 when using SSL
10812 - name: network.http.http2.enabled
10813   type: RelaxedAtomicBool
10814   value: true
10815   mirror: always
10817 - name: network.http.http2.enabled.deps
10818   type: RelaxedAtomicBool
10819   value: true
10820   mirror: always
10822 - name: network.http.http2.enforce-tls-profile
10823   type: RelaxedAtomicBool
10824   value: true
10825   mirror: always
10827 - name: network.http.http2.chunk-size
10828   type: RelaxedAtomicInt32
10829   value: 16000
10830   mirror: always
10832 - name: network.http.http2.timeout
10833   type: RelaxedAtomicInt32
10834   value: 170
10835   mirror: always
10837 - name: network.http.http2.coalesce-hostnames
10838   type: RelaxedAtomicBool
10839   value: true
10840   mirror: always
10842 - name: network.http.http2.persistent-settings
10843   type: RelaxedAtomicBool
10844   value: false
10845   mirror: always
10847 - name: network.http.http2.ping-threshold
10848   type: RelaxedAtomicInt32
10849   value: 58
10850   mirror: always
10852 - name: network.http.http2.ping-timeout
10853   type: RelaxedAtomicInt32
10854   value: 8
10855   mirror: always
10857 - name: network.http.http2.send-buffer-size
10858   type: RelaxedAtomicInt32
10859   value: 131072
10860   mirror: always
10862 - name: network.http.http2.allow-push
10863   type: RelaxedAtomicBool
10864   value: true
10865   mirror: always
10867 - name: network.http.http2.push-allowance
10868   type: RelaxedAtomicInt32
10869   value: 131072  # 128KB
10870   mirror: always
10872 - name: network.http.http2.pull-allowance
10873   type: RelaxedAtomicInt32
10874   value: 12582912  # 12MB
10875   mirror: always
10877 - name: network.http.http2.default-concurrent
10878   type: RelaxedAtomicInt32
10879   value: 100
10880   mirror: always
10882 - name: network.http.http2.default-hpack-buffer
10883   type: RelaxedAtomicInt32
10884   value: 65536 # 64K
10885   mirror: always
10887 - name: network.http.http2.websockets
10888   type: RelaxedAtomicBool
10889   value: false
10890   mirror: always
10892 - name: network.http.http2.enable-hpack-dump
10893   type: RelaxedAtomicBool
10894   value: false
10895   mirror: always
10897 # Enable HTTP/3
10898 - name: network.http.http3.enable
10899   type: RelaxedAtomicBool
10900   value: true
10901   mirror: always
10903 # Receive buffer size of QUIC socket
10904 - name: network.http.http3.recvBufferSize
10905   type: RelaxedAtomicInt32
10906   value: 1048576
10907   mirror: always
10909 - name: network.http.http3.enable_qlog
10910   type: RelaxedAtomicBool
10911   value: false
10912   mirror: always
10914 - name: network.http.http3.enable_0rtt
10915   type: RelaxedAtomicBool
10916   value: true
10917   mirror: always
10919 # When a h3 transaction is inserted in the pending queue, the time (ms) we wait
10920 # to create a TCP backup connection.
10921 - name: network.http.http3.backup_timer_delay
10922   type: RelaxedAtomicUint32
10923   value: 100
10924   mirror: always
10926 # The global half open sockets allowed for creating a backup connection.
10927 - name: network.http.http3.parallel_fallback_conn_limit
10928   type: RelaxedAtomicUint32
10929   value: 32
10930   mirror: always
10932 # Receive buffer size of QUIC socket
10933 - name: network.http.http3.max_data
10934   type: RelaxedAtomicUint32
10935   value: 25165824
10936   mirror: always
10938 # Receive buffer size of QUIC socket
10939 - name: network.http.http3.max_stream_data
10940   type: RelaxedAtomicUint32
10941   value: 12582912
10942   mirror: always
10944 # Enable http3 network priority as described in
10945 # https://httpwg.org/http-extensions/draft-ietf-httpbis-priority.html
10946 - name: network.http.http3.priority
10947   type: RelaxedAtomicBool
10948   value: true
10949   mirror: always
10951 # Depriorizing background tabs notifies websites when switching to or from the
10952 # tab while still loading resources for the website. On one hand it might
10953 # improve performance when switching to an tab with a website using the same
10954 # QUIC connection. On the other hand it sends more data to the website and
10955 # might be a privacy concern.
10956 - name: network.http.http3.send_background_tabs_deprioritization
10957   type: RelaxedAtomicBool
10958   value: false
10959   mirror: always
10961 # When true, a http request will be upgraded to https when HTTPS RR is
10962 # available.
10963 - name: network.dns.upgrade_with_https_rr
10964   type: RelaxedAtomicBool
10965   value: true
10966   mirror: always
10968 # Whether to use HTTPS RR as AltSvc
10969 - name: network.dns.use_https_rr_as_altsvc
10970   type: RelaxedAtomicBool
10971   value: true
10972   mirror: always
10974 # Whether to check for NAT64 using the system resolver
10975 - name: network.connectivity-service.nat64-check
10976   type: bool
10977   value: true
10978   mirror: always
10980 # Manually enter the NAT64 prefix that will be used if IPv4 is unavailable.
10981 # The value is formatted as IPv6 with the least significant bits to be dropped.
10982 # For example, 64:ff9b:: is a common prefix. This will not disable
10983 # the NAT64 check, although the value of this pref will be prioritized.
10984 - name: network.connectivity-service.nat64-prefix
10985   type: String
10986   value: ""
10987   mirror: never
10989 # Whether to enable echconfig.
10990 - name: network.dns.echconfig.enabled
10991   type: RelaxedAtomicBool
10992   value: false
10993   mirror: always
10995 # Whether to enable echconfig for http3.
10996 - name: network.dns.http3_echconfig.enabled
10997   type: RelaxedAtomicBool
10998   value: false
10999   mirror: always
11001 # This pref needs to be worked together with network.dns.echconfig.enabled
11002 # being true and there is no record without ECHConfig.
11003 # When we try all records with ECHConfig in HTTPS RRs and still can't connect,
11004 # this pref indicate whether we can fallback to the origin server.
11005 - name: network.dns.echconfig.fallback_to_origin_when_all_failed
11006   type: RelaxedAtomicBool
11007   value: true
11008   mirror: always
11010 # When true, reset the exclusion list when all records are excluded.
11011 - name: network.dns.httpssvc.reset_exclustion_list
11012   type: RelaxedAtomicBool
11013   value: true
11014   mirror: always
11016 # If the http3 connection cannot be ready after the timeout value here, the
11017 # transaction will start another non-http3 conneciton.
11018 # Setting this value to 0 indicates this feature is disabled.
11019 - name: network.dns.httpssvc.http3_fast_fallback_timeout
11020   type: RelaxedAtomicUint32
11021   value: 50
11022   mirror: always
11024 # Whether to force a transaction to wait https rr.
11025 - name: network.dns.force_waiting_https_rr
11026   type: RelaxedAtomicBool
11027   value: @IS_NIGHTLY_BUILD@
11028   mirror: always
11030 # The TTL for negative responses of TXT and HTTPS records.
11031 - name: network.dns.negative_ttl_for_type_record
11032   type: RelaxedAtomicUint32
11033   value: 300   # 5 minutes (in seconds)
11034   mirror: always
11036 # Whether to use port prefixed QNAME for HTTPS RR
11037 - name: network.dns.port_prefixed_qname_https_rr
11038   type: RelaxedAtomicBool
11039   value: false
11040   mirror: always
11042 - name: network.cache.frecency_array_check_enabled
11043   type: RelaxedAtomicBool
11044   value: @IS_EARLY_BETA_OR_EARLIER@
11045   mirror: always
11047 # When this pref is true, AddStorageEntry will return an error if the
11048 # OPEN_READONLY & OPEN_SECRETLY flags are passed and no entry exists.
11049 # If no regressions occur this pref should be removed.
11050 - name: network.cache.bug1708673
11051   type: RelaxedAtomicBool
11052   value: false
11053   mirror: always
11055 #  This is used for a temporary workaround for a web-compat issue. If pref is
11056 # true CORS preflight requests are allowed to send client certificates.
11057 - name: network.cors_preflight.allow_client_cert
11058   type: RelaxedAtomicBool
11059   value: false
11060   mirror: always
11062 # Whether to record the telemetry event when a JAR channel is failed to load.
11063 - name: network.jar.record_failure_reason
11064   type: RelaxedAtomicBool
11065   value: @IS_EARLY_BETA_OR_EARLIER@
11066   mirror: always
11068 # When this pref is true we clear the Content-Encoding header for
11069 # application/x-gzip Content-Type responses, see bug 1030660.
11071 # Assuming there are no regressions, this pref and related code should be
11072 # removed.
11073 - name: network.http.clear_bogus_content_encoding
11074   type: RelaxedAtomicBool
11075   value: false
11076   mirror: always
11078 # When this pref is true, we will use the HTTPS acceptable content encoding
11079 # list for trustworthy domains such as http://localhost
11080 - name: network.http.encoding.trustworthy_is_https
11081   type: RelaxedAtomicBool
11082   value: true
11083   mirror: always
11085 # Support http3 version1
11086 - name: network.http.http3.support_version1
11087   type: RelaxedAtomicBool
11088   value: true
11089   mirror: always
11091 # Disable early data on an origin if SSL_ERROR_PROTOCOL_VERSION_ALERT is received
11092 - name: network.http.early_data_disable_on_error
11093   type: RelaxedAtomicBool
11094   value: true
11095   mirror: always
11097 # Disable early data if it fails for more than this number of origins
11098 - name: network.http.early_data_max_error
11099   type: RelaxedAtomicUint32
11100   value: 5
11101   mirror: always
11103 # The maximum count that we allow socket prrocess to crash. If this count is
11104 # reached, we won't use networking over socket process.
11105 - name: network.max_socket_process_failed_count
11106   type: RelaxedAtomicUint32
11107   value: 1
11108   mirror: always
11110 #---------------------------------------------------------------------------
11111 # Prefs starting with "nglayout."
11112 #---------------------------------------------------------------------------
11114 # Enable/disable display list invalidation logging --- useful for debugging.
11115 - name: nglayout.debug.invalidation
11116   type: bool
11117   value: false
11118   mirror: always
11120 # Enable/disable widget update area flashing --- only supported with
11121 # BasicLayers (other layer managers always update the entire widget area).
11122 - name: nglayout.debug.widget_update_flashing
11123   type: RelaxedAtomicBool
11124   value: false
11125   mirror: always
11127 - name: nglayout.debug.disable_xul_cache
11128   type: bool
11129   value: false
11130   mirror: always
11132 - name: nglayout.initialpaint.delay
11133   type: int32_t
11134   value: 5
11135   mirror: always
11137 - name: nglayout.initialpaint.delay_in_oopif
11138   type: int32_t
11139   value: 5
11140   mirror: always
11142 #---------------------------------------------------------------------------
11143 # Prefs starting with "page_load."
11144 #---------------------------------------------------------------------------
11146 # Time in milliseconds during which certain tasks are deprioritized during
11147 # page load.
11148 - name: page_load.deprioritization_period
11149   type: RelaxedAtomicUint32
11150   value: 5000
11151   mirror: always
11153 #---------------------------------------------------------------------------
11154 # Prefs starting with "pdfjs."
11155 #---------------------------------------------------------------------------
11157 - name: pdfjs.disabled
11158   type: bool
11159   value: false
11160   mirror: always
11162 #---------------------------------------------------------------------------
11163 # Prefs starting with "permissions."
11164 #---------------------------------------------------------------------------
11166 # 1-Accept, 2-Deny, Any other value: Accept
11167 - name: permissions.default.image
11168   type: RelaxedAtomicUint32
11169   value: 1
11170   mirror: always
11172 - name: permissions.delegation.enabled
11173   type: bool
11174   value: true
11175   mirror: always
11177 - name: permissions.isolateBy.userContext
11178   type: RelaxedAtomicBool
11179   value: false
11180   mirror: always
11182 - name: permissions.isolateBy.privateBrowsing
11183   type: RelaxedAtomicBool
11184   value: true
11185   mirror: always
11187 #---------------------------------------------------------------------------
11188 # Prefs starting with "plain_text."
11189 #---------------------------------------------------------------------------
11191 # When false, text in plaintext documents does not wrap long lines.
11192 - name: plain_text.wrap_long_lines
11193   type: bool
11194   value: true
11195   mirror: always
11197 #---------------------------------------------------------------------------
11198 # Prefs starting with "plugin."
11199 #---------------------------------------------------------------------------
11201 - name: plugin.state.flash
11202   type: uint32_t
11203   # Flash is Click-to-Activate by default on all channels. Disabled for ARM builds.
11204 #if defined(_ARM64_) && defined(XP_WIN)
11205   value: 0
11206 #else
11207   value: 1
11208 #endif
11209   mirror: always
11211 #---------------------------------------------------------------------------
11212 # Prefs starting with "plugins."
11213 #---------------------------------------------------------------------------
11215 - name: plugins.flashBlock.enabled
11216   type: bool
11217   value: false
11218   mirror: always
11220 - name: plugins.http_https_only
11221   type: bool
11222   value: true
11223   mirror: always
11225 #---------------------------------------------------------------------------
11226 # Prefs starting with "preferences."
11227 #---------------------------------------------------------------------------
11229 - name: preferences.allow.omt-write
11230   type: bool
11231   value: true
11232   mirror: never
11234 #ifdef DEBUG
11235   # If set to true, setting a Preference matched to a `Once` StaticPref will
11236   # assert that the value matches. Such assertion being broken is a clear flag
11237   # that the Once policy shouldn't be used.
11238 -   name: preferences.check.once.policy
11239     type: bool
11240     value: false
11241     mirror: always
11243   # If set to true, StaticPrefs Once policy check will be skipped during
11244   # automation regression test. Use with care. This pref must be set back to
11245   # false as soon as specific test has completed.
11246 -   name: preferences.force-disable.check.once.policy
11247     type: bool
11248     value: false
11249     mirror: always
11250 #endif
11252 #---------------------------------------------------------------------------
11253 # Prefs starting with "print."
11254 #---------------------------------------------------------------------------
11256 # Variation fonts can't always be embedded in certain output formats
11257 # such as PDF. To work around this, draw the variation fonts using
11258 # paths instead of using font embedding.
11259 - name: print.font-variations-as-paths
11260   type: RelaxedAtomicBool
11261   value: true
11262   mirror: always
11264 # Whether we always print silently (without a print dialog).
11265 - name: print.always_print_silent
11266   type: RelaxedAtomicBool
11267   value: false
11268   mirror: always
11270 # Whether the pages per sheet print setting is enabled.
11271 - name: print.pages_per_sheet.enabled
11272   type: RelaxedAtomicBool
11273   value: true
11274   mirror: always
11276 # Print via the parent process. This is only used when e10s is enabled.
11277 - name: print.print_via_parent
11278   type: RelaxedAtomicBool
11279   value: true
11280   mirror: always
11282 # Whether we allow the print progress dialog to show up.
11283 - name: print.show_print_progress
11284   type: RelaxedAtomicBool
11285   value: true
11286   mirror: always
11288 # Whether we attempt to generate links in Save As PDF output.
11289 - name: print.save_as_pdf.links.enabled
11290   type: RelaxedAtomicBool
11291   value: true
11292   mirror: always
11294 # Whether we attempt to generate and use document-internal PDF destinations.
11295 # This currently sometimes results in an internal cairo error, see bug 1725743;
11296 # disabled by default until that is resolved.
11297 - name: print.save_as_pdf.internal_destinations.enabled
11298   type: RelaxedAtomicBool
11299   value: false
11300   mirror: always
11302 # The default DPI for printing.
11304 # For PDF-based output, DPI should ideally be irrelevant, but in fact it is not
11305 # for multiple reasons:
11307 #  * Layout code that tries to respect device pixels (e.g. for snapping glyph
11308 #    positions and baselines, and especially for the "GDI Classic"
11309 #    rendering-mode threshold for certain fonts).
11311 #  * The limitations of the PDF format mean that we can't natively represent
11312 #    certain effects, such as filters, in PDF output, so we need to rasterize
11313 #    the parts of the document with these applied.
11315 #  * Other rasterized things like images and such are also affected by DPI
11316 #    (both in the output, and the images we select via srcset, for example).
11318 # Therefore, using a high DPI is preferable. For now, we use 144dpi to match
11319 # physical printer output on Windows, but higher (e.g. 300dpi) might be better
11320 # if it does not lead to issues such as excessive memory use.
11321 - name: print.default_dpi
11322   type: float
11323   value: 144.0f
11324   mirror: always
11326 # Whether support for monochrome printing is enabled for CUPS.
11327 - name: print.cups.monochrome.enabled
11328   type: RelaxedAtomicBool
11329   value: true
11330   mirror: always
11332 # The maximum amount of time CUPS should spend enumerating print destinations
11333 # (in milliseconds).
11334 # The default value chosen here is completely arbitrary.
11335 - name: print.cups.enum_dests_timeout_ms
11336   type: RelaxedAtomicUint32
11337   value: 150
11338   mirror: always
11340 #---------------------------------------------------------------------------
11341 # Prefs starting with "privacy."
11342 #---------------------------------------------------------------------------
11344 - name: privacy.fuzzyfox.clockgrainus
11345   type: RelaxedAtomicUint32
11346   value: 100
11347   mirror: always
11349 # Annotate trackers using the strict list. If set to false, the basic list will
11350 # be used instead.
11351 - name: privacy.annotate_channels.strict_list.enabled
11352   type: bool
11353   value: @IS_EARLY_BETA_OR_EARLIER@
11354   mirror: always
11356 # Enable the clearing of cache data using the clear-site-data header. If enabled,
11357 # header values of "cache" and "*" will clear cached data from the site
11358 - name: privacy.clearsitedata.cache.enabled
11359   type: bool
11360   value: false
11361   mirror: always
11363 # First Party Isolation (double keying), disabled by default.
11364 - name: privacy.firstparty.isolate
11365   type: RelaxedAtomicBool
11366   value: false
11367   mirror: always
11369 # If false, two windows in the same domain with different first party domains
11370 # (top level URLs) can access resources through window.opener. This pref is
11371 # effective only when "privacy.firstparty.isolate" is true.
11372 - name: privacy.firstparty.isolate.restrict_opener_access
11373   type: RelaxedAtomicBool
11374   value: true
11375   mirror: always
11377 - name: privacy.firstparty.isolate.block_post_message
11378   type: RelaxedAtomicBool
11379   value: false
11380   mirror: always
11382 - name: privacy.firstparty.isolate.use_site
11383   type: RelaxedAtomicBool
11384   value: false
11385   mirror: always
11387 # Enforce tracking protection in all modes.
11388 - name: privacy.trackingprotection.enabled
11389   type: bool
11390   value: false
11391   mirror: always
11393 # Enforce tracking protection in Private Browsing mode.
11394 - name: privacy.trackingprotection.pbmode.enabled
11395   type: bool
11396   value: true
11397   mirror: always
11399 # Annotate channels based on the tracking protection list in all modes
11400 - name: privacy.trackingprotection.annotate_channels
11401   type: bool
11402   value: true
11403   mirror: always
11405 # Block 3rd party fingerprinting resources.
11406 - name: privacy.trackingprotection.fingerprinting.enabled
11407   type: bool
11408   value: false
11409   mirror: always
11411 # Block 3rd party cryptomining resources.
11412 - name: privacy.trackingprotection.cryptomining.enabled
11413   type: bool
11414   value: false
11415   mirror: always
11417 # Block 3rd party socialtracking resources.
11418 - name: privacy.trackingprotection.socialtracking.enabled
11419   type: bool
11420   value: false
11421   mirror: always
11423 # Consider socialtracking annotation as trackers (see ETP).
11424 - name: privacy.socialtracking.block_cookies.enabled
11425   type: bool
11426   value: true
11427   mirror: always
11429 # Whether Origin Telemetry should be enabled.
11430 # NOTE: if telemetry.origin_telemetry_test_mode.enabled is enabled, this pref
11431 #       won't have any effect.
11432 - name: privacy.trackingprotection.origin_telemetry.enabled
11433   type: RelaxedAtomicBool
11434   value: @IS_NIGHTLY_BUILD@
11435   mirror: always
11437 - name: privacy.trackingprotection.testing.report_blocked_node
11438   type: RelaxedAtomicBool
11439   value: false
11440   mirror: always
11442 # Whether to spoof user locale to English (used as part of Resist
11443 # Fingerprinting).
11444 # 0 - will prompt
11445 # 1 - don't spoof
11446 # 2 - spoof
11447 - name: privacy.spoof_english
11448   type: RelaxedAtomicUint32
11449   value: 0
11450   mirror: always
11452 # Send "do not track" HTTP header, disabled by default.
11453 - name: privacy.donottrackheader.enabled
11454   type: bool
11455   value: false
11456   mirror: always
11458 # Potentially send "global privacy control" HTTP header and set navigator
11459 # property accordingly. Communicates user's desire to opt-out/in of
11460 # websites or services selling or sharing the user's information, false by
11461 # default.
11462 # true - Send the header with a value of 1 to indicate opting-out
11463 # false - Do not send header to indicate opting-in
11464 - name: privacy.globalprivacycontrol.enabled
11465   type: bool
11466   value: false
11467   mirror: always
11469 # Controls whether or not GPC signals are sent. Meant to act as a third option
11470 # of 'undecided' by leaving the navigator property undefined and not attaching
11471 # the Sec-GPC HTTP header.
11472 - name: privacy.globalprivacycontrol.functionality.enabled
11473   type: bool
11474   value: false
11475   mirror: always
11477 # Lower the priority of network loads for resources on the tracking protection
11478 # list.  Note that this requires the
11479 # privacy.trackingprotection.annotate_channels pref to be on in order to have
11480 # any effect.
11481 - name: privacy.trackingprotection.lower_network_priority
11482   type: bool
11483   value: @IS_NIGHTLY_BUILD@
11484   mirror: always
11486 # A subset of Resist Fingerprinting protections focused specifically on timers.
11487 # This affects the Animation API, the performance APIs, Date.getTime,
11488 # Event.timestamp, File.lastModified, audioContext.currentTime,
11489 # canvas.captureStream.currentTime.
11490 - name: privacy.reduceTimerPrecision
11491   type: RelaxedAtomicBool
11492   value: true
11493   mirror: always
11495 # If privacy.reduceTimerPrecision is false, this pref controls whether or not
11496 # to clamp all timers at a fixed 20 microsconds. It should always be enabled,
11497 # and is only specified as a pref to enable an emergency disabling in the event
11498 # of catastrophic failure.
11499 - name: privacy.reduceTimerPrecision.unconditional
11500   type: RelaxedAtomicBool
11501   value: true
11502   mirror: always
11504 # The resistFingerprinting variables are marked with 'Relaxed' memory ordering.
11505 # We don't particurally care that threads have a percently consistent view of
11506 # the values of these prefs. They are not expected to change often, and having
11507 # an outdated view is not particurally harmful. They will eventually become
11508 # consistent.
11510 # The variables will, however, be read often (specifically .microseconds on
11511 # each timer rounding) so performance is important.
11513 - name: privacy.resistFingerprinting
11514   type: RelaxedAtomicBool
11515   value: false
11516   mirror: always
11518 # We automatically decline canvas permission requests if they are not initiated
11519 # from user input. Just in case that breaks something, we allow the user to
11520 # revert this behavior with this obscure pref. We do not intend to support this
11521 # long term. If you do set it, to work around some broken website, please file
11522 # a bug with information so we can understand why it is needed.
11523 - name: privacy.resistFingerprinting.autoDeclineNoUserInputCanvasPrompts
11524   type: bool
11525   value: true
11526   mirror: always
11528 # Whether canvas extraction should result in random data. If false, canvas
11529 # extraction results in all-white, opaque pixel data.
11530 - name: privacy.resistFingerprinting.randomDataOnCanvasExtract
11531   type: RelaxedAtomicBool
11532   value: true
11533   mirror: always
11535 # The log level for browser console messages logged in RFPHelper.jsm. Change to
11536 # 'All' and restart to see the messages.
11537 - name: privacy.resistFingerprinting.jsmloglevel
11538   type: String
11539   value: "Warn"
11540   mirror: never
11542 # Enable jittering the clock one precision value forward.
11543 - name: privacy.resistFingerprinting.reduceTimerPrecision.jitter
11544   type: RelaxedAtomicBool
11545   value: true
11546   mirror: always
11548 # Dynamically tune the resolution of the timer reduction for
11549 # `privacy.reduceTimerPrecision` and `privacy.resistFingerprinting`.
11550 - name: privacy.resistFingerprinting.reduceTimerPrecision.microseconds
11551   type: RelaxedAtomicUint32
11552   value: 1000
11553   mirror: always
11555 - name: privacy.resistFingerprinting.target_video_res
11556   type: uint32_t
11557   value: 480
11558   mirror: always
11560 # Bitfield for selectively disabling RFP
11561 #   0 for no new behavior
11562 #   1 for disabling RFP if it's a WebExtension
11563 #   2 for disabling RFP if we are not in PBM
11564 #   4 for disabling RFP on specific domains (see privacy.resistFingerprinting.exemptedDomains)
11565 - name: privacy.resistFingerprinting.testGranularityMask
11566   type: RelaxedAtomicUint32
11567   value: 0
11568   mirror: always
11570 # Anti-tracking permission expiration.
11571 - name: privacy.restrict3rdpartystorage.expiration
11572   type: uint32_t
11573   value: 2592000   # 30 days (in seconds)
11574   mirror: always
11576 # Report Anti-tracking warnings to console lazily
11577 - name: privacy.restrict3rdpartystorage.console.lazy
11578   type: bool
11579   value: true
11580   mirror: always
11582 # Enable the heuristic to allow storage access for windows opened using window.open() after user interaction
11583 - name: privacy.restrict3rdpartystorage.heuristic.opened_window_after_interaction
11584   type: bool
11585   value: true
11586   mirror: always
11588 # Enable the heuristic to allow storage access for windows opened using window.open()
11589 - name: privacy.restrict3rdpartystorage.heuristic.window_open
11590   type: bool
11591   value: true
11592   mirror: always
11594 # Enable the heuristic to allow storage access for windows opened using window.open()
11595 - name: privacy.restrict3rdpartystorage.heuristic.redirect
11596   type: bool
11597   value: true
11598   mirror: always
11600 # Anti-tracking permission expiration.
11601 - name: privacy.restrict3rdpartystorage.expiration_redirect
11602   type: uint32_t
11603   value: 2592000   # 30 days (in seconds)
11604   mirror: always
11606 # Anti-tracking user-interaction expiration.
11607 - name: privacy.userInteraction.expiration
11608   type: uint32_t
11609   value: 3888000   # 45 days (in seconds)
11610   mirror: always
11612 # Anti-tracking user-interaction document interval.
11613 - name: privacy.userInteraction.document.interval
11614   type: uint32_t
11615   value: 1800   # 30 minutes (in seconds)
11616   mirror: always
11618 # Enable Anti-tracking testing. When it enables, it will notify the observers
11619 # when user-interaction permission or storage access permission is added. This
11620 # is for testing only.
11621 - name: privacy.antitracking.testing
11622   type: bool
11623   value: false
11624   mirror: always
11626 # Controls the anti-tracking webcompat features. This includes:
11627 # - All URL-Classifier and state partitioning skip lists (prefs and remote
11628 #   settings)
11629 # - Storage access heuristics (opener, redirect, etc.)
11630 # - StorageAccessAPI automatic grants (skips the prompt)
11631 # - Allowing specific tracking channels on user opt-in (e.g. facebook login
11632 #   shim).
11633 - name: privacy.antitracking.enableWebcompat
11634   type: RelaxedAtomicBool
11635   value: true
11636   mirror: always
11638 # Enable the heuristic to allow storage access for recent visited pages
11639 - name: privacy.restrict3rdpartystorage.heuristic.recently_visited
11640   type: bool
11641   value: true
11642   mirror: always
11644 # Valid time gap since last visit
11645 - name: privacy.restrict3rdpartystorage.heuristic.recently_visited_time
11646   type: uint32_t
11647   value: 600    # 10 minutes
11648   mirror: always
11650 # Recent visited pages redirection permission expiration.
11651 - name: privacy.restrict3rdpartystorage.expiration_visited
11652   type: uint32_t
11653   value: 2592000   # 30 days (in seconds)
11654   mirror: always
11656 # Maximum client-side cookie life-time cap. Measured in seconds, set to 0 to
11657 # disable.
11658 - name: privacy.documentCookies.maxage
11659   type: uint32_t
11660   value: 0
11661   mirror: always
11663 - name: privacy.window.maxInnerWidth
11664   type: int32_t
11665   value: 1000
11666   mirror: always
11668 - name: privacy.window.maxInnerHeight
11669   type: int32_t
11670   value: 1000
11671   mirror: always
11673 - name: privacy.sanitize.sanitizeOnShutdown
11674   type: RelaxedAtomicBool
11675   value: false
11676   mirror: always
11678 - name: privacy.clearOnShutdown.cache
11679   type: RelaxedAtomicBool
11680   value: false
11681   mirror: always
11683 - name: privacy.dynamic_firstparty.limitForeign
11684   type: RelaxedAtomicBool
11685   value: false
11686   mirror: always
11688 - name: privacy.dynamic_firstparty.use_site
11689   type: RelaxedAtomicBool
11690   value: true
11691   mirror: always
11693 - name: privacy.partition.network_state
11694   type: RelaxedAtomicBool
11695   value: true
11696   mirror: always
11698 # Partition the OCSP cache by the partitionKey.
11699 - name: privacy.partition.network_state.ocsp_cache
11700   type: RelaxedAtomicBool
11701   value: @IS_NIGHTLY_BUILD@
11702   mirror: always
11704 # Partition the OCSP cache by the partitionKey for private browsing mode.
11705 - name: privacy.partition.network_state.ocsp_cache.pbmode
11706   type: RelaxedAtomicBool
11707   value: true
11708   mirror: always
11710 - name: privacy.partition.bloburl_per_agent_cluster
11711   type: RelaxedAtomicBool
11712   value: false
11713   mirror: always
11715 - name: privacy.window.name.update.enabled
11716   type: bool
11717   value: true
11718   mirror: always
11720 # By default, the network state isolation is not active when there is a proxy
11721 # setting. This pref forces the network isolation even in these scenarios.
11722 - name: privacy.partition.network_state.connection_with_proxy
11723   type: bool
11724   value: false
11725   mirror: always
11727 #  Partition the websocket pending connection queue by OriginAttributes.
11728 - name: privacy.partition.network_state.ws_connection_queue
11729   type: RelaxedAtomicBool
11730   value: true
11731   mirror: always
11733 # Partition the service workers unconditionally when dFPI is enabled.
11734 - name: privacy.partition.serviceWorkers
11735   type: RelaxedAtomicBool
11736   value: @IS_NIGHTLY_BUILD@
11737   mirror: always
11739 # The global switch to control the URL query sting stripping which strips query
11740 # parameters from loading URIs to prevent bounce (redirect) tracking.
11741 - name: privacy.query_stripping.enabled
11742   type: RelaxedAtomicBool
11743   value: false
11744   mirror: always
11746 # The list which contains query parameters that are needed to be stripped from
11747 # URIs. The query parameters are separated by a space.
11748 - name: privacy.query_stripping.strip_list
11749   type: String
11750   value: ""
11751   mirror: never
11753 # This controls if we will do the query string stripping for redirects.
11754 - name: privacy.query_stripping.redirect
11755   type: bool
11756   value: true
11757   mirror: always
11759 # the list which contains sites where should exempt from query stripping
11760 - name: privacy.query_stripping.allow_list
11761   type: String
11762   value: ""
11763   mirror: never
11765 #---------------------------------------------------------------------------
11766 # Prefs starting with "prompts."
11767 #---------------------------------------------------------------------------
11769 # Prompt modal type prefs
11770 # See nsIPromptService::MODAL_TYPE fields for possible values.
11772 # Insecure form submit warning.
11773 - name: prompts.modalType.insecureFormSubmit
11774   type: int32_t
11775   value: 2
11776   mirror: always
11778 # nsHttpChannelAuthProvider#ConfirmAuth anti-phishing prompts.
11779 - name: prompts.modalType.confirmAuth
11780   type: int32_t
11781   value: 2
11782   mirror: always
11784 #---------------------------------------------------------------------------
11785 # Prefs starting with "security."
11786 #---------------------------------------------------------------------------
11788 # Mochitests that need to load resource:// URIs not declared content-accessible
11789 # in manifests should set this pref.
11790 - name: security.all_resource_uri_content_accessible
11791   type: bool
11792   value: false
11793   mirror: always
11795 - name: security.bad_cert_domain_error.url_fix_enabled
11796   type: bool
11797   value: true
11798   mirror: always
11800 - name: security.csp.reporting.script-sample.max-length
11801   type: int32_t
11802   value: 40
11803   mirror: always
11805 - name: security.csp.truncate_blocked_uri_for_frame_navigations
11806   type: bool
11807   value: true
11808   mirror: always
11810 # If true, all toplevel data: URI navigations will be blocked.
11811 # Please note that manually entering a data: URI in the
11812 # URL-Bar will not be blocked when flipping this pref.
11813 - name: security.data_uri.block_toplevel_data_uri_navigations
11814   type: bool
11815   value: true
11816   mirror: always
11818 # Whether window A is allowed to navigate cross-origin window B (that is not
11819 # a descendant frame of A) to a URI that loads externally.
11820 - name: security.allow_disjointed_external_uri_loads
11821   type: bool
11822   value: false
11823   mirror: always
11825 # Allowed by default so it doesn't affect Thunderbird/SeaMonkey, but
11826 # not allowed for Firefox Desktop in firefox.js
11827 - name: security.allow_parent_unrestricted_js_loads
11828   type: RelaxedAtomicBool
11829   value: true
11830   mirror: always
11832 # Allowed by default so it doesn't affect Thunderbird/SeaMonkey, but
11833 # not allowed for Firefox Desktop in firefox.js
11834 - name: security.allow_eval_with_system_principal
11835   type: RelaxedAtomicBool
11836   value: true
11837   mirror: always
11839 # Allowed by default so it doesn't affect Thunderbird/SeaMonkey, but
11840 # not allowed for Firefox Desktop in firefox.js
11841 - name: security.allow_eval_in_parent_process
11842   type: RelaxedAtomicBool
11843   value: true
11844   mirror: always
11846 # Disallowed by default, ensure not disallowed content is loaded in the parent
11847 # process.
11848 - name: security.allow_unsafe_parent_loads
11849   type: bool
11850   value: false
11851   mirror: always
11853 # Pref to block mixed scripts (fonts, plugin content, scripts, stylesheets,
11854 # iframes, websockets, XHR).
11855 - name: security.mixed_content.block_active_content
11856   type: bool
11857   value: @IS_ANDROID@
11858   mirror: always
11860 # Pref to block sub requests that happen within an object.
11861 - name: security.mixed_content.block_object_subrequest
11862   type: bool
11863   value: false
11864   mirror: always
11866 # Pref for mixed display content blocking (images, audio, video).
11867 - name: security.mixed_content.block_display_content
11868   type: bool
11869   value: false
11870   mirror: always
11872 # Pref for mixed display content upgrading (images, audio, video).
11873 - name: security.mixed_content.upgrade_display_content
11874   type: bool
11875   value: false
11876   mirror: always
11878 # Whether strict file origin policy is in effect. "False" is traditional.
11879 - name: security.fileuri.strict_origin_policy
11880   type: RelaxedAtomicBool
11881   value: true
11882   mirror: always
11884 # The level to which we sandbox the content process. firefox.js sets the
11885 # default to different values on a per-OS basis, and has documentation
11886 # on what the defaults are and what the numbers mean.
11887 - name: security.sandbox.content.level
11888   type: int32_t
11889   value: 0
11890   mirror: always
11891   do_not_use_directly: true # Consumers should use SandboxSettings to ask.
11893 - name: security.sandbox.socket.process.level
11894   type: int32_t
11895   value: 0
11896   mirror: always
11897   do_not_use_directly: true # Consumers should use SandboxSettings to ask.
11899 # Enrollment preferences for the win32k experiment, set and managed by Normandy
11900 - name: security.sandbox.content.win32k-experiment.enrollmentStatus
11901   type: uint32_t
11902   value: 0
11903   mirror: never
11905 - name: security.sandbox.content.win32k-experiment.startupEnrollmentStatus
11906   type: uint32_t
11907   value: 0
11908   mirror: never
11910 #if defined(XP_WIN) && defined(MOZ_SANDBOX)
11912   # Whether win32k is disabled for content processes.
11913   # true means win32k system calls are not permitted.
11914 -   name: security.sandbox.content.win32k-disable
11915     type: RelaxedAtomicBool
11916     value: true
11917     mirror: always
11919   # Note: win32k is currently _not_ disabled for GMP due to intermittent test
11920   # failures, where the GMP process fails very early. See bug 1449348.
11921 -   name: security.sandbox.gmp.win32k-disable
11922     type: RelaxedAtomicBool
11923     value: false
11924     mirror: always
11926   # Whether win32k is disabled for socket processes.
11927   # true means win32k system calls are not permitted.
11928 -   name: security.sandbox.socket.win32k-disable
11929     type: RelaxedAtomicBool
11930     value: true
11931     mirror: always
11933   # Whether CET User Shadow Stack compatible modules only is enabled for the
11934   # relevant process type.
11935 -   name: security.sandbox.content.shadow-stack.enabled
11936     type: RelaxedAtomicBool
11937     value: false
11938     mirror: always
11940 -   name: security.sandbox.rdd.shadow-stack.enabled
11941     type: RelaxedAtomicBool
11942     value: true
11943     mirror: always
11945 -   name: security.sandbox.socket.shadow-stack.enabled
11946     type: RelaxedAtomicBool
11947     value: true
11948     mirror: always
11950 -   name: security.sandbox.gpu.shadow-stack.enabled
11951     type: RelaxedAtomicBool
11952     value: false
11953     mirror: always
11955 -   name: security.sandbox.gmp.shadow-stack.enabled
11956     type: RelaxedAtomicBool
11957     value: false
11958     mirror: always
11960   # This controls the depth of stack trace that is logged when Windows sandbox
11961   # logging is turned on. This is only currently available for the content
11962   # process because the only other sandbox (for GMP) has too strict a policy to
11963   # allow stack tracing. This does not require a restart to take effect.
11964 -   name: security.sandbox.windows.log.stackTraceDepth
11965     type: RelaxedAtomicUint32
11966     value: 0
11967     mirror: always
11968 #endif
11970 #if defined(XP_LINUX) && defined(MOZ_SANDBOX)
11971   # Run content processes in headless mode and disallow
11972   # connections to the X server.  Requires:
11973   # * `webgl.out-of-process` (or else WebGL breaks)
11974   # * `widget.non-native-theme.enabled` (scrollbars & form controls)
11975   # Changing it requires a restart because sandbox policy information
11976   # dependent on it is cached.  See bug 1640345 for details.
11977 - name: security.sandbox.content.headless
11978   type: bool
11979   value: true
11980   mirror: once
11981 #endif
11983 # Pref to show warning when submitting from secure to insecure.
11984 - name: security.warn_submit_secure_to_insecure
11985   type: bool
11986   value: true
11987   mirror: always
11989 # Hardware Origin-bound Second Factor Support
11990 - name: security.webauth.webauthn
11991   type: bool
11992   value: true
11993   mirror: always
11995 # Navigate-to CSP 3 directive
11996 - name: security.csp.enableNavigateTo
11997   type: bool
11998   value: false
11999   mirror: always
12001 # No way to enable on Android, Bug 1552602
12002 - name: security.webauth.u2f
12003   type: bool
12004   value: @IS_NOT_ANDROID@
12005   mirror: always
12007 # Block Worker/SharedWorker scripts with wrong MIME type.
12008 - name: security.block_Worker_with_wrong_mime
12009   type: bool
12010   value: true
12011   mirror: always
12013 # Block the execution of scripts using a wrong type as defined by the file extension
12014 # (OS) mapping when loaded via the file:// protocol.
12015 - name: security.block_fileuri_script_with_wrong_mime
12016   type: bool
12017   value: true
12018   mirror: always
12020 # Cancel outgoing requests from SystemPrincipal
12021 - name: security.cancel_non_local_loads_triggered_by_systemprincipal
12022   type: bool
12023   value: false
12024   mirror: always
12026 # Cancel outgoing requests from SystemPrincipal:
12027 # but only with scheme http(s) and contentpolicytype subdocument
12028 - name: security.disallow_privileged_https_subdocuments_loads
12029   type: bool
12030   value: true
12031   mirror: always
12033 # Cancel outgoing requests from SystemPrincipal:
12034 # but only with scheme data and contentpolicytype subdocument
12035 - name: security.disallow_privileged_data_subdocuments_loads
12036   type: bool
12037   value: true
12038   mirror: always
12040 # Cancel outgoing requests from SystemPrincipal:
12041 # but only with scheme http(s) and contentpolicytype stylesheet
12042 - name: security.disallow_privileged_https_stylesheet_loads
12043   type: bool
12044   value: true
12045   mirror: always
12047 # Cancel outgoing requests from SystemPrincipal:
12048 # but only with scheme http(s) and contentpolicytype script
12049 - name: security.disallow_privileged_https_script_loads
12050   type: bool
12051   value: true
12052   mirror: always
12054 # Disable preloaded static key pins by default.
12055 - name: security.cert_pinning.enforcement_level
12056   type: RelaxedAtomicUint32
12057   value: 0
12058   mirror: always
12059   do_not_use_directly: true
12061 # OCSP fetching behavior:
12062 # 0: do not fetch OCSP
12063 # 1: fetch OCSP for DV and EV certificates
12064 # 2: fetch OCSP only for EV certificates
12065 - name: security.OCSP.enabled
12066   type: RelaxedAtomicUint32
12067 #ifdef ANDROID
12068   value: 2
12069 #else
12070   value: 1
12071 #endif
12072   mirror: always
12074 # Whether or not OCSP is required.
12075 # true => hard-fail (if an OCSP request times out, stop the connection)
12076 # false => soft-fail (if an OCSP request times out, continue the connection)
12077 - name: security.OCSP.require
12078   type: RelaxedAtomicBool
12079   value: false
12080   mirror: always
12082 # How many milliseconds to wait for an OCSP response before assuming it failed
12083 # (when fetching for soft-fail).
12084 - name: security.OCSP.timeoutMilliseconds.soft
12085   type: RelaxedAtomicUint32
12086 #ifdef RELEASE_OR_BETA
12087   value: 2000
12088 #else
12089   value: 1000
12090 #endif
12091   mirror: always
12093 # How many milliseconds to wait for an OCSP response before assuming it failed
12094 # (when fetching for hard-fail).
12095 - name: security.OCSP.timeoutMilliseconds.hard
12096   type: RelaxedAtomicUint32
12097   value: 10000
12098   mirror: always
12100 # Whether or not to enable OCSP must-staple (in other words, TLS-feature with
12101 # status request).
12102 - name: security.ssl.enable_ocsp_must_staple
12103   type: RelaxedAtomicBool
12104   value: true
12105   mirror: always
12107 # Whether or not to enable OCSP stapling.
12108 - name: security.ssl.enable_ocsp_stapling
12109   type: RelaxedAtomicBool
12110   value: true
12111   mirror: always
12113 # This is checked at startup to see if NSS should be initialized without the
12114 # user's certificate and key databases.
12115 - name: security.nocertdb
12116   type: bool
12117   value: false
12118   mirror: once
12120 # On Windows 8.1, if the following preference is 2, we will attempt to detect
12121 # if the Family Safety TLS interception feature has been enabled. If so, we
12122 # will behave as if the enterprise roots feature has been enabled (i.e. import
12123 # and trust third party root certificates from the OS).
12124 # With any other value of the pref or on any other platform, this does nothing.
12125 # This preference takes precedence over "security.enterprise_roots.enabled".
12126 - name: security.family_safety.mode
12127   type: RelaxedAtomicUint32
12128   value: 2
12129   mirror: always
12131 # Whether or not to import and trust third party root certificates from the OS.
12132 - name: security.enterprise_roots.enabled
12133   type: RelaxedAtomicBool
12134   value: false
12135   mirror: always
12137 - name: security.intermediate_preloading_healer.enabled
12138   type: RelaxedAtomicBool
12139 #if defined(EARLY_BETA_OR_EARLIER) && !defined(MOZ_WIDGET_ANDROID)
12140   value: true
12141 #else
12142   value: false
12143 #endif
12144   mirror: always
12146 - name: security.intermediate_preloading_healer.timer_interval_ms
12147   type: RelaxedAtomicUint32
12148   value: 300000
12149   mirror: always
12151 # If true, attempt to load the osclientcerts PKCS#11 module at startup on a
12152 # background thread. This module allows Firefox to use client certificates
12153 # stored in OS certificate storage. Currently only available for Windows and
12154 # macOS.
12155 - name: security.osclientcerts.autoload
12156   type: RelaxedAtomicBool
12157   value: true
12158   mirror: always
12160 - name: security.pki.cert_short_lifetime_in_days
12161   type: RelaxedAtomicUint32
12162   value: 10
12163   mirror: always
12165 # NB: Changes to this pref affect CERT_CHAIN_SHA1_POLICY_STATUS telemetry.
12166 # See the comment in CertVerifier.cpp.
12167 # 1 = forbid sha1 in certificate signatures, even for imported roots
12168 - name: security.pki.sha1_enforcement_level
12169   type: RelaxedAtomicUint32
12170   value: 1
12171   mirror: always
12173 # security.pki.netscape_step_up_policy controls how the platform handles the
12174 # id-Netscape-stepUp OID in extended key usage extensions of CA certificates.
12175 # 0: id-Netscape-stepUp is always considered equivalent to id-kp-serverAuth
12176 # 1: it is considered equivalent when the notBefore is before 23 August 2016
12177 # 2: similarly, but for 23 August 2015
12178 # 3: it is never considered equivalent
12179 - name: security.pki.netscape_step_up_policy
12180   type: RelaxedAtomicUint32
12181 #ifdef RELEASE_OR_BETA
12182   value: 1
12183 #else
12184   value: 2
12185 #endif
12186   mirror: always
12188 # Configures Certificate Transparency support mode:
12189 # 0: Fully disabled.
12190 # 1: Only collect telemetry. CT qualification checks are not performed.
12191 - name: security.pki.certificate_transparency.mode
12192   type: RelaxedAtomicUint32
12193   value: 0
12194   mirror: always
12196 # 0: Disable CRLite entirely.
12197 # 1: Consult CRLite but only collect telemetry.
12198 # 2: Consult CRLite and enforce both "Revoked" and "Not Revoked" results.
12199 # 3: Consult CRLite and enforce "Not Revoked" results, but defer to OCSP for "Revoked".
12200 - name: security.pki.crlite_mode
12201   type: RelaxedAtomicUint32
12202   value: 3
12203   mirror: always
12205 - name: security.tls.version.min
12206   type: RelaxedAtomicUint32
12207   value: 3
12208   mirror: always
12210 - name: security.tls.version.max
12211   type: RelaxedAtomicUint32
12212   value: 4
12213   mirror: always
12215 - name: security.tls.version.enable-deprecated
12216   type: RelaxedAtomicBool
12217   value: false
12218   mirror: always
12220 - name: security.tls.version.fallback-limit
12221   type: RelaxedAtomicUint32
12222   value: 4
12223   mirror: always
12225 # Turn off post-handshake authentication for TLS 1.3 by default,
12226 # until the incompatibility with HTTP/2 is resolved:
12227 # https://tools.ietf.org/html/draft-davidben-http2-tls13-00
12228 - name: security.tls.enable_post_handshake_auth
12229   type: RelaxedAtomicBool
12230   value: false
12231   mirror: always
12233 - name: security.tls.hello_downgrade_check
12234   type: RelaxedAtomicBool
12235   value: true
12236   mirror: always
12238 - name: security.tls.enable_delegated_credentials
12239   type: RelaxedAtomicBool
12240   value: true
12241   mirror: always
12243 - name: security.tls.enable_0rtt_data
12244   type: RelaxedAtomicBool
12245   value: true
12246   mirror: always
12248 - name: security.ssl.treat_unsafe_negotiation_as_broken
12249   type: RelaxedAtomicBool
12250   value: false
12251   mirror: always
12253 - name: security.ssl.require_safe_negotiation
12254   type: RelaxedAtomicBool
12255   value: false
12256   mirror: always
12258 - name: security.ssl.enable_false_start
12259   type: RelaxedAtomicBool
12260   value: true
12261   mirror: always
12263 - name: security.ssl.enable_alpn
12264   type: RelaxedAtomicBool
12265   value: true
12266   mirror: always
12268 - name: security.ssl.disable_session_identifiers
12269   type: RelaxedAtomicBool
12270   value: false
12271   mirror: always
12273 - name: security.ssl3.ecdhe_rsa_aes_128_gcm_sha256
12274   type: RelaxedAtomicBool
12275   value: true
12276   mirror: always
12278 - name: security.ssl3.ecdhe_ecdsa_aes_128_gcm_sha256
12279   type: RelaxedAtomicBool
12280   value: true
12281   mirror: always
12283 - name: security.ssl3.ecdhe_ecdsa_chacha20_poly1305_sha256
12284   type: RelaxedAtomicBool
12285   value: true
12286   mirror: always
12288 - name: security.ssl3.ecdhe_rsa_chacha20_poly1305_sha256
12289   type: RelaxedAtomicBool
12290   value: true
12291   mirror: always
12293 - name: security.ssl3.ecdhe_ecdsa_aes_256_gcm_sha384
12294   type: RelaxedAtomicBool
12295   value: true
12296   mirror: always
12298 - name: security.ssl3.ecdhe_rsa_aes_256_gcm_sha384
12299   type: RelaxedAtomicBool
12300   value: true
12301   mirror: always
12303 - name: security.ssl3.ecdhe_rsa_aes_128_sha
12304   type: RelaxedAtomicBool
12305   value: true
12306   mirror: always
12308 - name: security.ssl3.ecdhe_ecdsa_aes_128_sha
12309   type: RelaxedAtomicBool
12310   value: true
12311   mirror: always
12313 - name: security.ssl3.ecdhe_rsa_aes_256_sha
12314   type: RelaxedAtomicBool
12315   value: true
12316   mirror: always
12318 - name: security.ssl3.ecdhe_ecdsa_aes_256_sha
12319   type: RelaxedAtomicBool
12320   value: true
12321   mirror: always
12323 - name: security.ssl3.dhe_rsa_aes_128_sha
12324   type: RelaxedAtomicBool
12325   value: false
12326   mirror: always
12328 - name: security.ssl3.dhe_rsa_aes_256_sha
12329   type: RelaxedAtomicBool
12330   value: false
12331   mirror: always
12333 - name: security.ssl3.rsa_aes_128_sha
12334   type: RelaxedAtomicBool
12335   value: true
12336   mirror: always
12338 - name: security.ssl3.rsa_aes_256_sha
12339   type: RelaxedAtomicBool
12340   value: true
12341   mirror: always
12343 - name: security.ssl3.rsa_aes_128_gcm_sha256
12344   type: RelaxedAtomicBool
12345   value: true
12346   mirror: always
12348 - name: security.ssl3.rsa_aes_256_gcm_sha384
12349   type: RelaxedAtomicBool
12350   value: true
12351   mirror: always
12353 - name: security.ssl3.deprecated.rsa_des_ede3_sha
12354   type: RelaxedAtomicBool
12355   value: true
12356   mirror: always
12358 - name: security.tls13.aes_128_gcm_sha256
12359   type: RelaxedAtomicBool
12360   value: true
12361   mirror: always
12363 - name: security.tls13.chacha20_poly1305_sha256
12364   type: RelaxedAtomicBool
12365   value: true
12366   mirror: always
12368 - name: security.tls13.aes_256_gcm_sha384
12369   type: RelaxedAtomicBool
12370   value: true
12371   mirror: always
12373 #---------------------------------------------------------------------------
12374 # Prefs starting with "signon."
12375 #---------------------------------------------------------------------------
12376 - name: signon.usernameOnlyForm.enabled
12377   type: bool
12378   value: true
12379   mirror: always
12381 #---------------------------------------------------------------------------
12382 # Prefs starting with "slider."
12383 #---------------------------------------------------------------------------
12385 # Scrollbar snapping region.
12386 # - 0: off
12387 # - 1 and higher: slider thickness multiple
12388 - name: slider.snapMultiplier
12389   type: int32_t
12390 #ifdef XP_WIN
12391   value: 6
12392 #else
12393   value: 0
12394 #endif
12395   mirror: once
12397 #---------------------------------------------------------------------------
12398 # Prefs starting with "storage."
12399 #---------------------------------------------------------------------------
12401 # Whether to use a non-exclusive VFS.
12402 # By default we use the unix-excl VFS, for the following reasons:
12403 # 1. It improves compatibility with NFS shares, whose implementation
12404 #    is incompatible with SQLite's locking requirements (reliable fcntl), and
12405 #    in particular with WAL journaling.
12406 #    Bug 433129 attempted to automatically identify such file-systems,
12407 #    but a reliable way was not found and the fallback locking is slower than
12408 #    POSIX locking, so we do not want to do it by default.
12409 # 2. It allows wal mode to avoid the memory mapped -shm file, reducing the
12410 #    likelihood of SIGBUS failures when disk space is exhausted.
12411 # 3. It provides some protection from third party database tampering while a
12412 #    connection is open.
12413 # Note there's no win32-excl VFS, so this has no effect on Windows.
12414 - name: storage.sqlite.exclusiveLock.enabled
12415   type: RelaxedAtomicBool
12416   value: @IS_NOT_ANDROID@
12417   mirror: always
12419 #---------------------------------------------------------------------------
12420 # Prefs starting with "svg."
12421 #---------------------------------------------------------------------------
12423 # This pref controls whether the 'context-fill' and 'context-stroke' keywords
12424 # can be used in SVG-as-an-image in the content processes to use the fill/
12425 # stroke specified on the element that embeds the image. (These keywords are
12426 # always enabled in the chrome process, regardless of this pref.) Also, these
12427 # keywords are currently not part of any spec, which is partly why we disable
12428 # them for web content.
12429 - name: svg.context-properties.content.enabled
12430   type: RelaxedAtomicBool
12431   value: false
12432   mirror: always
12434 # Enables the 'context-fill' and 'context-stroke' keywords for particular
12435 # domains. We expect this list to be Mozilla-controlled properties, since the
12436 # 'context-*' keywords are not part of any spec. We expect to remove this
12437 # preference and the 'context-` keyword support entirely in the
12438 # not-too-distant future when a standardized alternative ships. This preference
12439 # is _not_ for allowing web content to use these keywords. For performance
12440 # reasons, the list of domains in this preference should remain short in
12441 # length.
12442 - name: svg.context-properties.content.allowed-domains
12443   type: String
12444   value: ""
12445   mirror: never
12447 # Enable the use of display-lists for SVG hit-testing.
12448 - name: svg.display-lists.hit-testing.enabled
12449   type: bool
12450   value: true
12451   mirror: always
12453 # Enable the use of display-lists for SVG painting.
12454 - name: svg.display-lists.painting.enabled
12455   type: bool
12456   value: true
12457   mirror: always
12459 # Is support for the new getBBox method from SVG 2 enabled?
12460 # See https://svgwg.org/svg2-draft/single-page.html#types-SVGBoundingBoxOptions
12461 - name: svg.new-getBBox.enabled
12462   type: bool
12463   value: false
12464   mirror: always
12466 # Tweak which elements are allowed in <svg:use> subtrees, and in which
12467 # circumstances. See RemoveForbiddenNodes in SVGUseElement.cpp for the spec
12468 # text.
12470 # - 0: Don't restrict ever.
12471 # - 1: Restrict only cross-document.
12472 # - 2/other: restrict always.
12474 # We allow the behavior to be configurable via this pref. Our chosen default
12475 # value forbids non-graphical content in <svg:use> clones of cross-document
12476 # elements. This is a compromise between our more-permissive pre-existing
12477 # behavior (which SVG 2 seems to call for, and maps to pref value 0) and the
12478 # behavior of other UAs (which SVG 1.1 seems to call for, and maps to pref
12479 # value 2).
12480 - name: svg.use-element.graphics-element-restrictions
12481   type: int32_t
12482   value: 1
12483   mirror: always
12485 #---------------------------------------------------------------------------
12486 # Prefs starting with "telemetry."
12487 #---------------------------------------------------------------------------
12489 # Enable origin telemetry test mode or not
12490 # NOTE: turning this on will override the
12491 #       privacy.trackingprotection.origin_telemetry.enabled pref.
12492 - name: telemetry.origin_telemetry_test_mode.enabled
12493   type: RelaxedAtomicBool
12494   value: false
12495   mirror: always
12497 - name: telemetry.number_of_site_origin.min_interval
12498   type: uint32_t
12499   value: 300000
12500   mirror: always
12502 - name: telemetry.fog.test.localhost_port
12503   type: RelaxedAtomicInt32
12504   value: 0
12505   mirror: always
12506   rust: true
12508 - name: telemetry.fog.test.activity_limit
12509   type: RelaxedAtomicUint32
12510   value: 120
12511   mirror: always
12512   rust: true
12514 - name: telemetry.fog.test.inactivity_limit
12515   type: RelaxedAtomicUint32
12516   value: 1200
12517   mirror: always
12518   rust: true
12520 #---------------------------------------------------------------------------
12521 # Prefs starting with "test."
12522 #---------------------------------------------------------------------------
12524 - name: test.events.async.enabled
12525   type: RelaxedAtomicBool
12526   value: false
12527   mirror: always
12529 - name: test.mousescroll
12530   type: RelaxedAtomicBool
12531   value: false
12532   mirror: always
12534 #---------------------------------------------------------------------------
12535 # Prefs starting with "thread."
12536 #---------------------------------------------------------------------------
12538 - name: threads.medium_high_event_queue.enabled
12539   type: RelaxedAtomicBool
12540   value: true
12541   mirror: always
12543 # If control tasks aren't enabled, they get medium high priority.
12544 - name: threads.control_event_queue.enabled
12545   type: RelaxedAtomicBool
12546   value: true
12547   mirror: always
12549 #---------------------------------------------------------------------------
12550 # Prefs starting with "timer."
12551 #---------------------------------------------------------------------------
12553 # Since our timestamp on macOS does not increment while the system is asleep, we
12554 # should ignore sleep/wake notifications to make timer thread process timers.
12555 - name: timer.ignore_sleep_wake_notifications
12556   type: RelaxedAtomicBool
12557 #ifdef XP_MACOSX
12558   value: true
12559 #else
12560   value: false
12561 #endif
12562   mirror: always
12564 #---------------------------------------------------------------------------
12565 # Prefs starting with "toolkit."
12566 #---------------------------------------------------------------------------
12568 # Returns true if BHR is disabled.
12569 - name: toolkit.content-background-hang-monitor.disabled
12570   type: bool
12571   value: false
12572   mirror: always
12574 - name: toolkit.scrollbox.horizontalScrollDistance
12575   type: RelaxedAtomicInt32
12576   value: 5
12577   mirror: always
12579 - name: toolkit.scrollbox.verticalScrollDistance
12580   type: RelaxedAtomicInt32
12581   value: 3
12582   mirror: always
12584 # The lateWriteChecksStage and fastShutdownStage below represent the stage
12585 # of shutdown after which we (for lateWriteChecksStage) crash / gather
12586 # telemetry data on file writes, or (for fastShutdownStage) we call _exit(0).
12587 # Higher values are earlier during shutdown, and the full enumeration can
12588 # be found in AppShutdown.h in the AppShutdownPhase enum.
12589 - name: toolkit.shutdown.lateWriteChecksStage
12590   type: int32_t
12591 #ifdef MOZ_CODE_COVERAGE
12592   value: 0
12593 #else
12594   value: 3
12595 #endif
12596   mirror: always
12598 # See the comment above toolkit.shutdown.lateWriteChecksStage. A higher value
12599 # for this pref means we call _exit(0) earlier during shutdown.
12600 - name: toolkit.shutdown.fastShutdownStage
12601   type: int32_t
12602 #if !defined(DEBUG) && !defined(MOZ_ASAN) && !defined(MOZ_TSAN) && !defined(MOZ_CODE_COVERAGE) && !defined(MOZ_VALGRIND) && !defined(MOZ_PROFILE_GENERATE) && !defined(JS_STRUCTURED_SPEW)
12603   value: 1
12604 #else
12605   value: 0
12606 #endif
12607   mirror: always
12609 # Sending each remote accumulation immediately places undue strain on the IPC
12610 # subsystem. Batch the remote accumulations for a period of time before sending
12611 # them all at once. This value was chosen as a balance between data timeliness
12612 # and performance (see bug 1218576).
12613 - name: toolkit.telemetry.ipcBatchTimeout
12614   type: uint32_t
12615   value: 2000
12616   mirror: always
12618 - name: toolkit.telemetry.geckoview.batchDurationMS
12619   type: RelaxedAtomicUint32
12620   value: 5000
12621   mirror: always
12623 - name: toolkit.telemetry.geckoview.maxBatchStalenessMS
12624   type: RelaxedAtomicUint32
12625   value: 60000
12626   mirror: always
12628 - name: toolkit.telemetry.geckoview.streaming
12629   type: RelaxedAtomicBool
12630   value: false
12631   mirror: always
12633 - name: toolkit.telemetry.testing.overrideProductsCheck
12634   type: RelaxedAtomicBool
12635   value: false
12636   mirror: always
12638 #---------------------------------------------------------------------------
12639 # Prefs starting with "ui."
12640 #---------------------------------------------------------------------------
12642 - name: ui.key.generalAccessKey
12643   type: int32_t
12644   value: -1
12645   mirror: always
12647 # Only used if generalAccessKey is -1.
12648 - name: ui.key.chromeAccess
12649   type: int32_t
12650 #ifdef XP_MACOSX
12651   # 0 = disabled, 1 = Shift, 2 = Ctrl, 4 = Alt, 3 =  ctrl+shift, 8 = Meta
12652   value: 2
12653 #else
12654   # 0 = disabled, 1 = Shift, 2 = Ctrl, 4 = Alt, 5 =  Alt+Shift,
12655   # 8 = Meta, 16 = Win
12656   value: 4
12657 #endif
12658   mirror: always
12660 # Only used if generalAccessKey is -1.
12661 - name: ui.key.contentAccess
12662   type: int32_t
12663 #ifdef XP_MACOSX
12664   # 0 = disabled, 1 = Shift, 2 = Ctrl, 4 = Alt, 3 = ctrl+shift, 8 = Meta
12665   value: 6
12666 #else
12667   # 0 = disabled, 1 = Shift, 2 = Ctrl, 4 = Alt, 5 =  Alt+Shift,
12668   # 8 = Meta, 16 = Win
12669   value: 5
12670 #endif
12671   mirror: always
12673 # Does the access key by itself focus the menu bar?
12674 - name: ui.key.menuAccessKeyFocuses
12675   type: bool
12676 #if defined(XP_WIN) || defined(MOZ_WIDGET_GTK)
12677   # On Windows and Linux, we now default to showing the menu bar only when alt
12678   # is pressed.
12679   value: true
12680 #else
12681   value: false
12682 #endif
12683   mirror: always
12685 # Whether native key bindings in the environment or builtin shortcut key
12686 # definitions in Gecko are used first in <input> and <textarea>
12687 - name: ui.key.textcontrol.prefer_native_key_bindings_over_builtin_shortcut_key_definitions
12688   type: bool
12689   value: true
12690   mirror: always
12692 #ifdef MOZ_WIDGET_GTK
12693 # Only GtkTextView (native multiline text viewer/editor) supports "select-all"
12694 # signal so that we cannot know "select-all" key bindings only with GtkEntry.
12695 # When this pref is set to true, if a key combination does not cause any
12696 # signals in GtkEntry, try to check the key combination is mapped to
12697 # "select-all" in GtkTextView or not.  If it's mapped to other commands, they
12698 # are just ignored.
12699 - name: ui.key.use_select_all_in_single_line_editor
12700   type: bool
12701   value: true
12702   mirror: always
12703 #endif
12705 # Duration of timeout of incremental search in menus (ms).  0 means infinite.
12706 - name: ui.menu.incremental_search.timeout
12707   type: uint32_t
12708   value: 1000
12709   mirror: always
12711 # If true, all popups won't hide automatically on blur
12712 - name: ui.popup.disable_autohide
12713   type: RelaxedAtomicBool
12714   value: false
12715   mirror: always
12717 # Negate scroll, true will make the mouse scroll wheel move the screen the
12718 # same direction as with most desktops or laptops.
12719 - name: ui.scrolling.negate_wheel_scroll
12720   type: RelaxedAtomicBool
12721   value: @IS_ANDROID@
12722   mirror: always
12724 # If the user puts a finger down on an element and we think the user might be
12725 # executing a pan gesture, how long do we wait before tentatively deciding the
12726 # gesture is actually a tap and activating the target element?
12727 - name: ui.touch_activation.delay_ms
12728   type: int32_t
12729   value: 100
12730   mirror: always
12732 # If the user has clicked an element, how long do we keep the :active state
12733 # before it is cleared by the mouse sequences fired after a
12734 # touchstart/touchend.
12735 - name: ui.touch_activation.duration_ms
12736   type: int32_t
12737   value: 10
12738   mirror: always
12740 # Prevent system colors from being exposed to CSS or canvas.
12741 - name: ui.use_standins_for_native_colors
12742   type: RelaxedAtomicBool
12743   value: false
12744   mirror: always
12746 # Disable page loading activity cursor by default.
12747 - name: ui.use_activity_cursor
12748   type: bool
12749   value: false
12750   mirror: always
12752 # Whether context menus should only appear on mouseup instead of mousedown,
12753 # on OSes where they normally appear on mousedown (macOS, *nix).
12754 # Note: ignored on Windows (context menus always use mouseup).
12755 - name: ui.context_menus.after_mouseup
12756   type: bool
12757   value: false
12758   mirror: always
12760 # Whether click-hold context menus are enabled.
12761 - name: ui.click_hold_context_menus
12762   type: RelaxedAtomicBool
12763   value: false
12764   mirror: always
12766 # How long to wait for a drag gesture before displaying click-hold context menu,
12767 # in milliseconds.
12768 - name: ui.click_hold_context_menus.delay
12769   type: RelaxedAtomicInt32
12770   value: 500
12771   mirror: always
12773 # When enabled, the touch.radius and mouse.radius prefs allow events to be
12774 # dispatched to nearby elements that are sensitive to the event. See
12775 # PositionedEventTargeting.cpp. The 'mm' prefs define a rectangle around the
12776 # nominal event target point within which we will search for suitable elements.
12777 # 'visitedWeight' is a percentage weight; a value > 100 makes a visited link be
12778 # treated as further away from the event target than it really is, while a
12779 # value < 100 makes a visited link be treated as closer to the event target
12780 # than it really is.
12782 - name: ui.touch.radius.enabled
12783   type: bool
12784   value: @IS_ANDROID@
12785   mirror: always
12787 - name: ui.touch.radius.topmm
12788   type: uint32_t
12789 #ifdef ANDROID
12790   value: 2
12791 #else
12792   value: 12
12793 #endif
12794   mirror: always
12796 - name: ui.touch.radius.rightmm
12797   type: uint32_t
12798 #ifdef ANDROID
12799   value: 3
12800 #else
12801   value: 8
12802 #endif
12803   mirror: always
12805 - name: ui.touch.radius.bottommm
12806   type: uint32_t
12807 #ifdef ANDROID
12808   value: 2
12809 #else
12810   value: 4
12811 #endif
12812   mirror: always
12814 - name: ui.touch.radius.leftmm
12815   type: uint32_t
12816 #ifdef ANDROID
12817   value: 3
12818 #else
12819   value: 8
12820 #endif
12821   mirror: always
12823 - name: ui.touch.radius.visitedWeight
12824   type: uint32_t
12825   value: 120
12826   mirror: always
12828 - name: ui.mouse.radius.enabled
12829   type: bool
12830   value: @IS_ANDROID@
12831   mirror: always
12833 - name: ui.mouse.radius.topmm
12834   type: uint32_t
12835 #ifdef ANDROID
12836   value: 2
12837 #else
12838   value: 12
12839 #endif
12840   mirror: always
12842 - name: ui.mouse.radius.rightmm
12843   type: uint32_t
12844 #ifdef ANDROID
12845   value: 3
12846 #else
12847   value: 8
12848 #endif
12849   mirror: always
12851 - name: ui.mouse.radius.bottommm
12852   type: uint32_t
12853 #ifdef ANDROID
12854   value: 2
12855 #else
12856   value: 4
12857 #endif
12858   mirror: always
12860 - name: ui.mouse.radius.leftmm
12861   type: uint32_t
12862 #ifdef ANDROID
12863   value: 3
12864 #else
12865   value: 8
12866 #endif
12867   mirror: always
12869 - name: ui.mouse.radius.visitedWeight
12870   type: uint32_t
12871   value: 120
12872   mirror: always
12874 - name: ui.mouse.radius.reposition
12875   type: bool
12876   value: @IS_ANDROID@
12877   mirror: always
12879 # When true, the ui.mouse.radius.* prefs will only affect simulated mouse
12880 # events generated by touch input. When false, the prefs will be used for all
12881 # mouse events.
12882 - name: ui.mouse.radius.inputSource.touchOnly
12883   type: bool
12884   value: true
12885   mirror: always
12887 #---------------------------------------------------------------------------
12888 # Prefs starting with "urlclassifier."
12889 #---------------------------------------------------------------------------
12891 # Update server response timeout for Safe Browsing.
12892 - name: urlclassifier.update.response_timeout_ms
12893   type: uint32_t
12894   value: 30000
12895   mirror: always
12897 # Download update timeout for Safe Browsing.
12898 - name: urlclassifier.update.timeout_ms
12899   type: uint32_t
12900   value: 90000
12901   mirror: always
12903 #---------------------------------------------------------------------------
12904 # Prefs starting with "view_source."
12905 #---------------------------------------------------------------------------
12907 - name: view_source.editor.external
12908   type: bool
12909   value: false
12910   mirror: always
12912 - name: view_source.wrap_long_lines
12913   type: bool
12914   value: @IS_ANDROID@
12915   mirror: always
12917 - name: view_source.syntax_highlight
12918   type: bool
12919   value: true
12920   mirror: always
12922 - name: view_source.tab_size
12923   type: int32_t
12924   value: 4
12925   mirror: always
12927 #---------------------------------------------------------------------------
12928 # Prefs starting with "webgl." (for pref access from Worker threads)
12929 #---------------------------------------------------------------------------
12931 - name: webgl.1.allow-core-profiles
12932   type: RelaxedAtomicBool
12933 #ifdef XP_MACOSX
12934   value: true
12935 #else
12936   value: false
12937 #endif
12938   mirror: always
12940 - name: webgl.all-angle-options
12941   type: RelaxedAtomicBool
12942   value: false
12943   mirror: always
12945 - name: webgl.angle.force-d3d11
12946   type: RelaxedAtomicBool
12947   value: false
12948   mirror: always
12950 - name: webgl.angle.try-d3d11
12951   type: RelaxedAtomicBool
12952 #ifdef XP_WIN
12953   value: true
12954 #else
12955   value: false
12956 #endif
12957   mirror: always
12959 - name: webgl.angle.force-warp
12960   type: RelaxedAtomicBool
12961   value: false
12962   mirror: always
12964 - name: webgl.auto-flush
12965   type: RelaxedAtomicBool
12966   value: true
12967   mirror: always
12969 - name: webgl.auto-flush.gl
12970   type: RelaxedAtomicBool
12971   value: false
12972   mirror: always
12974 - name: webgl.can-lose-context-in-foreground
12975   type: RelaxedAtomicBool
12976   value: true
12977   mirror: always
12979 - name: webgl.cgl.multithreaded
12980   type: RelaxedAtomicBool
12981   value: true
12982   mirror: always
12984 - name: webgl.colorspaces.prototype
12985   type: RelaxedAtomicBool
12986   value: false
12987   mirror: always
12989 - name: webgl.debug.incomplete-tex-color
12990   type: RelaxedAtomicUint32
12991   value: 0
12992   mirror: always
12994 - name: webgl.default-antialias
12995   type: RelaxedAtomicBool
12996   value: @IS_NOT_ANDROID@
12997   mirror: always
12999 - name: webgl.default-no-alpha
13000   type: RelaxedAtomicBool
13001   value: false
13002   mirror: always
13004 - name: webgl.disable-angle
13005   type: RelaxedAtomicBool
13006   value: false
13007   mirror: always
13009 - name: webgl.disable-wgl
13010   type: RelaxedAtomicBool
13011   value: false
13012   mirror: always
13014 - name: webgl.dxgl.enabled
13015   type: RelaxedAtomicBool
13016 #ifdef XP_WIN
13017   value: true
13018 #else
13019   value: false
13020 #endif
13021   mirror: always
13023 - name: webgl.dxgl.needs-finish
13024   type: RelaxedAtomicBool
13025   value: false
13026   mirror: always
13028 - name: webgl.disable-fail-if-major-performance-caveat
13029   type: RelaxedAtomicBool
13030   value: true
13031   mirror: always
13033 - name: webgl.disable-DOM-blit-uploads
13034   type: RelaxedAtomicBool
13035   value: false
13036   mirror: always
13038 - name: webgl.disabled
13039   type: RelaxedAtomicBool
13040   value: false
13041   mirror: always
13043 - name: webgl.enable-debug-renderer-info
13044   type: RelaxedAtomicBool
13045   value: true
13046   mirror: always
13048 - name: webgl.enable-draft-extensions
13049   type: RelaxedAtomicBool
13050   value: false
13051   mirror: always
13053 - name: webgl.enable-privileged-extensions
13054   type: RelaxedAtomicBool
13055   value: false
13056   mirror: always
13058 - name: webgl.enable-renderer-query
13059   type: RelaxedAtomicBool
13060   value: true
13061   mirror: always
13063 - name: webgl.enable-surface-texture
13064   type: RelaxedAtomicBool
13065   value: true
13066   mirror: always
13068 - name: webgl.enable-ahardwarebuffer
13069   type: RelaxedAtomicBool
13070   value: false
13071   mirror: always
13073 - name: webgl.enable-webgl2
13074   type: RelaxedAtomicBool
13075   value: true
13076   mirror: always
13078 - name: webgl.force-enabled
13079   type: RelaxedAtomicBool
13080   value: false
13081   mirror: always
13083 - name: webgl.force-layers-readback
13084   type: RelaxedAtomicBool
13085   value: false
13086   mirror: always
13088 - name: webgl.force-index-validation
13089   type: RelaxedAtomicInt32
13090   value: 0
13091   mirror: always
13093 - name: webgl.lose-context-on-memory-pressure
13094   type: RelaxedAtomicBool
13095   value: false
13096   mirror: always
13098 - name: webgl.max-contexts
13099   type: RelaxedAtomicUint32
13100   value: 1000
13101   mirror: always
13103 - name: webgl.max-contexts-per-principal
13104   type: RelaxedAtomicUint32
13105   value: 300
13106   mirror: always
13108 - name: webgl.max-warnings-per-context
13109   type: RelaxedAtomicUint32
13110   value: 32
13111   mirror: always
13113 - name: webgl.min_capability_mode
13114   type: RelaxedAtomicBool
13115   value: false
13116   mirror: always
13118 - name: webgl.msaa-force
13119   type: RelaxedAtomicBool
13120   value: false
13121   mirror: always
13123 - name: webgl.msaa-samples
13124   type: RelaxedAtomicUint32
13125   value: 4
13126   mirror: always
13128 - name: webgl.out-of-process
13129   type: RelaxedAtomicBool
13130 # (When reading the next line, know that preprocessor.py doesn't
13131 # understand parentheses, but && is higher precedence than ||.)
13132 #if defined(XP_MACOSX) || defined(XP_WIN) || defined(XP_LINUX) && !defined(MOZ_WIDGET_ANDROID)
13133   value: true
13134 #else
13135   value: false
13136 #endif
13137   mirror: always
13139 - name: webgl.out-of-process.worker
13140   type: RelaxedAtomicBool
13141 # (When reading the next line, know that preprocessor.py doesn't
13142 # understand parentheses, but && is higher precedence than ||.)
13143 #if defined(XP_MACOSX) || defined(XP_WIN) || defined(XP_LINUX) && !defined(MOZ_WIDGET_ANDROID)
13144   value: true
13145 #else
13146   value: false
13147 #endif
13148   mirror: always
13150 - name: webgl.out-of-process.force
13151   type: RelaxedAtomicBool
13152   value: false
13153   mirror: always
13155 - name: webgl.out-of-process.shmem-size
13156   type: RelaxedAtomicUint32
13157   value: 100000 # 100KB
13158   mirror: always
13160 # Override the blocklist to assume that GL is threadsafe.
13161 - name: webgl.threadsafe-gl.force-enabled
13162   type: bool
13163   value: false
13164   mirror: once
13166 # Override the blocklist to assume that GL is not threadsafe.
13167 - name: webgl.threadsafe-gl.force-disabled
13168   type: bool
13169   value: false
13170   mirror: once
13172 - name: webgl.override-unmasked-renderer
13173   type: String
13174   value: ""
13175   mirror: never
13177 - name: webgl.override-unmasked-vendor
13178   type: String
13179   value: ""
13180   mirror: never
13182 - name: webgl.power-preference-override
13183   type: RelaxedAtomicInt32
13184   value: 0
13185   mirror: always
13187 - name: webgl.prefer-16bpp
13188   type: RelaxedAtomicBool
13189   value: false
13190   mirror: always
13192 - name: webgl.sanitize-unmasked-renderer
13193   type: RelaxedAtomicBool
13194   value: true
13195   mirror: always
13197 - name: webgl.allow-immediate-queries
13198   type: RelaxedAtomicBool
13199   value: false
13200   mirror: always
13202 - name: webgl.allow-fb-invalidation
13203   type: RelaxedAtomicBool
13204   value: false
13205   mirror: always
13208 - name: webgl.perf.max-warnings
13209   type: RelaxedAtomicInt32
13210   value: 0
13211   mirror: always
13213 - name: webgl.perf.max-acceptable-fb-status-invals
13214   type: RelaxedAtomicInt32
13215   value: 0
13216   mirror: always
13218 - name: webgl.perf.spew-frame-allocs
13219   type: RelaxedAtomicBool
13220   value: true
13221   mirror: always
13223 #---------------------------------------------------------------------------
13224 # Prefs starting with "widget."
13225 #---------------------------------------------------------------------------
13227 # Global user preference for disabling native theme in content processes.
13229 # NOTE(emilio): When changing this make sure to update the non_native_theme
13230 # entry in python/mozbuild/mozbuild/mozinfo.py and test_fission_autostart.py
13231 - name: widget.non-native-theme.enabled
13232   type: RelaxedAtomicBool
13233   value: true
13234   mirror: always
13236 # Whether the non-native theme should always use system colors. Useful mostly
13237 # for testing forced colors mode.
13238 - name: widget.non-native-theme.always-high-contrast
13239   type: RelaxedAtomicBool
13240   value: false
13241   mirror: always
13243 # The style of scrollbars to use. Here are the current options:
13245 #   0: Default platform scrollbar style.
13246 #   1: macOS scrollbars
13247 #   2: GTK scrollbars
13248 #   3: Android scrollbars
13249 #   4: Windows 10 scrollbars
13250 #   5: Windows 11 scrollbars
13252 # Note that switching to non-default scrollbars is experimental and other
13253 # scrollbar-related prefs may interfere with the experience. For example,
13254 # setting the GTK thumb size may have no effect when using non-GTK scrollbars
13255 # on GTK.
13256 - name: widget.non-native-theme.scrollbar.style
13257   type: uint32_t
13258   value: 0
13259   mirror: always
13261 # An override that allows to override the default platform size. The size in CSS
13262 # pixels at full zoom of the minimum scrollbar width.
13263 - name: widget.non-native-theme.scrollbar.size.override
13264   type: uint32_t
13265   value: 0
13266   mirror: always
13268 # Whether we should use themed values for dark scrollbars.
13269 - name: widget.non-native-theme.scrollbar.dark-themed
13270   type: RelaxedAtomicBool
13271   value: true
13272   mirror: always
13274 # Whether the active thumb color should always use the themed colors, even if
13275 # dark scrollbars are in use.
13276 - name: widget.non-native-theme.scrollbar.active-always-themed
13277   type: RelaxedAtomicBool
13278   value: true
13279   mirror: always
13281 # Whether we use the Windows CSS scrollbar sizes, or the scrollbar sizes
13282 # defined above.
13283 - name: widget.non-native-theme.win.scrollbar.use-system-size
13284   type: bool
13285   value: true
13286   mirror: always
13288 # Whether Windows 11 scrollbars are always drawn with the thinner "overlay"
13289 # scrollbar style.
13290 - name: widget.non-native-theme.win11.scrollbar.force-overlay-style
13291   type: bool
13292   value: false
13293   mirror: always
13295 # The amount of space that the thumb should fill the scrollbar, from zero to
13296 # one.
13297 - name: widget.non-native-theme.gtk.scrollbar.thumb-size
13298   type: float
13299   value: 0.75
13300   mirror: always
13302 # The minimum size of the scroll thumb, in the scrollbar direction.
13303 - name: widget.non-native-theme.gtk.scrollbar.thumb-cross-size
13304   type: uint32_t
13305   value: 40
13306   mirror: always
13308 # Whether the thumb should be rounded for the non-native scrollbars.
13309 - name: widget.non-native-theme.gtk.scrollbar.round-thumb
13310   type: bool
13311   value: true
13312   mirror: always
13314 # Whether buttons shouldn't be suppressed for non-native scrollbars.
13315 - name: widget.non-native-theme.gtk.scrollbar.allow-buttons
13316   type: bool
13317   value: false
13318   mirror: always
13320 # Whether we should use the default accent color or the theme-provided one.
13322 # TODO(emilio): This should probably do the right thing in most other
13323 # platforms, but stick to the standard colors on those.
13324 - name: widget.non-native-theme.use-theme-accent
13325   type: RelaxedAtomicBool
13326 #if defined(MOZ_WIDGET_GTK) || defined(XP_MACOSX) || defined(ANDROID)
13327   value: true
13328 #else
13329   value: false
13330 #endif
13331   mirror: always
13333 # Whether we should try to use WebRender to render widgets.
13334 - name: widget.non-native-theme.webrender
13335   type: bool
13336 #if defined(XP_MACOSX)
13337   # Disabled on macOS release / beta because of a suspected AMD driver bug (see
13338   # bug 1715452).
13339   value: @IS_NIGHTLY_BUILD@
13340 #else
13341   value: true
13342 #endif
13343   mirror: always
13345 # Preference to disable dark scrollbar implementation.
13346 # This is mainly for testing because dark scrollbars have to be semi-
13347 # transparent, but many reftests expect scrollbars to look identical
13348 # among different backgrounds.
13349 # However, some users may want to disable this as well.
13350 - name: widget.disable-dark-scrollbar
13351   type: bool
13352   value: false
13353   mirror: always
13355 - name: widget.window-transforms.disabled
13356   type: RelaxedAtomicBool
13357   value: false
13358   mirror: always
13360 #ifdef XP_MACOSX
13362 # Whether to shift by the menubar height on fullscreen mode.
13363 # 0: never
13364 # 1: always
13365 # 2: auto (tries to detect when it is needed)
13366 - name: widget.macos.shift-by-menubar-on-fullscreen
13367   type: RelaxedAtomicUint32
13368   value: 2
13369   mirror: always
13371 - name: widget.macos.native-context-menus
13372   type: RelaxedAtomicBool
13373   value: true
13374   mirror: always
13375 #endif
13377 # Whether to allow gtk dark themes in content.
13378 - name: widget.content.allow-gtk-dark-theme
13379   type: RelaxedAtomicBool
13380   value: false
13381   mirror: always
13383 # Whether native GTK context menus are enabled.
13384 # Disabled because at the very least there's missing custom icon support.
13385 - name: widget.gtk.native-context-menus
13386   type: RelaxedAtomicBool
13387   value: false
13388   mirror: always
13390 # Whether we use overlay scrollbars on GTK.
13391 - name: widget.gtk.overlay-scrollbars.enabled
13392   type: RelaxedAtomicBool
13393   value: true
13394   mirror: always
13396 # Whether we honor the scrollbar colors from the gtk theme.
13397 - name: widget.gtk.theme-scrollbar-colors.enabled
13398   type: bool
13399   value: true
13400   mirror: always
13402 # Whether selection colors for the non-system theme get passed from the system
13403 # GTK theme.
13404 - name: widget.gtk.alt-theme.selection
13405   type: bool
13406   value: true
13407   mirror: always
13409 # Whether form control accent colors for the non-system theme get passed from
13410 # the system GTK theme.
13411 - name: widget.gtk.alt-theme.accent
13412   type: bool
13413   value: true
13414   mirror: always
13416 # Whether the scrollbar thumb active color from the non-system theme gets
13417 # passed from the system GTK theme.
13418 - name: widget.gtk.alt-theme.scrollbar_active
13419   type: bool
13420   value: true
13421   mirror: always
13423 # Whether to use gtk high contrast themes to disable content styling like on
13424 # windows high contrast mode.
13425 - name: widget.content.gtk-high-contrast.enabled
13426   type: bool
13427   value: true
13428   mirror: always
13430 # Whether to pause the compositor when a native window is minimized.
13431 - name: widget.pause-compositor-when-minimized
13432   type: bool
13433   value: true
13434   mirror: always
13436 #ifdef MOZ_WAYLAND
13437 # Whether to override the DMABuf blocklist.
13438 - name: widget.dmabuf.force-enabled
13439   type: bool
13440   value: false
13441   mirror: once
13443 #ifdef NIGHTLY_BUILD
13444 # Keep those pref hidden on non-nightly builds to avoid people accidentally
13445 # turning it on.
13447 # Use DMABuf for content textures.
13448 # For testing purposes only.
13449 - name: widget.dmabuf-textures.enabled
13450   type: RelaxedAtomicBool
13451   value: false
13452   mirror: always
13453 #endif
13455 # Use DMABuf backend for WebGL.
13456 - name: widget.dmabuf-webgl.enabled
13457   type: RelaxedAtomicBool
13458   value: true
13459   mirror: always
13461 # Force fractional scaling using wp_viewporter. Valid values: 0.5 - 8
13462 - name: widget.wayland.fractional_buffer_scale
13463   type: float
13464   value: 0.0f
13465   mirror: once
13467 # Use opaque region for MozContainer wl_surface
13468 - name: widget.wayland.opaque-region.enabled
13469   type: bool
13470   value: true
13471   mirror: once
13473 # Use frame callback based vsync
13474 - name: widget.wayland.vsync.enabled
13475   type: bool
13476   value: true
13477   mirror: once
13478 #endif
13480 #ifdef MOZ_WIDGET_GTK
13482 # Use gdk_window_move_to_rect to move Wayland popups when available.
13483 - name: widget.wayland.use-move-to-rect
13484   type: bool
13485   value: true
13486   mirror: once
13488 # The time we should spend on a DBUS call to the FileManager1 interface before
13489 # giving up and trying an alternative method.
13491 # -1 for the default system timeout, INT_MAX for "infinite time".
13493 # This happens right now on the main thread so 1 second should be enough, we
13494 # should consider moving it to a background task and just use the default
13495 # timeout.
13496 - name: widget.gtk.file-manager-show-items-timeout-ms
13497   type: int32_t
13498   value: 1000
13499   mirror: always
13501 # The timeout we should spend on a DBUS call to the Settings proxy before
13502 # giving up.
13504 # -1 for the default system timeout, INT_MAX for "infinite time".
13506 # This runs just once, but during startup, so make sure it doesn't take too
13507 # long. Three seconds should be way more than enough, and if we don't get the
13508 # reply on time then the only potential issue is that we use a light instead of
13509 # dark interface or vice versa.
13510 - name: widget.gtk.settings-portal-timeout-ms
13511   type: int32_t
13512   value: 3000
13513   mirror: always
13515 # Whether to use gtk portal for the file picker.
13516 #  - 0: never
13517 #  - 1: always
13518 #  - 2: auto (true for flatpak or GTK_USE_PORTAL=1, false otherwise)
13519 - name: widget.use-xdg-desktop-portal.file-picker
13520   type: int32_t
13521   value: 2
13522   mirror: always
13524 # Whether to use gtk portal for the mime handler.
13525 #  - 0: never
13526 #  - 1: always
13527 #  - 2: auto (for now only true for flatpak, see bug 1516290)
13528 - name: widget.use-xdg-desktop-portal.mime-handler
13529   type: int32_t
13530   value: 2
13531   mirror: always
13533 # Whether to try to use XDG portal for settings / look-and-feel information.
13534 # https://flatpak.github.io/xdg-desktop-portal/#gdbus-org.freedesktop.portal.Settings
13535 #  - 0: never
13536 #  - 1: always
13537 #  - 2: auto
13538 - name: widget.use-xdg-desktop-portal.settings
13539   type: int32_t
13540   value: 2
13541   mirror: always
13543 # Whether to use XDG portal for geolocation.
13544 # https://flatpak.github.io/xdg-desktop-portal/#gdbus-org.freedesktop.portal.Location
13545 #  - 0: never
13546 #  - 1: always
13547 #  - 2: auto
13548 - name: widget.use-xdg-desktop-portal.location
13549   type: int32_t
13550   value: 2
13551   mirror: always
13552 #endif
13554 #ifdef XP_WIN
13555 # WindowsUIUtils::Share to wait for user action on Windows share dialog
13556 # `true` means the promise resolves when user completes or cancels the share
13557 # action. This can be unsafe since selecting copy action fires no DataPackage
13558 # event as of 21H1.
13559 # `false` means the promise resolves when the share data is passed to
13560 # DataPackage.
13561 # This affects the behavior of `navigator.share()`.
13562 - name: widget.windows.share.wait_action.enabled
13563   type: bool
13564   value: false
13565   mirror: always
13567 - name: widget.windows.window_occlusion_tracking.enabled
13568   type: bool
13569   value: true
13570   mirror: always
13572 # Whether overlay scrollbars respect the system settings.
13573 # Note that these can be overridden by the ui.useOverlayScrollbars pref.
13574 - name: widget.windows.overlay-scrollbars.enabled
13575   type: bool
13576   value: true
13577   mirror: always
13579 - name: widget.windows.window_occlusion_tracking_display_state.enabled
13580   type: bool
13581   value: false
13582   mirror: always
13584 - name: widget.windows.window_occlusion_tracking_session_lock.enabled
13585   type: bool
13586   value: true
13587   mirror: always
13589 - name: widget.windows.hide_cursor_when_typing
13590   type: bool
13591   value: true
13592   mirror: always
13593 #endif
13595 # Whether to disable SwipeTracker (e.g. swipe-to-nav).
13596 - name: widget.disable-swipe-tracker
13597   type: bool
13598 #ifdef XP_WIN
13599   value: @IS_NOT_NIGHTLY_BUILD@
13600 #else
13601   value: false
13602 #endif
13603   mirror: always
13605 # Various metrics to control SwipeTracker.
13606 - name: widget.swipe.velocity-twitch-tolerance
13607   type: float
13608   value: 0.0000001f
13609   mirror: always
13611 - name: widget.swipe.success-velocity-contribution
13612   type: float
13613   value: 0.05f
13614   mirror: always
13616 - name: widget.swipe.whole-page-pixel-size
13617   type: float
13618 #if defined(XP_WIN)
13619   value: 1100.0f
13620 #else
13621   value: 550.0f
13622 #endif
13623   mirror: always
13625 - name: widget.transparent-windows
13626   type: bool
13627   value: true
13628   mirror: once
13630 #---------------------------------------------------------------------------
13631 # Prefs starting with "xul."
13632 #---------------------------------------------------------------------------
13634 # Pref to control whether arrow-panel animations are enabled or not.
13635 # Transitions are currently disabled on Linux due to rendering issues on
13636 # certain configurations.
13637 - name: xul.panel-animations.enabled
13638   type: bool
13639 #ifdef MOZ_WIDGET_GTK
13640   value: false
13641 #else
13642   value: true
13643 #endif
13644   mirror: always
13646 #---------------------------------------------------------------------------
13647 # Prefs starting with "zoom."
13648 #---------------------------------------------------------------------------
13650 - name: zoom.maxPercent
13651   type: uint32_t
13652 #ifdef ANDROID
13653   value: 400
13654 #else
13655   value: 500
13656 #endif
13657   mirror: always
13659 - name: zoom.minPercent
13660   type: uint32_t
13661 #ifdef ANDROID
13662   value: 20
13663 #else
13664   value: 30
13665 #endif
13666   mirror: always
13668 #---------------------------------------------------------------------------
13669 # End of prefs
13670 #---------------------------------------------------------------------------