Bug 1849433 - Add webgl.max-vert-ids-per-draw, default 30M. r=gfx-reviewers,gw
[gecko.git] / modules / libpref / init / StaticPrefList.yaml
blobf7b29fd516e84343259f95691507e84178609885
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, `String` or `DataMutexString`. Note that float prefs are
46 #   stored internally as strings. The C++ preprocessor doesn't like template
47 #   syntax in a macro argument, so use the typedefs defined in
48 #   StaticPrefsBase.h; for example, use `RelaxedAtomicBool` instead of
49 #   `Atomic<bool, Relaxed>`.
51 # - `value` is the default value. Its type should be appropriate for
52 #   <cpp-type>, otherwise the generated code will fail to compile. A complex
53 #   C++ numeric expressions like `60 * 60` (which the YAML parser cannot treat
54 #   as an integer or float) is treated as a string and passed through without
55 #   change, which is useful.
57 # - `mirror` indicates how the pref value is mirrored into a C++ variable.
59 #   * `never`: There is no C++ mirror variable. The pref value can only be
60 #     accessed via the standard libpref API functions.
62 #   * `once`: The pref value is mirrored into a variable at startup; the
63 #     mirror variable is left unchanged after that. (The exact point at which
64 #     all `once` mirror variables are set is when the first `once` mirror
65 #     variable is accessed, via its getter function.) This is mostly useful for
66 #     graphics prefs where we often don't want a new pref value to apply until
67 #     restart. Otherwise, this update policy is best avoided because its
68 #     behaviour can cause confusion and bugs.
70 #   * `always`: The mirror variable is always kept in sync with the pref value.
71 #     This is the most common choice.
73 #   When a mirror variable is present, a getter will be created that can access
74 #   it. Using the getter function to read the pref's value has the two
75 #   following advantages over the normal API functions.
77 #   * A direct variable access is faster than a hash table lookup.
79 #   * A mirror variable can be accessed off the main thread. If a pref *is*
80 #     accessed off the main thread, it should have an atomic type. Assertions
81 #     enforce this.
83 #   Note that Rust code must access the mirror variable directly, rather than
84 #   via the getter function.
86 # - `do_not_use_directly` indicates if `_DoNotUseDirectly` should be appended to
87 #   the name of the getter function. This is simply a naming convention
88 #   indicating that there is some other wrapper getter function that should be
89 #   used in preference to the normal static pref getter. Defaults to `false` if
90 #   not present. Cannot be used with a `never` mirror value, because there is
91 #   no getter function in that case.
93 # - `include` names a header file that must be included for the pref value to
94 #   compile correctly, e.g. because it refers to a code constant. System
95 #   headers should be surrounded with angle brackets, e.g. `<cmath>`.
97 # - `rust` indicates if the mirror variable is used by Rust code. If so, it
98 #   will be usable via the `static_prefs::pref!` macro, e.g.
99 #   `static_prefs::pref!("layout.css.font-display.enabled")`.
101 # The getter function's base name is the same as the pref's name, but with
102 # '.' or '-' chars converted to '_', to make a valid identifier. For example,
103 # the getter for `foo.bar_baz` is `foo_bar_baz()`. This is ugly but clear,
104 # and you can search for both the pref name and the getter using the regexp
105 # /foo.bar.baz/. Suffixes are added as follows:
107 # - If the `mirror` value is `once`, `_AtStartup` is appended, to indicate the
108 #   value was obtained at startup.
110 # - If the `do_not_use_directly` value is true, `_DoNotUseDirectly` is
111 #   appended.
113 # Preprocessor
114 # ------------
115 # Note finally that this file is preprocessed by preprocessor.py, not the C++
116 # preprocessor. As a result, the following things may be surprising.
118 # - YAML comments start with a '#', so putting a comment on the same line as a
119 #   preprocessor directive is dubious. E.g. avoid lines like `#define X 3 #
120 #   three` because the ` # three` will be part of `X`.
122 # - '@' use is required for substitutions to occur. E.g. with `#define FOO 1`,
123 #   `FOO` won't be replaced with `1` unless it has '@' chars around it.
125 # - Spaces aren't permitted between the leading '#' and the name of a
126 #   directive, e.g. `#ifdef XYZ` works but `# ifdef XYZ` does not.
128 # Please indent all prefs defined within #ifdef/#ifndef conditions. This
129 # improves readability, particular for conditional blocks that exceed a single
130 # screen. But note that the leading '-' in a definition must remain in the
131 # first column for it to be valid YAML.
133 #ifdef RELEASE_OR_BETA
134 #define IS_NOT_RELEASE_OR_BETA false
135 #else
136 #define IS_NOT_RELEASE_OR_BETA true
137 #endif
139 #ifdef NIGHTLY_BUILD
140 #define IS_NIGHTLY_BUILD      true
141 #define IS_NOT_NIGHTLY_BUILD  false
142 #else
143 #define IS_NIGHTLY_BUILD      false
144 #define IS_NOT_NIGHTLY_BUILD  true
145 #endif
147 #if defined(NIGHTLY_BUILD) || defined(MOZ_DEV_EDITION)
148 #define IS_NIGHTLY_OR_DEV_EDITION true
149 #else
150 #define IS_NIGHTLY_OR_DEV_EDITION false
151 #endif
153 #ifdef MOZILLA_OFFICIAL
154 #define IS_NOT_MOZILLA_OFFICIAL false
155 #else
156 #define IS_NOT_MOZILLA_OFFICIAL true
157 #endif
159 #ifdef EARLY_BETA_OR_EARLIER
160 #define IS_EARLY_BETA_OR_EARLIER true
161 #define IS_NOT_EARLY_BETA_OR_EARLIER false
162 #else
163 #define IS_EARLY_BETA_OR_EARLIER false
164 #define IS_NOT_EARLY_BETA_OR_EARLIER true
165 #endif
167 #ifdef ANDROID
168 #define IS_ANDROID true
169 #define IS_NOT_ANDROID false
170 #else
171 #define IS_ANDROID false
172 #define IS_NOT_ANDROID true
173 #endif
175 #ifdef XP_WIN
176 #define IS_XP_WIN true
177 #define IS_NOT_XP_WIN false
178 #else
179 #define IS_XP_WIN false
180 #define IS_NOT_XP_WIN true
181 #endif
183 #---------------------------------------------------------------------------
184 # Prefs starting with "accessibility."
185 #---------------------------------------------------------------------------
187 - name: accessibility.accesskeycausesactivation
188   type: bool
189   value: true
190   mirror: always
192 - name: accessibility.monoaudio.enable
193   type: RelaxedAtomicBool
194   value: false
195   mirror: always
197 - name: accessibility.browsewithcaret
198   type: RelaxedAtomicBool
199   value: false
200   mirror: always
202 - name: accessibility.AOM.enabled
203   type: bool
204   value: false
205   mirror: always
207 - name: accessibility.ARIAReflection.enabled
208   type: bool
209   value: @IS_NIGHTLY_BUILD@
210   mirror: always
212 # Whether form controls and images should be focusable with mouse, in content
213 # documents.
215 # This matches historical macOS / Safari behavior.
217 #  * 0: never
218 #  * 1: always
219 #  * 2: on content documents
220 - name: accessibility.mouse_focuses_formcontrol
221   type: int32_t
222 #ifdef XP_MACOSX
223   value: 2
224 #else
225   value: 1
226 #endif
227   mirror: always
229 # Whether to avoid accessibility activation on Windows shortly after clipboard
230 # copy.
232 # Possible values are:
233 #  * 0: never
234 #  * 1: always
235 #  * 2 (or others): when needed
236 - name: accessibility.windows.suppress-after-clipboard-copy
237   type: uint32_t
238   value: 2
239   mirror: always
241 #---------------------------------------------------------------------------
242 # Prefs starting with "alerts."
243 #---------------------------------------------------------------------------
245 # Whether to use platform-specific backends for showing desktop notifications.
246 # If no such backend is available, or if the pref is false, then XUL
247 # notifications are used.
248 - name: alerts.useSystemBackend
249   type: bool
250   value: true
251   mirror: always
253 #if defined(XP_WIN)
254  # On Windows, a COM Surrogate notification server receives notification events
255  # and can relaunch the application after it has been closed.
256 - name: alerts.useSystemBackend.windows.notificationserver.enabled
257   type: bool
258   value: true
259   mirror: never
260 #endif
262 #ifdef ANDROID
263   #---------------------------------------------------------------------------
264   # Prefs starting with "android."
265   #---------------------------------------------------------------------------
267   # On Android, we want an opaque background to be visible under the page,
268   # so layout should not force a default background.
269 -   name: android.widget_paints_background
270     type: RelaxedAtomicBool
271     value: true
272     mirror: always
274 -   name: android.touch_resampling.enabled
275     type: RelaxedAtomicBool
276     value: true
277     mirror: always
279 #endif
281 #---------------------------------------------------------------------------
282 # Prefs starting with "apz."
283 # The apz prefs are explained in AsyncPanZoomController.cpp
284 #---------------------------------------------------------------------------
286 # amount we zoom in for a double tap gesture if we couldn't find any content
287 # based rect to zoom to
288 - name: apz.doubletapzoom.defaultzoomin
289   type: AtomicFloat
290   value: 1.2f
291   mirror: always
293 - name: apz.scrollbarbuttonrepeat.enabled
294   type: RelaxedAtomicBool
295   value: true
296   mirror: always
298 - name: apz.scrollend-event.content.enabled
299   type: RelaxedAtomicBool
300   value: true
301   mirror: always
303 # After a user has executed a pan gesture, we may receive momentum phase pan
304 # gestures from the OS. This specifies how long we should wait following the
305 # pan end gesture for possible momentum phase pan gestures before sending the
306 # TransformEnd notification.
307 - name: apz.scrollend-event.content.delay_ms
308   type: RelaxedAtomicInt32
309   value: 100
310   mirror: always
312 - name: apz.wr.activate_all_scroll_frames
313   type: RelaxedAtomicBool
314   value: false
315   mirror: always
317 - name: apz.wr.activate_all_scroll_frames_when_fission
318   type: RelaxedAtomicBool
319   value: true
320   mirror: always
322 - name: apz.prefer_jank_minimal_displayports
323   type: RelaxedAtomicBool
324   value: true
325   mirror: always
327 - name: apz.allow_double_tap_zooming
328   type: RelaxedAtomicBool
329   value: true
330   mirror: always
332 - name: apz.mac.enable_double_tap_zoom_touchpad_gesture
333   type: RelaxedAtomicBool
334   value: true
335   mirror: always
337 - name: apz.allow_immediate_handoff
338   type: RelaxedAtomicBool
339   value: false
340   mirror: always
342 - name: apz.allow_zooming
343   type: RelaxedAtomicBool
344   value: true
345   mirror: always
347 - name: apz.max_zoom
348   type: AtomicFloat
349   value: 10.0f
350   mirror: always
352 - name: apz.min_zoom
353   type: AtomicFloat
354   value: 0.25f
355   mirror: always
357 - name: apz.allow_zooming_out
358   type: RelaxedAtomicBool
359   value: false
360   mirror: always
362 - name: apz.android.chrome_fling_physics.friction
363   type: AtomicFloat
364   value: 0.015f
365   mirror: always
367 - name: apz.android.chrome_fling_physics.inflexion
368   type: AtomicFloat
369   value: 0.35f
370   mirror: always
372 - name: apz.android.chrome_fling_physics.stop_threshold
373   type: AtomicFloat
374   value: 0.1f
375   mirror: always
377 - name: apz.autoscroll.enabled
378   type: RelaxedAtomicBool
379   value: true
380   mirror: always
382 - name: apz.axis_lock.breakout_angle
383   type: AtomicFloat
384   value: float(M_PI / 8.0)    # 22.5 degrees
385   mirror: always
386   include: <cmath>
388 - name: apz.axis_lock.breakout_threshold
389   type: AtomicFloat
390   value: 1.0f / 32.0f
391   mirror: always
393 - name: apz.axis_lock.direct_pan_angle
394   type: AtomicFloat
395   value: float(M_PI / 3.0)    # 60 degrees
396   mirror: always
397   include: <cmath>
399 - name: apz.axis_lock.lock_angle
400   type: AtomicFloat
401   value: float(M_PI / 6.0)    # 30 degrees
402   mirror: always
403   include: <cmath>
405 # Whether to lock touch scrolling to one axis at a time. When a new
406 # axis lock mode is added, the APZCAxisLockCompatTester GTest shoud
407 # be updated to include the lock mode value.
408 # 0 = FREE (No locking at all)
409 # 1 = STANDARD (Once locked, remain locked until scrolling ends)
410 # 2 = STICKY (Allow lock to be broken, with hysteresis)
411 # 3 = DOMINANT_AXIS (Only allow movement on one axis at a time, only
412 #     applies to touchpad scrolling)
413 - name: apz.axis_lock.mode
414   type: RelaxedAtomicInt32
415 #if defined(XP_MACOSX)
416   value: 3
417 #else
418   value: 2
419 #endif
420   mirror: always
422 - name: apz.content_response_timeout
423   type: RelaxedAtomicInt32
424   value: 400
425   mirror: always
427 - name: apz.danger_zone_x
428   type: RelaxedAtomicInt32
429   value: 50
430   mirror: always
432 - name: apz.danger_zone_y
433   type: RelaxedAtomicInt32
434   value: 100
435   mirror: always
437 - name: apz.disable_for_scroll_linked_effects
438   type: RelaxedAtomicBool
439   value: false
440   mirror: always
442 - name: apz.displayport_expiry_ms
443   type: RelaxedAtomicUint32
444   value: 15000
445   mirror: always
447 - name: apz.drag.enabled
448   type: RelaxedAtomicBool
449   value: true
450   mirror: always
452 - name: apz.drag.initial.enabled
453   type: RelaxedAtomicBool
454   value: true
455   mirror: always
457 - name: apz.drag.touch.enabled
458   type: RelaxedAtomicBool
459   value: true
460   mirror: always
462 - name: apz.enlarge_displayport_when_clipped
463   type: RelaxedAtomicBool
464   value: @IS_ANDROID@
465   mirror: always
467 # Test only.
468 - name: apz.fixed-margin-override.enabled
469   type: RelaxedAtomicBool
470   value: false
471   mirror: always
473 # Test only.
474 - name: apz.fixed-margin-override.bottom
475   type: RelaxedAtomicInt32
476   value: 0
477   mirror: always
479 # Test only.
480 - name: apz.fixed-margin-override.top
481   type: RelaxedAtomicInt32
482   value: 0
483   mirror: always
485 - name: apz.fling_accel_base_mult
486   type: AtomicFloat
487   value: 1.0f
488   mirror: always
490 - name: apz.fling_accel_supplemental_mult
491   type: AtomicFloat
492   value: 1.0f
493   mirror: always
495 - name: apz.fling_accel_min_fling_velocity
496   type: AtomicFloat
497   value: 1.5f
498   mirror: always
500 - name: apz.fling_accel_min_pan_velocity
501   type: AtomicFloat
502   value: 0.8f
503   mirror: always
505 - name: apz.fling_accel_max_pause_interval_ms
506   type: RelaxedAtomicInt32
507   value: 50
508   mirror: always
510 - name: apz.fling_curve_function_x1
511   type: float
512   value: 0.0f
513   mirror: once
515 - name: apz.fling_curve_function_x2
516   type: float
517   value: 1.0f
518   mirror: once
520 - name: apz.fling_curve_function_y1
521   type: float
522   value: 0.0f
523   mirror: once
525 - name: apz.fling_curve_function_y2
526   type: float
527   value: 1.0f
528   mirror: once
530 - name: apz.fling_curve_threshold_inches_per_ms
531   type: AtomicFloat
532   value: -1.0f
533   mirror: always
535 - name: apz.fling_friction
536   type: AtomicFloat
537   value: 0.002f
538   mirror: always
540 - name: apz.fling_min_velocity_threshold
541   type: AtomicFloat
542   value: 0.5f
543   mirror: always
545 - name: apz.fling_stop_on_tap_threshold
546   type: AtomicFloat
547   value: 0.05f
548   mirror: always
550 - name: apz.fling_stopped_threshold
551   type: AtomicFloat
552   value: 0.01f
553   mirror: always
555 - name: apz.touch_acceleration_factor_x
556   type: float
557   value: 1.0f
558   mirror: always
560 - name: apz.touch_acceleration_factor_y
561   type: float
562   value: 1.0f
563   mirror: always
565 # new scrollbar code for desktop zooming
566 - name: apz.force_disable_desktop_zooming_scrollbars
567   type: RelaxedAtomicBool
568   value: false
569   mirror: always
571 #ifdef MOZ_WIDGET_GTK
572 -   name: apz.gtk.kinetic_scroll.enabled
573     type: RelaxedAtomicBool
574     value: true
575     mirror: always
577 -   name: apz.gtk.pangesture.enabled
578     type: RelaxedAtomicBool
579     value: true
580     mirror: always
582 # Mode to use when receiving pan gesture input.
584 #  * 0: Auto mode (uses the default behavior, subject to change).
585 #  * 1: Page mode: Uses gtk deltas as a percentage of the page size to scroll. This mode matches:
587 #    https://gitlab.gnome.org/GNOME/gtk/blob/c734c7e9188b56f56c3a504abee05fa40c5475ac/gtk/gtkrange.c#L3063-3074
589 #  * 2: Pixel mode: Uses gtk deltas as a fixed pixel multiplier. This mode matches e.g. GNOME web.
591 #    https://webkit-search.igalia.com/webkit/rev/215039ef09d6bfd6e088175bfe30788d95b9705d/Source/WebKit/Shared/gtk/WebEventFactory.cpp#265-296
592 #    (multiplied then by pixelsPerLineStep which in GNOME-web is 40).
593 -   name: apz.gtk.pangesture.delta_mode
594     type: uint32_t
595     value: 0
596     mirror: always
598 -   name: apz.gtk.pangesture.page_delta_mode_multiplier
599     type: float
600     value: 1.0f
601     mirror: always
603 -   name: apz.gtk.pangesture.pixel_delta_mode_multiplier
604     type: float
605     value: 40.0f
606     mirror: always
608 -   name: apz.gtk.touchpad_pinch.enabled
609     type: RelaxedAtomicBool
610     value: true
611     mirror: always
613 -   name: apz.gtk.touchpad_pinch.three_fingers.enabled
614     type: RelaxedAtomicBool
615     value: false
616     mirror: always
617 #endif
619 - name: apz.keyboard.enabled
620   type: bool
621   value: @IS_NOT_ANDROID@
622   mirror: once
624 - name: apz.keyboard.passive-listeners
625   type: RelaxedAtomicBool
626   value: @IS_NOT_ANDROID@
627   mirror: always
629 - name: apz.max_tap_time
630   type: RelaxedAtomicInt32
631   value: 300
632   mirror: always
634 - name: apz.max_velocity_inches_per_ms
635   type: AtomicFloat
636   value: -1.0f
637   mirror: always
639 - name: apz.max_velocity_queue_size
640   type: uint32_t
641   value: 5
642   mirror: once
644 - name: apz.min_skate_speed
645   type: AtomicFloat
646   value: 1.0f
647   mirror: always
649 - name: apz.mvm.force-enabled
650   type: RelaxedAtomicBool
651   value: true
652   mirror: always
654 - name: apz.one_touch_pinch.enabled
655   type: RelaxedAtomicBool
656   value: @IS_ANDROID@
657   mirror: always
659 - name: apz.overscroll.enabled
660   type: RelaxedAtomicBool
661 #if defined(XP_MACOSX) || defined(XP_WIN)
662   value: true
663 #else
664   value: false
665 #endif
666   mirror: always
668 # The "test async scroll offset" (used via reftest-async-scroll
669 # or nsIDOMWindowUtils.setAsyncScrollOffset()) can be used to
670 # trigger overscroll. Used for tests only.
671 - name: apz.overscroll.test_async_scroll_offset.enabled
672   type: RelaxedAtomicBool
673   value: false
674   mirror: always
676 - name: apz.overscroll.min_pan_distance_ratio
677   type: AtomicFloat
678   value: 1.0f
679   mirror: always
681 - name: apz.overscroll.stop_distance_threshold
682   type: AtomicFloat
683   value: 5.0f
684   mirror: always
686 - name: apz.overscroll.spring_stiffness
687   type: AtomicFloat
688   value: 200
689   mirror: always
691 - name: apz.overscroll.damping
692   type: AtomicFloat
693   value: 1.1
694   mirror: always
696 - name: apz.overscroll.max_velocity
697   type: AtomicFloat
698   value: 10
699   mirror: always
701 - name: apz.paint_skipping.enabled
702   type: RelaxedAtomicBool
703   value: true
704   mirror: always
706 # Fetch displayport updates early from the message queue.
707 - name: apz.pinch_lock.mode
708   type: RelaxedAtomicInt32
709   value: 2
710   mirror: always
712 - name: apz.pinch_lock.scroll_lock_threshold
713   type: AtomicFloat
714   value: 1.0f / 16.0f   # 1/16 inches
715   mirror: always
717 - name: apz.pinch_lock.span_breakout_threshold
718   type: AtomicFloat
719   value: 1.0f / 32.0f   # 1/32 inches
720   mirror: always
722 - name: apz.pinch_lock.span_lock_threshold
723   type: AtomicFloat
724   value: 1.0f / 32.0f   # 1/32 inches
725   mirror: always
727 - name: apz.pinch_lock.buffer_max_age
728   type: int32_t
729   value: 80   # milliseconds
730   mirror: once
732 - name: apz.popups.enabled
733   type: RelaxedAtomicBool
734   value: true
735   mirror: always
737 # Whether to print the APZC tree for debugging.
738 - name: apz.printtree
739   type: RelaxedAtomicBool
740   value: false
741   mirror: always
743 - name: apz.record_checkerboarding
744   type: RelaxedAtomicBool
745   value: @IS_NIGHTLY_BUILD@
746   mirror: always
748 - name: apz.second_tap_tolerance
749   type: AtomicFloat
750   value: 0.5f
751   mirror: always
753 # If this is true, APZ fully recalculates the scroll thumb size and
754 # position in the compositor. This leads to the size and position
755 # being more accurate in scenarios such as async zooming.
756 - name: apz.scrollthumb.recalc
757   type: RelaxedAtomicBool
758   value: true
759   mirror: always
761 - name: apz.test.fails_with_native_injection
762   type: RelaxedAtomicBool
763   value: false
764   mirror: always
766 - name: apz.test.logging_enabled
767   type: RelaxedAtomicBool
768   value: false
769   mirror: always
771 - name: apz.touch_move_tolerance
772   type: AtomicFloat
773   value: 0.1f
774   mirror: always
776 - name: apz.touch_start_tolerance
777   type: AtomicFloat
778   value: 0.1f
779   mirror: always
781 - name: apz.velocity_bias
782   type: AtomicFloat
783   value: 0.0f
784   mirror: always
786 - name: apz.velocity_relevance_time_ms
787   type: RelaxedAtomicUint32
788   value: 100
789   mirror: always
791 - name: apz.windows.force_disable_direct_manipulation
792   type: RelaxedAtomicBool
793   value: false
794   mirror: always
796 - name: apz.windows.use_direct_manipulation
797   type: RelaxedAtomicBool
798   value: true
799   mirror: always
801 - name: apz.windows.check_for_pan_gesture_conversion
802   type: RelaxedAtomicBool
803   value: true
804   mirror: always
806 - name: apz.x_skate_highmem_adjust
807   type: AtomicFloat
808   value: 0.0f
809   mirror: always
811 - name: apz.x_skate_size_multiplier
812   type: AtomicFloat
813   value: 1.25f
814   mirror: always
816 - name: apz.x_stationary_size_multiplier
817   type: AtomicFloat
818   value: 1.5f
819   mirror: always
821 - name: apz.y_skate_highmem_adjust
822   type: AtomicFloat
823   value: 0.0f
824   mirror: always
826 - name: apz.y_skate_size_multiplier
827   type: AtomicFloat
828 #if defined(MOZ_WIDGET_ANDROID)
829   value: 1.5f
830 #else
831   value: 3.5f
832 #endif
833   mirror: always
835 - name: apz.y_stationary_size_multiplier
836   type: AtomicFloat
837 #if defined(MOZ_WIDGET_ANDROID)
838   value: 1.5f
839 #else
840   value: 3.5f
841 #endif
842   mirror: always
844 - name: apz.zoom_animation_duration_ms
845   type: RelaxedAtomicInt32
846 #if defined(MOZ_WIDGET_ANDROID)
847   value: 250
848 #else
849   value: 350
850 #endif
851   mirror: always
853 - name: apz.scale_repaint_delay_ms
854   type: RelaxedAtomicInt32
855   value: 500
856   mirror: always
858 # Whether to use rounded external scroll offsets.
859 - name: apz.rounded_external_scroll_offset
860   type: bool
861   value: false
862   mirror: always
864 #---------------------------------------------------------------------------
865 # Prefs starting with "beacon."
866 #---------------------------------------------------------------------------
868 # Is support for Navigator.sendBeacon enabled?
869 - name: beacon.enabled
870   type: bool
871   value: true
872   mirror: always
874 #---------------------------------------------------------------------------
875 # Prefs starting with "bidi."
876 #---------------------------------------------------------------------------
878 # Whether delete and backspace should immediately delete characters not
879 # visually adjacent to the caret, or adjust the visual position of the caret
880 # on the first keypress and delete the character on a second keypress
881 - name: bidi.edit.delete_immediately
882   type: bool
883   value: true
884   mirror: always
886 # Bidi caret movement style:
887 # 0 = logical
888 # 1 = visual
889 # 2 = visual, but logical during selection
890 - name: bidi.edit.caret_movement_style
891   type: int32_t
892 #if !defined(XP_LINUX) && defined(NIGHTLY_BUILD)
893   value: 1
894 #else
895   value: 2 # See Bug 1638240
896 #endif
897   mirror: always
899 # Bidi numeral style:
900 # 0 = nominalnumeralBidi *
901 # 1 = regularcontextnumeralBidi
902 # 2 = hindicontextnumeralBidi
903 # 3 = arabicnumeralBidi
904 # 4 = hindinumeralBidi
905 # 5 = persiancontextnumeralBidi
906 # 6 = persiannumeralBidi
907 - name: bidi.numeral
908   type: RelaxedAtomicUint32
909   value: 0
910   mirror: always
912 # Bidi text type
913 # 1 = charsettexttypeBidi *
914 # 2 = logicaltexttypeBidi
915 # 3 = visualtexttypeBidi
916 - name: bidi.texttype
917   type: RelaxedAtomicUint32
918   value: 1
919   mirror: always
921 # Bidi direction
922 # 1 = directionLTRBidi *
923 # 2 = directionRTLBidi
924 - name: bidi.direction
925   type: RelaxedAtomicUint32
926   value: 1
927   mirror: always
929 # Setting this pref to |true| forces Bidi UI menu items and keyboard shortcuts
930 # to be exposed, and enables the directional caret hook. By default, only
931 # expose it for bidi-associated system locales.
932 - name: bidi.browser.ui
933   type: bool
934   value: false
935   mirror: always
937 #---------------------------------------------------------------------------
938 # Prefs starting with "browser."
939 #---------------------------------------------------------------------------
941 - name: browser.active_color
942   type: String
943   value: "#EE0000"
944   mirror: never
946 - name: browser.active_color.dark
947   type: String
948   value: "#FF6666"
949   mirror: never
951 - name: browser.anchor_color
952   type: String
953   value: "#0000EE"
954   mirror: never
956 # If you change this, you probably also want to change
957 # nsXPLookAndFeel::GenericDarkColor for MozNativehyperlinktext.
958 - name: browser.anchor_color.dark
959   type: String
960   value: "#8C8CFF"
961   mirror: never
963 # See http://dev.w3.org/html5/spec/forms.html#attr-fe-autofocus
964 - name: browser.autofocus
965   type: bool
966   value: true
967   mirror: always
969 - name: browser.cache.disk.enable
970   type: RelaxedAtomicBool
971   value: true
972   mirror: always
974 - name: browser.cache.memory.enable
975   type: RelaxedAtomicBool
976   value: true
977   mirror: always
979 # Limit of recent metadata we keep in memory for faster access, in KB.
980 - name: browser.cache.disk.metadata_memory_limit
981   type: RelaxedAtomicUint32
982   value: 250   # 0.25 MB
983   mirror: always
985 # Does the user want smart-sizing?
986 - name: browser.cache.disk.smart_size.enabled
987   type: RelaxedAtomicBool
988   value: true
989   mirror: always
991 # Disk cache capacity in kilobytes. It's used only when
992 # browser.cache.disk.smart_size.enabled == false
993 - name: browser.cache.disk.capacity
994   type: RelaxedAtomicUint32
995   value: 256000
996   mirror: always
998 # -1 = determine dynamically, 0 = none, n = memory capacity in kilobytes.
999 - name: browser.cache.memory.capacity
1000   type: RelaxedAtomicInt32
1001   value: -1
1002   mirror: always
1004 # When smartsizing is disabled we could potentially fill all disk space by
1005 # cache data when the disk capacity is not set correctly. To avoid that we
1006 # check the free space every time we write some data to the cache. The free
1007 # space is checked against two limits. Once the soft limit is reached we start
1008 # evicting the least useful entries, when we reach the hard limit writing to
1009 # the entry fails.
1010 - name: browser.cache.disk.free_space_soft_limit
1011   type: RelaxedAtomicUint32
1012   value: 5 * 1024   # 5MB
1013   mirror: always
1015 - name: browser.cache.disk.free_space_hard_limit
1016   type: RelaxedAtomicUint32
1017   value: 1024    # 1MB
1018   mirror: always
1020 # The number of chunks we preload ahead of read. One chunk currently has
1021 # 256kB.
1022 - name: browser.cache.disk.preload_chunk_count
1023   type: RelaxedAtomicUint32
1024   value: 4    # 1 MB of read ahead
1025   mirror: always
1027 # Max-size (in KB) for entries in disk cache. Set to -1 for no limit.
1028 # (Note: entries bigger than 1/8 of disk-cache are never cached)
1029 - name: browser.cache.disk.max_entry_size
1030   type: RelaxedAtomicUint32
1031   value: 50 * 1024    # 50 MB
1032   mirror: always
1034 # Max-size (in KB) for entries in memory cache. Set to -1 for no limit.
1035 # (Note: entries bigger than than 90% of the mem-cache are never cached.)
1036 - name: browser.cache.memory.max_entry_size
1037   type: RelaxedAtomicInt32
1038   value: 5 * 1024
1039   mirror: always
1041 # Memory limit (in kB) for new cache data not yet written to disk. Writes to
1042 # the cache are buffered and written to disk on background with low priority.
1043 # With a slow persistent storage these buffers may grow when data is coming
1044 # fast from the network. When the amount of unwritten data is exceeded, new
1045 # writes will simply fail. We have two buckets, one for important data
1046 # (priority) like html, css, fonts and js, and one for other data like images,
1047 # video, etc.
1048 # Note: 0 means no limit.
1049 - name: browser.cache.disk.max_chunks_memory_usage
1050   type: RelaxedAtomicUint32
1051   value: 40 * 1024
1052   mirror: always
1053 - name: browser.cache.disk.max_priority_chunks_memory_usage
1054   type: RelaxedAtomicUint32
1055   value: 40 * 1024
1056   mirror: always
1059 # Number of seconds the cache spends writing pending data and closing files
1060 # after shutdown has been signalled. Past that time data is not written and
1061 # files are left open for the OS to clean up.
1062 - name: browser.cache.max_shutdown_io_lag
1063   type: RelaxedAtomicUint32
1064   value: 2
1065   mirror: always
1067 # After the max_shutdown_io_lag has passed, we will attempt to cancel
1068 # blocking IO (on windows). The CacheIOThread may pick up more blocking
1069 # tasks so we want to cancel those too. The main thread will be woken
1070 # up every shutdown_io_time_between_cancellations_ms to cancel the IO
1071 # on the other thread.
1072 - name: browser.cache.shutdown_io_time_between_cancellations_ms
1073   type: RelaxedAtomicUint32
1074   value: 5
1075   mirror: always
1077 # A percentage limit for media content type in the disk cache. When some entries
1078 # need to be evicted and media is over the limit, it's evicted first.
1079 - name: browser.cache.disk.content_type_media_limit
1080   type: RelaxedAtomicInt32
1081   value: 50
1082   mirror: always
1084 # How often to validate document in cache
1085 #   0 = once-per-session,
1086 #   1 = each-time,
1087 #   2 = never,
1088 #   3 = when-appropriate/automatically
1089 - name: browser.cache.check_doc_frequency
1090   type: RelaxedAtomicUint32
1091   value: 3
1092   mirror: always
1094 # Compression level for cached JavaScript bytecode
1095 #   0 = do not compress,
1096 #   1 = minimal compression,
1097 #   9 = maximal compression
1098 - name: browser.cache.jsbc_compression_level
1099   type: RelaxedAtomicUint32
1100   value: 0
1101   mirror: always
1103 # Whether tooltips are enabled.
1104 - name: browser.chrome.toolbar_tips
1105   type: bool
1106   value: true
1107   mirror: always
1109 # Whether tooltips are hidden on keydown.
1110 #  0: never
1111 #  1: always
1112 #  2: only on non-modifier keys
1113 - name: browser.chrome.toolbar_tips.hide_on_keydown
1114   type: uint32_t
1115 #if defined(XP_WIN)
1116   value: 0
1117 #else
1118   value: 2
1119 #endif
1120   mirror: always
1122 - name: browser.contentblocking.database.enabled
1123   type: bool
1124   value: false
1125   mirror: always
1127 # How many recent block/unblock actions per origins we remember in the
1128 # Content Blocking log for each top-level window.
1129 - name: browser.contentblocking.originlog.length
1130   type: uint32_t
1131   value: 32
1132   mirror: always
1134 # Min font device pixel size at which to turn on high quality.
1135 - name: browser.display.auto_quality_min_font_size
1136   type: RelaxedAtomicUint32
1137   value: 20
1138   mirror: always
1140 - name: browser.display.background_color
1141   type: String
1142   value: "#FFFFFF"
1143   mirror: never
1145 - name: browser.display.background_color.dark
1146   type: String
1147   value: "#1C1B22"
1148   mirror: never
1150 # This preference is a bit confusing because we use the opposite
1151 # string value in the colors dialog to indicate to users how FF HCM
1152 # will behave.
1153 # With resect to document colors, these values mean:
1154 # 0 = "default" = always, except in high contrast mode
1155 # 1 = "always"
1156 # 2 = "never"
1158 # On windows, we set this to 0, which means FF HCM will mirror OS HCM.
1159 # Everywhere else, we set this to 1, disabling FF HCM.
1160 - name: browser.display.document_color_use
1161   type: RelaxedAtomicUint32
1162 #if defined(XP_WIN)
1163   value: 0
1164 #else
1165   value: 1
1166 #endif
1167   mirror: always
1168   rust: true
1170 # 0 = always native
1171 # 1 = never native
1172 # other = default
1173 - name: browser.display.windows.non_native_menus
1174   type: RelaxedAtomicUint32
1175   value: 2
1176   mirror: always
1177   rust: true
1179 # This pref dictates whether or not backplates and background images
1180 # are to be drawn, when in high-contrast mode:
1181 #   false: do not draw backplates or render background images
1182 #   true: render background images and draw backplates
1183 # This condition is only considered when high-contrast mode is enabled
1184 # in Firefox, ie. when the user has:
1185 #   (1) mUseAccessibilityMode set to true (Widows high-contrast mode is on)
1186 #       AND browser.display.document_color_use set to 0
1187 #       (only with high-contrast themes) OR
1188 #   (2) browser.display.document_color_use set to 2 (always)
1189 - name: browser.display.permit_backplate
1190   type: RelaxedAtomicBool
1191   value: true
1192   mirror: always
1193   rust: true
1195 # Whether we should suppress the background-image of the canvas (the root
1196 # frame) if we're in forced colors mode.
1198 # This is important because some sites use background-image with a plain color
1199 # and it causes undesirable results in high-contrast mode.
1201 # See bug 1614921 for example.
1202 - name: browser.display.suppress_canvas_background_image_on_forced_colors
1203   type: bool
1204   value: true
1205   mirror: always
1207 - name: browser.display.focus_ring_on_anything
1208   type: bool
1209   value: false
1210   mirror: always
1212 - name: browser.display.focus_ring_width
1213   type: uint32_t
1214   value: 1
1215   mirror: always
1217 - name: browser.display.focus_background_color
1218   type: String
1219   value: "#117722"
1220   mirror: never
1222 # Focus ring border style.
1223 # 0 = solid border, 1 = dotted border
1224 - name: browser.display.focus_ring_style
1225   type: uint32_t
1226   value: 1
1227   mirror: always
1229 - name: browser.display.focus_text_color
1230   type: String
1231   value: "#ffffff"
1232   mirror: never
1234 - name: browser.display.foreground_color
1235   type: String
1236   value: "#000000"
1237   mirror: never
1239 - name: browser.display.foreground_color.dark
1240   type: String
1241   value: "#FBFBFE"
1242   mirror: never
1244 # Determines the behavior of OS zoom settings.
1246 #   0: doesn't affect rendering at all
1247 #   1: affects full zoom (dpi, effectively).
1248 #   2: affects text zoom.
1250 # Default is (1): Historical behavior on Linux, matches other browsers on
1251 # Windows, and generally creates more consistent rendering.
1252 - name: browser.display.os-zoom-behavior
1253   type: RelaxedAtomicInt32
1254   value: 1
1255   mirror: always
1256   rust: true
1258 # Whether focus rings are always shown by default.
1260 # This is the initial value of nsWindowRoot::mShowFocusRings, but it can be
1261 # overridden by system preferences.
1262 - name: browser.display.show_focus_rings
1263   type: bool
1264   value: false
1265   mirror: always
1267 # Enable showing image placeholders while image is loading or when image is broken.
1268 - name: browser.display.show_image_placeholders
1269   type: bool
1270   value: true
1271   mirror: always
1273 # Whether we should always enable focus rings after focus was moved by keyboard.
1275 # This behavior matches both historical and GTK / Windows focus behavior.
1277 # :focus-visible is intended to provide better heuristics than this.
1278 - name: browser.display.always_show_rings_after_key_focus
1279   type: bool
1280   value: false
1281   mirror: always
1283 # In theory: 0 = never, 1 = quick, 2 = always, though we always just use it as
1284 # a bool!
1285 - name: browser.display.use_document_fonts
1286   type: RelaxedAtomicInt32
1287   value: 1
1288   mirror: always
1289   rust: true
1291 # font-family names for which we'll override use_document_fonts=0, and always
1292 # use the specified font.
1293 # This is to support ligature-icon fonts, which render literal strings like
1294 # "arrow_drop_down" with an icon, even when use_document_fonts is disabled.
1295 # If an author provides & uses such a font, and we decline to use it, we'll end
1296 # up rendering these literal strings where the author intended an icon, which
1297 # can cause all sorts of overlapping/unreadable content.
1298 - name: browser.display.use_document_fonts.icon_font_allowlist
1299   type: String
1300   value: >-
1301     Material Icons,
1302     Material Icons Extended,
1303     Material Icons Outlined,
1304     Material Icons Round,
1305     Material Icons Sharp,
1306     Material Icons Two Tone,
1307     Google Material Icons,
1308     Material Symbols Outlined,
1309     Material Symbols Round,
1310     Material Symbols Rounded,
1311     Material Symbols Sharp
1312   mirror: never
1314 - name: browser.display.use_focus_colors
1315   type: bool
1316   value: false
1317   mirror: always
1319 - name: browser.display.use_system_colors
1320   type: RelaxedAtomicBool
1321 #ifdef XP_WIN
1322   value: true
1323 #else
1324   value: false
1325 #endif
1326   mirror: always
1328 - name: browser.dom.window.dump.enabled
1329   type: RelaxedAtomicBool
1330   value: @IS_NOT_MOZILLA_OFFICIAL@
1331   mirror: always
1333 # See bug 1738574
1334 - name: browser.download.start_downloads_in_tmp_dir
1335   type: bool
1336   value: false
1337   mirror: always
1339 # See bug 1747343
1340 - name: browser.download.always_ask_before_handling_new_types
1341   type: bool
1342   value: false
1343   mirror: always
1345 # See bug 1731668
1346 - name: browser.download.enable_spam_prevention
1347   type: bool
1348   value: false
1349   mirror: always
1351 # See bug 1772569
1352 - name: browser.download.open_pdf_attachments_inline
1353   type: bool
1354   value: false
1355   mirror: always
1357 - name: browser.download.sanitize_non_media_extensions
1358   type: bool
1359   value: true
1360   mirror: always
1362 # Image document's automatic image sizing.
1363 - name: browser.enable_automatic_image_resizing
1364   type: bool
1365   value: true
1366   mirror: always
1368 # Image document's click-to-resize.
1369 - name: browser.enable_click_image_resizing
1370   type: bool
1371   value: @IS_NOT_ANDROID@
1372   mirror: always
1374 - name: browser.find.ignore_ruby_annotations
1375   type: bool
1376   value: true
1377   mirror: always
1379 #if defined(XP_MACOSX)
1380 # Whether pressing Esc will exit fullscreen.
1381 - name: browser.fullscreen.exit_on_escape
1382   type: bool
1383   value: true
1384   mirror: always
1385 #endif
1387 # The max url length we'll store in history.
1389 # The default value is mostly a guess based on various facts:
1391 # * IE didn't support urls longer than 2083 chars
1392 # * Sitemaps protocol used to support a maximum of 2048 chars
1393 # * Various SEO guides suggest to not go over 2000 chars
1394 # * Various apps/services are known to have issues over 2000 chars
1395 # * RFC 2616 - HTTP/1.1 suggests being cautious about depending
1396 #   on URI lengths above 255 bytes
1398 - name: browser.history.maxUrlLength
1399   type: uint32_t
1400   value: 2000
1401   mirror: always
1403 # Max size of push/replaceState data parameter
1404 - name: browser.history.maxStateObjectSize
1405   type: int32_t
1406   value: 16777216
1407   mirror: always
1409 # True to collect wireframes upon navigations / pushState
1410 - name: browser.history.collectWireframes
1411   type: bool
1412   value: false
1413   mirror: always
1415 # The minimum area for a rect to be included in a wireframe, in CSS pixels.
1417 # The current value of 50 is pretty arbitrary, and will be tuned as we refine
1418 # and test the wireframing capability.
1419 - name: browser.history.wireframeAreaThreshold
1420   type: uint32_t
1421   value: 50
1422   mirror: always
1424 #if defined(XP_WIN) || defined(XP_LINUX)
1425   # Notify TabUnloader or send the memory pressure if the memory resource
1426   # notification is signaled AND the available commit space is lower than
1427   # this value.
1428 -   name: browser.low_commit_space_threshold_mb
1429     type: RelaxedAtomicUint32
1430     value: 200
1431     mirror: always
1432 #endif
1434 #ifdef XP_LINUX
1435   # On Linux we also check available memory in comparison to total memory,
1436   # and use this percent value (out of 100) to determine if we are in a
1437   # low memory scenario.
1438 -   name: browser.low_commit_space_threshold_percent
1439     type: RelaxedAtomicUint32
1440     value: 5
1441     mirror: always
1442 #endif
1444 # Render animations and videos as a solid color
1445 - name: browser.measurement.render_anims_and_video_solid
1446   type: RelaxedAtomicBool
1447   value: false
1448   mirror: always
1450 - name: browser.navigation.requireUserInteraction
1451   type: bool
1452   value: false
1453   mirror: always
1455 # Indicates if about:newtab shows content (enabled) or just blank.
1456 - name: browser.newtabpage.enabled
1457   type: bool
1458   value: true
1459   mirror: always
1461 # Open PDFs in Edge with the --app flag if it is the default.
1462 - name: browser.pdf.launchDefaultEdgeAsApp
1463   type: bool
1464   value: true
1465   mirror: always
1467 # Maximium delay between keystrokes that will be considered typing (milliseconds).
1468 - name: browser.places.interactions.typing_timeout_ms
1469   type: RelaxedAtomicUint32
1470   value: 3000
1471   mirror: always
1473 # Maximum delay between scroll input events that will be considered a scrolling interaction (milliseconds).
1474 - name: browser.places.interactions.scrolling_timeout_ms
1475   type: RelaxedAtomicUint32
1476   value: 5000
1477   mirror: always
1479 # Number of seconds till the sponsored session is timeout.
1480 - name: browser.places.sponsoredSession.timeoutSecs
1481   type: RelaxedAtomicUint32
1482   value: 3600
1483   mirror: always
1485 # Whether to start the private browsing mode at application startup
1486 - name: browser.privatebrowsing.autostart
1487   type: bool
1488   value: false
1489   mirror: always
1491 # Force usage of in-memory (rather than file on disk) media cache for video streaming when private browsing
1492 - name: browser.privatebrowsing.forceMediaMemoryCache
1493   type: bool
1494   value: false
1495   mirror: always
1497 # Communicates the toolbar color to platform (for e.g., prefers-color-scheme).
1499 # Returns whether the toolbar is dark (0), light (1), or system (2).
1501 # Default to "light" on macOS / Windows, and "system" elsewhere. The theming
1502 # code sets it appropriately.
1503 - name: browser.theme.toolbar-theme
1504   type: RelaxedAtomicUint32
1505 #if defined(XP_WIN) || defined(XP_MACOSX)
1506   value: 1
1507 #else
1508   value: 2
1509 #endif
1510   mirror: always
1512 # Communicates the preferred content theme color to platform (for e.g.,
1513 # prefers-color-scheme).
1515 # dark (0), light (1), system (2), or toolbar (3).
1517 # Default to "toolbar", the theming code sets it appropriately.
1518 - name: browser.theme.content-theme
1519   type: RelaxedAtomicUint32
1520   value: 2
1521   mirror: always
1522   rust: true
1524 # Blocked plugin content
1525 - name: browser.safebrowsing.blockedURIs.enabled
1526   type: bool
1527   value: true
1528   mirror: always
1530 # Malware protection
1531 - name: browser.safebrowsing.malware.enabled
1532   type: bool
1533   value: true
1534   mirror: always
1536 # Password protection
1537 - name: browser.safebrowsing.passwords.enabled
1538   type: bool
1539   value: false
1540   mirror: always
1542 # Phishing protection
1543 - name: browser.safebrowsing.phishing.enabled
1544   type: bool
1545   value: true
1546   mirror: always
1548 # Maximum size for an array to store the safebrowsing prefixset.
1549 - name: browser.safebrowsing.prefixset_max_array_size
1550   type: RelaxedAtomicUint32
1551   value: 512*1024
1552   mirror: always
1554 # SessionStore prefs
1555 # Maximum number of bytes of DOMSessionStorage data we collect per origin.
1556 - name: browser.sessionstore.dom_storage_limit
1557   type: uint32_t
1558   value: 2048
1559   mirror: always
1561 # Maximum number of characters of form field data per field we collect.
1562 - name: browser.sessionstore.dom_form_limit
1563   type: uint32_t
1564   value: 1024*1024*2
1565   mirror: always
1567 # Maximum number of characters of form data we collect per origin.
1568 - name: browser.sessionstore.dom_form_max_limit
1569   type: uint32_t
1570   value: 1024*1024*50
1571   mirror: always
1573 # Minimal interval between two save operations in milliseconds (while the user is active).
1574 - name: browser.sessionstore.interval
1575   type: RelaxedAtomicUint32
1576   value: 15000
1577   mirror: always
1579 # Platform collection of data for session store
1580 - name: browser.sessionstore.platform_collection
1581   type: bool
1582 #if defined(ANDROID) || defined(MOZ_THUNDERBIRD)
1583   value: false
1584 #else
1585   value: true
1586 #endif
1587   mirror: once
1589 # Platform collection of session storage data for session store
1590 - name: browser.sessionstore.collect_session_storage
1591   type: bool
1592   value: @IS_NOT_ANDROID@
1593   mirror: once
1595 # Platform collection of zoom data for session store
1596 - name: browser.sessionstore.collect_zoom
1597   type: bool
1598   value: @IS_NOT_ANDROID@
1599   mirror: once
1601 # Causes SessionStore to ignore non-final update messages from
1602 # browser tabs that were not caused by a flush from the parent.
1603 # This is a testing flag and should not be used by end-users.
1604 - name: browser.sessionstore.debug.no_auto_updates
1605   type: RelaxedAtomicBool
1606   value: false
1607   mirror: always
1609 # Whether we should draw the tabs on top of the titlebar.
1611 # no (0), yes (1), or default (2), which is true everywhere except Linux.
1612 - name: browser.tabs.inTitlebar
1613   type: int32_t
1614   value: 2
1615   mirror: always
1617 # If set, use DocumentChannel to directly initiate loads entirely
1618 # from parent-process BrowsingContexts
1619 - name: browser.tabs.documentchannel.parent-controlled
1620   type: bool
1621   value: false
1622   mirror: always
1624 # Testing-only pref which makes data: URIs be loaded in a "web" content process
1625 # instead of within a process based on the URI's loader.
1626 - name: browser.tabs.remote.dataUriInDefaultWebProcess
1627   type: bool
1628   value: false
1629   mirror: always
1631 # Testing-only pref to force system-triggered about:blank loads to not change
1632 # content processes. This is used for performance tests which load an
1633 # about:blank document between navigations for historical reasons to avoid
1634 # unnecessary process switches.
1635 - name: browser.tabs.remote.systemTriggeredAboutBlankAnywhere
1636   type: bool
1637   value: false
1638   mirror: always
1640 # Testing-only pref to cause PBrowser creation for a specific BrowsingContext to
1641 # fail, to test the errored codepath.
1642 - name: browser.tabs.remote.testOnly.failPBrowserCreation.enabled
1643   type: bool
1644   value: false
1645   mirror: always
1647 - name: browser.tabs.remote.force-paint
1648   type: bool
1649   value: true
1650   mirror: always
1652 # When this pref is enabled document loads with a mismatched
1653 # Cross-Origin-Embedder-Policy header will fail to load
1654 - name: browser.tabs.remote.useCrossOriginEmbedderPolicy
1655   type: RelaxedAtomicBool
1656   value: true
1657   mirror: always
1659 # This pref makes `credentialless` a valid value for
1660 # Cross-Origin-Embedder-Policy header
1661 - name: browser.tabs.remote.coep.credentialless
1662   type: RelaxedAtomicBool
1663   value: @IS_NIGHTLY_BUILD@
1664   mirror: always
1665   do_not_use_directly: true
1667 # When this pref is enabled top level loads with a mismatched
1668 # Cross-Origin-Opener-Policy header will be loaded in a separate process.
1669 - name: browser.tabs.remote.useCrossOriginOpenerPolicy
1670   type: RelaxedAtomicBool
1671   value: true
1672   mirror: always
1674 # When this pref is enabled then we use a separate content process for
1675 # top-level load of file:// URIs
1676 - name: browser.tabs.remote.separateFileUriProcess
1677   type: RelaxedAtomicBool
1678 #if !defined(ANDROID)
1679   value: true
1680 #else
1681   value: false
1682 #endif
1683   mirror: always
1685 # Pref to control whether we use a separate privileged content process
1686 # for certain mozilla webpages (which are listed in the pref
1687 # browser.tabs.remote.separatedMozillaDomains).
1688 - name: browser.tabs.remote.separatePrivilegedMozillaWebContentProcess
1689   type: bool
1690   value: false
1691   mirror: always
1693 # Whether or not process selection for subframes will prefer re-using an
1694 # existing content process over creating a new one. Enabling this pref should
1695 # reduce the number of processes allocated for non-first-party domains if
1696 # dom.ipc.processCount.webIsolated > 1.
1697 - name: browser.tabs.remote.subframesPreferUsed
1698   type: bool
1699   value: true
1700   mirror: always
1702 # When this pref is enabled, opaque response is only allowed to enter the
1703 # content process if it's a response for media (audio, image, video), CSS, or
1704 # JavaScript.
1705 - name: browser.opaqueResponseBlocking
1706   type: RelaxedAtomicBool
1707 #if defined(ANDROID)
1708   value: false
1709 #else
1710   value: @IS_EARLY_BETA_OR_EARLIER@
1711 #endif
1712   mirror: always
1714 # When this pref is enabled, the JS validator will be enabled for
1715 # ORB.
1716 - name: browser.opaqueResponseBlocking.javascriptValidator
1717   type: bool
1718   value: @IS_EARLY_BETA_OR_EARLIER@
1719   mirror: always
1721 # This pref controls how filtering of opaque responses for calls to `Window.fetch`.
1722 # (and similar) is performed in the parent process. This is intended to make sure
1723 # that data that would be filtered in a content process never actually reaches that
1724 # content process.
1725 # See https://fetch.spec.whatwg.org/#concept-filtered-response-opaque
1726 #   0) Don't filter in the parent process at all, and let content processes handle
1727 #      opaque filtering. Regardless of if ORB is enabled or not. N.B. that if ORB
1728 #      is enabled opaque responses will be blocked.
1729 #   1) If ORB is enabled, in the parent process, filter the responses that ORB allows.
1730 #      N.B. any responses ORB doesn't allow will not send data to a content process
1731 #      since they will return a NetworkError. If the request is allowed by ORB, the
1732 #      internal response will be intact and sent to the content process as is.
1733 #   2) If ORB is enabled, in the parent process, filter the responses that ORB blocks,
1734 #      when they were issued by `Window.fetch` (and similar).
1735 #   3) Filter all responses in the parent, regardless of if ORB is enabled or not.
1736 #      This means that opaque responses coming from `Window.fetch` won't even be
1737 #      considered for being blocked by ORB.
1738 - name: browser.opaqueResponseBlocking.filterFetchResponse
1739   type: uint32_t
1740   value: 2
1741   mirror: always
1742   do_not_use_directly: true
1744 # This pref controls how exceptions to opaque response blocking for the media MIME types
1745 # `audio/*` and `video/*` are handled. This is because step 8 in the spec that performs
1746 # audio or video type pattern matching cannot handle certain MIME types (yet).
1747 # See https://whatpr.org/fetch/1442.html#orb-algorithm
1748 #   0) No exceptions
1749 #   1) Some exceptions, explicitly hard coded in `IsOpaqueSafeListedSpecBreakingMIMEType`
1750 #   2) Allow all MIME types beginning with `audio/*` or `video/*`.
1751 - name: browser.opaqueResponseBlocking.mediaExceptionsStrategy
1752   type: uint32_t
1753   value: 1
1754   mirror: always
1755   do_not_use_directly: true
1757 # When this pref is enabled, <object> and <embed> elements will create
1758 # synthetic documents when the resource type they're loading is an image.
1759 - name: browser.opaqueResponseBlocking.syntheticBrowsingContext
1760   type: bool
1761   value: true
1762   mirror: once
1764 # When this pref is enabled, <object> and <embed> elements will filter the
1765 # browsing contexts created for the synthetic browsing contexts for the
1766 # synthetic documents when browser.opaqueResponseBlocking.syntheticBrowsingContext
1767 # is enabled from `Window.frames`, `Window.length` and named targeting.
1768 - name: browser.opaqueResponseBlocking.syntheticBrowsingContext.filter
1769   type: bool
1770   value: true
1771   mirror: once
1772   do_not_use_directly: true
1774 # When true, zooming will be enabled on all sites, even ones that declare
1775 # user-scalable=no.
1776 - name: browser.ui.zoom.force-user-scalable
1777   type: RelaxedAtomicBool
1778   value: false
1779   mirror: always
1781 - name: browser.underline_anchors
1782   type: bool
1783   value: true
1784   mirror: always
1786 - name: browser.viewport.desktopWidth
1787   type: RelaxedAtomicInt32
1788   value: 980
1789   mirror: always
1791 - name: browser.visited_color
1792   type: String
1793   value: "#551A8B"
1794   mirror: never
1796 # If you change this, you probably also want to change
1797 # nsXPLookAndFeel::GenericDarkColor for MozNativevisitedhyperlinktext.
1798 - name: browser.visited_color.dark
1799   type: String
1800   value: "#FFADFF"
1801   mirror: never
1803 # When true, soft reloads (including location.reload())
1804 # will only froce validate the top level document, subresources will
1805 # be loaded normally as-if users normally navigated to the page.
1806 - name: browser.soft_reload.only_force_validate_top_level_document
1807   type: bool
1808   value: true
1809   mirror: always
1811 # Whether or not to save and restore zoom levels on a per-site basis.
1812 - name: browser.zoom.siteSpecific
1813   type: bool
1814   value: @IS_NOT_ANDROID@
1815   mirror: always
1817 #---------------------------------------------------------------------------
1818 # Prefs starting with "canvas."
1819 #---------------------------------------------------------------------------
1821 # Is support for CanvasRenderingContext2D's createConicGradient API enabled?
1822 - name: canvas.createConicGradient.enabled
1823   type: RelaxedAtomicBool
1824   value: true
1825   mirror: always
1827 #---------------------------------------------------------------------------
1828 # Prefs starting with "channelclassifier."
1829 #---------------------------------------------------------------------------
1831 - name: channelclassifier.allowlist_example
1832   type: bool
1833   value: false
1834   mirror: always
1836 #---------------------------------------------------------------------------
1837 # Prefs starting with "clipboard."
1838 #---------------------------------------------------------------------------
1840 # Clipboard behavior.
1841 - name: clipboard.autocopy
1842   type: bool
1843 #if !defined(ANDROID) && !defined(XP_MACOSX) && defined(XP_UNIX)
1844   value: true
1845 #else
1846   value: false
1847 #endif
1848   mirror: always
1850 #ifdef XP_WIN
1851   # allow to copy clipboard data to Clipboard History/Cloud
1852   # (used on sensitive data in about:logins and Private Browsing)
1853 -   name: clipboard.copyPrivateDataToClipboardCloudOrHistory
1854     type: bool
1855     value: false
1856     mirror: always
1857 #endif
1859 #---------------------------------------------------------------------------
1860 # Prefs starting with "consoleservice."
1861 #---------------------------------------------------------------------------
1863 #if defined(ANDROID)
1864   # Disable sending console to logcat on release builds.
1865 -   name: consoleservice.logcat
1866     type: RelaxedAtomicBool
1867     value: @IS_NOT_RELEASE_OR_BETA@
1868     mirror: always
1869 #endif
1871 #---------------------------------------------------------------------------
1872 # Prefs starting with "content."
1873 #---------------------------------------------------------------------------
1875 - name: content.cors.disable
1876   type: bool
1877   value: false
1878   mirror: always
1880 # Back off timer notification after count.
1881 # -1 means never.
1882 - name: content.notify.backoffcount
1883   type: int32_t
1884   value: -1
1885   mirror: always
1887 # Notification interval in microseconds.
1888 # The notification interval has a dramatic effect on how long it takes to
1889 # initially display content for slow connections. The current value
1890 # provides good incremental display of content without causing an increase
1891 # in page load time. If this value is set below 1/10 of a second it starts
1892 # to impact page load performance.
1893 # See bugzilla bug 72138 for more info.
1894 - name: content.notify.interval
1895   type: int32_t
1896   value: 120000
1897   mirror: always
1899 # Do we notify based on time?
1900 - name: content.notify.ontimer
1901   type: bool
1902   value: true
1903   mirror: always
1905 # How many times to deflect in interactive mode.
1906 - name: content.sink.interactive_deflect_count
1907   type: int32_t
1908   value: 0
1909   mirror: always
1911 # How many times to deflect in perf mode.
1912 - name: content.sink.perf_deflect_count
1913   type: int32_t
1914   value: 200
1915   mirror: always
1917 # Parse mode for handling pending events.
1918 # 0 = don't check for pending events
1919 # 1 = don't deflect if there are pending events
1920 # 2 = bail if there are pending events
1921 - name: content.sink.pending_event_mode
1922   type: int32_t
1923 #ifdef XP_WIN
1924   value: 1
1925 #else
1926   value: 0
1927 #endif
1928   mirror: always
1930 # How often to probe for pending events. 1 = every token.
1931 - name: content.sink.event_probe_rate
1932   type: int32_t
1933   value: 1
1934   mirror: always
1936 # How long to stay off the event loop in interactive mode (microseconds).
1937 - name: content.sink.interactive_parse_time
1938   type: int32_t
1939   value: 3000
1940   mirror: always
1942 # How long to stay off the event loop in perf mode.
1943 - name: content.sink.perf_parse_time
1944   type: int32_t
1945   value: 30000
1946   mirror: always
1948 #  How long to be in interactive mode after an event.
1949 - name: content.sink.interactive_time
1950   type: uint32_t
1951   value: 750000
1952   mirror: always
1954 # How long to stay in perf mode after initial loading.
1955 - name: content.sink.initial_perf_time
1956   type: uint32_t
1957   value: 2000000
1958   mirror: always
1960 # Should we switch between perf-mode and interactive-mode?
1961 # 0 = Switch
1962 # 1 = Interactive mode
1963 # 2 = Perf mode
1964 - name: content.sink.enable_perf_mode
1965   type: int32_t
1966   value: 0
1967   mirror: always
1969 #---------------------------------------------------------------------------
1970 # Prefs starting with "converter."
1971 #---------------------------------------------------------------------------
1973 # Whether we include ruby annotation in the text despite whether it
1974 # is requested. This was true because we didn't explicitly strip out
1975 # annotations. Set false by default to provide a better behavior, but
1976 # we want to be able to pref-off it if user doesn't like it.
1977 - name: converter.html2txt.always_include_ruby
1978   type: bool
1979   value: false
1980   mirror: always
1982 #---------------------------------------------------------------------------
1983 # Prefs starting with "cookiebanners."
1984 #---------------------------------------------------------------------------
1986 # Controls the cookie banner handling mode in normal browsing.
1987 # 0: Disables all cookie banner handling.
1988 # 1: Reject-all if possible, otherwise do nothing.
1989 # 2: Reject-all if possible, otherwise accept-all.
1990 - name: cookiebanners.service.mode
1991   type: uint32_t
1992   value: 0
1993   mirror: always
1995 # When set to true, cookie banners are detected and detection events are
1996 # dispatched, but they will not be handled. Requires the service to be enabled
1997 # for the desired mode via pref cookiebanners.service.mode*
1998 - name: cookiebanners.service.detectOnly
1999   type: bool
2000   value: false
2001   mirror: always
2003 # Controls the cookie banner handling mode in private browsing. Same mode
2004 # options as the normal browsing pref above.
2005 - name: cookiebanners.service.mode.privateBrowsing
2006   type: uint32_t
2007   value: 0
2008   mirror: always
2010 # Enables use of global CookieBannerRules, which apply to all sites. This is
2011 # used for click rules that can handle common Consent Management Providers
2012 # (CMP).
2013 # Enabling this (when the cookie handling feature is enabled) may negatively
2014 # impact site performance since it requires us to run rule-defined query
2015 # selectors for every page.
2016 - name: cookiebanners.service.enableGlobalRules
2017   type: bool
2018   value: false
2019   mirror: always
2021 # Enables the cookie banner cookie injector. The cookie banner cookie injector
2022 # depends on the `cookiebanners.service.mode` pref above.
2023 - name: cookiebanners.cookieInjector.enabled
2024   type: bool
2025   value: true
2026   mirror: always
2029 # By default, how many seconds in the future cookies should expire after they
2030 # have been injected. Defaults to 12 months. Individual cookie rules may
2031 # override this.
2032 - name: cookiebanners.cookieInjector.defaultExpiryRelative
2033   type: uint32_t
2034   value: 31536000
2035   mirror: always
2037 # Enables the cookie banner auto clicking. The cookie banner auto clicking
2038 # depends on the `cookiebanners.service.mode` pref above.
2039 - name: cookiebanners.bannerClicking.enabled
2040   type: bool
2041   value: true
2042   mirror: always
2044 # The maximum time in ms for detecting banner and button elements for cookie
2045 # banner auto clicking.
2046 - name: cookiebanners.bannerClicking.timeout
2047   type: uint32_t
2048   value: 3000
2049   mirror: always
2051 # Whether or not banner auto clicking test mode is enabled.
2052 - name: cookiebanners.bannerClicking.testing
2053   type: bool
2054   value: false
2055   mirror: always
2057 #---------------------------------------------------------------------------
2058 # Prefs starting with "datareporting."
2059 #---------------------------------------------------------------------------
2061 - name: datareporting.healthreport.uploadEnabled
2062   type: RelaxedAtomicBool
2063   value: false
2064   mirror: always
2065   rust: true
2067 #---------------------------------------------------------------------------
2068 # Prefs starting with "device."
2069 #---------------------------------------------------------------------------
2071 # Is support for the device sensors API enabled?
2072 - name: device.sensors.enabled
2073   type: bool
2074   value: true
2075   mirror: always
2077 # KaiOS-only, see https://bugzilla.mozilla.org/show_bug.cgi?id=1699707#c10
2078 - name: device.sensors.ambientLight.enabled
2079   type: bool
2080   value: false
2081   mirror: always
2083 - name: device.sensors.motion.enabled
2084   type: bool
2085   value: true
2086   mirror: always
2088 - name: device.sensors.orientation.enabled
2089   type: bool
2090   value: true
2091   mirror: always
2093 # KaiOS-only, see https://bugzilla.mozilla.org/show_bug.cgi?id=1699707#c10
2094 - name: device.sensors.proximity.enabled
2095   type: bool
2096   value: false
2097   mirror: always
2099 - name: device.sensors.test.events
2100   type: bool
2101   value: false
2102   mirror: always
2104 #---------------------------------------------------------------------------
2105 # Prefs starting with "devtools."
2106 #---------------------------------------------------------------------------
2108 - name: devtools.console.stdout.chrome
2109   type: RelaxedAtomicBool
2110   value: @IS_NOT_MOZILLA_OFFICIAL@
2111   mirror: always
2113 - name: devtools.console.stdout.content
2114   type: RelaxedAtomicBool
2115   value: false
2116   mirror: always
2118 - name: devtools.toolbox.force-chrome-prefs
2119   type: RelaxedAtomicBool
2120   value: true
2121   mirror: always
2123 #---------------------------------------------------------------------------
2124 # Prefs starting with "docshell."
2125 #---------------------------------------------------------------------------
2127 # Used to indicate whether session history listeners should be notified
2128 # about content viewer eviction. Used only for testing.
2129 - name: docshell.shistory.testing.bfevict
2130   type: bool
2131   value: false
2132   mirror: always
2134 # If true, pages with an opener won't be bfcached.
2135 - name: docshell.shistory.bfcache.require_no_opener
2136   type: bool
2137   value: @IS_ANDROID@
2138   mirror: always
2140 # If true, page with beforeunload or unload event listeners can be bfcached.
2141 - name: docshell.shistory.bfcache.allow_unload_listeners
2142   type: bool
2143   value: @IS_ANDROID@
2144   mirror: always
2146 # If true, page with beforeunload event listeners can be bfcached.
2147 # This only works when sessionHistoryInParent is enabled.
2148 - name: docshell.shistory.bfcache.ship_allow_beforeunload_listeners
2149   type: bool
2150   value: true
2151   mirror: always
2153 #---------------------------------------------------------------------------
2154 # Prefs starting with "dom."
2155 #---------------------------------------------------------------------------
2157 # Allow cut/copy
2158 - name: dom.allow_cut_copy
2159   type: bool
2160   value: true
2161   mirror: always
2163 # Checks if offscreen animation throttling is enabled.
2164 - name: dom.animations.offscreen-throttling
2165   type: bool
2166   value: true
2167   mirror: always
2169 # Is support for automatically removing replaced filling animations enabled?
2170 - name: dom.animations-api.autoremove.enabled
2171   type: bool
2172   value: true
2173   mirror: always
2175 # Is support for composite operations from the Web Animations API enabled?
2176 - name: dom.animations-api.compositing.enabled
2177   type: bool
2178   value: true
2179   mirror: always
2181 # Is support for the core interfaces of Web Animations API enabled?
2182 - name: dom.animations-api.core.enabled
2183   type: bool
2184   value: true
2185   mirror: always
2187 # Is support for Document.getAnimations() and Element.getAnimations()
2188 # supported?
2189 - name: dom.animations-api.getAnimations.enabled
2190   type: bool
2191   value: true
2192   mirror: always
2194 # Is support for animations from the Web Animations API without 0%/100%
2195 # keyframes enabled?
2196 - name: dom.animations-api.implicit-keyframes.enabled
2197   type: bool
2198   value: true
2199   mirror: always
2201 # Is support for timelines from the Web Animations API enabled?
2202 - name: dom.animations-api.timelines.enabled
2203   type: bool
2204   value: true
2205   mirror: always
2207 # Synchronize transform animations with geometric animations on the
2208 # main thread.
2209 - name: dom.animations.mainthread-synchronization-with-geometric-animations
2210   type: bool
2211   value: @IS_NOT_NIGHTLY_BUILD@
2212   mirror: always
2214 # Is support for Navigator.getBattery enabled?
2215 - name: dom.battery.enabled
2216   type: bool
2217   value: true
2218   mirror: always
2220 # Block multiple external protocol URLs in iframes per single event.
2221 - name: dom.block_external_protocol_in_iframes
2222   type: bool
2223   value: true
2224   mirror: always
2226 # Block sandboxed BrowsingContexts from navigating to external protocols.
2227 - name: dom.block_external_protocol_navigation_from_sandbox
2228   type: bool
2229   value: true
2230   mirror: always
2232 # Block Insecure downloads from Secure Origins
2233 - name: dom.block_download_insecure
2234   type: bool
2235   value: true
2236   mirror: always
2238 # Block multiple window.open() per single event.
2239 - name: dom.block_multiple_popups
2240   type: bool
2241   value: true
2242   mirror: always
2244 # The maximum number of popup that is allowed to be opened. Set to -1 for no
2245 # limit.
2246 - name: dom.popup_maximum
2247   type: int32_t
2248   value: 20
2249   mirror: always
2251 # Whether window.location.reload() and window.history.go(0) should be blocked
2252 # when called directly from a window resize event handler.
2254 # This used to be necessary long ago to prevent terrible UX when using stuff
2255 # like TypeAheadFind (bug 258917), but it also causes compat issues on mobile
2256 # (bug 1570566).
2257 - name: dom.block_reload_from_resize_event_handler
2258   type: bool
2259   value: false
2260   mirror: always
2262 # Exposes window.caches and skips SecureContext check.
2263 # dom.serviceWorkers.testing.enabled also includes the same effect.
2264 - name: dom.caches.testing.enabled
2265   type: RelaxedAtomicBool
2266   value: false
2267   mirror: always
2269 # Disable capture attribute for input elements; only supported on GeckoView.
2270 - name: dom.capture.enabled
2271   type: bool
2272   value: false
2273   mirror: always
2275 # HTML specification says the level should be 5
2276 # https://html.spec.whatwg.org/#timer-initialisation-steps
2277 - name: dom.clamp.timeout.nesting.level
2278   type: uint32_t
2279   value: 5
2280   mirror: once
2282 # Disable custom highlight API; implementation pending.
2283 - name: dom.customHighlightAPI.enabled
2284   type: RelaxedAtomicBool
2285   value: @IS_NIGHTLY_BUILD@
2286   mirror: always
2287   rust: true
2289 # Allow control characters appear in composition string.
2290 # When this is false, control characters except
2291 # CHARACTER TABULATION (horizontal tab) are removed from
2292 # both composition string and data attribute of compositionupdate
2293 # and compositionend events.
2294 - name: dom.compositionevent.allow_control_characters
2295   type: bool
2296   value: false
2297   mirror: always
2299 # Compression Streams (CompressionStream/DecompressionStream)
2300 - name: dom.compression_streams.enabled
2301   type: RelaxedAtomicBool
2302   value: true
2303   mirror: always
2305 # Is support for CSSPseudoElement enabled?
2306 - name: dom.css_pseudo_element.enabled
2307   type: bool
2308   value: false
2309   mirror: always
2311 # After how many seconds we allow external protocol URLs in iframe when not in
2312 # single events
2313 - name: dom.delay.block_external_protocol_in_iframes
2314   type: uint32_t
2315   value: 10   # in seconds
2316   mirror: always
2318 # Whether the above pref has any effect at all.
2319 # Make sure cases like bug 1795380 work before trying to turn this off. See
2320 # bug 1680721 for some other context that might be relevant.
2321 - name: dom.delay.block_external_protocol_in_iframes.enabled
2322   type: bool
2323   value: true
2324   mirror: always
2326 # Only propagate the open window click permission if the setTimeout() is equal
2327 # to or less than this value.
2328 - name: dom.disable_open_click_delay
2329   type: int32_t
2330   value: 1000
2331   mirror: always
2333 - name: dom.disable_open_during_load
2334   type: bool
2335   value: false
2336   mirror: always
2338 - name: dom.disable_beforeunload
2339   type: bool
2340   value: false
2341   mirror: always
2343 - name: dom.require_user_interaction_for_beforeunload
2344   type: bool
2345   value: true
2346   mirror: always
2348 # Enable/disable Gecko specific edit commands
2349 - name: dom.document.edit_command.contentReadOnly.enabled
2350   type: bool
2351   value: @IS_NOT_EARLY_BETA_OR_EARLIER@
2352   mirror: always
2354 - name: dom.document.edit_command.insertBrOnReturn.enabled
2355   type: bool
2356   value: @IS_NOT_EARLY_BETA_OR_EARLIER@
2357   mirror: always
2359 # If set this to true, `Document.execCommand` may be performed nestedly.
2360 # Otherwise, nested calls just return false.
2361 - name: dom.document.exec_command.nested_calls_allowed
2362   type: bool
2363   value: false
2364   mirror: always
2366 - name: dom.enable_window_print
2367   type: bool
2368   value: true
2369   mirror: always
2371 # Only intended for fuzzing purposes, this will break mozPrintCallback, etc.
2372 - name: dom.window_print.fuzzing.block_while_printing
2373   type: bool
2374   value: false
2375   mirror: always
2377 - name: dom.element.transform-getters.enabled
2378   type: bool
2379   value: false
2380   mirror: always
2382 # Whether the popover attribute implementation is enabled,
2383 # see https://html.spec.whatwg.org/#the-popover-attribute
2384 - name: dom.element.popover.enabled
2385   type: RelaxedAtomicBool
2386   value: false
2387   mirror: always
2388   rust: true
2390 # Controls whether the "focus fixup rule" is enabled. Subject to minor changes
2391 # based on https://github.com/whatwg/html/pull/8392 and
2392 # https://github.com/whatwg/html/issues/8225
2393 - name: dom.focus.fixup
2394   type: bool
2395   value: true
2396   mirror: always
2398 - name: dom.mouse_capture.enabled
2399   type: bool
2400   value: true
2401   mirror: always
2403 # Is support for Performance.mozMemory enabled?
2404 - name: dom.enable_memory_stats
2405   type: bool
2406   value: false
2407   mirror: always
2409 # Enable Performance API
2410 # Whether nonzero values can be returned from performance.timing.*
2411 - name: dom.enable_performance
2412   type: RelaxedAtomicBool
2413   value: true
2414   mirror: always
2416 # Enable Performance Observer API
2417 - name: dom.enable_performance_observer
2418   type: RelaxedAtomicBool
2419   value: true
2420   mirror: always
2422 # Whether resource timing will be gathered and returned by performance.GetEntries*
2423 - name: dom.enable_resource_timing
2424   type: bool
2425   value: true
2426   mirror: always
2428 # Whether event timing will be gathered and returned by performance observer*
2429 - name: dom.enable_event_timing
2430   type: RelaxedAtomicBool
2431   value: true
2432   mirror: always
2434 # Whether the LargestContentfulPaint API will be gathered and returned by performance observer*
2435 - name: dom.enable_largest_contentful_paint
2436   type: RelaxedAtomicBool
2437   value: false
2438   mirror: always
2440 # Whether performance.GetEntries* will contain an entry for the active document
2441 - name: dom.enable_performance_navigation_timing
2442   type: bool
2443   value: true
2444   mirror: always
2446 # Whether the scheduler interface will be exposed
2447 - name: dom.enable_web_task_scheduling
2448   type: RelaxedAtomicBool
2449   value: @IS_NIGHTLY_BUILD@
2450   mirror: always
2452 # If this is true, it's allowed to fire "cut", "copy" and "paste" events.
2453 # Additionally, "input" events may expose clipboard content when inputType
2454 # is "insertFromPaste" or something.
2455 - name: dom.event.clipboardevents.enabled
2456   type: bool
2457   value: true
2458   mirror: always
2460 # Whether Shift+Right click force-opens the context menu
2461 - name: dom.event.contextmenu.shift_suppresses_event
2462   type: bool
2463   value: true
2464   mirror: always
2466 # Whether wheel listeners are passive by default.
2467 - name: dom.event.default_to_passive_wheel_listeners
2468   type: bool
2469   value: true
2470   mirror: always
2472 - name: dom.event.dragexit.enabled
2473   type: bool
2474   value: @IS_NOT_NIGHTLY_BUILD@
2475   mirror: always
2477 # If this pref is set to true, typing a surrogate pair causes one `keypress`
2478 # event whose `charCode` stores the unicode code point over 0xFFFF.  This is
2479 # compatible with Safari and Chrome in non-Windows platforms.
2480 # Otherwise, typing a surrogate pair causes two `keypress` events.  This is
2481 # compatible with legacy web apps which does
2482 # `String.fromCharCode(event.charCode)`.
2483 - name: dom.event.keypress.dispatch_once_per_surrogate_pair
2484   type: bool
2485   value: false
2486   mirror: always
2488 # This is meaningful only when `dispatch_once_per_surrogate_pair` is false.
2489 # If this pref is set to true, `.key` of the first `keypress` is set to the
2490 # high-surrogate and `.key` of the other is set to the low-surrogate.
2491 # Therefore, setting this exposing ill-formed UTF-16 string with `.key`.
2492 # (And also `InputEvent.data` if pressed in an editable element.)
2493 # Otherwise, `.key` of the first `keypress` is set to the surrogate pair, and
2494 # `.key` of the second `keypress` is set to the empty string.
2495 - name: dom.event.keypress.key.allow_lone_surrogate
2496   type: bool
2497   value: @IS_NOT_EARLY_BETA_OR_EARLIER@
2498   mirror: always
2500 # Whether wheel event target's should be grouped. When enabled, all wheel
2501 # events that occur in a given wheel transaction have the same event target.
2502 - name: dom.event.wheel-event-groups.enabled
2503   type: bool
2504   value: true
2505   mirror: always
2507 # Whether WheelEvent should return pixels instead of lines for
2508 # WheelEvent.deltaX/Y/Z, when deltaMode hasn't been checked.
2510 # Other browsers don't use line deltas and websites forget to check for it, see
2511 # bug 1392460.
2512 - name: dom.event.wheel-deltaMode-lines.disabled
2513   type: bool
2514   value: true
2515   mirror: always
2517 # Mostly for debugging. Whether we should do the same as
2518 # dom.event.wheel-deltaMode-lines.disabled, but unconditionally rather than
2519 # only when deltaMode hasn't been checked.
2520 - name: dom.event.wheel-deltaMode-lines.always-disabled
2521   type: bool
2522   value: false
2523   mirror: always
2525 # A blocklist (list of domains) for the
2526 # dom.event.wheel-deltaMode-lines.disabled behavior, in case potential
2527 # unforeseen problems with it arrive.
2528 - name: dom.event.wheel-deltaMode-lines.always-enabled
2529   type: String
2530   value: ""
2531   mirror: never
2533 #if defined(XP_MACOSX)
2534 # Whether to disable treating ctrl click as right click
2535 - name: dom.event.treat_ctrl_click_as_right_click.disabled
2536   type: bool
2537   value: @IS_NIGHTLY_BUILD@
2538   mirror: always
2539 #endif
2541 # Whether .offset{X,Y} for events targeted at SVG nodes returns bounds relative
2542 # to the outer SVG.
2543 - name: dom.events.offset-in-svg-relative-to-svg-root
2544   type: bool
2545   value: true
2546   mirror: always
2548 # Disable clipboard.read(), clipboard.write() and ClipboardItem by default
2549 - name: dom.events.asyncClipboard.clipboardItem
2550   type: bool
2551   value: false
2552   mirror: always
2554 # Skips checking permission and user activation when accessing the clipboard.
2555 # Should only be enabled in tests.
2556 # Access with Clipboard::IsTestingPrefEnabled().
2557 - name: dom.events.testing.asyncClipboard
2558   type: bool
2559   value: false
2560   mirror: always
2561   do_not_use_directly: true
2563 # Control whether `navigator.clipboard.readText()` is exposed to content.
2564 # Currently not supported by GeckoView, see bug 1776829.
2565 - name: dom.events.asyncClipboard.readText
2566   type: bool
2567   value: false
2568   mirror: always
2569   do_not_use_directly: true
2571 # Guard for bug 1731504, in case fix breaks more websites
2572 # If true, event is first captured then bubbled on target element
2573 - name: dom.events.phases.correctOrderOnTarget
2574   type: RelaxedAtomicBool
2575   value: @IS_NIGHTLY_BUILD@
2576   mirror: always
2578 # This pref controls whether or not the `protected` dataTransfer state is
2579 # enabled. If the `protected` dataTransfer stae is disabled, then the
2580 # DataTransfer will be read-only whenever it should be protected, and will not
2581 # be disconnected after a drag event is completed.
2582 - name: dom.events.dataTransfer.protected.enabled
2583   type: bool
2584   value: false
2585   mirror: always
2587 # Whether to hide normal files (i.e. non-images) in dataTransfer inside
2588 # the content process.
2589 - name: dom.events.dataTransfer.mozFile.enabled
2590   type: bool
2591   value: true
2592   mirror: always
2594 - name: dom.events.dataTransfer.imageAsFile.enabled
2595   type: bool
2596   value: false
2597   mirror: always
2599 # User interaction timer interval, in ms
2600 - name: dom.events.user_interaction_interval
2601   type: uint32_t
2602   value: 5000
2603   mirror: always
2605 # Whether to try to compress touchmove events on IPC layer.
2606 - name: dom.events.compress.touchmove
2607   type: bool
2608   value: true
2609   mirror: always
2611 # In addition to the above IPC layer compresison, allow touchmove
2612 # events to be further coalesced in the child side after they
2613 # are sent.
2614 - name: dom.events.coalesce.touchmove
2615   type: bool
2616   value: true
2617   mirror: always
2619 # Allow mousemove events to be coalesced in the child side after they are sent.
2620 - name: dom.events.coalesce.mousemove
2621   type: bool
2622   value: true
2623   mirror: always
2625 # Whether to expose test interfaces of various sorts
2626 - name: dom.expose_test_interfaces
2627   type: bool
2628   value: false
2629   mirror: always
2631 - name: dom.fetchObserver.enabled
2632   type: RelaxedAtomicBool
2633   value: false
2634   mirror: always
2636 # Allow the content process to create a File from a path. This is allowed just
2637 # on parent process, on 'file' Content process, or for testing.
2638 - name: dom.file.createInChild
2639   type: RelaxedAtomicBool
2640   value: false
2641   mirror: always
2643 # Support @autocomplete values for form autofill feature.
2644 - name: dom.forms.autocomplete.formautofill
2645   type: bool
2646   value: false
2647   mirror: always
2649 # Only trusted submit event could trigger form submission.
2650 - name: dom.forms.submit.trusted_event_only
2651   type: bool
2652   value: false
2653   mirror: always
2655 # This pref just controls whether we format the number with grouping separator
2656 # characters when the internal value is set or updated. It does not stop the
2657 # user from typing in a number and using grouping separators.
2658 - name: dom.forms.number.grouping
2659   type: bool
2660   value: false
2661   mirror: always
2663 # Whether the Gamepad API is enabled
2664 - name: dom.gamepad.enabled
2665   type: bool
2666   value: true
2667   mirror: always
2669 # Is Gamepad Extension API enabled?
2670 - name: dom.gamepad.extensions.enabled
2671   type: bool
2672   value: true
2673   mirror: always
2675 # Is LightIndicator API enabled in Gamepad Extension API?
2676 - name: dom.gamepad.extensions.lightindicator
2677   type: bool
2678   value: false
2679   mirror: always
2681 # Is MultiTouch API enabled in Gamepad Extension API?
2682 - name: dom.gamepad.extensions.multitouch
2683   type: bool
2684   value: false
2685   mirror: always
2687 # Is Gamepad vibrate haptic feedback function enabled?
2688 - name: dom.gamepad.haptic_feedback.enabled
2689   type: bool
2690   value: true
2691   mirror: always
2693 - name: dom.gamepad.non_standard_events.enabled
2694   type: bool
2695   value: @IS_NOT_RELEASE_OR_BETA@
2696   mirror: always
2698 - name: dom.gamepad.test.enabled
2699   type: RelaxedAtomicBool
2700   value: false
2701   mirror: always
2703 # W3C draft ImageCapture API
2704 - name: dom.imagecapture.enabled
2705   type: bool
2706   value: false
2707   mirror: always
2709 # <img loading="lazy">
2711 # See https://github.com/whatwg/html/pull/3752
2712 - name: dom.image-lazy-loading.enabled
2713   type: RelaxedAtomicBool
2714   value: true
2715   mirror: always
2717 # The root margin for image lazy loading, defined as four (value, percentage)
2718 # pairs.
2719 - name: dom.image-lazy-loading.root-margin.top
2720   type: float
2721   value: 600
2722   mirror: always
2724 - name: dom.image-lazy-loading.root-margin.top.percentage
2725   type: bool
2726   value: false
2727   mirror: always
2729 - name: dom.image-lazy-loading.root-margin.bottom
2730   type: float
2731   value: 600
2732   mirror: always
2734 - name: dom.image-lazy-loading.root-margin.bottom.percentage
2735   type: bool
2736   value: false
2737   mirror: always
2739 - name: dom.image-lazy-loading.root-margin.left
2740   type: float
2741   value: 600
2742   mirror: always
2744 - name: dom.image-lazy-loading.root-margin.left.percentage
2745   type: bool
2746   value: false
2747   mirror: always
2749 - name: dom.image-lazy-loading.root-margin.right
2750   type: float
2751   value: 600
2752   mirror: always
2754 - name: dom.image-lazy-loading.root-margin.right.percentage
2755   type: bool
2756   value: false
2757   mirror: always
2759 # Enable indexedDB in private browsing mode with encryption
2760 - name: dom.indexedDB.privateBrowsing.enabled
2761   type: RelaxedAtomicBool
2762   value: true
2763   mirror: always
2765 # Whether or not indexedDB test mode is enabled.
2766 - name: dom.indexedDB.testing
2767   type: RelaxedAtomicBool
2768   value: false
2769   mirror: always
2771 # Whether or not indexedDB experimental features are enabled.
2772 - name: dom.indexedDB.experimental
2773   type: RelaxedAtomicBool
2774   value: false
2775   mirror: always
2777 # Whether or not indexedDB preprocessing is enabled.
2778 - name: dom.indexedDB.preprocessing
2779   type: RelaxedAtomicBool
2780   value: false
2781   mirror: always
2783 # Whether innerWidth / innerHeight return rounded or fractional sizes.
2785 # NOTE(emilio): Fractional sizes are not web-compatible, see the regressions
2786 # from bug 1676843, but we want to expose the fractional sizes (probably in
2787 # another API) one way or another, see [1], so we're keeping the code for the
2788 # time being.
2790 # [1]: https://github.com/w3c/csswg-drafts/issues/5260
2791 - name: dom.innerSize.rounded
2792   type: bool
2793   value: true
2794   mirror: always
2796 # Whether we conform to Input Events Level 1 or Input Events Level 2.
2797 # true:  conforming to Level 1
2798 # false: conforming to Level 2
2799 - name: dom.input_events.conform_to_level_1
2800   type: bool
2801   value: true
2802   mirror: always
2804 # Whether we allow BrowsingContextGroup to suspend input events
2805 - name: dom.input_events.canSuspendInBCG.enabled
2806   type: bool
2807   value: false
2808   mirror: always
2810 # The maximum time (milliseconds) we reserve for handling input events in each
2811 # frame.
2812 - name: dom.input_event_queue.duration.max
2813   type: uint32_t
2814   value: 8
2815   mirror: always
2817 # Enable not moving the cursor to end when a text input or textarea has .value
2818 # set to the value it already has.  By default, enabled.
2819 - name: dom.input.skip_cursor_move_for_same_value_set
2820   type: bool
2821   value: true
2822   mirror: always
2824 # How often to check for CPOW timeouts (ms). CPOWs are only timed
2825 # out by the hang monitor.
2826 - name: dom.ipc.cpow.timeout
2827   type: uint32_t
2828   value: 500
2829   mirror: always
2831 #ifdef MOZ_ENABLE_FORKSERVER
2832 - name: dom.ipc.forkserver.enable
2833   type: bool
2834   value: false
2835   mirror: once
2836 #endif
2838 #ifdef MOZ_WIDGET_GTK
2840 # Avoid the use of GTK in content processes if possible, by running
2841 # them in headless mode, to conserve resources (e.g., connections to
2842 # the X server).  See the usage in `ContentParent.cpp` for the full
2843 # definition of "if possible".
2845 # This does not affect sandbox policies; content processes may still
2846 # dynamically connect to the display server for, e.g., WebGL.
2847 - name: dom.ipc.avoid-gtk
2848   type: bool
2849   value: true
2850   mirror: always
2851 #endif
2853 # Whether or not to collect a paired minidump when force-killing a
2854 # content process.
2855 - name: dom.ipc.tabs.createKillHardCrashReports
2856   type: bool
2857   value: @IS_NOT_RELEASE_OR_BETA@
2858   mirror: once
2860 # Enable e10s hang monitoring (slow script checking and plugin hang detection).
2861 - name: dom.ipc.processHangMonitor
2862   type: bool
2863   value: true
2864   mirror: once
2866 # Whether we report such process hangs
2867 - name: dom.ipc.reportProcessHangs
2868   type: RelaxedAtomicBool
2869 # Don't report hangs in DEBUG builds. They're too slow and often a
2870 # debugger is attached.
2871 #ifdef DEBUG
2872   value: false
2873 #else
2874   value: true
2875 #endif
2876   mirror: always
2878 # Process launch delay (in milliseconds).
2879 - name: dom.ipc.processPrelaunch.delayMs
2880   type: uint32_t
2881 # This number is fairly arbitrary ... the intention is to put off
2882 # launching another app process until the last one has finished
2883 # loading its content, to reduce CPU/memory/IO contention.
2884   value: 1000
2885   mirror: always
2887 - name: dom.ipc.processPrelaunch.startupDelayMs
2888   type: uint32_t
2889 # delay starting content processes for a short time after browser start
2890 # to provide time for the UI to come up
2891   value: 1000
2892   mirror: always
2894 # Process preallocation cache
2895 # Only used in fission; in e10s we use 1 always
2896 - name: dom.ipc.processPrelaunch.fission.number
2897   type: uint32_t
2898   value: 3
2899   mirror: always
2901 # Limit preallocated processes below this memory size (in MB)
2902 - name: dom.ipc.processPrelaunch.lowmem_mb
2903   type: uint32_t
2904   value: 4096
2905   mirror: always
2907 - name: dom.ipc.processPriorityManager.enabled
2908   type: bool
2909   value: false
2910   mirror: always
2912 - name: dom.ipc.processPriorityManager.testMode
2913   type: bool
2914   value: false
2915   mirror: always
2917 - name: dom.ipc.processPriorityManager.backgroundPerceivableGracePeriodMS
2918   type: uint32_t
2919 #if defined(MOZ_WIDGET_ANDROID) && defined(NIGHTLY_BUILD)
2920   value: 3000
2921 #else
2922   value: 0
2923 #endif
2924   mirror: always
2926 - name: dom.ipc.processPriorityManager.backgroundGracePeriodMS
2927   type: uint32_t
2928 #if defined(MOZ_WIDGET_ANDROID) && defined(NIGHTLY_BUILD)
2929   value: 3000
2930 #else
2931   value: 0
2932 #endif
2933   mirror: always
2935 #ifdef XP_WIN
2936 - name: dom.ipc.processPriorityManager.backgroundUsesEcoQoS
2937   type: bool
2938   value: false
2939   mirror: always
2940 #endif
2942 # Is support for HTMLElement.autocapitalize enabled?
2943 - name: dom.forms.autocapitalize
2944   type: bool
2945   value: true
2946   mirror: always
2948 # Support for input type=month, type=week. By default, disabled.
2949 - name: dom.forms.datetime.others
2950   type: bool
2951   value: @IS_ANDROID@
2952   mirror: always
2954 # Is support for HTMLElement.inputMode enabled?
2955 - name: dom.forms.inputmode
2956   type: bool
2957   value: true
2958   mirror: always
2960 - name: dom.forms.always_allow_pointer_events.enabled
2961   type: bool
2962   value: @IS_NIGHTLY_BUILD@
2963   mirror: always
2965 # Is support for key events and focus events on disabled elements enabled?
2966 - name: dom.forms.always_allow_key_and_focus_events.enabled
2967   type: bool
2968   value: @IS_NIGHTLY_BUILD@
2969   mirror: always
2971 # Whether to disable only the descendants or the parent fieldset element too
2972 # Note that this still allows it to be selected by `:disable`.
2973 - name: dom.forms.fieldset_disable_only_descendants.enabled
2974   type: bool
2975   value: @IS_NIGHTLY_BUILD@
2976   mirror: always
2978 # Whether to allow or disallow web apps to cancel `beforeinput` events caused
2979 # by MozEditableElement#setUserInput() which is used by autocomplete, autofill
2980 # and password manager.
2981 - name: dom.input_event.allow_to_cancel_set_user_input
2982   type: bool
2983   value: false
2984   mirror: always
2986 # How long a content process can take before closing its IPC channel
2987 # after shutdown is initiated.  If the process exceeds the timeout,
2988 # we fear the worst and kill it.
2989 - name: dom.ipc.tabs.shutdownTimeoutSecs
2990   type: RelaxedAtomicUint32
2991 #if !defined(DEBUG) && !defined(MOZ_ASAN) && !defined(MOZ_VALGRIND) && !defined(MOZ_TSAN)
2992   value: 20
2993 #else
2994   value: 0
2995 #endif
2996   mirror: always
2998 # Whether a native event loop should be used in the content process.
2999 - name: dom.ipc.useNativeEventProcessing.content
3000   type: RelaxedAtomicBool
3001 #if defined(XP_WIN) || defined(XP_MACOSX)
3002   value: false
3003 #else
3004   value: true
3005 #endif
3006   mirror: always
3008 # If this is true, TextEventDispatcher dispatches keydown and keyup events
3009 # even during composition (keypress events are never fired during composition
3010 # even if this is true).
3011 - name: dom.keyboardevent.dispatch_during_composition
3012   type: bool
3013   value: true
3014   mirror: always
3016 # Enable/disable KeyboardEvent.initKeyEvent function
3017 - name: dom.keyboardevent.init_key_event.enabled
3018   type: bool
3019   value: false
3020   mirror: always
3022 # Enable/disable KeyboardEvent.initKeyEvent function in addons even if it's
3023 # disabled.
3024 - name: dom.keyboardevent.init_key_event.enabled_in_addons
3025   type: bool
3026   value: @IS_NOT_EARLY_BETA_OR_EARLIER@
3027   mirror: always
3029 # If this is true, keypress events for non-printable keys are dispatched only
3030 # for event listeners of the system event group in web content.
3031 - name: dom.keyboardevent.keypress.dispatch_non_printable_keys_only_system_group_in_content
3032   type: bool
3033   value: true
3034   mirror: always
3036 # If this is true, "keypress" event's keyCode value and charCode value always
3037 # become same if the event is not created/initialized by JS.
3038 - name: dom.keyboardevent.keypress.set_keycode_and_charcode_to_same_value
3039   type: bool
3040   value: true
3041   mirror: always
3043 # Whether "W3C Web Manifest" processing is enabled
3044 - name: dom.manifest.enabled
3045   type: bool
3046   value: true
3047   mirror: always
3049 # Enable mapped array buffer by default.
3050 - name: dom.mapped_arraybuffer.enabled
3051   type: bool
3052   value: true
3053   mirror: always
3055 # Autoplay Policy Detection https://w3c.github.io/autoplay/
3056 - name: dom.media.autoplay-policy-detection.enabled
3057   type: RelaxedAtomicBool
3058   value: true
3059   mirror: always
3061 # Media Session API
3062 - name: dom.media.mediasession.enabled
3063   type: bool
3064   value: true
3065   mirror: always
3067 # WebCodecs API
3068 - name: dom.media.webcodecs.enabled
3069   type: RelaxedAtomicBool
3070   value: @IS_NIGHTLY_BUILD@
3071   mirror: always
3073 # Number of seconds of very quiet or silent audio before considering the audio
3074 # inaudible.
3075 - name: dom.media.silence_duration_for_audibility
3076   type: AtomicFloat
3077   value: 2.0f
3078   mirror: always
3080 # Inform mozjemalloc that the foreground content processes can keep more dirty
3081 # pages in memory.
3082 - name: dom.memory.foreground_content_processes_have_larger_page_cache
3083   type: bool
3084   value: true
3085   mirror: always
3087 # Enable meta-viewport support in remote APZ-enabled frames.
3088 - name: dom.meta-viewport.enabled
3089   type: RelaxedAtomicBool
3090   value: false
3091   mirror: always
3093 # Timeout clamp in ms for timeouts we clamp.
3094 - name: dom.min_timeout_value
3095   type: RelaxedAtomicInt32
3096   value: 4
3097   mirror: always
3099 # Timeout clamp in ms for background windows.
3100 - name: dom.min_background_timeout_value
3101   type: int32_t
3102   value: 1000
3103   mirror: always
3105 # Timeout clamp in ms for background windows when throttling isn't enabled.
3106 - name: dom.min_background_timeout_value_without_budget_throttling
3107   type: int32_t
3108   value: 1000
3109   mirror: always
3111 # Are missing-property use counters for certain DOM attributes enabled?
3112 - name: dom.missing_prop_counters.enabled
3113   type: bool
3114   value: true
3115   mirror: always
3117 # Is support for import maps (<script type="importmap">) enabled for content?
3118 - name: dom.importMaps.enabled
3119   type: bool
3120   value: true
3121   mirror: always
3123 # Whether we disable triggering mutation events for changes to style
3124 # attribute via CSSOM.
3125 # NOTE: This preference is used in unit tests. If it is removed or its default
3126 # value changes, please update test_sharedMap_static_prefs.js accordingly.
3127 - name: dom.mutation-events.cssom.disabled
3128   type: bool
3129   value: true
3130   mirror: always
3132 # Limit of location change caused by content scripts in a time span per
3133 # BrowsingContext. This includes calls to History and Location APIs.
3134 - name: dom.navigation.locationChangeRateLimit.count
3135   type: uint32_t
3136   value: 200
3137   mirror: always
3139 # Time span in seconds for location change rate limit.
3140 - name: dom.navigation.locationChangeRateLimit.timespan
3141   type: uint32_t
3142   value: 10
3143   mirror: always
3145 # Network Information API
3146 # This feature is not available on Firefox desktop. It exposes too much
3147 # user information. Let's be consistent and disable it on Android.
3148 # But let's keep it around in case it becomes necessary for webcompat
3149 # reasons
3150 # https://bugzilla.mozilla.org/show_bug.cgi?id=1637922
3151 - name: dom.netinfo.enabled
3152   type: RelaxedAtomicBool
3153   value: false
3154   mirror: always
3156 # Whether we should open noopener links in a new process.
3157 - name: dom.noopener.newprocess.enabled
3158   type: bool
3159   value: true
3160   mirror: always
3162 # Whether we shouldn't show an error page for unknown protocols (and should
3163 # show a console warning instead).
3164 - name: dom.no_unknown_protocol_error.enabled
3165   type: bool
3166   value: true
3167   mirror: always
3169 # Whether origin trials are enabled.
3170 - name: dom.origin-trials.enabled
3171   type: bool
3172   value: true
3173   mirror: always
3175 # Whether we use the test key to verify tokens.
3176 - name: dom.origin-trials.test-key.enabled
3177   type: bool
3178   value: false
3179   mirror: always
3181 # Origin trial state for "TestTrial".
3182 # 0: normal, 1: always-enabled, 2: always-disabled
3183 - name: dom.origin-trials.test-trial.state
3184   type: RelaxedAtomicInt32
3185   value: 0
3186   mirror: always
3188 # Origin trial state for COEP: Credentialless.
3189 # 0: normal, 1: always-enabled, 2: always-disabled
3190 - name: dom.origin-trials.coep-credentialless.state
3191   type: RelaxedAtomicInt32
3192   value: 0
3193   mirror: always
3195 # Is support for Window.paintWorklet enabled?
3196 - name: dom.paintWorklet.enabled
3197   type: bool
3198   value: false
3199   mirror: always
3201 # Enable/disable the PaymentRequest API
3202 - name: dom.payments.request.enabled
3203   type: bool
3204   value: false
3205   mirror: always
3207 # Whether a user gesture is required to call PaymentRequest.prototype.show().
3208 - name: dom.payments.request.user_interaction_required
3209   type: bool
3210   value: true
3211   mirror: always
3213 # Time in milliseconds for PaymentResponse to wait for
3214 # the Web page to call complete().
3215 - name: dom.payments.response.timeout
3216   type: uint32_t
3217   value: 5000
3218   mirror: always
3220 # Enable printing performance marks/measures to log
3221 - name: dom.performance.enable_user_timing_logging
3222   type: RelaxedAtomicBool
3223   value: false
3224   mirror: always
3226 # Enable notification of performance timing
3227 - name: dom.performance.enable_notify_performance_timing
3228   type: bool
3229   value: false
3230   mirror: always
3232 # Is support for PerformanceTiming.timeToContentfulPaint enabled?
3233 - name: dom.performance.time_to_contentful_paint.enabled
3234   type: bool
3235   value: false
3236   mirror: always
3238 # Is support for PerformanceTiming.timeToDOMContentFlushed enabled?
3239 - name: dom.performance.time_to_dom_content_flushed.enabled
3240   type: bool
3241   value: false
3242   mirror: always
3244 # Is support for PerformanceTiming.timeToFirstInteractive enabled?
3245 - name: dom.performance.time_to_first_interactive.enabled
3246   type: bool
3247   value: false
3248   mirror: always
3250 # Is support for PerformanceTiming.timeToNonBlankPaint enabled?
3251 - name: dom.performance.time_to_non_blank_paint.enabled
3252   type: bool
3253   value: false
3254   mirror: always
3256 # Is support for Permissions.revoke enabled?
3257 - name: dom.permissions.revoke.enable
3258   type: bool
3259   value: false
3260   mirror: always
3262 # This enables width and height attributes and map these attributes to img
3263 # element's style.
3264 - name: dom.picture_source_dimension_attributes.enabled
3265   type: bool
3266   value: true
3267   mirror: always
3269 # Is support for Element.requestPointerLock enabled?
3270 # This is added for accessibility purpose. When user has no way to exit
3271 # pointer lock (e.g. no keyboard available), they can use this pref to
3272 # disable the Pointer Lock API altogether.
3273 - name: dom.pointer-lock.enabled
3274   type: bool
3275   value: true
3276   mirror: always
3278 # re-SAB: Whether to allow postMessage of a SharedArrayBuffer if various
3279 # preconditions related to COOP and COEP are met
3280 - name: dom.postMessage.sharedArrayBuffer.withCOOP_COEP
3281   type: bool
3282   value: true
3283   mirror: once
3285 # Overridden in all.js on RELEASE_OR_BETA in order to add the locked attribute.
3286 - name: dom.postMessage.sharedArrayBuffer.bypassCOOP_COEP.insecure.enabled
3287   type: RelaxedAtomicBool
3288   value: false
3289   mirror: always
3291 # This currently only affects XHTML. For XUL the cache is always allowed.
3292 - name: dom.prototype_document_cache.enabled
3293   type: bool
3294   value: true
3295   mirror: always
3297 # Push
3298 - name: dom.push.enabled
3299   type: RelaxedAtomicBool
3300   value: true
3301   mirror: always
3303 # This enables the SVGPathSeg APIs
3304 - name: dom.svg.pathSeg.enabled
3305   type: bool
3306   value: false
3307   mirror: always
3309 # Preference that is primarily used for testing of problematic file paths.
3310 # It can also be used for switching between different storage directories, but
3311 # such feature is not officially supported.
3312 - name: dom.quotaManager.storageName
3313   type: String
3314   value: "storage"
3315   mirror: never
3317 # An upper limit for the "age" of an origin. Any origin which is older than the
3318 # threshold is considered as unaccessed. That doesn't necessarily mean that
3319 # such origins will be immediatelly archived. They will be archived only when
3320 # dom.quotaManager.checkQuotaInfoLoadTime is true and loading of quota info
3321 # takes a long time (dom.quotaManager.longQuotaInfoLoadTimeThresholdMs is used
3322 # to decide what is a long quota info load time).
3323 - name: dom.quotaManager.unaccessedForLongTimeThresholdSec
3324   type: RelaxedAtomicUint32
3325   value: 33696000 # 13 months
3326   mirror: always
3328 # Should we try to load origin information from the cache?
3329 # See bug 1563023 for more details.
3330 - name: dom.quotaManager.loadQuotaFromCache
3331   type: RelaxedAtomicBool
3332   value: true
3333   mirror: always
3335 # Should we check build ID as part of the cache validation?
3336 # When enabled, the cache is invalidated on any upgrade (or downgrade),
3337 # ensuring that changes in how quota usage is calculated can't cause
3338 # inconsistencies at the cost of a slower initialization. Currently, this
3339 # should only be set to false in tests using a packaged profile that inherently
3340 # includes a build id different from the building running the tests. In the
3341 # future this may be set to false if we are confident that we have sufficiently
3342 # thorough schema versioning.
3343 - name: dom.quotaManager.caching.checkBuildId
3344   type: RelaxedAtomicBool
3345   value: true
3346   mirror: always
3348 # Should we check quota info load time and eventually archive some unaccessed
3349 # origins if loading of quota info takes a long time ?
3350 - name: dom.quotaManager.checkQuotaInfoLoadTime
3351   type: RelaxedAtomicBool
3352   value: true
3353   mirror: always
3355 # An upper limit for quota info load time, anything which takes longer than the
3356 # threshold is considered as long quota info load time.
3357 - name: dom.quotaManager.longQuotaInfoLoadTimeThresholdMs
3358   type: RelaxedAtomicUint32
3359   value: 21000 # 21 seconds
3360   mirror: always
3362 # Preference that users can set to override temporary storage smart limit
3363 # calculation.
3364 - name: dom.quotaManager.temporaryStorage.fixedLimit
3365   type: RelaxedAtomicInt32
3366   value: -1
3367   mirror: always
3369 # A pref that is used to enable testing features.
3370 - name: dom.quotaManager.testing
3371   type: SequentiallyConsistentAtomicBool
3372   value: false
3373   mirror: always
3375 #if defined(XP_WIN)
3376   # Preference that is used to set nsILocalFileWin::useDOSDevicePathSyntax
3377   # attribute for all local file instances created by QuotaManager and its
3378   # clients. The value of this preference is cached so changing the preference
3379   # during runtime has no effect.
3380   # See bug 1626846 for setting this to false by default.
3381 -   name: dom.quotaManager.useDOSDevicePathSyntax
3382     type: RelaxedAtomicBool
3383     value: true
3384     mirror: always
3385     do_not_use_directly: true
3387   # Preference that is used to enable the hack for overrriding xFullPathname in
3388   # QuotaVFS.
3389 -   name: dom.quotaManager.overrideXFullPathname
3390     type: RelaxedAtomicBool
3391     value: true
3392     mirror: always
3393 #elif defined(XP_UNIX)
3394   # Preference that is used to enable the overriding of Unix xFullPathname
3395   # implementation in QuotaVFS.
3396 -   name: dom.quotaManager.overrideXFullPathnameUnix
3397     type: RelaxedAtomicBool
3398     value: true
3399     mirror: always
3400 #endif
3402 # How many times we should retry directory removal or renaming if access was
3403 # denied?
3404 - name: dom.quotaManager.directoryRemovalOrRenaming.maxRetries
3405   type: RelaxedAtomicUint32
3406 #ifdef XP_WIN
3407   value: 10
3408 #else
3409   value: 0
3410 #endif
3411   mirror: always
3413 # How long we should wait between retries (in milliseconds)?
3414 - name: dom.quotaManager.directoryRemovalOrRenaming.delayMs
3415   type: RelaxedAtomicUint32
3416   value: 200
3417   mirror: always
3419 #ifdef MOZ_BACKGROUNDTASKS
3420 # Use a Background Task to delete files at shutdown.
3421 - name: dom.quotaManager.backgroundTask.enabled
3422   type: bool
3423 #ifdef XP_MACOSX
3424 # Needs to figure out how to prevent bug 1827486.
3425   value: false
3426 #else
3427   value: true
3428 #endif
3429   mirror: never
3430 #endif
3432 # Use to control to dump CheckedUnsafePtr creation stack and assignment stacks.
3433 - name: dom.checkedUnsafePtr.dumpStacks.enabled
3434   type: RelaxedAtomicBool
3435   value: false
3436   mirror: always
3438 # Determines within what distance of a tick mark, in pixels, dragging an input
3439 # range range will snap the range's value to that tick mark. By default, this is
3440 # half the default width of the range thumb.
3441 - name: dom.range_element.magnet_effect_threshold
3442   type: float
3443   value: 10.0f
3444   mirror: always
3446 # Reporting API.
3447 - name: dom.reporting.enabled
3448   type: RelaxedAtomicBool
3449   value: false
3450   mirror: always
3452 - name: dom.reporting.testing.enabled
3453   type: RelaxedAtomicBool
3454   value: false
3455   mirror: always
3457 - name: dom.reporting.featurePolicy.enabled
3458   type: RelaxedAtomicBool
3459   value: false
3460   mirror: always
3462 - name: dom.reporting.crash.enabled
3463   type: RelaxedAtomicBool
3464   value: false
3465   mirror: always
3467 - name: dom.reporting.header.enabled
3468   type: RelaxedAtomicBool
3469   value: false
3470   mirror: always
3472 # In seconds. The timeout to remove not-active report-to endpoints.
3473 - name: dom.reporting.cleanup.timeout
3474   type: uint32_t
3475   value: 3600
3476   mirror: always
3478 # Any X seconds the reports are dispatched to endpoints.
3479 - name: dom.reporting.delivering.timeout
3480   type: uint32_t
3481   value: 5
3482   mirror: always
3484 # How many times the delivering of a report should be tried.
3485 - name: dom.reporting.delivering.maxFailures
3486   type: uint32_t
3487   value: 3
3488   mirror: always
3490 # How many reports should be stored in the report queue before being delivered.
3491 - name: dom.reporting.delivering.maxReports
3492   type: uint32_t
3493   value: 100
3494   mirror: always
3496 # Enable Screen Orientation lock
3497 - name: dom.screenorientation.allow-lock
3498   type: bool
3499   value: @IS_NIGHTLY_BUILD@
3500   mirror: always
3502 # Whether to enable the JavaScript start-up cache. This causes one of the first
3503 # execution to record the bytecode of the JavaScript function used, and save it
3504 # in the existing cache entry. On the following loads of the same script, the
3505 # bytecode would be loaded from the cache instead of being generated once more.
3506 - name: dom.script_loader.bytecode_cache.enabled
3507   type: bool
3508   value: true
3509   mirror: always
3511 # Ignore the heuristics of the bytecode cache, and always record on the first
3512 # visit. (used for testing purposes).
3514 # Choose one strategy to use to decide when the bytecode should be encoded and
3515 # saved. The following strategies are available right now:
3516 #   * -2 : (reader mode) The bytecode cache would be read, but it would never
3517 #          be saved.
3518 #   * -1 : (eager mode) The bytecode would be saved as soon as the script is
3519 #          seen for the first time, independently of the size or last access
3520 #          time.
3521 #   *  0 : (default) The bytecode would be saved in order to minimize the
3522 #          page-load time.
3524 # Other values might lead to experimental strategies. For more details, have a
3525 # look at: ScriptLoader::ShouldCacheBytecode function.
3526 - name: dom.script_loader.bytecode_cache.strategy
3527   type: int32_t
3528   value: 0
3529   mirror: always
3531 # Select which parse/delazification strategy should be used while parsing
3532 # scripts off-main-thread. (see CompileOptions.h, DelazificationOption enum)
3534 #   0: On-demand only. Delazification will be triggered only on the main thread
3535 #      before the execution of the function.
3537 #   1: Compare on-demand delazification (= 0) with concurrent depth-first
3538 #      delazification (= 2).
3540 #   2: Depth-first. Delazify all functions off-thread in the order of appearance
3541 #      in the source.
3543 #   3: Large-first. Delazify all functions off-thread starting with the largest
3544 #      functions first, and the smallest as the last one to be delazified, where
3545 #      the size of function is measured in bytes between the start to the end of
3546 #      the function.
3548 # 255: Parse everything eagerly, from the first parse. All functions are parsed
3549 #      at the same time as the top-level of a file.
3550 - name: dom.script_loader.delazification.strategy
3551   type: uint32_t
3552   value: 255
3553   mirror: always
3555 # Maximum total size after which the delazification strategy, specified by
3556 # `dom.script_loader.delazification.strategy`, is no longer applied, and the
3557 # on-demand strategy is used by default.
3559 # -1 disable the threshold, and delazification strategy is applied to all
3560 # scripts.
3562 # Default value is 10MB for utf8 scripts.
3563 - name: dom.script_loader.delazification.max_size
3564   type: int32_t
3565   value: 10485760
3566   mirror: always
3568 # Minimum memory, in GB, required to enable delazification strategy, specified
3569 # by `dom.script_loader.delazification.strategy`. Otherwise, the on-demand
3570 # delazification strategy is used.
3571 - name: dom.script_loader.delazification.min_mem
3572   type: int32_t
3573   value: 2
3574   mirror: always
3576 # Enable  speculative off main thread parsing of external scripts as
3577 # soon as they are fetched.
3578 - name: dom.script_loader.external_scripts.speculative_omt_parse.enabled
3579   type: bool
3580   value: true
3581   mirror: always
3583 # Speculatively compile non parser inserted scripts
3584 - name: dom.script_loader.external_scripts.speculate_non_parser_inserted.enabled
3585   type: bool
3586   value: false
3587   mirror: always
3589 # Speculatively compile async scripts
3590 - name: dom.script_loader.external_scripts.speculate_async.enabled
3591   type: bool
3592   value: false
3593   mirror: always
3595 # Speculatively compile link preload scripts
3596 - name: dom.script_loader.external_scripts.speculate_link_preload.enabled
3597   type: bool
3598   value: false
3599   mirror: always
3601 - name: dom.securecontext.allowlist_onions
3602   type: bool
3603   value: false
3604   mirror: always
3606 # This pref enables the featurePolicy header support.
3607 - name: dom.security.featurePolicy.header.enabled
3608   type: bool
3609   value: false
3610   mirror: always
3612 - name: dom.security.featurePolicy.experimental.enabled
3613   type: bool
3614   value: false
3615   mirror: always
3617 # Expose the 'featurePolicy' attribute in document and HTMLIFrameElement
3618 - name: dom.security.featurePolicy.webidl.enabled
3619   type: bool
3620   value: false
3621   mirror: always
3623 # Perform IPC based Principal vetting in ContentParent
3624 - name: dom.security.enforceIPCBasedPrincipalVetting
3625   type: RelaxedAtomicBool
3626   value: true
3627   mirror: always
3629 # For testing purposes only: Flipping this pref to true allows
3630 # to skip the allowlist for about: pages and do not ship with a
3631 # CSP and NS_ASSERT right away.
3632 - name: dom.security.skip_about_page_csp_allowlist_and_assert
3633   type: RelaxedAtomicBool
3634   value: false
3635   mirror: always
3637 # For testing purposes only: Flipping this pref to true allows
3638 # to skip the assertion that every about page ships with a CSP.
3639 - name: dom.security.skip_about_page_has_csp_assert
3640   type: RelaxedAtomicBool
3641   value: false
3642   mirror: always
3644 # For testing purposes only: Flipping this pref to true allows
3645 # to skip the assertion that HTML fragments (e.g. innerHTML) can
3646 # not be used within chrome code or about: pages.
3647 - name: dom.security.skip_html_fragment_assertion
3648   type: RelaxedAtomicBool
3649   value: false
3650   mirror: always
3652 # For testing purposes only; Flipping this pref to true allows
3653 # to skip the assertion that remote scripts can not be loaded
3654 # in system privileged contexts.
3655 - name: dom.security.skip_remote_script_assertion_in_system_priv_context
3656   type: RelaxedAtomicBool
3657   value: false
3658   mirror: always
3660 # If true, all content requests will get upgraded to HTTPS://
3661 # (some Firefox functionality requests, like OCSP will not be affected)
3662 - name: dom.security.https_only_mode
3663   type: RelaxedAtomicBool
3664   value: false
3665   mirror: always
3667 # If true, all content requests in Private Browsing Mode will get
3668 # upgraded to HTTPS://. (If dom.security.https_only_mode is set
3669 # to true then this pref has no effect)
3670 - name: dom.security.https_only_mode_pbm
3671   type: RelaxedAtomicBool
3672   value: false
3673   mirror: always
3675 # If true, sends http background request for top-level sites to
3676 # counter long timeouts.
3677 - name: dom.security.https_only_mode_send_http_background_request
3678   type: RelaxedAtomicBool
3679   value: true
3680   mirror: always
3682 # Time limit, in milliseconds, before sending the http background
3683 # request for HTTPS-Only and HTTPS-First
3684 - name: dom.security.https_only_fire_http_request_background_timer_ms
3685   type: RelaxedAtomicUint32
3686   value: 3000
3687   mirror: always
3689 # If true, tries to break upgrade downgrade cycles where https-only tries
3690 # to upgrad ethe connection, but the website tries to downgrade again.
3691 - name: dom.security.https_only_mode_break_upgrade_downgrade_endless_loop
3692   type: RelaxedAtomicBool
3693   value: true
3694   mirror: always
3696 # If true, when checking if it's upgrade downgrade cycles, the URI path will be
3697 # also checked.
3698 - name: dom.security.https_only_check_path_upgrade_downgrade_endless_loop
3699   type: RelaxedAtomicBool
3700   value: true
3701   mirror: always
3703 # If true and HTTPS-only mode is enabled, requests
3704 # to local IP addresses are also upgraded
3705 - name: dom.security.https_only_mode.upgrade_local
3706   type: RelaxedAtomicBool
3707   value: false
3708   mirror: always
3710 # If true and HTTPS-only mode is enabled, requests
3711 # to .onion hosts are also upgraded
3712 - name: dom.security.https_only_mode.upgrade_onion
3713   type: RelaxedAtomicBool
3714   value: false
3715   mirror: always
3717 # WARNING: Don't ever update that pref manually! It is only used
3718 # for telemetry purposes and allows to reason about retention of
3719 # the pref dom.security.https_only_mode from above.
3720 - name: dom.security.https_only_mode_ever_enabled
3721   type: RelaxedAtomicBool
3722   value: false
3723   mirror: always
3725 # WARNING: Don't ever update that pref manually! It is only used
3726 # for telemetry purposes and allows to reason about retention of
3727 # the pref dom.security.https_only_mode_pbm from above.
3728 - name: dom.security.https_only_mode_ever_enabled_pbm
3729   type: RelaxedAtomicBool
3730   value: false
3731   mirror: always
3733 # If true checks for secure www connections when https fails
3734 # and gives the user suggestions on the error page
3735 - name: dom.security.https_only_mode_error_page_user_suggestions
3736   type: RelaxedAtomicBool
3737   value: false
3738   mirror: always
3740 # If true, top-level request will get upgraded to HTTPS and
3741 # downgraded again if the request failed.
3742 - name: dom.security.https_first
3743   type: RelaxedAtomicBool
3744   value: false
3745   mirror: always
3747 # If true, top-level requests in Private Browsing Mode will get
3748 # upgraded to HTTPS. (If dom.security.https_first
3749 # is set to true then this pref has no effect)
3750 - name: dom.security.https_first_pbm
3751   type: RelaxedAtomicBool
3752   value: true
3753   mirror: always
3755 - name: dom.security.unexpected_system_load_telemetry_enabled
3756   type: bool
3757   value: true
3758   mirror: always
3760 # pref controls `Sanitizer` API being exposed
3761 # https://wicg.github.io/sanitizer-api/
3762 - name: dom.security.sanitizer.enabled
3763   type: bool
3764   value: false
3765   mirror: always
3767 # Pref that controls the Element.setHTML API idenpendetly of the sanitizer
3768 # API.
3769 - name: dom.security.setHTML.enabled
3770   type: bool
3771   value: false
3772   mirror: always
3774 # Logs elements and attributes removed by the Sanitizer API to the console.
3775 - name: dom.security.sanitizer.logging
3776   type: bool
3777   value: false
3778   mirror: always
3780 # pref controls `identity` credentials being exposed
3781 - name: dom.security.credentialmanagement.identity.enabled
3782   type: bool
3783   value: false
3784   mirror: always
3786 # pref controls `identity` credential UI for testing. When true, UI is not shown and
3787 # the first option in the account and provider lists are chosen
3788 - name: dom.security.credentialmanagement.identity.select_first_in_ui_lists
3789   type: bool
3790   value: false
3791   mirror: always
3793 # pref controls `identity` credential platform behavior for testing. When true,
3794 # the .well-known file check is not performed.
3795 - name: dom.security.credentialmanagement.identity.test_ignore_well_known
3796   type: bool
3797   value: false
3798   mirror: always
3800 # pref controls whether we should delay identity credential rejections at all
3801 - name: dom.security.credentialmanagement.identity.reject_delay.enabled
3802   type: bool
3803   value: true
3804   mirror: always
3806 # pref controls how long we should delay identity credential rejections if enabled
3807 - name: dom.security.credentialmanagement.identity.reject_delay.duration_ms
3808   type: uint32_t
3809   value: 120000
3810   mirror: always
3812 # Whether or not selection events on text controls are enabled.
3813 - name: dom.select_events.textcontrols.selectionchange.enabled
3814   type: bool
3815   value: true
3816   mirror: always
3818 - name: dom.select_events.textcontrols.selectstart.enabled
3819   type: bool
3820   value: false
3821   mirror: always
3823 - name: dom.separate_event_queue_for_post_message.enabled
3824   type: bool
3825   value: true
3826   mirror: always
3828 - name: dom.arena_allocator.enabled
3829   type: bool
3830   value: true
3831   mirror: once
3833 - name: dom.serviceWorkers.enabled
3834   type: RelaxedAtomicBool
3835   value: true
3836   mirror: always
3838 - name: dom.serviceWorkers.navigationPreload.enabled
3839   type: RelaxedAtomicBool
3840   value: true
3841   mirror: always
3843 # Mitigates ServiceWorker navigation faults by bypassing the ServiceWorker on
3844 # navigation faults.  This is more extensive than just resetting interception
3845 # because we also mark the page as uncontrolled so that subresources will not
3846 # go to the ServiceWorker either.
3847 - name: dom.serviceWorkers.mitigations.bypass_on_fault
3848   type: bool
3849   value: true
3850   mirror: always
3852 # Additional ServiceWorker navigation mitigation control to unregister the
3853 # ServiceWorker after multiple faults are encountered. The mitigation is
3854 # disabled when this is set to zero, otherwise this is the number of faults that
3855 # need to occur for a specific ServiceWorker before it will be unregistered.
3856 - name: dom.serviceWorkers.mitigations.navigation_fault_threshold
3857   type: uint32_t
3858   value: 3
3859   mirror: always
3861 # This is the group usage head room for service workers.
3862 # The quota usage mitigation algorithm uses this preference to determine if the
3863 # origin or also group data should be cleared or not.
3864 # The default value is 400 MiB.
3865 - name: dom.serviceWorkers.mitigations.group_usage_headroom_kb
3866   type: uint32_t
3867   value: 400 * 1024
3868   mirror: always
3870 - name: dom.serviceWorkers.testing.enabled
3871   type: RelaxedAtomicBool
3872   value: false
3873   mirror: always
3875 # Whether ServiceWorkerManager should persist the service worker
3876 # registered by temporary installed extension (only meant to be used
3877 # for testing purpose, to make it easier to test some particular scenario
3878 # with a temporary installed addon, which doesn't need to be signed to be
3879 # installed on release channel builds).
3880 - name: dom.serviceWorkers.testing.persistTemporarilyInstalledAddons
3881   type: RelaxedAtomicBool
3882   value: false
3883   mirror: always
3885 - name: dom.storage.enabled
3886   type: RelaxedAtomicBool
3887   value: true
3888   mirror: always
3890 # ReadableStream.from(asyncIterable)
3891 - name: dom.streams.from.enabled
3892   type: RelaxedAtomicBool
3893   value: true
3894   mirror: always
3896 - name: dom.workers.pFetch.enabled
3897   type: RelaxedAtomicBool
3898   value: true
3899   mirror: always
3901 - name: dom.workers.importScripts.enforceStrictMimeType
3902   type: RelaxedAtomicBool
3903   value: @IS_EARLY_BETA_OR_EARLIER@
3904   mirror: always
3906 # Is support for modules (new Worker(..., {type: "module"})) enabled for workers?
3907 - name: dom.workers.modules.enabled
3908   type: RelaxedAtomicBool
3909   value: true
3910   mirror: always
3912 - name: dom.workers.requestAnimationFrame
3913   type: RelaxedAtomicBool
3914   value: true
3915   mirror: always
3917 - name: dom.workers.serialized-sab-access
3918   type: RelaxedAtomicBool
3919   value: false
3920   mirror: always
3922 # Enable stronger diagnostics on worker shutdown.
3923 # If this is true, we will potentially run an extra GCCC when a  worker should
3924 # exit its DoRunLoop but holds any WorkerRef and we will MOZ_DIAGNOSTIC_ASSERT
3925 # when during that extra GCCC such a WorkerRef is freed.
3926 - name: dom.workers.GCCC_on_potentially_last_event
3927   type: RelaxedAtomicBool
3928 #if defined(FUZZING) || defined(DEBUG)
3929   value: true
3930 #else
3931   value: false
3932 #endif
3933   mirror: always
3935 - name: dom.sitepermsaddon-provider.enabled
3936   type: bool
3937   value: @IS_NOT_ANDROID@
3938   mirror: always
3940 # Whether automatic storage access granting heuristics should be turned on.
3941 - name: dom.storage_access.auto_grants
3942   type: bool
3943   value: true
3944   mirror: always
3946 - name: dom.storage_access.auto_grants.delayed
3947   type: bool
3948   value: true
3949   mirror: always
3951 # Storage-access API.
3952 - name: dom.storage_access.enabled
3953   type: bool
3954   value: true
3955   mirror: always
3957 # Forward-Declared Storage-access API.
3958 - name: dom.storage_access.forward_declared.enabled
3959   type: bool
3960   value: false
3961   mirror: always
3963 # How long the Forward-Declared Storage-access API allows between pair requests
3964 # in seconds
3965 - name: dom.storage_access.forward_declared.lifetime
3966   type: uint32_t
3967   value: 15 * 60
3968   mirror: always
3970 # The maximum number of origins that a given third-party tracker is allowed
3971 # to have concurrent access to before the user is presented with a storage
3972 # access prompt.  Only effective when the auto_grants pref is turned on.
3973 - name: dom.storage_access.max_concurrent_auto_grants
3974   type: int32_t
3975   value: 5
3976   mirror: always
3978 - name: dom.storage_access.frame_only
3979   type: bool
3980   value: false
3981   mirror: always
3983 # Only grant storage access to secure contexts.
3984 - name: dom.storage_access.dont_grant_insecure_contexts
3985   type: RelaxedAtomicBool
3986   value: true
3987   mirror: always
3989 # Whether the Storage API is enabled.
3990 - name: dom.storageManager.enabled
3991   type: RelaxedAtomicBool
3992   value: true
3993   mirror: always
3995 # Whether the File System API is enabled
3996 - name: dom.fs.enabled
3997   type: RelaxedAtomicBool
3998   value: true
3999   mirror: always
4001 # Whether the WritableFileStream is enabled or disabled.
4002 - name: dom.fs.writable_file_stream.enabled
4003   type: RelaxedAtomicBool
4004   value: true
4005   mirror: always
4007 # LocalStorage data limit as determined by summing up the lengths of all string
4008 # keys and values. This is consistent with the legacy implementation and other
4009 # browser engines. This value should really only ever change in unit testing
4010 # where being able to lower it makes it easier for us to test certain edge
4011 # cases. Measured in KiBs.
4012 - name: dom.storage.default_quota
4013   type: RelaxedAtomicUint32
4014   # Only allow relatively small amounts of data since performance of the
4015   # synchronous IO is very bad. We are enforcing simple per-origin quota only.
4016   value: 5 * 1024
4017   mirror: always
4019 # Per-site quota for legacy LocalStorage implementation.
4020 - name: dom.storage.default_site_quota
4021   type: RelaxedAtomicUint32
4022   value: 25 * 1024
4023   mirror: always
4025 # Whether or not the unsupported legacy implemenation should be enabled. Please
4026 # don't advertise this pref as a way for disabling LSNG. This pref is intended
4027 # for internal testing only and will be removed in near future. Accidental
4028 # disabling of LSNG can lead to a data loss in a combination with disabled
4029 # shadow writes. Disabling of shadow writes is the initial step towards
4030 # removing legacy implementation and will be done soon.
4031 - name: dom.storage.enable_unsupported_legacy_implementation
4032   type: RelaxedAtomicBool
4033   value: false
4034   mirror: always
4035   do_not_use_directly: true
4037 # The amount of snapshot peak usage which is attempted to be pre-incremented
4038 # during snapshot creation.
4039 - name: dom.storage.snapshot_peak_usage.initial_preincrement
4040   type: RelaxedAtomicUint32
4041   value: 16384
4042   mirror: always
4044 # The amount of snapshot peak usage which is attempted to be pre-incremented
4045 # during snapshot creation if the LocalStorage usage was already close to the
4046 # limit (a fallback for dom.storage.snapshot_peak_usage.initial_preincrement).
4047 - name: dom.storage.snapshot_peak_usage.reduced_initial_preincrement
4048   type: RelaxedAtomicUint32
4049   value: 4096
4050   mirror: always
4052 # The amount of snapshot peak usage which is attempted to be pre-incremented
4053 # beyond the specific values which are subsequently requested after snapshot
4054 # creation.
4055 - name: dom.storage.snapshot_peak_usage.gradual_preincrement
4056   type: RelaxedAtomicUint32
4057   value: 4096
4058   mirror: always
4060 # The amount of snapshot peak usage which is attempted to be pre-incremented
4061 # beyond the specific values which are subsequently requested after snapshot
4062 # creation if the LocalStorage total usage was already close to the limit
4063 # (a fallback for dom.storage.snapshot_peak_usage.gradual_preincrement).
4064 - name: dom.storage.snapshot_peak_usage.reduced_gradual_preincrement
4065   type: RelaxedAtomicUint32
4066   value: 1024
4067   mirror: always
4069 # How long between a snapshot becomes idle and when we actually finish the
4070 # snapshot. This preference is only used when "dom.storage.snapshot_reusing"
4071 # is true.
4072 - name: dom.storage.snapshot_idle_timeout_ms
4073   type: uint32_t
4074   value: 5000
4075   mirror: always
4077 # Is support for Storage test APIs enabled?
4078 - name: dom.storage.testing
4079   type: bool
4080   value: false
4081   mirror: always
4083 # For area and anchor elements with target=_blank and no rel set to
4084 # opener/noopener.
4085 - name: dom.targetBlankNoOpener.enabled
4086   type: bool
4087   value: true
4088   mirror: always
4090 # Is support for Selection.GetRangesForInterval enabled?
4091 - name: dom.testing.selection.GetRangesForInterval
4092   type: bool
4093   value: false
4094   mirror: always
4096 - name: dom.testing.structuredclonetester.enabled
4097   type: RelaxedAtomicBool
4098   value: false
4099   mirror: always
4101 - name: dom.testing.sync-content-blocking-notifications
4102   type: bool
4103   value: false
4104   mirror: always
4106 # To enable TestUtils interface on WPT
4107 - name: dom.testing.testutils.enabled
4108   type: RelaxedAtomicBool
4109   value: false
4110   mirror: always
4112 - name: dom.textMetrics.actualBoundingBox.enabled
4113   type: RelaxedAtomicBool
4114   value: true
4115   mirror: always
4117 - name: dom.textMetrics.baselines.enabled
4118   type: RelaxedAtomicBool
4119   value: true
4120   mirror: always
4122 - name: dom.textMetrics.emHeight.enabled
4123   type: RelaxedAtomicBool
4124   value: true
4125   mirror: always
4127 - name: dom.textMetrics.fontBoundingBox.enabled
4128   type: RelaxedAtomicBool
4129   value: true
4130   mirror: always
4132 # Time (in ms) that it takes to regenerate 1ms.
4133 - name: dom.timeout.background_budget_regeneration_rate
4134   type: int32_t
4135   value: 100
4136   mirror: always
4138 # Time (in ms) that it takes to regenerate 1ms.
4139 - name: dom.timeout.foreground_budget_regeneration_rate
4140   type: int32_t
4141   value: 1
4142   mirror: always
4144 # Maximum value (in ms) for the background budget. Only valid for
4145 # values greater than 0.
4146 - name: dom.timeout.background_throttling_max_budget
4147   type: int32_t
4148   value: 50
4149   mirror: always
4151 # Maximum value (in ms) for the foreground budget. Only valid for
4152 # values greater than 0.
4153 - name: dom.timeout.foreground_throttling_max_budget
4154   type: int32_t
4155   value: -1
4156   mirror: always
4158 # The maximum amount a timeout can be delayed by budget throttling.
4159 - name: dom.timeout.budget_throttling_max_delay
4160   type: int32_t
4161   value: 15000
4162   mirror: always
4164 # Turn on budget throttling by default.
4165 - name: dom.timeout.enable_budget_timer_throttling
4166   type: bool
4167   value: true
4168   mirror: always
4170 # Should we defer timeouts and intervals while loading a page.  Released
4171 # on Idle or when the page is loaded.
4172 - name: dom.timeout.defer_during_load
4173   type: bool
4174   value: true
4175   mirror: always
4177 # Maximum amount of time in milliseconds consecutive setTimeout()/setInterval()
4178 # callback are allowed to run before yielding the event loop.
4179 - name: dom.timeout.max_consecutive_callbacks_ms
4180   type: uint32_t
4181   value: 4
4182   mirror: always
4184 # Maximum deferral time for setTimeout/Interval in milliseconds
4185 - name: dom.timeout.max_idle_defer_ms
4186   type: uint32_t
4187   value: 10*1000
4188   mirror: always
4190 # Delay in ms from document load until we start throttling background timeouts.
4191 - name: dom.timeout.throttling_delay
4192   type: int32_t
4193   value: 30000
4194   mirror: always
4196 # UDPSocket API
4197 - name: dom.udpsocket.enabled
4198   type: bool
4199   value: false
4200   mirror: always
4202 # Whether to dump worker use counters
4203 - name: dom.use_counters.dump.worker
4204   type: RelaxedAtomicBool
4205   value: false
4206   mirror: always
4208 # Whether to dump document use counters
4209 - name: dom.use_counters.dump.document
4210   type: bool
4211   value: false
4212   mirror: always
4214 # Whether to dump page use counters
4215 - name: dom.use_counters.dump.page
4216   type: bool
4217   value: false
4218   mirror: always
4220 # Time limit, in milliseconds, for user gesture transient activation.
4221 - name: dom.user_activation.transient.timeout
4222   type: uint32_t
4223   value: 5000
4224   mirror: always
4226 # Whether to treat the clicks on scrollbars as user interaction with web content.
4227 - name: dom.user_activation.ignore_scrollbars
4228   type: bool
4229   value: true
4230   mirror: always
4232 # Whether to shim a Components object on untrusted windows.
4233 - name: dom.use_components_shim
4234   type: bool
4235   value: @IS_NOT_NIGHTLY_BUILD@
4236   mirror: always
4238 - name: dom.vibrator.enabled
4239   type: bool
4240   value: true
4241   mirror: always
4243 - name: dom.vibrator.max_vibrate_ms
4244   type: RelaxedAtomicUint32
4245   value: 10000
4246   mirror: always
4248 - name: dom.vibrator.max_vibrate_list_len
4249   type: RelaxedAtomicUint32
4250   value: 128
4251   mirror: always
4253 # Is support for Window.visualViewport enabled?
4254 - name: dom.visualviewport.enabled
4255   type: bool
4256   value: true
4257   mirror: always
4259 # Is support for WebVR APIs enabled?
4260 # Disabled everywhere, but not removed.
4261 - name: dom.vr.enabled
4262   type: RelaxedAtomicBool
4263   value: false
4264   mirror: always
4266 # Should VR sessions always be reported as supported, without first
4267 # checking for VR runtimes?  This will prevent permission prompts
4268 # from being suppressed on machines without VR runtimes and cause
4269 # navigator.xr.isSessionSupported to always report that immersive-vr
4270 # is supported.
4271 - name: dom.vr.always_support_vr
4272   type: RelaxedAtomicBool
4273   value: false
4274   mirror: always
4276 # Should AR sessions always be reported as supported, without first
4277 # checking for AR runtimes?  This will prevent permission prompts
4278 # from being suppressed on machines without AR runtimes and cause
4279 # navigator.xr.isSessionSupported to always report that immersive-ar
4280 # is supported.
4281 - name: dom.vr.always_support_ar
4282   type: RelaxedAtomicBool
4283   value: false
4284   mirror: always
4286 # It is often desirable to automatically start vr presentation when
4287 # a user puts on the VR headset.  This is done by emitting the
4288 # Window.vrdisplayactivate event when the headset's sensors detect it
4289 # being worn.  This can result in WebVR content taking over the headset
4290 # when the user is using it outside the browser or inadvertent start of
4291 # presentation due to the high sensitivity of the proximity sensor in some
4292 # headsets, so it is off by default.
4293 - name: dom.vr.autoactivate.enabled
4294   type: RelaxedAtomicBool
4295   value: false
4296   mirror: always
4298 # Minimum number of milliseconds that the browser will wait before
4299 # attempting to poll again for connected VR controllers.  The browser
4300 # will not attempt to poll for VR controllers until it needs to use them.
4301 - name: dom.vr.controller.enumerate.interval
4302   type: RelaxedAtomicInt32
4303   value: 1000
4304   mirror: always
4306 # The threshold value of trigger inputs for VR controllers.
4307 - name: dom.vr.controller_trigger_threshold
4308   type: AtomicFloat
4309   value: 0.1f
4310   mirror: always
4312 # Minimum number of milliseconds that the browser will wait before
4313 # attempting to poll again for connected VR displays.  The browser
4314 # will not attempt to poll for VR displays until it needs to use
4315 # them, such as when detecting a WebVR site.
4316 - name: dom.vr.display.enumerate.interval
4317   type: RelaxedAtomicInt32
4318   value: 5000
4319   mirror: always
4321 # The number of milliseconds since last frame start before triggering a new
4322 # frame. When content is failing to submit frames on time or the lower level
4323 # VR platform APIs are rejecting frames, it determines the rate at which RAF
4324 # callbacks will be called.
4325 - name: dom.vr.display.rafMaxDuration
4326   type: RelaxedAtomicUint32
4327   value: 50
4328   mirror: always
4330 # Minimum number of milliseconds the browser will wait before attempting
4331 # to re-start the VR service after an enumeration returned no devices.
4332 - name: dom.vr.external.notdetected.timeout
4333   type: RelaxedAtomicInt32
4334   value: 60000
4335   mirror: always
4337 # Minimum number of milliseconds the browser will wait before attempting
4338 # to re-start the VR service after a VR API (eg, OpenVR or Oculus)
4339 # requests that we shutdown and unload its libraries.
4340 # To ensure that we don't interfere with VR runtime software auto-updates,
4341 # we will not attempt to re-load the service until this timeout has elapsed.
4342 - name: dom.vr.external.quit.timeout
4343   type: RelaxedAtomicInt32
4344   value: 10000
4345   mirror: always
4347 # Minimum number of milliseconds that the VR session will be kept
4348 # alive after the browser and content no longer are using the
4349 # hardware.  If a VR multitasking environment, this should be set
4350 # very low or set to 0.
4351 - name: dom.vr.inactive.timeout
4352   type: RelaxedAtomicInt32
4353   value: 5000
4354   mirror: always
4356 # Maximum number of milliseconds the browser will wait for content to call
4357 # VRDisplay.requestPresent after emitting vrdisplayactivate during VR
4358 # link traversal.  This prevents a long running event handler for
4359 # vrdisplayactivate from later calling VRDisplay.requestPresent, which would
4360 # result in a non-responsive browser in the VR headset.
4361 - name: dom.vr.navigation.timeout
4362   type: RelaxedAtomicInt32
4363   value: 5000
4364   mirror: always
4366 # Oculus device
4367 - name: dom.vr.oculus.enabled
4368   type: RelaxedAtomicBool
4369 #if defined(HAVE_64BIT_BUILD) && !defined(ANDROID)
4370   # We are only enabling WebVR by default on 64-bit builds (Bug 1384459).
4371   value: true
4372 #else
4373   # On Android, this pref is irrelevant.
4374   value: false
4375 #endif
4376   mirror: always
4378 # When enabled, Oculus sessions may be created with the ovrInit_Invisible
4379 # flag if a page is using tracking but not presenting.  When a page
4380 # begins presenting VR frames, the session will be re-initialized without
4381 # the flag.  This eliminates the "Firefox not responding" warnings in
4382 # the headset, but might not be compatible with all versions of the Oculus
4383 # runtime.
4384 - name: dom.vr.oculus.invisible.enabled
4385   type: RelaxedAtomicBool
4386   value: true
4387   mirror: always
4389 # Minimum number of milliseconds after content has stopped VR presentation
4390 # before the Oculus session is re-initialized to an invisible / tracking
4391 # only mode.  If this value is too high, users will need to wait longer
4392 # after stopping WebVR presentation before automatically returning to the
4393 # Oculus home interface.  (They can immediately return to the Oculus Home
4394 # interface through the Oculus HUD without waiting this duration)
4395 # If this value is too low, the Oculus Home interface may be visible
4396 # momentarily during VR link navigation.
4397 - name: dom.vr.oculus.present.timeout
4398   type: RelaxedAtomicInt32
4399   value: 500
4400   mirror: always
4402 # OpenVR device
4403 - name: dom.vr.openvr.enabled
4404   type: RelaxedAtomicBool
4405 #if !defined(HAVE_64BIT_BUILD) && !defined(ANDROID)
4406   # We are only enabling WebVR by default on 64-bit builds (Bug 1384459).
4407   value: false
4408 #elif defined(XP_WIN) || defined(XP_MACOSX)
4409   # We enable OpenVR by default for Windows and macOS.
4410   value: true
4411 #else
4412   # See Bug 1310663 (Linux).  On Android, this pref is irrelevant.
4413   value: false
4414 #endif
4415   mirror: always
4417 # OSVR device
4418 - name: dom.vr.osvr.enabled
4419   type: RelaxedAtomicBool
4420   value: false
4421   mirror: always
4423 # Pose prediction reduces latency effects by returning future predicted HMD
4424 # poses to callers of the WebVR API.  This currently only has an effect for
4425 # Oculus Rift on SDK 0.8 or greater.
4426 - name: dom.vr.poseprediction.enabled
4427   type: RelaxedAtomicBool
4428   value: true
4429   mirror: always
4431 # Enable a separate process for VR module.
4432 - name: dom.vr.process.enabled
4433   type: bool
4434 #if defined(XP_WIN)
4435   value: true
4436 #else
4437   value: false
4438 #endif
4439   mirror: once
4441 - name: dom.vr.process.startup_timeout_ms
4442   type: int32_t
4443   value: 5000
4444   mirror: once
4446 # Puppet device, used for simulating VR hardware within tests and dev tools.
4447 - name: dom.vr.puppet.enabled
4448   type: RelaxedAtomicBool
4449   value: false
4450   mirror: always
4452 # Starting VR presentation is only allowed within a user gesture or event such
4453 # as VRDisplayActivate triggered by the system. dom.vr.require-gesture allows
4454 # this requirement to be disabled for special cases such as during automated
4455 # tests or in a headless kiosk system.
4456 - name: dom.vr.require-gesture
4457   type: RelaxedAtomicBool
4458   value: true
4459   mirror: always
4461 # Is support for WebXR APIs enabled?
4462 - name: dom.vr.webxr.enabled
4463   type: RelaxedAtomicBool
4464   value: false
4465   mirror: always
4467 # Points in the native bounds geometry are required to be quantized
4468 # sufficiently to prevent fingerprinting. The WebXR spec suggests
4469 # quantizing to the nearest 5 centimeters.
4470 - name: dom.vr.webxr.quantization
4471   type: AtomicFloat
4472   value: 0.05f
4473   mirror: always
4475 # Whether MouseEvent.region is exposed as a property.
4476 - name: dom.mouse_event.region.enabled
4477   type: bool
4478   value: false
4479   mirror: always
4481 #ifdef XP_WIN
4482   # Control firing WidgetMouseEvent by handling Windows pointer messages or
4483   # mouse messages.
4484 -   name: dom.w3c_pointer_events.dispatch_by_pointer_messages
4485     type: bool
4486     value: true
4487     mirror: always
4489 -   name: dom.w3c_pointer_events.scroll_by_pen.enabled
4490     type: bool
4491     value: true
4492     mirror: always
4493 #endif
4495 # If the value is >= 0, it will be used for max touch points in child processes.
4496 - name: dom.maxtouchpoints.testing.value
4497   type: int32_t
4498   value: -1
4499   mirror: always
4501 # Maximum value of navigator.hardwareConcurrency.
4502 - name: dom.maxHardwareConcurrency
4503   type: RelaxedAtomicUint32
4504 #ifdef NIGHTLY_BUILD
4505   value: 128
4506 #else
4507   value: 16
4508 #endif
4509   mirror: always
4511 # W3C pointer events draft.
4512 - name: dom.w3c_pointer_events.implicit_capture
4513   type: bool
4514   value: true
4515   mirror: always
4517 # In case Touch API is enabled, this pref controls whether to support
4518 # ontouch* event handlers, document.createTouch, document.createTouchList and
4519 # document.createEvent("TouchEvent").
4520 - name: dom.w3c_touch_events.legacy_apis.enabled
4521   type: bool
4522   value: @IS_ANDROID@
4523   mirror: always
4525 # W3C touch events
4526 # 0 - disabled, 1 - enabled, 2 - autodetect
4527 # Autodetection is currently only supported on Windows and GTK3 (and assumed on
4528 # Android).
4529 - name: dom.w3c_touch_events.enabled
4530   type: int32_t
4531 #if defined(XP_MACOSX)
4532   value: 0
4533 #else
4534   value: 2
4535 #endif
4536   mirror: always
4538 # Is support for the Web Audio API enabled?
4539 - name: dom.webaudio.enabled
4540   type: bool
4541   value: true
4542   mirror: always
4544 - name: dom.webkitBlink.dirPicker.enabled
4545   type: RelaxedAtomicBool
4546   value: @IS_NOT_ANDROID@
4547   mirror: always
4549 # Is the 'assign' API for slot element enabled?
4550 - name: dom.shadowdom.slot.assign.enabled
4551   type: bool
4552   value: true
4553   mirror: always
4555 # NOTE: This preference is used in unit tests. If it is removed or its default
4556 # value changes, please update test_sharedMap_static_prefs.js accordingly.
4557 - name: dom.webcomponents.shadowdom.report_usage
4558   type: bool
4559   value: false
4560   mirror: always
4562 # Is support for the Web GPU API enabled?
4563 - name: dom.webgpu.enabled
4564   type: RelaxedAtomicBool
4565   value: @IS_NIGHTLY_BUILD@
4566   mirror: always
4568 # Are WebGPU indirect draws/dispatches enabled?
4569 - name: dom.webgpu.indirect-dispatch.enabled
4570   type: RelaxedAtomicBool
4571   value: false
4572   mirror: always
4574 # Comma-separated list of wgpu backend names to permit in WebGPU adapters.
4576 # If non-empty, this is parsed by `wgpu_core::instance::parse_backends_from_comma_list` to
4577 # produce a `wgpu_types::Backends` bitset used to create a `wgpu_core::hub::Global`. As of
4578 # 2023-3-22, recognized names are:
4580 #     "vulkan" | "vk" => Backends::VULKAN,
4581 #     "dx12" | "d3d12" => Backends::DX12,
4582 #     "dx11" | "d3d11" => Backends::DX11,
4583 #     "metal" | "mtl" => Backends::METAL,
4584 #     "opengl" | "gles" | "gl" => Backends::GL,
4585 #     "webgpu" => Backends::BROWSER_WEBGPU,
4586 - name: dom.webgpu.wgpu-backend
4587   type: DataMutexString
4588   value: ""
4589   mirror: always
4590   rust: true
4592 # Is support for HTMLInputElement.webkitEntries enabled?
4593 - name: dom.webkitBlink.filesystem.enabled
4594   type: bool
4595   value: @IS_NOT_ANDROID@
4596   mirror: always
4598 # Whether the Web Locks API is enabled
4599 - name: dom.weblocks.enabled
4600   type: RelaxedAtomicBool
4601   value: true
4602   mirror: always
4604 # Whether the WebMIDI API is enabled
4605 - name: dom.webmidi.enabled
4606   type: bool
4607   value: @IS_NOT_ANDROID@
4608   mirror: always
4610 # midi permission is addon-gated
4611 - name: dom.webmidi.gated
4612   type: bool
4613   value: true
4614   mirror: always
4616 - name: dom.webnotifications.allowcrossoriginiframe
4617   type: RelaxedAtomicBool
4618   value: false
4619   mirror: always
4621 - name: dom.webnotifications.enabled
4622   type: RelaxedAtomicBool
4623   value: true
4624   mirror: always
4626 - name: dom.webnotifications.requireuserinteraction
4627   type: RelaxedAtomicBool
4628   value: true
4629   mirror: always
4631 - name: dom.webnotifications.requireinteraction.enabled
4632   type: RelaxedAtomicBool
4633 #if defined(XP_WIN)
4634   value: true
4635 #else
4636   value: @IS_NIGHTLY_BUILD@
4637 #endif
4638   mirror: always
4640 - name: dom.webnotifications.silent.enabled
4641   type: RelaxedAtomicBool
4642   value: @IS_NIGHTLY_BUILD@
4643   mirror: always
4645 - name: dom.webnotifications.vibrate.enabled
4646   type: RelaxedAtomicBool
4647 #if defined(MOZ_WIDGET_ANDROID)
4648   value: @IS_NIGHTLY_BUILD@
4649 #else
4650   value: false
4651 #endif
4652   mirror: always
4654 # Is support for Window.event enabled?
4655 - name: dom.window.event.enabled
4656   type: bool
4657   value: true
4658   mirror: always
4660 - name: dom.window.clientinformation.enabled
4661   type: bool
4662   value: true
4663   mirror: always
4665 - name: dom.window.sidebar.enabled
4666   type: bool
4667   value: false
4668   mirror: always
4670 # Whether Window.sizeToContent() is enabled.
4671 - name: dom.window.sizeToContent.enabled
4672   type: bool
4673   value: @IS_NOT_NIGHTLY_BUILD@
4674   mirror: always
4676 - name: dom.worker.canceling.timeoutMilliseconds
4677   type: RelaxedAtomicUint32
4678   value: 30000    # 30 seconds
4679   mirror: always
4681 - name: dom.worker.use_medium_high_event_queue
4682   type: RelaxedAtomicBool
4683   value: true
4684   mirror: always
4686 # Enables the dispatching of console log events from worker threads to the
4687 # main-thread.
4688 - name: dom.worker.console.dispatch_events_to_main_thread
4689   type: RelaxedAtomicBool
4690   value: true
4691   mirror: always
4693 - name: dom.workers.testing.enabled
4694   type: RelaxedAtomicBool
4695   value: false
4696   mirror: always
4698 # When this pref is set, parent documents may consider child iframes have
4699 # loaded while they are still loading.
4700 - name: dom.cross_origin_iframes_loaded_in_background
4701   type: bool
4702   value: false
4703   mirror: always
4705 # WebIDL test prefs.
4706 - name: dom.webidl.test1
4707   type: bool
4708   value: true
4709   mirror: always
4710 - name: dom.webidl.test2
4711   type: bool
4712   value: true
4713   mirror: always
4715 - name: dom.webidl.crosscontext_hasinstance.enabled
4716   type: RelaxedAtomicBool
4717   value: false
4718   mirror: always
4720 # WebShare API - exposes navigator.share()
4721 - name: dom.webshare.enabled
4722   type: bool
4723 #ifdef XP_WIN
4724   value: @IS_EARLY_BETA_OR_EARLIER@
4725 #else
4726   value: false
4727 #endif
4728   mirror: always
4730 # WebShare API - allows WebShare without user interaction (for tests only).
4731 - name: dom.webshare.requireinteraction
4732   type: bool
4733   value: true
4734   mirror: always
4736 # about:home and about:newtab include remote snippets that contain arbitrarily
4737 # placed anchor tags in their content; we want sanitization to be turned off
4738 # in order to render them correctly
4739 - name: dom.about_newtab_sanitization.enabled
4740   type: bool
4741   value: false
4742   mirror: always
4744 # Hide the confirm dialog when a POST request is reloaded.
4745 - name: dom.confirm_repost.testing.always_accept
4746   type: bool
4747   value: false
4748   mirror: always
4750 # Whether we should suspend inactive tabs or not
4751 - name: dom.suspend_inactive.enabled
4752   type: bool
4753   value: @IS_ANDROID@
4754   mirror: always
4756 # The following three prefs control the maximum script run time before slow
4757 # script warning.
4759 # Controls the time that a content script can run before showing a
4760 # notification.
4761 - name: dom.max_script_run_time
4762   type: int32_t
4763   value: 10
4764   mirror: always
4766 # Controls whether we want to wait for user input before surfacing notifying
4767 # the parent process about a long-running script.
4768 - name: dom.max_script_run_time.require_critical_input
4769   type: bool
4770 # On desktop, we don't want to annoy the user with a notification if they're
4771 # not interacting with the browser. On Android however, we automatically
4772 # terminate long-running scripts, so we want to make sure we don't get in the
4773 # way of that by waiting for input.
4774 #if defined(MOZ_WIDGET_ANDROID)
4775   value: false
4776 #else
4777   value: true
4778 #endif
4779   mirror: always
4781 # Controls if a content script will be aborted on child process shutdown.
4782 - name: dom.abort_script_on_child_shutdown
4783   type: bool
4784   value: true
4785   mirror: always
4787 - name: dom.max_chrome_script_run_time
4788   type: int32_t
4789   value: 0
4790   mirror: always
4792 - name: dom.max_ext_content_script_run_time
4793   type: int32_t
4794   value: 5
4795   mirror: always
4797 # Initialize Resize Observer's last reported size to -1x-1, and not 0x0,
4798 # as per CSSWG resolution: https://github.com/w3c/csswg-drafts/issues/3664
4799 - name: dom.resize_observer.last_reported_size_invalid
4800   type: bool
4801   value: true
4802   mirror: always
4804 # Let Resize Observer report the size of all fragments, and not just the
4805 # first one, as per CSSWG resolution:
4806 # https://github.com/w3c/csswg-drafts/issues/3673#issuecomment-467221565
4807 - name: dom.resize_observer.support_fragments
4808   type: bool
4809   value: false
4810   mirror: always
4812 #---------------------------------------------------------------------------
4813 # Prefs starting with "editor"
4814 #---------------------------------------------------------------------------
4816 # Default background color of HTML editor.  This is referred only when
4817 # "editor.use_custom_colors" is set to `true`.
4818 - name: editor.background_color
4819   type: String
4820   value: "#FFFFFF"
4821   mirror: never
4823 # Use compatible range computation when applying inline style.  This is used
4824 # for making it possible to backout with Normandy Pref Rollout.
4825 - name: editor.inline_style.range.compatible_with_the_other_browsers
4826   type: bool
4827   value: true
4828   mirror: always
4830 # Whether use Blink/WebKit compatbile joining nodes and split a node direction.
4831 # false: Left node will be created (at splitting) and deleted (at joining)
4832 # true:  Right node will be created (at splitting) and deleted (at joinining)
4833 - name: editor.join_split_direction.compatible_with_the_other_browsers
4834   type: bool
4835   value: true
4836   mirror: always
4838 # Delay to mask last input character in password fields.
4839 # If negative value, to use platform's default behavior.
4840 # If 0, no delay to mask password.
4841 # Otherwise, password fields unmask last input character(s) during specified
4842 # time (in milliseconds).
4843 - name: editor.password.mask_delay
4844   type: int32_t
4845   value: -1
4846   mirror: always
4848 # Set to true when you test mask_delay of password editor.  If this is set
4849 # to true, "MozLastInputMasked" is fired when last input characters are
4850 # masked by timeout.
4851 - name: editor.password.testing.mask_delay
4852   type: bool
4853   value: false
4854   mirror: always
4856 # How line breakers are treated in single line editor:
4857 # * 0: Only remove the leading and trailing newlines.
4858 # * 1: Remove the first newline and all characters following it.
4859 # * 2: Replace newlines with spaces (default of Firefox).
4860 # * 3: Remove newlines from the string.
4861 # * 4: Replace newlines with commas (default of Thunderbird).
4862 # * 5: Collapse newlines and surrounding white space characters and
4863 #      remove them from the string.
4864 # Other values are treated as 1.
4865 - name: editor.singleLine.pasteNewlines
4866   type: int32_t
4867   value: 2
4868   mirror: always
4870 # Whether user pastes should be truncated.
4871 - name: editor.truncate_user_pastes
4872   type: bool
4873   value: true
4874   mirror: always
4876 # When this is set to `true`, "editor.background_color" must be set, then,
4877 # the value is treated as default background color of the HTML editor.
4878 # If `false` and "browser.display.use_system_colors" is set to `true`,
4879 # "browser.display.background_color" is used instead.
4880 # Otherwise, no color is used as default background color.
4881 # This pref is for Thunderbird and SeaMonkey.
4882 - name: editor.use_custom_colors
4883   type: bool
4884   value: false
4885   mirror: always
4887 # If this is set to `true`, CSS mode of style editor is enabled by default
4888 # unless it's a mail editor.
4889 # This pref is for Thunderbird and SeaMonkey.
4890 - name: editor.use_css
4891   type: bool
4892   value: false
4893   mirror: always
4895 # Whether enabling blink compatible white-space normalizer or keep using
4896 # Gecko's traditional white-space normalizer.
4897 - name: editor.white_space_normalization.blink_compatible
4898   type: bool
4899   value: false
4900   mirror: always
4902 # General prefs for editor, indicating whether Gecko-specific editing UI is
4903 # enabled by default. Those UIs are not implemented by any other browsers.  So,
4904 # only Firefox users can change some styles with them. This means that Firefox
4905 # users may get unexpected result of some web apps if they assume that users
4906 # cannot change such styles.
4907 - name: editor.resizing.enabled_by_default
4908   type: bool
4909   value: false
4910   mirror: always
4911 - name: editor.inline_table_editing.enabled_by_default
4912   type: bool
4913   value: false
4914   mirror: always
4915 - name: editor.positioning.enabled_by_default
4916   type: bool
4917   value: false
4918   mirror: always
4920 # Controls if a double click word selection also deletes one adjacent whitespace
4921 # (if feasible). This mimics native behaviour on MacOS.
4922 - name: editor.word_select.delete_space_after_doubleclick_selection
4923   type: bool
4924 #ifdef XP_MACOSX
4925   value: true
4926 #else
4927   value: false
4928 #endif
4929   mirror: always
4931 #---------------------------------------------------------------------------
4932 # Prefs starting with "extensions."
4933 #---------------------------------------------------------------------------
4935 # Pref that enforces the use of web_accessible_resources for content loads.
4936 # This behavior is default for MV3.  The pref controls this for MV2.
4937 - name: extensions.content_web_accessible.enabled
4938   type: bool
4939   value: false
4940   mirror: always
4942 # Whether the InstallTrigger implementation should be enabled (or hidden and
4943 # none of its methods available).
4944 - name: extensions.InstallTriggerImpl.enabled
4945   type: bool
4946   value: false
4947   mirror: always
4949 # Whether the InstallTrigger implementation should be enabled (or completely
4950 # hidden), separate from InstallTriggerImpl because InstallTrigger is improperly
4951 # used also for UA detection.
4952 - name: extensions.InstallTrigger.enabled
4953   type: bool
4954   value: @IS_NOT_EARLY_BETA_OR_EARLIER@
4955   mirror: always
4958 # Whether the background.service_worker in the extension manifest.json file
4959 # is enabled.
4960 - name: extensions.backgroundServiceWorker.enabled
4961   type: bool
4962   value: false
4963   mirror: once
4965 # Maximum number of misspelled words in a text.
4966 - name: extensions.spellcheck.inline.max-misspellings
4967   type: int32_t
4968   value: 500
4969   mirror: always
4971 # Whether the extensions can register a service worker on its own.
4972 # NOTE: WebExtensions Framework ability to register a background service worker
4973 # is not controlled by this pref, only the extension code ability to use
4974 # navigator.serviceWorker.register is locked behind this pref.
4975 - name: extensions.serviceWorkerRegister.allowed
4976   type: bool
4977   value: false
4978   mirror: always
4980 # Legacy behavior on filterResponse calls on intercepted sw script requests.
4981 - name: extensions.filterResponseServiceWorkerScript.disabled
4982   type: bool
4983   value: false
4984   mirror: always
4986 # This pref governs whether we run webextensions in a separate process (true)
4987 # or the parent/main process (false)
4988 - name: extensions.webextensions.remote
4989   type: RelaxedAtomicBool
4990   value: false
4991   mirror: always
4993 # Whether to expose the MockExtensionAPI test interface in tests.
4994 # The interface MockExtensionAPI doesn't represent a real extension API,
4995 # it is only available in test and does include a series of cases useful
4996 # to test the API request handling without tying the unit test to a
4997 # specific WebExtensions API.
4998 - name: extensions.webidl-api.expose_mock_interface
4999   type: RelaxedAtomicBool
5000   value: false
5001   mirror: always
5003 # Whether to allow acccess to AddonManager to developer sites for testing
5004 # NOTE: We'd like this to be a "hidden" pref once StaticPrefs supports it.
5005 - name: extensions.webapi.testing
5006   type: RelaxedAtomicBool
5007   value: false
5008   mirror: always
5010 # Automation-only pref to allow AddonManager over insecure protocols.
5011 # NOTE: We'd like this to be a "hidden" pref once StaticPrefs supports it.
5012 - name: extensions.webapi.testing.http
5013   type: RelaxedAtomicBool
5014   value: false
5015   mirror: always
5017 # Whether to expose the AddonManager web API.
5018 - name: extensions.webapi.enabled
5019   type: RelaxedAtomicBool
5020   value: @IS_NOT_ANDROID@
5021   mirror: always
5023 #---------------------------------------------------------------------------
5024 # Prefs starting with "fission."
5025 #---------------------------------------------------------------------------
5027 # Whether to enable Fission in new windows by default.
5028 # IMPORTANT: This preference should *never* be checked directly, since any
5029 # session can contain a mix of Fission and non-Fission windows. Instead,
5030 # callers should check whether the relevant nsILoadContext has the
5031 # `useRemoteSubframes` flag set.
5032 # Callers which cannot use `useRemoteSubframes` must use
5033 # `Services.appinfo.fissionAutostart` or `mozilla::FissionAutostart()` to check
5034 # whether fission is enabled by default.
5035 - name: fission.autostart
5036   type: bool
5037   value: @IS_NOT_ANDROID@
5038   mirror: never
5040 # This pref has no effect within fission windows, it only controls the
5041 # behaviour within non-fission windows. If true, preserve browsing contexts
5042 # between process swaps.
5043 - name: fission.preserve_browsing_contexts
5044   type: bool
5045   value: true
5046   mirror: always
5048 # Disable storing the session history in the parent process, and accessing it
5049 # over IPC from the child processes.
5050 - name: fission.disableSessionHistoryInParent
5051   type: bool
5052   value: @IS_ANDROID@
5053   mirror: once
5054   do_not_use_directly: true
5056 # If session history is stored in the parent process, enable bfcache for it.
5057 - name: fission.bfcacheInParent
5058   type: bool
5059   value: true
5060   mirror: always
5061   do_not_use_directly: true
5063 # Allow renaming of processes from Private Windows to the eTLD+1 on nightly
5064 # Setting this pref creates a privacy leak, but helps greatly with
5065 # debugging.
5066 - name: fission.processPrivateWindowSiteNames
5067   type: bool
5068   value: false
5069   mirror: always
5071 # Allow renaming of process names to the eTLD+1 on all versions, NOT
5072 # including processes from Private Windows
5073 # Setting this pref creates a privacy leak, but helps greatly with
5074 # debugging
5075 - name: fission.processSiteNames
5076   type: bool
5077   value: false
5078   mirror: always
5080 # Allow showing of current profile along with process names, NOT
5081 # including processes from Private Windows
5082 # Setting this pref creates a privacy leak, but helps greatly with
5083 # debugging
5084 - name: fission.processProfileName
5085   type: bool
5086   value: false
5087   mirror: always
5089 # If true, allow process-switching documents loaded by <object> and <embed>
5090 # elements into a remote process.
5091 # NOTE: This pref has no impact outside of windows with the
5092 # `useRemoteSubframes` flag set.
5093 - name: fission.remoteObjectEmbed
5094   type: bool
5095   value: true
5096   mirror: always
5098 # The strategy used to control how sites are isolated into separate processes
5099 # when Fisison is enabled. This pref has no effect if Fission is disabled.
5100 # See the `WebContentIsolationStrategy` enum in `ProcessIsolation.cpp`.
5101 - name: fission.webContentIsolationStrategy
5102   type: uint32_t
5103   value: 1
5104   mirror: always
5106 # Time in seconds before a site loaded with the Cross-Origin-Opener-Policy
5107 # header is no longer considered high-value and isolated in the "highValueCOOP"
5108 # configuration.
5109 - name: fission.highValue.coop.expiration
5110   type: uint32_t
5111   value: 2592000   # 30 days (in seconds)
5112   mirror: always
5114 # Time in seconds before a site are considered high-value by the login detection
5115 # service is no longer considered high-value and isolated in the "highValueHasSavedLogin"
5116 # or "highValueIsLoggedIn" configuration.
5117 - name: fission.highValue.login.expiration
5118   type: uint32_t
5119   value: 2592000   # 30 days (in seconds)
5120   mirror: always
5122 # If true, capture login attemp, and add "highValueIsLoggedIn" permission to
5123 # the permission manager no matter whether fission is enabled and
5124 # WebContentIsolationStrateg is set to IsolateHighvalue.
5125 - name: fission.highValue.login.monitor
5126   type: bool
5127   value: @IS_ANDROID@
5128   mirror: always
5130 # If true, do not send blocklisted preference values to the subprocess
5131 - name: fission.omitBlocklistedPrefsInSubprocesses
5132   type: RelaxedAtomicBool
5133   value: true
5134   mirror: always
5136 # If true, crash when a blocklisted preference is accessed in a subprocess
5137 - name: fission.enforceBlocklistedPrefsInSubprocesses
5138   type: RelaxedAtomicBool
5139   value: @IS_EARLY_BETA_OR_EARLIER@
5140   mirror: always
5142 #---------------------------------------------------------------------------
5143 # Prefs starting with "font."
5144 #---------------------------------------------------------------------------
5146 # A value greater than zero enables font size inflation for
5147 # pan-and-zoom UIs, so that the fonts in a block are at least the size
5148 # that, if a block's width is scaled to match the device's width, the
5149 # fonts in the block are big enough that at most the pref value ems of
5150 # text fit in *the width of the device*.
5152 # When both this pref and the next are set, the larger inflation is used.
5153 - name: font.size.inflation.emPerLine
5154   type: uint32_t
5155   value: 0
5156   mirror: always
5158 # A value greater than zero enables font size inflation for
5159 # pan-and-zoom UIs, so that if a block's width is scaled to match the
5160 # device's width, the fonts in a block are at least the given font size.
5161 # The value given is in twips, i.e., 1/20 of a point, or 1/1440 of an inch.
5163 # When both this pref and the previous are set, the larger inflation is used.
5164 - name: font.size.inflation.minTwips
5165   type: uint32_t
5166   value: 0
5167   mirror: always
5169 # In products with multi-mode pan-and-zoom and non-pan-and-zoom UIs,
5170 # this pref forces font inflation to always be enabled in all modes.
5171 # That is, any heuristics used to detect pan-and-zoom
5172 # vs. non-pan-and-zoom modes are disabled and all content is treated
5173 # as pan-and-zoom mode wrt font inflation.
5175 # This pref has no effect if font inflation is not enabled through
5176 # either of the prefs above.  It has no meaning in single-mode UIs.
5177 - name: font.size.inflation.forceEnabled
5178   type: bool
5179   value: false
5180   mirror: always
5182 # In products with multi-mode pan-and-zoom and non-pan-and-zoom UIs,
5183 # this pref disables font inflation in master-process contexts where
5184 # existing heuristics can't be used determine enabled-ness.
5186 # This pref has no effect if font inflation is not enabled through
5187 # either of the prefs above.  The "forceEnabled" pref above overrides
5188 # this pref.
5189 - name: font.size.inflation.disabledInMasterProcess
5190   type: bool
5191   value: false
5192   mirror: always
5194 # Defines the font size inflation mapping intercept parameter.
5196 # Font size inflation computes a minimum font size, m, based on
5197 # other preferences (see font.size.inflation.minTwips and
5198 # font.size.inflation.emPerLine, above) and the width of the
5199 # frame in which the text resides. Using this minimum, a specified
5200 # font size, s, is mapped to an inflated font size, i, using an
5201 # equation that varies depending on the value of the font size
5202 # inflation mapping intercept parameter, P.
5204 # If the intercept parameter is negative, then the following mapping
5205 # function is used:
5207 # i = m + s
5209 # If the intercept parameter is non-negative, then the mapping function
5210 # is a function such that its graph meets the graph of i = s at the
5211 # point where both i and s are (1 + P/2) * m for values of s that are
5212 # large enough. This means that when s=0, i is always equal to m.
5213 - name: font.size.inflation.mappingIntercept
5214   type: int32_t
5215   value: 1
5216   mirror: always
5218 # Since the goal of font size inflation is to avoid having to
5219 # repeatedly scroll side to side to read a block of text, and there are
5220 # a number of page layouts where a relatively small chunk of text is
5221 # better off not being inflated according to the same algorithm we use
5222 # for larger chunks of text, we want a threshold for an amount of text
5223 # that triggers font size inflation.  This preference controls that
5224 # threshold.
5226 # It controls the threshold used within an *approximation* of the
5227 # number of lines of text we use.  In particular, if we assume that
5228 # each character (collapsing collapsible whitespace) has a width the
5229 # same as the em-size of the font (when, normally, it's actually quite
5230 # a bit smaller on average), this preference gives the percentage of a
5231 # number of lines of text we'd need to trigger inflation.  This means
5232 # that a percentage of 100 means that we'd need a number of characters
5233 # (we know the font size and the width) equivalent to one line of
5234 # square text (which is actually a lot less than a real line of text).
5236 # A value of 0 means there's no character length threshold.
5237 - name: font.size.inflation.lineThreshold
5238   type: uint32_t
5239   value: 400
5240   mirror: always
5242 # This controls the percentage that fonts will be inflated, if font
5243 # size inflation is enabled. Essentially, if we have a specified font
5244 # size, s, and an inflated font size, i, this specifies that the ratio
5245 # i/s * 100 should never exceed the value of this preference. In order
5246 # for this preference to have any effect, its value must be greater
5247 # than 100, since font inflation can never decrease the ratio i/s.
5248 - name: font.size.inflation.maxRatio
5249   type: uint32_t
5250   value: 0
5251   mirror: always
5253 #---------------------------------------------------------------------------
5254 # Prefs starting with "full-screen-api."
5255 #---------------------------------------------------------------------------
5257 - name: full-screen-api.enabled
5258   type: bool
5259   value: true
5260   mirror: always
5262 - name: full-screen-api.allow-trusted-requests-only
5263   type: bool
5264   value: true
5265   mirror: always
5267 - name: full-screen-api.mouse-event-allow-left-button-only
5268   type: bool
5269   value: true
5270   mirror: always
5272 - name: full-screen-api.exit-on.windowOpen
5273   type: bool
5274   value: true
5275   mirror: always
5277 - name: full-screen-api.exit-on.windowRaise
5278   type: bool
5279   value: true
5280   mirror: always
5282 - name: full-screen-api.pointer-lock.enabled
5283   type: bool
5284   value: true
5285   mirror: always
5287 # whether to prevent the top level widget from going fullscreen
5288 - name: full-screen-api.ignore-widgets
5289   type: bool
5290   value: false
5291   mirror: always
5293 #---------------------------------------------------------------------------
5294 # Prefs starting with "fuzzing.". It's important that these can only be
5295 # checked in fuzzing builds (when FUZZING is defined), otherwise you could
5296 # enable the fuzzing stuff on your regular build which would be bad :)
5297 #---------------------------------------------------------------------------
5299 #ifdef FUZZING
5300 -   name: fuzzing.enabled
5301     type: bool
5302 #ifdef FUZZING_SNAPSHOT
5303     value: true
5304 #else
5305     value: false
5306 #endif
5307     mirror: always
5309 -   name: fuzzing.necko.enabled
5310     type: RelaxedAtomicBool
5311     value: false
5312     mirror: always
5314 -   name: fuzzing.necko.http3
5315     type: RelaxedAtomicBool
5316     value: false
5317     mirror: always
5318     rust: true
5319 #endif
5321 #---------------------------------------------------------------------------
5322 # Prefs starting with "general."
5323 #---------------------------------------------------------------------------
5325 - name: general.aboutConfig.enable
5326   type: bool
5327   value: true
5328   mirror: always
5330 # Limits the depth of recursive conversion of data when opening
5331 # a content to view.  This is mostly intended to prevent infinite
5332 # loops with faulty converters involved.
5333 - name: general.document_open_conversion_depth_limit
5334   type: uint32_t
5335   value: 20
5336   mirror: always
5338 - name: general.smoothScroll
5339   type: RelaxedAtomicBool
5340   value: true
5341   mirror: always
5343 # This pref and general.smoothScroll.stopDecelerationWeighting determine
5344 # the timing function.
5345 - name: general.smoothScroll.currentVelocityWeighting
5346   type: AtomicFloat
5347   value: 0.25
5348   mirror: always
5350 # To connect consecutive scroll events into a continuous flow, the animation's
5351 # duration should be longer than scroll events intervals (or else the scroll
5352 # will stop before the next event arrives - we're guessing the next interval
5353 # by averaging recent intervals).
5354 # This defines how much longer the duration is compared to the events
5355 # interval (percentage).
5356 - name: general.smoothScroll.durationToIntervalRatio
5357   type: RelaxedAtomicInt32
5358   value: 200
5359   mirror: always
5361 - name: general.smoothScroll.lines
5362   type: RelaxedAtomicBool
5363   value: true
5364   mirror: always
5366 - name: general.smoothScroll.lines.durationMaxMS
5367   type: RelaxedAtomicInt32
5368   value: 150
5369   mirror: always
5371 - name: general.smoothScroll.lines.durationMinMS
5372   type: RelaxedAtomicInt32
5373   value: 150
5374   mirror: always
5376 - name: general.smoothScroll.mouseWheel
5377   type: RelaxedAtomicBool
5378   value: true
5379   mirror: always
5381 - name: general.smoothScroll.mouseWheel.durationMaxMS
5382   type: RelaxedAtomicInt32
5383   value: 200
5384   mirror: always
5386 - name: general.smoothScroll.mouseWheel.durationMinMS
5387   type: RelaxedAtomicInt32
5388   value: 50
5389   mirror: always
5391 - name: general.smoothScroll.other
5392   type: RelaxedAtomicBool
5393   value: true
5394   mirror: always
5396 - name: general.smoothScroll.other.durationMaxMS
5397   type: RelaxedAtomicInt32
5398   value: 150
5399   mirror: always
5401 - name: general.smoothScroll.other.durationMinMS
5402   type: RelaxedAtomicInt32
5403   value: 150
5404   mirror: always
5406 - name: general.smoothScroll.pages
5407   type: RelaxedAtomicBool
5408   value: true
5409   mirror: always
5411 - name: general.smoothScroll.pages.durationMaxMS
5412   type: RelaxedAtomicInt32
5413   value: 150
5414   mirror: always
5416 - name: general.smoothScroll.pages.durationMinMS
5417   type: RelaxedAtomicInt32
5418   value: 150
5419   mirror: always
5421 - name: general.smoothScroll.scrollbars
5422   type: RelaxedAtomicBool
5423   value: true
5424   mirror: always
5426 - name: general.smoothScroll.scrollbars.durationMaxMS
5427   type: RelaxedAtomicInt32
5428   value: 150
5429   mirror: always
5431 - name: general.smoothScroll.scrollbars.durationMinMS
5432   type: RelaxedAtomicInt32
5433   value: 150
5434   mirror: always
5436 - name: general.smoothScroll.pixels
5437   type: RelaxedAtomicBool
5438   value: true
5439   mirror: always
5441 - name: general.smoothScroll.pixels.durationMaxMS
5442   type: RelaxedAtomicInt32
5443   value: 150
5444   mirror: always
5446 - name: general.smoothScroll.pixels.durationMinMS
5447   type: RelaxedAtomicInt32
5448   value: 150
5449   mirror: always
5451 # This pref and general.smoothScroll.currentVelocityWeighting determine
5452 # the timing function.
5453 - name: general.smoothScroll.stopDecelerationWeighting
5454   type: AtomicFloat
5455   value: 0.4f
5456   mirror: always
5458 # Alternative smooth scroll physics. ("MSD" = Mass-Spring-Damper)
5459 - name: general.smoothScroll.msdPhysics.enabled
5460   type: RelaxedAtomicBool
5461   value: false
5462   mirror: always
5464 - name: general.smoothScroll.msdPhysics.continuousMotionMaxDeltaMS
5465   type: RelaxedAtomicInt32
5466   value: 120
5467   mirror: always
5469 - name: general.smoothScroll.msdPhysics.motionBeginSpringConstant
5470   type: RelaxedAtomicInt32
5471   value: 1250
5472   mirror: always
5474 - name: general.smoothScroll.msdPhysics.slowdownMinDeltaMS
5475   type: RelaxedAtomicInt32
5476   value: 12
5477   mirror: always
5479 - name: general.smoothScroll.msdPhysics.slowdownMinDeltaRatio
5480   type: AtomicFloat
5481   value: 1.3f
5482   mirror: always
5484 - name: general.smoothScroll.msdPhysics.slowdownSpringConstant
5485   type: RelaxedAtomicInt32
5486   value: 2000
5487   mirror: always
5489 - name: general.smoothScroll.msdPhysics.regularSpringConstant
5490   type: RelaxedAtomicInt32
5491   value: 1000
5492   mirror: always
5494 #---------------------------------------------------------------------------
5495 # Prefs starting with "geo."
5496 #---------------------------------------------------------------------------
5498 # Is support for Navigator.geolocation enabled?
5499 - name: geo.enabled
5500   type: bool
5501   value: true
5502   mirror: always
5504 # Time, in milliseconds, to wait for the location provider to spin up.
5505 - name: geo.timeout
5506   type: int32_t
5507   value: 6000
5508   mirror: always
5510 #ifdef MOZ_ENABLE_DBUS
5511 # Whether to use Geoclue location provider (if available on the system).
5512 - name: geo.provider.use_geoclue
5513   type: bool
5514   value: true
5515   mirror: always
5517 # Whether to always provide high location accuracy, even if site
5518 # doesn't actually request this level of accuracy.
5519 # Almost no site correctly requests high accuracy so force it by default
5520 # for compatibility with other geolocation providers.
5521 - name: geo.provider.geoclue.always_high_accuracy
5522   type: bool
5523   value: true
5524   mirror: always
5525 #endif
5527 #---------------------------------------------------------------------------
5528 # Prefs starting with "gfx."
5529 #---------------------------------------------------------------------------
5531 # Allow 24-bit colour when the hardware supports it.
5532 - name: gfx.android.rgb16.force
5533   type: bool
5534   value: false
5535   mirror: once
5537 - name: gfx.apitrace.enabled
5538   type: bool
5539   value: false
5540   mirror: once
5542 - name: gfx.blithelper.precision
5543   type: RelaxedAtomicUint32
5544   value: 2 # { 0: lowp, 1: mediump, 2: highp }
5545   mirror: always
5547 - name: gfx.blithelper.lut-size.rgb.b
5548   type: RelaxedAtomicUint32
5549   value: 15
5550   mirror: always
5551 - name: gfx.blithelper.lut-size.rgb.g
5552   type: RelaxedAtomicUint32
5553   value: 31
5554   mirror: always
5555 - name: gfx.blithelper.lut-size.rgb.r
5556   type: RelaxedAtomicUint32
5557   value: 31
5558   mirror: always
5560 - name: gfx.blithelper.lut-size.ycbcr.cb
5561   type: RelaxedAtomicUint32
5562   value: 15
5563   mirror: always
5564 - name: gfx.blithelper.lut-size.ycbcr.cr
5565   type: RelaxedAtomicUint32
5566   value: 31
5567   mirror: always
5568 - name: gfx.blithelper.lut-size.ycbcr.y
5569   type: RelaxedAtomicUint32
5570   value: 31
5571   mirror: always
5573 # Nb: we ignore this pref on release and beta.
5574 - name: gfx.blocklist.all
5575   type: int32_t
5576   value: 0
5577   mirror: once
5579 #if defined(XP_MACOSX)
5580 - name: gfx.cairo_quartz_cg_layer.enabled
5581   type: bool
5582   value: true
5583   mirror: always
5584 #endif
5586 - name: gfx.canvas.accelerated
5587   type: bool
5588 #if defined(XP_MACOSX) || defined(XP_LINUX) && !defined(ANDROID)
5589   value: true
5590 #elif defined(MOZ_WIDGET_ANDROID)
5591   value: true
5592 #else
5593   value: false
5594 #endif
5595   mirror: always
5597 # Whether to attempt to enable Accelerated Canvas2D regardless of blocklisting.
5598 - name: gfx.canvas.accelerated.force-enabled
5599   type: bool
5600   value: false
5601   mirror: always
5603 - name: gfx.canvas.accelerated.async-present
5604   type: RelaxedAtomicBool
5605   value: true
5606   mirror: always
5608 - name: gfx.canvas.accelerated.cache-items
5609   type: RelaxedAtomicUint32
5610   value: 2048
5611   mirror: always
5613 - name: gfx.canvas.accelerated.cache-size
5614   type: RelaxedAtomicUint32
5615   value: 256
5616   mirror: always
5618 - name: gfx.canvas.accelerated.reserve-empty-cache
5619   type: RelaxedAtomicUint32
5620   value: 36
5621   mirror: always
5623 - name: gfx.canvas.accelerated.max-draw-target-count
5624   type: RelaxedAtomicInt32
5625   value: 200
5626   mirror: always
5628 - name: gfx.canvas.accelerated.max-size
5629   type: RelaxedAtomicInt32
5630   value: 0
5631   mirror: always
5633 - name: gfx.canvas.accelerated.min-size
5634   type: RelaxedAtomicInt32
5635   value: 128
5636   mirror: always
5638 - name: gfx.canvas.accelerated.max-surface-size
5639   type: RelaxedAtomicUint32
5640   value: 5280
5641   mirror: always
5643 - name: gfx.canvas.accelerated.shared-page-size
5644   type: RelaxedAtomicUint32
5645   value: 1024
5646   mirror: always
5648 # The minimum number of frames before acting on performance profile info
5649 - name: gfx.canvas.accelerated.profile-frames
5650   type: RelaxedAtomicUint32
5651   value: 10
5652   mirror: always
5654 # The ratio of failed frames to total frames when to fall back from acceleration
5655 - name: gfx.canvas.accelerated.profile-fallback-ratio
5656   type: AtomicFloat
5657   value: 0.3
5658   mirror: always
5660 # The ratio of cache misses at which to fail a profile frame
5661 - name: gfx.canvas.accelerated.profile-cache-miss-ratio
5662   type: AtomicFloat
5663   value: 0.66
5664   mirror: always
5666 # The maximum size of the GPU path cache in MB.
5667 - name: gfx.canvas.accelerated.gpu-path-size
5668   type: RelaxedAtomicUint32
5669   value: 4
5670   mirror: always
5672 # The maximum allowed complexity of a GPU path.
5673 - name: gfx.canvas.accelerated.gpu-path-complexity
5674   type: RelaxedAtomicUint32
5675   value: 4000
5676   mirror: always
5678 # Whether to accelerate stroked paths by converting them to fill paths.
5679 - name: gfx.canvas.accelerated.stroke-to-fill-path
5680   type: RelaxedAtomicBool
5681   value: false
5682   mirror: always
5684 # Whether to use aa-stroke to accelerate stroked paths.
5685 - name: gfx.canvas.accelerated.aa-stroke.enabled
5686   type: RelaxedAtomicBool
5687   value: true
5688   mirror: always
5690 # Draws an indicator if acceleration is used.
5691 - name: gfx.canvas.accelerated.debug
5692   type: RelaxedAtomicBool
5693   value: false
5694   mirror: always
5696 # 0x7fff is the maximum supported xlib surface size and is more than enough for canvases.
5697 - name: gfx.canvas.max-size
5698   type: RelaxedAtomicInt32
5699   value: 0x7fff
5700   mirror: always
5702 - name: gfx.canvas.remote
5703   type: RelaxedAtomicBool
5704 #if defined(XP_WIN)
5705   value: true
5706 #else
5707   value: false
5708 #endif
5709   mirror: always
5711 - name: gfx.color_management.display_profile
5712   type: DataMutexString
5713   value: ""
5714   mirror: always # But be warned: We cache the result.
5716 - name: gfx.color_management.force_srgb
5717   type: RelaxedAtomicBool
5718   value: false
5719   mirror: always
5721 - name: gfx.color_management.native_srgb
5722   type: RelaxedAtomicBool
5723 #if defined(XP_MACOSX)
5724   value: true
5725 #else
5726   value: false
5727 #endif
5728   mirror: always
5730 - name: gfx.color_management.enablev4
5731   type: RelaxedAtomicBool
5732   value: true
5733   mirror: always
5735 # 0 = Off, 1 = Full, 2 = Tagged Images Only.
5736 # See CMSMode in gfx/thebes/gfxPlatform.h.
5737 - name: gfx.color_management.mode
5738   type: RelaxedAtomicInt32
5739   value: 2
5740   mirror: always
5742 # The zero default here should match QCMS_INTENT_DEFAULT from qcms.h
5743 - name: gfx.color_management.rendering_intent
5744   type: RelaxedAtomicInt32
5745   value: 0
5746   mirror: always
5748 - name: gfx.color_management.rec709_gamma_as_srgb
5749   type: RelaxedAtomicBool
5750   value: true # Tragic backwards compat.
5751   mirror: always
5753 - name: gfx.color_management.rec2020_gamma_as_rec709
5754   type: RelaxedAtomicBool
5755   value: true # Match naive behavior, but hopefully we can stop soon!
5756   mirror: always
5758 # Whether GL contexts can be migrated to a different GPU (to match the one the
5759 # OS is using for composition).
5761 # 0 = force disable migration
5762 # 1 = use migration where in safe configurations (the default)
5763 # 2 = force enable migration (for testing)
5764 - name: gfx.compositor.gpu-migration
5765   type: RelaxedAtomicInt32
5766   value: 1
5767   mirror: always
5769 - name: gfx.core-animation.tint-opaque
5770   type: RelaxedAtomicBool
5771   value: false
5772   mirror: always
5774 #ifdef XP_MACOSX
5775   # Create specialized video-only layers for video content in
5776   # fullscreen windows. Consistently works well on Apple Silicon,
5777   # some issues remain on Intel hardware.
5778 -   name: gfx.core-animation.specialize-video
5779     type: RelaxedAtomicBool
5780 #if defined(MOZ_AARCH64)
5781     value: true
5782 #else
5783     value: false
5784 #endif
5785     mirror: always
5786 #endif
5788 #if defined(XP_MACOSX) && defined(NIGHTLY_BUILD)
5789   # Spoof the timing of the video sample instead of marking the untimed
5790   # sample to be displayed immediately.
5791 -   name: gfx.core-animation.specialize-video.spoof-timing
5792     type: RelaxedAtomicBool
5793     value: false
5794     mirror: always
5796   # Check that the sample has a color space and if it doesn't, log that
5797   # and supply the default color space from the main display.
5798 -   name: gfx.core-animation.specialize-video.check-color-space
5799     type: RelaxedAtomicBool
5800     value: false
5801     mirror: always
5803   # Log properties of the video surface, buffer, and format.
5804 -   name: gfx.core-animation.specialize-video.log
5805     type: RelaxedAtomicBool
5806     value: false
5807     mirror: always
5808 #endif
5810 #ifdef XP_MACOSX
5811 -   name: gfx.core-animation.low-power-telemetry-frames
5812     type: int32_t
5813     value: 600
5814     mirror: once
5815 #endif
5817 #if defined(MOZ_WIDGET_ANDROID)
5818   # Overrides the glClear color used when the surface origin is not (0, 0)
5819   # Used for drawing a border around the content.
5820 -   name: gfx.compositor.override.clear-color.r
5821     type: AtomicFloat
5822     value: 0.0f
5823     mirror: always
5825 -   name: gfx.compositor.override.clear-color.g
5826     type: AtomicFloat
5827     value: 0.0f
5828     mirror: always
5830 -   name: gfx.compositor.override.clear-color.b
5831     type: AtomicFloat
5832     value: 0.0f
5833     mirror: always
5835 -   name: gfx.compositor.override.clear-color.a
5836     type: AtomicFloat
5837     value: 0.0f
5838     mirror: always
5839 #endif  # defined(MOZ_WIDGET_ANDROID)
5841 - name: gfx.content.always-paint
5842   type: RelaxedAtomicBool
5843   value: false
5844   mirror: always
5846 # Size in megabytes
5847 - name: gfx.content.skia-font-cache-size
5848   type: int32_t
5849   value: 5
5850   mirror: once
5852 - name: gfx.device-reset.limit
5853   type: int32_t
5854   value: 10
5855   mirror: once
5857 - name: gfx.device-reset.threshold-ms
5858   type: int32_t
5859   value: -1
5860   mirror: once
5863 # Whether to disable the automatic detection and use of direct2d.
5864 - name: gfx.direct2d.disabled
5865   type: bool
5866   value: false
5867   mirror: once
5869 # Whether to attempt to enable Direct2D regardless of automatic detection or
5870 # blacklisting.
5871 - name: gfx.direct2d.force-enabled
5872   type: bool
5873   value: false
5874   mirror: once
5876 - name: gfx.direct2d.target-independent-rasterization.disabled
5877   type: bool
5878   value: false
5879   mirror: once
5881 - name: gfx.direct3d11.reuse-decoder-device
5882   type: bool
5883   value: true
5884   mirror: once
5885 # Enable reuse decoder device even when it is blocked.
5886 - name: gfx.direct3d11.reuse-decoder-device-force-enabled
5887   type: bool
5888   value: false
5889   mirror: once
5891 - name: gfx.direct3d11.allow-keyed-mutex
5892   type: RelaxedAtomicBool
5893   value: true
5894   mirror: always
5896 - name: gfx.direct3d11.use-double-buffering
5897   type: RelaxedAtomicBool
5898   value: false
5899   mirror: always
5901 - name: gfx.direct3d11.enable-debug-layer
5902   type: bool
5903   value: false
5904   mirror: once
5906 - name: gfx.direct3d11.break-on-error
5907   type: bool
5908   value: false
5909   mirror: once
5911 - name: gfx.direct3d11.sleep-on-create-device
5912   type: int32_t
5913   value: 0
5914   mirror: once
5916 # Rate by which the frame rate is divided. I.e. at a number higher than 1 we
5917 # will only refresh every <x> frames.
5918 - name: gfx.display.frame-rate-divisor
5919   type: RelaxedAtomicInt32
5920   value: 1
5921   mirror: always
5923 - name: gfx.display.max-frame-rate
5924   type: RelaxedAtomicInt32
5925   value: 0
5926   mirror: always
5928 # Whether to preserve color bitmap tables in fonts (bypassing OTS).
5929 # Currently these are supported only on platforms where we use Freetype
5930 # to render fonts (Linux/Gtk and Android).
5931 - name: gfx.downloadable_fonts.keep_color_bitmaps
5932   type: RelaxedAtomicBool
5933   value: false
5934   mirror: always
5936 # Whether font sanitization is performed on the main thread or not.
5937 - name: gfx.downloadable_fonts.sanitize_omt
5938   type: RelaxedAtomicBool
5939   value: true
5940   mirror: always
5942 # Whether to validate OpenType variation tables in fonts.
5943 - name: gfx.downloadable_fonts.validate_variation_tables
5944   type: RelaxedAtomicBool
5945   value: true
5946   mirror: always
5948 # Whether OTS validation should be applied to OpenType Layout (OTL) tables.
5949 - name: gfx.downloadable_fonts.otl_validation
5950   type: RelaxedAtomicBool
5951   value: @IS_NOT_RELEASE_OR_BETA@
5952   mirror: always
5954 - name: gfx.e10s.font-list.shared
5955   type: bool
5956   value: true
5957   mirror: once
5959 # Do we fire a notification about missing fonts, so the front-end can decide
5960 # whether to try and do something about it (e.g. download additional fonts)?
5961 - name: gfx.missing_fonts.notify
5962   type: RelaxedAtomicBool
5963   value: false
5964   mirror: always
5966 #if !defined(MOZ_WIDGET_ANDROID)
5967 - name: gfx.egl.prefer-gles.enabled
5968   type: bool
5969 #if defined(MOZ_WIDGET_GTK) && defined(MOZ_AARCH64)
5970   value: true
5971 #else
5972   value: false
5973 #endif
5974   mirror: once
5975 #endif
5977 # [Windows] Whether registry FontSubstitutes entries are used unconditionally,
5978 # or only if the original font is not available.
5979 #if defined(XP_WIN)
5980 - name: gfx.windows-font-substitutes.always
5981   type: bool
5982   value: false
5983   mirror: once
5984 #endif
5986 - name: gfx.font-list-omt.enabled
5987   type: bool
5988 #if defined(XP_MACOSX)
5989   value: true
5990 #else
5991   value: false
5992 #endif
5993   mirror: once
5995 # [Android] OPPO, realme and OnePlus device seem to crash when using Font
5996 # Match API. We turn off this feature on these devices. Set true if you want to
5997 # turn on it at force.
5998 #if defined(MOZ_WIDGET_ANDROID)
5999 - name: gfx.font-list.use_font_match_api.force-enabled
6000   type: bool
6001   value: false
6002   mirror: once
6003 #endif
6005 # Whether to load fonts (e.g. Twemoji Mozilla) bundled with the application:
6006 #  -1 - Auto behavior based on OS version (currently, disables loading on
6007 #       "low-memory" Android devices)
6008 #   0 - Skip loading any bundled fonts
6009 #   1 - Always load bundled fonts
6010 - name: gfx.bundled-fonts.activate
6011   type: int32_t
6012   value: -1
6013   mirror: once
6015 - name: gfx.font_loader.delay
6016   type: uint32_t
6017 #if defined(XP_WIN)
6018   value: 60000
6019 #else
6020   value: 8000
6021 #endif
6022   mirror: once
6024 # Disable antialiasing of Ahem, for use in tests.
6025 - name: gfx.font_rendering.ahem_antialias_none
6026   type: RelaxedAtomicBool
6027   value: false
6028   mirror: always
6030 #if defined(XP_MACOSX)
6031   # Set to true to revert from HarfBuzz AAT shaping to the old Core Text
6032   # backend.
6033 -   name: gfx.font_rendering.coretext.enabled
6034     type: RelaxedAtomicBool
6035     value: false
6036     mirror: always
6037 #endif
6039 - name: gfx.font_rendering.colr_v1.enabled
6040   type: RelaxedAtomicBool
6041   value: true
6042   mirror: always
6044 - name: gfx.font_rendering.opentype_svg.enabled
6045   type: RelaxedAtomicBool
6046   value: true
6047   mirror: always
6048   rust: true
6050 - name: gfx.font_rendering.fallback.async
6051   type: RelaxedAtomicBool
6052   value: true
6053   mirror: always
6055 # whether to always search all font cmaps during system font fallback
6056 - name: gfx.font_rendering.fallback.always_use_cmaps
6057   type: RelaxedAtomicBool
6058   value: false
6059   mirror: always
6061 #ifdef MOZ_WIDGET_GTK
6062 -   name: gfx.font_rendering.fontconfig.max_generic_substitutions
6063     type: RelaxedAtomicUint32
6064     value: 3
6065     mirror: always
6066 #endif
6068 #if defined(XP_WIN)
6069 # Whether the DirectWrite bold simulation should be used when a bold font-weight
6070 # is requested but no bold face available in the family. This renders poorly with
6071 # some third-party fonts, so by default we disable it for webfonts and allow it
6072 # only with locally-installed fonts.
6073 # Values:
6074 #   0 - never use DWrite bold simulation; always multi-strike instead
6075 #   1 - use DWrite bold for installed fonts, multi-strike for webfont resources
6076 #   2 - use DWrite bold for all fonts
6077 - name: gfx.font_rendering.directwrite.bold_simulation
6078   type: RelaxedAtomicUint32
6079   value: 1
6080   mirror: always
6081 #endif
6083 - name: gfx.font_rendering.graphite.enabled
6084   type: RelaxedAtomicBool
6085   value: true
6086   mirror: always
6088 # Cache shaped word results
6089 - name: gfx.font_rendering.wordcache.charlimit
6090   type: RelaxedAtomicUint32
6091   value: 32
6092   mirror: always
6094 # Cache shaped word results
6095 - name: gfx.font_rendering.wordcache.maxentries
6096   type: RelaxedAtomicUint32
6097   value: 10000
6098   mirror: always
6100 # The level of logging:
6101 # - 0: no logging;
6102 # - 1: adds errors;
6103 # - 2: adds warnings;
6104 # - 3 or 4: adds debug logging.
6105 # If you set the value to 4, you will also need to set the environment
6106 # variable MOZ_LOG to gfx:4. See mozilla/Logging.h for details.
6107 - name: gfx.logging.level
6108   type: RelaxedAtomicInt32
6109   value: mozilla::gfx::LOG_DEFAULT
6110   mirror: always
6111   include: mozilla/gfx/LoggingConstants.h
6113 - name: gfx.logging.crash.length
6114   type: uint32_t
6115   value: 16
6116   mirror: once
6118 # The maximums here are quite conservative, we can tighten them if problems show up.
6119 - name: gfx.logging.texture-usage.enabled
6120   type: bool
6121   value: false
6122   mirror: once
6124 - name: gfx.logging.peak-texture-usage.enabled
6125   type: bool
6126   value: false
6127   mirror: once
6129 - name: gfx.logging.slow-frames.enabled
6130   type: bool
6131   value: false
6132   mirror: once
6134 # Use gfxPlatform::MaxAllocSize instead of the pref directly.
6135 - name: gfx.max-alloc-size
6136   type: int32_t
6137   value: (int32_t)0x7FFFFFFF
6138   mirror: once
6139   do_not_use_directly: true
6141 # Use gfxPlatform::MaxTextureSize instead of the pref directly.
6142 - name: gfx.max-texture-size
6143   type: int32_t
6144   value: (int32_t)32767
6145   mirror: once
6146   do_not_use_directly: true
6148 # Enable OffscreenCanvas everywhere.
6149 - name: gfx.offscreencanvas.enabled
6150   type: RelaxedAtomicBool
6151   value: true
6152   mirror: always
6154 - name: gfx.omta.background-color
6155   type: bool
6156   value: true
6157   mirror: always
6159 - name: gfx.partialpresent.force
6160   type: RelaxedAtomicInt32
6161   value: 0
6162   mirror: always
6164 # SwapInterval
6165 - name: gfx.swap-interval.glx
6166   type: RelaxedAtomicBool
6167   value: true
6168   mirror: always
6170 - name: gfx.swap-interval.egl
6171   type: RelaxedAtomicBool
6172   mirror: always
6173 #ifdef MOZ_WIDGET_ANDROID
6174   value: true
6175 #else
6176   value: false
6177 #endif
6180 # Log severe performance warnings to the error console and profiles.
6181 # This should be use to quickly find which slow paths are used by test cases.
6182 - name: gfx.perf-warnings.enabled
6183   type: RelaxedAtomicBool
6184   value: false
6185   mirror: always
6187 #ifdef MOZ_X11
6188 # Whether to force using GLX over EGL.
6189 - name: gfx.x11-egl.force-disabled
6190   type: bool
6191   value: false
6192   mirror: once
6194 # Whether to force using EGL over GLX.
6195 - name: gfx.x11-egl.force-enabled
6196   type: bool
6197   value: false
6198   mirror: once
6200 - name: gfx.x11.glx_sgi_video_sync
6201   type: bool
6202   value: false
6203   mirror: once
6204 #endif
6206 - name: gfx.testing.device-fail
6207   type: RelaxedAtomicBool
6208   value: false
6209   mirror: always
6211 - name: gfx.testing.device-reset
6212   type: RelaxedAtomicInt32
6213   value: 0
6214   mirror: always
6216 - name: gfx.text.disable-aa
6217   type: bool
6218   value: false
6219   mirror: once
6221 - name: gfx.text.subpixel-position.force-enabled
6222   type: bool
6223   value: false
6224   mirror: once
6226 - name: gfx.text.subpixel-position.force-disabled
6227   type: bool
6228   value: false
6229   mirror: once
6231 - name: gfx.use-iosurface-textures
6232   type: bool
6233   value: false
6234   mirror: once
6236 - name: gfx.use-mutex-on-present
6237   type: bool
6238   value: false
6239   mirror: once
6241 # Use SurfaceTextures as preferred backend for TextureClient/Host.
6242 - name: gfx.use-surfacetexture-textures
6243   type: bool
6244   value: false
6245   mirror: once
6247 - name: gfx.vsync.compositor.unobserve-count
6248   type: int32_t
6249   value: 10
6250   mirror: once
6252 - name: gfx.vsync.force-disable-waitforvblank
6253   type: RelaxedAtomicBool
6254   value: false
6255   mirror: always
6257 - name: gfx.will-change.ignore-opacity
6258   type: RelaxedAtomicBool
6259   value: true
6260   mirror: always
6262 # Should we override the blocklist to enable WebGPU?
6263 - name: gfx.webgpu.ignore-blocklist
6264   type: bool
6265   value: false
6266   mirror: once
6268 # Whether to use the WebRender hardware backend
6269 - name: gfx.webrender.all
6270   type: bool
6271   value: false
6272   mirror: once
6274 #ifdef XP_WIN
6275 - name: gfx.webrender.force-angle
6276   type: bool
6277   value: true
6278   mirror: once
6279 #endif
6281 # WebRender is not enabled when there is no GPU process on window when
6282 # WebRender uses ANGLE. It is for avoiding that WebGL and WebRender use ANGLE
6283 # at once. But there is a case that we want to enable WebRender for testing.
6284 #ifdef XP_WIN
6285 - name: gfx.webrender.enabled-no-gpu-process-with-angle-win
6286   type: bool
6287   value: true
6288   mirror: once
6289 #endif
6291 - name: gfx.webrender.blob-images
6292   type: RelaxedAtomicBool
6293   value: true
6294   mirror: always
6296 - name: gfx.webrender.svg-images
6297   type: RelaxedAtomicBool
6298   value: true
6299   mirror: always
6301 - name: gfx.webrender.svg-shapes
6302   type: RelaxedAtomicBool
6303   value: true
6304   mirror: always
6306 - name: gfx.webrender.debug.blob.paint-flashing
6307   type: RelaxedAtomicBool
6308   value: false
6309   mirror: always
6311 - name: gfx.webrender.debug.enable-capture
6312   type: bool
6313   value: false
6314   mirror: once
6316 - name: gfx.webrender.debug.dl.dump-parent
6317   type: RelaxedAtomicBool
6318   value: false
6319   mirror: always
6321 - name: gfx.webrender.debug.dl.dump-content
6322   type: RelaxedAtomicBool
6323   value: false
6324   mirror: always
6326 - name: gfx.webrender.debug.dl.dump-content-serialized
6327   type: RelaxedAtomicBool
6328   value: false
6329   mirror: always
6331 #ifdef MOZ_WIDGET_GTK
6332 - name: gfx.webrender.reject-software-driver
6333   type: bool
6334   value: true
6335   mirror: once
6336 #endif
6338 - name: gfx.webrender.debug.highlight-painted-layers
6339   type: RelaxedAtomicBool
6340   value: false
6341   mirror: always
6343 - name: gfx.webrender.late-scenebuild-threshold
6344   type: RelaxedAtomicInt32
6345   value: 4
6346   mirror: always
6348 - name: gfx.webrender.max-filter-ops-per-chain
6349   type: RelaxedAtomicUint32
6350   value: 64
6351   mirror: always
6353 - name: gfx.webrender.batching.lookback
6354   type: uint32_t
6355   value: 10
6356   mirror: always
6358 - name: gfx.webrender.blob-tile-size
6359   type: uint32_t
6360   value: 256
6361   mirror: always
6363 - name: gfx.webrender.batched-upload-threshold
6364   type: int32_t
6365 #if defined(MOZ_WIDGET_ANDROID)
6366   value: 262144
6367 #else
6368   value: 65536
6369 #endif
6370   mirror: always
6372 - name: gfx.webrender.compositor
6373   type: bool
6374 #if defined(XP_WIN) || defined(XP_MACOSX)
6375   value: true
6376 #else
6377   value: false
6378 #endif
6379   mirror: once
6381 - name: gfx.webrender.scissored-cache-clears.enabled
6382   type: bool
6383   value: true
6384   mirror: once
6386 - name: gfx.webrender.scissored-cache-clears.force-enabled
6387   type: bool
6388   value: false
6389   mirror: once
6391 - name: gfx.webrender.compositor.force-enabled
6392   type: bool
6393   value: false
6394   mirror: once
6396 - name: gfx.webrender.compositor.max_update_rects
6397   type: uint32_t
6398   value: 1
6399   mirror: once
6401 - name: gfx.webrender.compositor.surface-pool-size
6402   type: uint32_t
6403   value: 25
6404   mirror: once
6406 # Number of damage rects we can give to the compositor for a new frame with
6407 # partial present. This controls whether partial present is used or not.
6408 - name: gfx.webrender.max-partial-present-rects
6409   type: uint32_t
6410 #if defined(XP_WIN) || defined(MOZ_WIDGET_ANDROID) || defined(MOZ_WIDGET_GTK)
6411   value: 1
6412 #else
6413   value: 0
6414 #endif
6415   mirror: once
6417 # Whether or not we can reuse the buffer contents using the GL buffer age
6418 # extension, if supported by the platform. This requires partial present
6419 # to be used.
6420 - name: gfx.webrender.allow-partial-present-buffer-age
6421   type: bool
6422   value: true
6423   mirror: once
6425 # Whether or not we should force partial present on.
6426 - name: gfx.webrender.force-partial-present
6427   type: bool
6428   value: false
6429   mirror: once
6431 - name: gfx.webrender.enable-gpu-markers
6432   type: bool
6433 #ifdef DEBUG
6434   value: true
6435 #else
6436   value: false
6437 #endif
6438   mirror: once
6440 - name: gfx.webrender.enable-item-cache
6441   type: bool
6442   value: true
6443   mirror: once
6445 # Whether or not to fallback from WebRender to Software WebRender.
6446 - name: gfx.webrender.fallback.software
6447   type: bool
6448   value: true
6449   mirror: once
6451 #ifdef XP_WIN
6452   # Whether to use an overlay of hardware decoded video with DirectComposition
6453 -   name: gfx.webrender.dcomp-video-hw-overlay-win
6454     type: bool
6455     value: true
6456     mirror: once
6457   # Enable hardware decoded video overlay even when it is blocked.
6458 -   name: gfx.webrender.dcomp-video-hw-overlay-win-force-enabled
6459     type: bool
6460     value: false
6461     mirror: once
6462   # Whether to use a yuv video overlay layers with DirectComposition
6463 -   name: gfx.webrender.dcomp-video-yuv-overlay-win
6464     type: bool
6465     value: false
6466     mirror: once
6467 -   name: gfx.webrender.dcomp-video-vp-scaling-win
6468     type: bool
6469     value: true
6470     mirror: once
6471   # Whether to use virtual surfaces, as opposed to each tile owning a surface.
6472 -   name: gfx.webrender.dcomp-use-virtual-surfaces
6473     type: bool
6474     value: true
6475     mirror: once
6476   # Whether to use an overlay of software decoded video with DirectComposition
6477 -   name: gfx.webrender.dcomp-video-sw-overlay-win
6478     type: bool
6479     value: true
6480     mirror: once
6481   # Enable software decoded video overlay even when it is blocked.
6482 -   name: gfx.webrender.dcomp-video-sw-overlay-win-force-enabled
6483     type: bool
6484     value: false
6485     mirror: once
6486 -   name: gfx.webrender.dcomp-video-check-slow-present
6487     type: RelaxedAtomicBool
6488     value: true
6489     mirror: always
6490   # Force triple buffering in overlay's video swap chain
6491 -   name: gfx.webrender.dcomp-video-force-triple-buffering
6492     type: RelaxedAtomicBool
6493     value: false
6494     mirror: always
6495 -   name: gfx.video.convert-i420-to-nv12.force-enabled
6496     type: bool
6497     value: false
6498     mirror: once
6499 #endif
6501 # Whether or not fallback to Software WebRender requires the GPU process.
6502 - name: gfx.webrender.fallback.software.requires-gpu-process
6503   type: bool
6504   value: false
6505   mirror: once
6507 - name: gfx.webrender.program-binary-disk
6508   type: bool
6509 #if defined(XP_WIN) || defined(ANDROID)
6510   value: true
6511 #else
6512   value: false
6513 #endif
6514   mirror: once
6516 - name: gfx.webrender.use-optimized-shaders
6517   type: bool
6518   value: true
6519   mirror: once
6521 - name: gfx.webrender.precache-shaders
6522   type: bool
6523   value: false
6524   mirror: once
6526 # When gl debug message is a high severity message, forwward it to gfx critical
6527 # note.
6528 - name: gfx.webrender.gl-debug-message-critical-note
6529   type: bool
6530 #if defined(XP_WIN) && defined(NIGHTLY_BUILD)
6531   value: true
6532 #else
6533   value: false
6534 #endif
6535   mirror: once
6537 # Enable printing gl debug messages
6538 - name: gfx.webrender.gl-debug-message-print
6539   type: bool
6540   value: false
6541   mirror: once
6543 #ifdef NIGHTLY_BUILD
6544   # Keep this pref hidden on non-nightly builds to avoid people accidentally
6545   # turning it on.
6546 - name: gfx.webrender.panic-on-gl-error
6547   type: bool
6548   value: false
6549   mirror: once
6550 #endif
6552 #ifdef XP_WIN
6553   # Enables display of performance debugging counters when DirectComposition
6554   # is used.
6555   # Performance counters are displayed on the top-right corner of the screen.
6556 -   name: gfx.webrender.debug.dcomp-counter
6557     type: RelaxedAtomicBool
6558     value: false
6559     mirror: always
6560   # Enables highlighting redraw regions of DCompositionVisual
6561 -   name: gfx.webrender.debug.dcomp-redraw-regions
6562     type: RelaxedAtomicBool
6563     value: false
6564     mirror: always
6565 #endif
6567 #ifdef XP_MACOSX
6568   # Files show up in $HOME/Desktop/nativelayerdumps-PID/frame-123.html
6569 -   name: gfx.webrender.debug.dump-native-layer-tree-to-file
6570     type: RelaxedAtomicBool
6571     value: false
6572     mirror: always
6573 #endif
6575 - name: gfx.webrender.enable-low-priority-pool
6576   type: RelaxedAtomicBool
6577 #if defined(ANDROID)
6578   value: false
6579 #else
6580   value: true
6581 #endif
6582   mirror: always
6584   # Force subpixel anti-aliasing as much as possible, despite performance cost.
6585 - name: gfx.webrender.quality.force-subpixel-aa-where-possible
6586   type: bool
6587   value: false
6588   mirror: always
6590 - name: gfx.webrender.enable-subpixel-aa
6591   type: bool
6592   mirror: once
6593 #ifdef MOZ_WIDGET_ANDROID
6594   value: false
6595 #else
6596   value: true
6597 #endif
6599 #ifdef XP_MACOSX
6600 - name: gfx.webrender.enable-client-storage
6601   type: bool
6602   value: true
6603   mirror: once
6604 #endif
6606  # Width of WebRender tile size
6607 - name: gfx.webrender.picture-tile-width
6608   type: RelaxedAtomicInt32
6609   value: 1024
6610   mirror: always
6612  # Width of WebRender tile size
6613 - name: gfx.webrender.picture-tile-height
6614   type: RelaxedAtomicInt32
6615   value: 512
6616   mirror: always
6618 # WebRender upper bound for shared surface size
6619 # According to apitrace, textures larger than 2048 break fast clear
6620 # optimizations on some intel drivers. We sometimes need to go larger, but
6621 # we try to avoid it.
6622 - name: gfx.webrender.max-shared-surface-size
6623   type: int32_t
6624   value: 2048
6625   mirror: once
6627 # Whether to use EGL robustness or not.
6628 - name: gfx.webrender.prefer-robustness
6629   type: bool
6630 #if defined(XP_WIN) || defined(MOZ_WIDGET_GTK)
6631   value: true
6632 #else
6633   value: false
6634 #endif
6635   mirror: once
6637 # Whether to use the WebRender software backend
6638 - name: gfx.webrender.software
6639   type: bool
6640   value: false
6641   mirror: once
6643 # Whether to use the D3D11 RenderCompositor when using WebRender software backend
6644 - name: gfx.webrender.software.d3d11
6645   type: bool
6646   value: true
6647   mirror: once
6649 - name: gfx.webrender.software.opengl
6650   type: bool
6651 #if defined(MOZ_WIDGET_ANDROID)
6652   value: true
6653 #else
6654   value: false
6655 #endif
6656   mirror: once
6658 - name: gfx.webrender.software.d3d11.upload-mode
6659   type: RelaxedAtomicInt32
6660   value: 4
6661   mirror: always
6663 # Whether to force widgets to don't support acceleration to use WebRender
6664 # despite that
6665 - name: gfx.webrender.unaccelerated-widget.force
6666   type: RelaxedAtomicBool
6667   value: false
6668   mirror: always
6670 # Enable a lower quality, but higher performance pinch-zoom mode. Primarily
6671 # for devices with weak GPUs, or when running SWGL.
6672 - name: gfx.webrender.low-quality-pinch-zoom
6673   type: bool
6674 #if defined(MOZ_WIDGET_ANDROID) && defined(NIGHTLY_BUILD)
6675   value: true
6676 #else
6677   value: false
6678 #endif
6679   mirror: once
6681 # Disable wait of GPU execution completion
6682 - name: gfx.webrender.wait-gpu-finished.disabled
6683   type: bool
6684 #if defined(XP_WIN)
6685   value: true
6686 #else
6687   value: false
6688 #endif
6689   mirror: once
6691 # Enable NVIDIA RTX Video Super Resolution for video overlay on Windows
6692 # Note: This is also a setting in NVIDIA's driver settings, so once this is
6693 # stable, it should default to true
6694 - name: gfx.webrender.super-resolution.nvidia
6695   type: bool
6696   value: false
6697   mirror: once
6699 # Use vsync events generated by hardware
6700 - name: gfx.work-around-driver-bugs
6701   type: bool
6702   value: true
6703   mirror: once
6705 - name: gfx.ycbcr.accurate-conversion
6706   type: RelaxedAtomicBool
6707   value: false
6708   mirror: always
6710 #---------------------------------------------------------------------------
6711 # Prefs starting with "gl." (OpenGL)
6712 #---------------------------------------------------------------------------
6714 - name: gl.allow-high-power
6715   type: RelaxedAtomicBool
6716   value: true
6717   mirror: always
6719 - name: gl.ignore-dx-interop2-blacklist
6720   type: RelaxedAtomicBool
6721   value: false
6722   mirror: always
6724 - name: gl.use-tls-is-current
6725   type: RelaxedAtomicInt32
6726   value: 0
6727   mirror: always
6729 #---------------------------------------------------------------------------
6730 # Prefs starting with "html5."
6731 #---------------------------------------------------------------------------
6733 # Turn HTML:inert on or off.
6734 - name: html5.inert.enabled
6735   type: bool
6736   value: true
6737   mirror: always
6739 # Time in milliseconds between the time a network buffer is seen and the timer
6740 # firing when the timer hasn't fired previously in this parse in the
6741 # off-the-main-thread HTML5 parser.
6742 - name: html5.flushtimer.initialdelay
6743   type: RelaxedAtomicInt32
6744   value: 16
6745   mirror: always
6747 # Time in milliseconds between the time a network buffer is seen and the timer
6748 # firing when the timer has already fired previously in this parse.
6749 - name: html5.flushtimer.subsequentdelay
6750   type: RelaxedAtomicInt32
6751   value: 16
6752   mirror: always
6754 #---------------------------------------------------------------------------
6755 # Prefs starting with "idle_period."
6756 #---------------------------------------------------------------------------
6758 - name: idle_period.min
6759   type: uint32_t
6760   value: 3
6761   mirror: always
6763 - name: idle_period.during_page_load.min
6764   type: uint32_t
6765   value: 12
6766   mirror: always
6768 - name: idle_period.cross_process_scheduling
6769   type: RelaxedAtomicBool
6770   value: true
6771   mirror: always
6773 #---------------------------------------------------------------------------
6774 # Prefs starting with "image."
6775 #---------------------------------------------------------------------------
6777 # The maximum size (in kB) that the aggregate frames of an animation can use
6778 # before it starts to discard already displayed frames and redecode them as
6779 # necessary.
6780 - name: image.animated.decode-on-demand.threshold-kb
6781   type: RelaxedAtomicUint32
6782   value: 20*1024
6783   mirror: always
6785 # The minimum number of frames we want to have buffered ahead of an
6786 # animation's currently displayed frame.
6787 - name: image.animated.decode-on-demand.batch-size
6788   type: RelaxedAtomicUint32
6789   value: 6
6790   mirror: always
6792 # Whether we should recycle already displayed frames instead of discarding
6793 # them. This saves on the allocation itself, and may be able to reuse the
6794 # contents as well. Only applies if generating full frames.
6795 - name: image.animated.decode-on-demand.recycle
6796   type: bool
6797   value: true
6798   mirror: once
6800 # Resume an animated image from the last displayed frame rather than
6801 # advancing when out of view.
6802 - name: image.animated.resume-from-last-displayed
6803   type: RelaxedAtomicBool
6804   value: true
6805   mirror: always
6807 # Maximum number of surfaces for an image before entering "factor of 2" mode.
6808 # This in addition to the number of "native" sizes of an image. A native size
6809 # is a size for which we can decode a frame without up or downscaling. Most
6810 # images only have 1, but some (i.e. ICOs) may have multiple frames for the
6811 # same data at different sizes.
6812 - name: image.cache.factor2.threshold-surfaces
6813   type: RelaxedAtomicInt32
6814   value: 4
6815   mirror: always
6817 # Maximum size of a surface in KB we are willing to produce when rasterizing
6818 # an SVG.
6819 - name: image.cache.max-rasterized-svg-threshold-kb
6820   type: RelaxedAtomicInt32
6821   value: 200*1024
6822   mirror: always
6824 # The maximum size, in bytes, of the decoded images we cache.
6825 - name: image.cache.size
6826   type: int32_t
6827   value: 5*1024*1024
6828   mirror: once
6830 # A weight, from 0-1000, to place on time when comparing to size.
6831 # Size is given a weight of 1000 - timeweight.
6832 - name: image.cache.timeweight
6833   type: int32_t
6834   value: 500
6835   mirror: once
6837 # Decode all images automatically on load, ignoring our normal heuristics.
6838 - name: image.decode-immediately.enabled
6839   type: RelaxedAtomicBool
6840   value: false
6841   mirror: always
6843 # Decode all images synchronously
6844 - name: image.decode-sync.enabled
6845   type: bool
6846   value: false
6847   mirror: always
6849 # Whether we attempt to downscale images during decoding.
6850 - name: image.downscale-during-decode.enabled
6851   type: RelaxedAtomicBool
6852   value: true
6853   mirror: always
6855 # Whether we use EXIF metadata for image density.
6856 - name: image.exif-density-correction.enabled
6857   type: RelaxedAtomicBool
6858   value: true
6859   mirror: always
6861 # Whether EXIF density metadata is sanity checked against PixelXDimension and PixelYDimension
6862 - name: image.exif-density-correction.sanity-check.enabled
6863   type: RelaxedAtomicBool
6864   value: true
6865   mirror: always
6867 # The threshold for inferring that changes to an <img> element's |src|
6868 # attribute by JavaScript represent an animation, in milliseconds. If the |src|
6869 # attribute is changing more frequently than this value, then we enter a
6870 # special "animation mode" which is designed to eliminate flicker. Set to 0 to
6871 # disable.
6872 - name: image.infer-src-animation.threshold-ms
6873   type: RelaxedAtomicUint32
6874   value: 2000
6875   mirror: always
6877 # Whether the network request priority should be adjusted according
6878 # the layout and view frame position of each particular image.
6879 - name: image.layout_network_priority
6880   type: RelaxedAtomicBool
6881   value: true
6882   mirror: always
6884 # Chunk size for calls to the image decoders.
6885 - name: image.mem.decode_bytes_at_a_time
6886   type: uint32_t
6887   value: 16384
6888   mirror: once
6890 # Discards inactive image frames and re-decodes them on demand from
6891 # compressed data.
6892 - name: image.mem.discardable
6893   type: RelaxedAtomicBool
6894   value: true
6895   mirror: always
6897 # Discards inactive image frames of _animated_ images and re-decodes them on
6898 # demand from compressed data. Has no effect if image.mem.discardable is false.
6899 - name: image.mem.animated.discardable
6900   type: bool
6901   value: true
6902   mirror: once
6904 # Enable extra information for debugging in the image memory reports.
6905 - name: image.mem.debug-reporting
6906   type: RelaxedAtomicBool
6907   value: false
6908   mirror: always
6910 # Force unmapping of unused shared surfaces after a timeout period or when we
6911 # encounter virtual memory pressure. By default this is only enabled on 32-bit
6912 # Firefox.
6913 - name: image.mem.shared.unmap.force-enabled
6914   type: bool
6915   value: false
6916   mirror: once
6918 # Minimum timeout to unmap shared surfaces since they have been last used,
6919 # in milliseconds.
6920 - name: image.mem.shared.unmap.min_expiration_ms
6921   type: uint32_t
6922   value: 60*1000
6923   mirror: once
6925 # Mininum size for shared surfaces to consider unmapping, in kilobytes.
6926 - name: image.mem.shared.unmap.min_threshold_kb
6927   type: uint32_t
6928   value: 100
6929   mirror: once
6931 # How much of the data in the surface cache is discarded when we get a memory
6932 # pressure notification, as a fraction. The discard factor is interpreted as a
6933 # reciprocal, so a discard factor of 1 means to discard everything in the
6934 # surface cache on memory pressure, a discard factor of 2 means to discard half
6935 # of the data, and so forth. The default should be a good balance for desktop
6936 # and laptop systems, where we never discard visible images.
6937 - name: image.mem.surfacecache.discard_factor
6938   type: uint32_t
6939   value: 1
6940   mirror: once
6942 # Maximum size for the surface cache, in kilobytes.
6943 - name: image.mem.surfacecache.max_size_kb
6944   type: uint32_t
6945   value: 2024 * 1024
6946   mirror: once
6948 # Minimum timeout for expiring unused images from the surface cache, in
6949 # milliseconds. This controls how long we store cached temporary surfaces.
6950 - name: image.mem.surfacecache.min_expiration_ms
6951   type: uint32_t
6952   value: 60*1000
6953   mirror: once
6955 # The surface cache's size, within the constraints of the maximum size set
6956 # above, is determined as a fraction of main memory size. The size factor is
6957 # interpreted as a reciprocal, so a size factor of 4 means to use no more than
6958 # 1/4 of main memory.  The default should be a good balance for most systems.
6959 - name: image.mem.surfacecache.size_factor
6960   type: uint32_t
6961   value: 4
6962   mirror: once
6964 # Whether we record SVG images as blobs or not.
6965 - name: image.svg.blob-image
6966   type: RelaxedAtomicBool
6967   value: false
6968   mirror: always
6970 # Whether we attempt to decode WebP images or not.
6971 - name: image.webp.enabled
6972   type: RelaxedAtomicBool
6973   value: true
6974   mirror: always
6976 # Whether we attempt to decode AVIF images or not.
6977 - name: image.avif.enabled
6978   type: RelaxedAtomicBool
6979 #if defined(MOZ_AV1)
6980   value: true
6981 #else
6982   value: false
6983 #endif
6984   mirror: always
6986 # How strict we are in accepting/rejecting AVIF inputs according to whether they
6987 # conform to the specification
6988 # 0 = Permissive: accept whatever we can simply, unambiguously interpret
6989 # 1 = Normal: reject violations of "shall" specification directives
6990 # 2 = Strict: reject violations of "should" specification directives
6991 - name: image.avif.compliance_strictness
6992   type: RelaxedAtomicInt32
6993   value: 1
6994   mirror: always
6996 # Whether we apply container-level transforms like mirroring and rotation
6997 - name: image.avif.apply_transforms
6998   type: RelaxedAtomicBool
6999   value: true
7000   mirror: always
7002 # Whether we use dav1d (true) or libaom (false) to decode AVIF image
7003 - name: image.avif.use-dav1d
7004   type: RelaxedAtomicBool
7005   value: true
7006   mirror: always
7008 # Whether to allow decoding of animated AVIF sequences.
7009 - name: image.avif.sequence.enabled
7010   type: RelaxedAtomicBool
7011   value: true
7012   mirror: always
7014 # Whether AVIF files containing sequences should be animated even when the
7015 # major brand is set to 'avif'.
7016 - name: image.avif.sequence.animate_avif_major_branded_images
7017   type: RelaxedAtomicBool
7018   value: false
7019   mirror: always
7021 # Whether we attempt to decode JXL images or not.
7022 - name: image.jxl.enabled
7023   type: RelaxedAtomicBool
7024   value: false
7025   mirror: always
7027 #---------------------------------------------------------------------------
7028 # Prefs starting with "intl."
7029 #---------------------------------------------------------------------------
7031 #ifdef XP_WIN
7032   # Whether making Gecko TSF-aware or only working with IMM.  TSF is a modern
7033   # IME API set of Windows which replaces IMM APIs.  Unless you can avoid the
7034   # problem which you see with enabling TSF, you shouldn't change this pref
7035   # to false since IMM handler is now not maintained nor tested with latest
7036   # Windows.  If you need to change this pref to false, please file a bug to
7037   # <https://bugzilla.mozilla.org>.
7038   # Restart required to apply this pref change.
7039 -   name: intl.tsf.enabled
7040     type: bool
7041     value: true
7042     mirror: once
7044   # Whether Gecko creates or does not create native caret for legacy ATOK
7045   # (2011 - 2015).
7046 -   name: intl.tsf.hack.atok.create_native_caret
7047     type: bool
7048     value: true
7049     mirror: always
7051   # Whether Gecko returns available composition string rect or TS_E_NOLAYOUT
7052   # from ITextStoreACP::GetTextExt() when the specified range is same as the
7053   # range of composition string but some character rects in it are still
7054   # dirty if and only if ATOK is active TIP.
7055   # Note that this is ignored if active ATOK is or older than 2016 and
7056   # create_native_caret is true.
7057 -   name: intl.tsf.hack.atok.do_not_return_no_layout_error_of_composition_string
7058     type: bool
7059     value: true
7060     mirror: always
7062   # Whether Gecko sets input scope of ATOK to "search" or never does it.
7063   # When "search" is set to the input scope, ATOK may stop their suggestions.
7064   # To avoid it, turn this pref on, or changing the settings in ATOK.
7065   # Note that if you enable this pref and you use the touch keyboard for touch
7066   # screens, you cannot access some specific features for a "search" input
7067   # field.
7068 -   name: intl.tsf.hack.atok.search_input_scope_disabled
7069     type: bool
7070     value: false
7071     mirror: always
7073   # Whether Gecko returns caret rect before composition string or TS_E_NOLAYOUT
7074   # from ITextStoreACP::GetTextExt() when the specified range is larger than
7075   # composition start offset if and only if Free ChangJie is active TIP.
7076 -   name: intl.tsf.hack.free_chang_jie.do_not_return_no_layout_error
7077     type: bool
7078     value: true
7079     mirror: always
7081   # Whether Gecko returns available composition string rect or TS_E_NOLAYOUT
7082   # from ITextStoreACP::GetTextExt() when the specified range is same as the
7083   # range of composition string but some character rects in it are still
7084   # dirty if and only if Japanist 10 is active TIP.
7085 -   name: intl.tsf.hack.japanist10.do_not_return_no_layout_error_of_composition_string
7086     type: bool
7087     value: true
7088     mirror: always
7090   # Whether Gecko returns previous character rect or TS_E_NOLAYOUT from
7091   # ITfContextView::GetTextExt() when the specified range is the first
7092   # character of selected clause of composition string if and only if Japanese TIP
7093   # of Microsoft is active.
7094 -   name: intl.tsf.hack.ms_japanese_ime.do_not_return_no_layout_error_at_first_char
7095     type: bool
7096     value: true
7097     mirror: always
7099   # Whether Gecko returns previous character rect or TS_E_NOLAYOUT from
7100   # ITfContextView::GetTextExt() when the specified range is the caret of
7101   # composition string if and only if Japanese TIP of Microsoft is active.
7102 -   name: intl.tsf.hack.ms_japanese_ime.do_not_return_no_layout_error_at_caret
7103     type: bool
7104     value: true
7105     mirror: always
7107   # Whether Gecko returns caret rect before composition string or TS_E_NOLAYOUT
7108   # from ITfContextView::GetTextExt() when the specified range is larger than
7109   # composition start offset if and only Simplified Chinese TIP of Microsoft
7110   # is active.
7111 -   name: intl.tsf.hack.ms_simplified_chinese.do_not_return_no_layout_error
7112     type: bool
7113     value: true
7114     mirror: always
7116   # Whether Geckos hacks ITextStoreACP::QueryInsert() or not.  The method should
7117   # return new selection after specified length text is inserted at specified
7118   # range.  However, Microsoft Pinyin and Microsoft Wubi expect that the result
7119   # is same as specified range.  If following prefs are true,
7120   # ITextStoreACP::QueryInsert() returns specified range only when one of the
7121   # TIPs is active.
7122 -   name: intl.tsf.hack.ms_simplified_chinese.query_insert_result
7123     type: bool
7124     value: true
7125     mirror: always
7127   # Whether Gecko returns caret rect before composition string or TS_E_NOLAYOUT
7128   # from ITfContextView::GetTextExt() when the specified range is larger than
7129   # composition start offset if and only Traditional Chinese TIP of Microsoft
7130   # is active.
7131 -   name: intl.tsf.hack.ms_traditional_chinese.do_not_return_no_layout_error
7132     type: bool
7133     value: true
7134     mirror: always
7136   # Whether Geckos hacks ITextStoreACP::QueryInsert() or not.  The method should
7137   # return new selection after specified length text is inserted at specified
7138   # range.  However, Microsoft ChangJie and Microsoft Quick expect that the
7139   # result is same as specified range.  If following prefs are true,
7140   # ITextStoreACP::QueryInsert() returns specified range only when one of the
7141   # TIPs is active.
7142 -   name: intl.tsf.hack.ms_traditional_chinese.query_insert_result
7143     type: bool
7144     value: true
7145     mirror: always
7147   # Whether Gecko sets input scope of the URL bar to IS_DEFAULT when black
7148   # listed IMEs are active or does not.  If you use tablet mode mainly and you
7149   # want to use touch keyboard for URL when you set focus to the URL bar, you
7150   # can set this to false.  Then, you'll see, e.g., ".com" key on the keyboard.
7151   # However, if you set this to false, such IMEs set its open state to "closed"
7152   # when you set focus to the URL bar.  I.e., input mode is automatically
7153   # changed to English input mode.
7154   # Known buggy IME list:
7155   #   - Microsoft IME for Japanese
7156   #   - Google Japanese Input
7157   #   - Microsoft Bopomofo
7158   #   - Microsoft ChangJie
7159   #   - Microsoft Phonetic
7160   #   - Microsoft Quick
7161   #   - Microsoft New ChangJie
7162   #   - Microsoft New Phonetic
7163   #   - Microsoft New Quick
7164   #   - Microsoft Pinyin
7165   #   - Microsoft Pinyin New Experience Input Style
7166   #   - Microsoft Wubi
7167   #   - Microsoft IME for Korean (except on Win7)
7168   #   - Microsoft Old Hangul
7169 -   name: intl.ime.hack.set_input_scope_of_url_bar_to_default
7170     type: bool
7171     value: true
7172     mirror: always
7174   # On Windows 10 Build 17643 (an Insider Preview build of RS5), Microsoft
7175   # have fixed the caller of ITextACPStore::GetTextExt() to return
7176   # TS_E_NOLAYOUT to TIP as-is, rather than converting to E_FAIL.
7177   # Therefore, if TIP supports asynchronous layout computation perfectly, we
7178   # can return TS_E_NOLAYOUT and TIP waits next OnLayoutChange()
7179   # notification.  However, some TIPs still have some bugs of asynchronous
7180   # layout support.  We keep hacking the result of GetTextExt() like running
7181   # on Windows 10, however, there could be unknown TIP bugs if we stop
7182   # hacking the result.  So, user can stop checking build ID to make Gecko
7183   # hack the result forcibly.
7184 -   name: intl.tsf.hack.allow_to_stop_hacking_on_build_17643_or_later
7185     type: bool
7186     value: @IS_EARLY_BETA_OR_EARLIER@
7187     mirror: always
7189   # If true, automatically extend selection to cluster boundaries when
7190   # TSF/TIP requests to select from/by middle of a cluster.
7191 -   name: intl.tsf.hack.extend_setting_selection_range_to_cluster_boundaries
7192     type: bool
7193     value: @IS_NOT_EARLY_BETA_OR_EARLIER@
7194     mirror: always
7196   # Whether Gecko supports IMM even if TSF is enabled.  This pref exists
7197   # only for check TSF behavior of new versions.  Therefore, users should
7198   # not set this to false for daily use.
7199 -   name: intl.tsf.support_imm
7200     type: bool
7201     value: true
7202     mirror: once
7204   # If true, TSF and TIP (IME) can retrieve URL of the document containing
7205   # the focused element.  When this is set to true, Gecko exposes the spec
7206   # of the URL.
7207   # And Gecko exposes only "http" and "https" URLs.  E.g., "data", "blob",
7208   # "file" URLs are never exposed.
7209 -  name: intl.tsf.expose_url.allowed
7210    type: bool
7211    value: true
7212    mirror: always
7214   # If true, TSF and TIP (IME) can retrieve URL of the document containing
7215   # the focused element in the private browsing mode too.
7216 -  name: intl.tsf.expose_url_in_private_browsing.allowed
7217    type: bool
7218    value: false
7219    mirror: always
7221 #if defined(ENABLE_TESTS)
7222   # If true, NS_GetComplexLineBreaks compares the line breaks produced in the
7223   # content process using the Uniscribe line breaker, with those from a
7224   # brokered call to the parent.
7225 -   name: intl.compare_against_brokered_complex_line_breaks
7226     type: bool
7227     value: false
7228     mirror: always
7229 #endif
7230 #endif
7232 # If you use legacy Chinese IME which puts an ideographic space to composition
7233 # string as placeholder, this pref might be useful.  If this is true and when
7234 # web contents forcibly commits composition (e.g., moving focus), the
7235 # ideographic space will be ignored (i.e., commits with empty string).
7236 - name: intl.ime.remove_placeholder_character_at_commit
7237   type: bool
7238   value: false
7239   mirror: always
7242 #if defined(XP_MACOSX) || defined(MOZ_WIDGET_GTK)
7243 # Whether text input without keyboard press nor IME composition should cause a
7244 # set of composition events or not.  E.g., when you use Emoji picker on macOS,
7245 # it inserts an Emoji character directly.  If set to true, `compositionstart`,
7246 # `compositionupdate` and `compositionend` events will be fired, and the
7247 # correspnding `beforeinput` events are not cancelable.  Otherwise, if set to
7248 # false, any user input events are not exposed to web apps but only
7249 # `beforeinput` event is fired as "insert text" as a cancelable event.
7250 - name: intl.ime.use_composition_events_for_insert_text
7251   type: bool
7252   value: false
7253   mirror: always
7254 #endif
7256 # If true, we use UAX14/29 compatible segmenter rules using ICU4X
7257 - name: intl.icu4x.segmenter.enabled
7258   type: RelaxedAtomicBool
7259   value: @IS_NIGHTLY_BUILD@
7260   mirror: always
7262 #---------------------------------------------------------------------------
7263 # Prefs starting with "javascript."
7265 # NOTE: SpiderMonkey starts up before `mirror: once` preferences are sealed and
7266 #       we cannot use them (Bug 1698311). Instead, we use `mirror: always`
7267 #       prefs but mark as `do_not_use_directly` and `LoadStartupJSPrefs` will
7268 #       mirror them into SpiderMonkey.
7269 #---------------------------------------------------------------------------
7271 # The JavaScript JIT compilers. These are read once on startup so a browser may
7272 # need to be restarted if toggling them. In general each subsequent JIT depends
7273 # on the ones before it being enabled.
7274 - name: javascript.options.blinterp
7275   type: bool
7276   value: true
7277   mirror: always  # LoadStartupJSPrefs
7278   do_not_use_directly: true
7280 - name: javascript.options.baselinejit
7281   type: bool
7282   value: true
7283   mirror: always  # LoadStartupJSPrefs
7284   do_not_use_directly: true
7286 - name: javascript.options.ion
7287   type: bool
7288   value: true
7289   mirror: always  # LoadStartupJSPrefs
7290   do_not_use_directly: true
7292 # The irregexp JIT for regex evaluation.
7293 - name: javascript.options.native_regexp
7294   type: bool
7295   value: true
7296   mirror: always  # LoadStartupJSPrefs
7297   do_not_use_directly: true
7299 # Jit Hints Cache - An in-process cache for the
7300 # content process to accelerate repeated baseline
7301 # compilations
7302 - name: javascript.options.jithints
7303   type: bool
7304   value: true
7305   mirror: always  # LoadStartupJSPrefs
7306   do_not_use_directly: true
7308 # "Warm-up" thresholds at which we attempt to compile a script/function with
7309 # the next JIT tier.
7311 # NOTE: These must match JitOptions defaults.
7312 - name: javascript.options.blinterp.threshold
7313   type: int32_t
7314   value: 10
7315   mirror: always  # LoadStartupJSPrefs
7316   do_not_use_directly: true
7318 - name: javascript.options.baselinejit.threshold
7319   type: int32_t
7320   value: 100
7321   mirror: always  # LoadStartupJSPrefs
7322   do_not_use_directly: true
7324 - name: javascript.options.ion.threshold
7325   type: int32_t
7326   value: 1500
7327   mirror: always  # LoadStartupJSPrefs
7328   do_not_use_directly: true
7330 # Enable off-main-thread Warp compilation.
7331 - name: javascript.options.ion.offthread_compilation
7332   type: bool
7333   value: true
7334   mirror: always  # LoadStartupJSPrefs
7335   do_not_use_directly: true
7337 #ifdef DEBUG
7338   # Enable extra correctness checks in the JITs that are slow and only available
7339   # in debug builds.
7340 -   name: javascript.options.jit.full_debug_checks
7341     type: bool
7342     value: false
7343     mirror: always  # LoadStartupJSPrefs
7344     do_not_use_directly: true
7345 #endif
7347 # Heuristic threshold for Warp/Ion to decide that too many bailouts are
7348 # happening and an IonScript should be discarded.
7350 # NOTE: This must match JitOptions defaults.
7351 - name: javascript.options.ion.frequent_bailout_threshold
7352   type: int32_t
7353   value: 10
7354   mirror: always  # LoadStartupJSPrefs
7355   do_not_use_directly: true
7357 # A threshold for Warp to decide whether a function can be inlined.
7358 # If the size of a function is smaller than this threshold, then it
7359 # may be inlined.
7361 # NOTE: These must match JitOptions defaults.
7362 - name: javascript.options.inlining_bytecode_max_length
7363   type: uint32_t
7364   value: 130
7365   mirror: always
7366   do_not_use_directly: true
7368 # Whether the megamorphic property lookup cache is enabled.
7370 # NOTE: This must match JitOptions defaults.
7371 - name: javascript.options.watchtower.megamorphic
7372   type: bool
7373   value: true
7374   mirror: always  # LoadStartupJSPrefs
7375   do_not_use_directly: true
7377 - name: javascript.options.compact_on_user_inactive
7378   type: bool
7379   value: true
7380   mirror: always
7382 # The default amount of time to wait from the user being idle to starting a
7383 # shrinking GC. Measured in milliseconds.
7384 - name: javascript.options.compact_on_user_inactive_delay
7385   type: uint32_t
7386 #ifdef NIGHTLY_BUILD
7387   value: 15000
7388 #else
7389   value: 300000
7390 #endif
7391   mirror: always
7393 # Use better error message when accessing property of null or undefined.
7394 - name: javascript.options.property_error_message_fix
7395   type: bool
7396   value: @IS_NIGHTLY_OR_DEV_EDITION@
7397   mirror: always
7399 # Support for weak references in JavaScript (WeakRef and FinalizationRegistry).
7400 - name: javascript.options.weakrefs
7401   type: bool
7402   value: true
7403   mirror: always
7405 # Whether to expose the FinalizationRegistry.prototype.cleanupSome method.
7406 - name: javascript.options.experimental.weakrefs.expose_cleanupSome
7407   type: bool
7408   value: false
7409   mirror: always
7411 # ShadowRealms: https://github.com/tc39/proposal-shadowrealm
7412 - name: javascript.options.experimental.shadow_realms
7413   # Atomic, as we assert the preference, and that assertion may happen
7414   # in a worker.
7415   type: RelaxedAtomicBool
7416   value: false
7417   mirror: always
7419 #ifdef NIGHTLY_BUILD
7420   # Experimental support for Iterator Helpers in JavaScript.
7421 -   name: javascript.options.experimental.iterator_helpers
7422     type: bool
7423     value: false
7424     mirror: always
7426   # Experimental support for Array Grouping in JavaScript.
7427 -   name: javascript.options.experimental.array_grouping
7428     type: bool
7429     value: false
7430     mirror: always
7432   # Experimental support for String.prototype.{is,to}WellFormed in JavaScript.
7433 -   name: javascript.options.experimental.well_formed_unicode_strings
7434     type: bool
7435     value: false
7436     mirror: always
7438   # Experimental support for New Set methods
7439 -   name: javascript.options.experimental.new_set_methods
7440     type: bool
7441     value: false
7442     mirror: always
7444   # Experimental support for ArrayBuffer.prototype.transfer{,ToFixedLength}() in JavaScript.
7445 -   name: javascript.options.experimental.arraybuffer_transfer
7446     type: bool
7447     value: false
7448     mirror: always
7449 #endif  // NIGHTLY_BUILD
7451 #ifdef NIGHTLY_BUILD
7452   # Experimental support for Import Assertions in JavaScript.
7453 -   name: javascript.options.experimental.import_assertions
7454     type: bool
7455     value: false
7456     mirror: always
7457 #endif  // NIGHTLY_BUILD
7459 - name: javascript.options.wasm_caching
7460   type: bool
7461   value: true
7462   mirror: always
7464 # The amount of time we wait between a request to GC (due to leaving a page) and doing the actual GC, in ms.
7465 - name: javascript.options.gc_delay
7466   type: uint32_t
7467   value: 4000
7468   mirror: always
7470 # The amount of time we wait from the first request to GC to actually doing the first GC, in ms.
7471 - name: javascript.options.gc_delay.first
7472   type: uint32_t
7473   value: 10000
7474   mirror: always
7476 # After doing a zonal GC, wait this much time (in ms) and then do a full GC,
7477 # unless one is already pending.
7478 - name: javascript.options.gc_delay.full
7479   type: uint32_t
7480   value: 60000
7481   mirror: always
7483 # Maximum amount of time that should elapse between incremental GC slices, in ms.
7484 - name: javascript.options.gc_delay.interslice
7485   type: uint32_t
7486   value: 100
7487   mirror: always
7489 # nsJSEnvironmentObserver observes the memory-pressure notifications and
7490 # forces a garbage collection and cycle collection when it happens, if the
7491 # appropriate pref is set.
7492 - name: javascript.options.gc_on_memory_pressure
7493   type: bool
7494   # Disable the JS engine's GC on memory pressure, since we do one in the
7495   # mobile browser (bug 669346).
7496   # XXX: this value possibly should be changed, or the pref removed entirely.
7497   #      See bug 1450787.
7498   value: @IS_NOT_ANDROID@
7499   mirror: always
7501 # We allow at most MIN(max, MAX(NUM_CPUS / cpu_divisor, 1)) concurrent GCs
7502 # between processes
7503 - name: javascript.options.concurrent_multiprocess_gcs.cpu_divisor
7504   type: RelaxedAtomicUint32
7505   value: 4
7506   mirror: always
7508 # See 'cpu_divisor' above, 0 means UINT_32_MAX.
7509 - name: javascript.options.concurrent_multiprocess_gcs.max
7510   type: RelaxedAtomicUint32
7511   value: 0
7512   mirror: always
7514 - name: javascript.options.mem.log
7515   type: bool
7516   value: false
7517   mirror: always
7519 - name: javascript.options.mem.notify
7520   type: bool
7521   value: false
7522   mirror: always
7524 # Whether the Parent process allocates and shares memory with all content
7525 # processes. This is mirrored once, as the parent process will do this
7526 # allocation early on.
7527 - name: javascript.options.self_hosted.use_shared_memory
7528   type: bool
7529   value: true
7530   mirror: always  # LoadStartupJSPrefs
7531   do_not_use_directly: true
7533 - name: javascript.options.main_thread_stack_quota_cap
7534   type: uint32_t
7535 #if defined(MOZ_ASAN)
7536   value: 6 * 1024 * 1024
7537 #else
7538   value: 2 * 1024 * 1024
7539 #endif
7540   mirror: always
7542 - name: javascript.options.wasm_optimizingjit
7543   type: bool
7544   value: true
7545   mirror: always
7547 #if defined(ENABLE_WASM_RELAXED_SIMD)
7548 -   name: javascript.options.wasm_relaxed_simd
7549     type: bool
7550     value: @IS_NIGHTLY_BUILD@
7551     mirror: always
7552 #endif  // defined(ENABLE_WASM_RELAXED_SIMD)
7554 #if defined(ENABLE_WASM_MOZ_INTGEMM)
7555 -   name: javascript.options.wasm_moz_intgemm
7556     type: bool
7557     value: @IS_NIGHTLY_BUILD@
7558     mirror: always
7559 #endif  // defined(ENABLE_WASM_MOZ_INTGEMM)
7561 #if defined(ENABLE_WASM_EXTENDED_CONST)
7562 -   name: javascript.options.wasm_extended_const
7563     type: bool
7564     value: true
7565     mirror: always
7566 #endif  // defined(ENABLE_WASM_EXTENDED_CONST)
7568 -   name: javascript.options.wasm_exceptions
7569     type: bool
7570     value: true
7571     mirror: always
7573 #if defined(ENABLE_WASM_FUNCTION_REFERENCES)
7574 -   name: javascript.options.wasm_function_references
7575     type: bool
7576     value: false
7577     mirror: always
7578 #endif // defined(ENABLE_WASM_FUNCTION_REFERENCES)
7580 #if defined(ENABLE_WASM_GC)
7581 -   name: javascript.options.wasm_gc
7582     type: bool
7583     value: false
7584     mirror: always
7585 #endif // defined(ENABLE_WASM_GC)
7587 #if defined(ENABLE_WASM_GC)
7588 -   name: javascript.options.wasm_final_types
7589     type: bool
7590     value: false
7591     mirror: always
7592 #endif // defined(ENABLE_WASM_GC)
7594 #if defined(ENABLE_WASM_MEMORY_CONTROL)
7595 -   name: javascript.options.wasm_memory_control
7596     type: bool
7597     value: false
7598     mirror: always
7599 #endif // defined(ENABLE_WASM_MEMORY_CONTROL)
7601 #if defined(ENABLE_WASM_SIMD)
7602 #if defined(JS_CODEGEN_X64) || defined(JS_CODEGEN_X86)
7603   # Enables AVX instructions support on X86/X64 platforms.
7604   # Changing these prefs requires a restart.
7605 -   name: javascript.options.wasm_simd_avx
7606     type: bool
7607     value: true
7608     mirror: always
7609 #endif
7610 #endif
7612 #if defined(ENABLE_WASM_MEMORY64)
7613 -   name: javascript.options.wasm_memory64
7614     type: bool
7615     value: @IS_NIGHTLY_BUILD@
7616     mirror: always
7617 #endif  // defined(ENABLE_WASM_MEMORY64)
7619 #if defined(ENABLE_WASM_TAIL_CALLS)
7620 -   name: javascript.options.wasm_tail_calls
7621     type: bool
7622     value: @IS_NIGHTLY_BUILD@
7623     mirror: always
7624 #endif  // defined(ENABLE_WASM_TAIL_CALLS)
7626 # Support for pretenuring allocations based on their allocation site.
7627 - name: javascript.options.site_based_pretenuring
7628   type: bool
7629   value: true
7630   mirror: always  # LoadStartupJSPrefs
7631   do_not_use_directly: true
7633 #if !defined(JS_CODEGEN_MIPS32) && !defined(JS_CODEGEN_MIPS64) && !defined(JS_CODEGEN_LOONG64)
7634   # Spectre security vulnerability mitigations for the JS JITs.
7635   #
7636   # NOTE: The MIPS and LoongArch backends do not support these mitigations (and generally
7637   #       do not need them). In that case, leave the pref unlisted with its
7638   #       default value of false.
7639 -   name: javascript.options.spectre.index_masking
7640     type: bool
7641     value: true
7642     mirror: always  # LoadStartupJSPrefs
7643     do_not_use_directly: true
7645 -   name: javascript.options.spectre.object_mitigations
7646     type: bool
7647     value: true
7648     mirror: always  # LoadStartupJSPrefs
7649     do_not_use_directly: true
7651 -   name: javascript.options.spectre.string_mitigations
7652     type: bool
7653     value: true
7654     mirror: always  # LoadStartupJSPrefs
7655     do_not_use_directly: true
7657 -   name: javascript.options.spectre.value_masking
7658     type: bool
7659     value: true
7660     mirror: always  # LoadStartupJSPrefs
7661     do_not_use_directly: true
7663 -   name: javascript.options.spectre.jit_to_cxx_calls
7664     type: bool
7665     value: true
7666     mirror: always  # LoadStartupJSPrefs
7667     do_not_use_directly: true
7668 #endif  // !defined(JS_CODEGEN_MIPSXX) && !defined(JS_CODEGEN_LOONG64)
7670 # Separate pref to override the values of the Spectre-related prefs above for
7671 # isolated web content processes, where we don't need these mitigations.
7672 - name: javascript.options.spectre.disable_for_isolated_content
7673   type: bool
7674   value: @IS_NIGHTLY_BUILD@
7675   mirror: always
7677 # Whether the W^X policy is enforced to mark JIT code pages as either writable
7678 # or executable but never both at the same time. OpenBSD defaults to W^X.
7679 - name: javascript.options.content_process_write_protect_code
7680   type: bool
7681 #if defined(XP_OPENBSD)
7682   value: true
7683 #else
7684   value: false
7685 #endif
7686   mirror: always
7688 # Whether to use the XPCOM thread pool for JS helper tasks.
7689 - name: javascript.options.external_thread_pool
7690   type: bool
7691   value: true
7692   mirror: always
7693   do_not_use_directly: true
7695 # Whether to use the off-thread script compilation and decoding.
7696 - name: javascript.options.parallel_parsing
7697   type: bool
7698   value: true
7699   mirror: always
7701 # Whether to use fdlibm for Math.sin, Math.cos, and Math.tan. When
7702 # privacy.resistFingerprinting is true, this pref is ignored and fdlibm is used
7703 # anyway.
7704 - name: javascript.options.use_fdlibm_for_sin_cos_tan
7705   type: bool
7706   value: false
7707   mirror: always
7709 # Whether to support parsing '//(#@) source(Mapping)?URL=' pragmas.
7710 - name: javascript.options.source_pragmas
7711   type: bool
7712   value: true
7713   mirror: always
7715 # asm.js
7716 - name: javascript.options.asmjs
7717   type: bool
7718   value: true
7719   mirror: always
7721 # Whether to throw a TypeError if asm.js code hits validation failure.
7722 - name: javascript.options.throw_on_asmjs_validation_failure
7723   type: bool
7724   value: false
7725   mirror: always
7727 #---------------------------------------------------------------------------
7728 # Prefs starting with "layers."
7729 #---------------------------------------------------------------------------
7731 # Whether to disable acceleration for all widgets.
7732 - name: layers.acceleration.disabled
7733   type: bool
7734   value: false
7735   mirror: once
7736   do_not_use_directly: true
7737 # Instead, use gfxConfig::IsEnabled(Feature::HW_COMPOSITING).
7739 # Whether to force acceleration on, ignoring blacklists.
7741 # bug 838603 -- on Android, accidentally blacklisting OpenGL layers
7742 # means a startup crash for everyone.
7743 # Temporarily force-enable GL compositing.  This is default-disabled
7744 # deep within the bowels of the widgetry system.  Remove me when GL
7745 # compositing isn't default disabled in widget/android.
7746 - name: layers.acceleration.force-enabled
7747   type: bool
7748   value: @IS_ANDROID@
7749   mirror: once
7750   do_not_use_directly: true
7752 # Whether we allow AMD switchable graphics.
7753 - name: layers.amd-switchable-gfx.enabled
7754   type: bool
7755   value: true
7756   mirror: once
7758 # Whether to use async panning and zooming.
7759 - name: layers.async-pan-zoom.enabled
7760   type: bool
7761   value: true
7762   mirror: once
7763   do_not_use_directly: true
7765 - name: layers.child-process-shutdown
7766   type: RelaxedAtomicBool
7767   value: true
7768   mirror: always
7770 - name: layers.d3d11.force-warp
7771   type: bool
7772   value: false
7773   mirror: once
7775 - name: layers.d3d11.enable-blacklist
7776   type: bool
7777   value: true
7778   mirror: once
7780 # Enable DEAA antialiasing for transformed layers in the compositor.
7781 - name: layers.deaa.enabled
7782   type: RelaxedAtomicBool
7783 #if defined(MOZ_WIDGET_ANDROID)
7784   value: false
7785 #else
7786   value: true
7787 #endif
7788   mirror: always
7790 # Force all possible layers to be always active layers.
7791 - name: layers.force-active
7792   type: bool
7793   value: false
7794   mirror: always
7796 - name: layers.force-shmem-tiles
7797   type: bool
7798   value: false
7799   mirror: once
7801 - name: layers.draw-mask-debug
7802   type: RelaxedAtomicBool
7803   value: false
7804   mirror: always
7806 - name: layers.force-synchronous-resize
7807   type: RelaxedAtomicBool
7808 #ifdef MOZ_WAYLAND
7809   # We want to control it by nsWindow::SynchronouslyRepaintOnResize() on Linux/Wayland.
7810   value: false
7811 #else
7812   value: true
7813 #endif
7814   mirror: always
7816 - name: layers.gpu-process.allow-software
7817   type: bool
7818 #if defined(XP_WIN)
7819   value: true
7820 #else
7821   value: false
7822 #endif
7823   mirror: once
7825 - name: layers.gpu-process.enabled
7826   type: bool
7827 #if defined(XP_WIN) || defined(MOZ_WIDGET_ANDROID)
7828   value: true
7829 #else
7830   value: false
7831 #endif
7832   mirror: once
7834 - name: layers.gpu-process.force-enabled
7835   type: bool
7836   value: false
7837   mirror: once
7839 - name: layers.gpu-process.ipc_reply_timeout_ms
7840   type: int32_t
7841   value: 10000
7842   mirror: once
7844 # How many unstable GPU process restarts we allow for a given configuration.
7845 - name: layers.gpu-process.max_restarts
7846   type: RelaxedAtomicInt32
7847 #if defined(XP_WIN) || defined(MOZ_WIDGET_GTK) || defined(MOZ_WIDGET_ANDROID)
7848   #if defined(NIGHTLY_BUILD)
7849   value: 6
7850   #else
7851   value: 3
7852   #endif
7853 #else
7854   value: 1
7855 #endif
7856   mirror: always
7858 # How many frames we must render before declaring the GPU process stable, and
7859 # allow restarts without it counting against our maximum restarts.
7860 - name: layers.gpu-process.stable.frame-threshold
7861   type: RelaxedAtomicUint32
7862   value: 10
7863   mirror: always
7865 # How many milliseconds the GPU process must have lived before we accept that
7866 # it is stable, and allow restarts without it counting against our maximum
7867 # restarts.
7868 - name: layers.gpu-process.stable.min-uptime-ms
7869   type: RelaxedAtomicInt32
7870   value: 4 * 60000
7871   mirror: always
7873 # Note: This pref will only be used if it is less than layers.gpu-process.max_restarts.
7874 - name: layers.gpu-process.max_restarts_with_decoder
7875   type: RelaxedAtomicInt32
7876   value: 0
7877   mirror: always
7879 - name: layers.gpu-process.startup_timeout_ms
7880   type: int32_t
7881   value: 5000
7882   mirror: once
7884 - name: layers.gpu-process.crash-also-crashes-browser
7885   type: bool
7886   value: false
7887   mirror: always
7889 # Whether to animate simple opacity and transforms on the compositor.
7890 - name: layers.offmainthreadcomposition.async-animations
7891   type: bool
7892   value: true
7893   mirror: always
7895 # Whether to log information about off main thread animations to stderr.
7896 - name: layers.offmainthreadcomposition.log-animations
7897   type: bool
7898   value: false
7899   mirror: always
7901 - name: layers.offmainthreadcomposition.force-disabled
7902   type: bool
7903   value: false
7904   mirror: once
7906 # Compositor target frame rate. NOTE: If vsync is enabled the compositor
7907 # frame rate will still be capped.
7908 # -1 -> default (match layout.frame_rate or 60 FPS)
7909 # 0  -> full-tilt mode: Recomposite even if not transaction occured.
7910 - name: layers.offmainthreadcomposition.frame-rate
7911   type: RelaxedAtomicInt32
7912   value: -1
7913   mirror: always
7915 #ifdef XP_WIN
7916 -   name: layers.prefer-opengl
7917     type: bool
7918     value: false
7919     mirror: once
7920 #endif
7922 # Copy-on-write canvas.
7923 - name: layers.shared-buffer-provider.enabled
7924   type: RelaxedAtomicBool
7925   value: true
7926   mirror: always
7928 - name: layers.recycle-allocator-rdd
7929   type: bool
7930   value: true
7931   mirror: once
7933 - name: layers.iosurfaceimage.recycle-limit
7934   type: RelaxedAtomicUint32
7935   value: 15
7936   mirror: always
7938 - name: layers.iosurfaceimage.use-nv12
7939   type: bool
7940   value: true
7941   mirror: once
7943 #---------------------------------------------------------------------------
7944 # Prefs starting with "layout."
7945 #---------------------------------------------------------------------------
7947 # Debug-only pref to force enable the AccessibleCaret. If you want to
7948 # control AccessibleCaret by mouse, you'll need to set
7949 # "layout.accessiblecaret.hide_carets_for_mouse_input" to false.
7950 - name: layout.accessiblecaret.enabled
7951   type: bool
7952   value: false
7953   mirror: always
7955 # Enable the accessible caret on platforms/devices
7956 # that we detect have touch support. Note that this pref is an
7957 # additional way to enable the accessible carets, rather than
7958 # overriding the layout.accessiblecaret.enabled pref.
7959 - name: layout.accessiblecaret.enabled_on_touch
7960   type: bool
7961   value: true
7962   mirror: always
7964 # By default, carets become tilt only when they are overlapping.
7965 - name: layout.accessiblecaret.always_tilt
7966   type: bool
7967   value: false
7968   mirror: always
7970 # Show caret in cursor mode when long tapping on an empty content. This
7971 # also changes the default update behavior in cursor mode, which is based
7972 # on the emptiness of the content, into something more heuristic. See
7973 # AccessibleCaretManager::UpdateCaretsForCursorMode() for the details.
7974 - name: layout.accessiblecaret.caret_shown_when_long_tapping_on_empty_content
7975   type: bool
7976   value: false
7977   mirror: always
7979 # 0 = by default, always hide carets for selection changes due to JS calls.
7980 # 1 = update any visible carets for selection changes due to JS calls,
7981 #     but don't show carets if carets are hidden.
7982 # 2 = always show carets for selection changes due to JS calls.
7983 - name: layout.accessiblecaret.script_change_update_mode
7984   type: int32_t
7985   value: 0
7986   mirror: always
7988 # Allow one caret to be dragged across the other caret without any limitation.
7989 # This matches the built-in convention for all desktop platforms.
7990 - name: layout.accessiblecaret.allow_dragging_across_other_caret
7991   type: bool
7992   value: true
7993   mirror: always
7995 # Optionally provide haptic feedback on long-press selection events.
7996 - name: layout.accessiblecaret.hapticfeedback
7997   type: bool
7998   value: false
7999   mirror: always
8001 # Smart phone-number selection on long-press is not enabled by default.
8002 - name: layout.accessiblecaret.extend_selection_for_phone_number
8003   type: bool
8004   value: false
8005   mirror: always
8007 # Keep the accessible carets hidden when the user is using mouse input (as
8008 # opposed to touch/pen/etc.).
8009 - name: layout.accessiblecaret.hide_carets_for_mouse_input
8010   type: bool
8011   value: true
8012   mirror: always
8014 # CSS attributes (width, height, margin-left) of the AccessibleCaret in CSS
8015 # pixels.
8016 - name: layout.accessiblecaret.width
8017   type: float
8018   value: 34.0f
8019   mirror: always
8021 - name: layout.accessiblecaret.height
8022   type: float
8023   value: 36.0f
8024   mirror: always
8026 - name: layout.accessiblecaret.margin-left
8027   type: float
8028   value: -18.5f
8029   mirror: always
8031 - name: layout.accessiblecaret.transition-duration
8032   type: float
8033   value: 250.0f
8034   mirror: always
8036 # Simulate long tap events to select words. Mainly used in manual testing
8037 # with mouse.
8038 - name: layout.accessiblecaret.use_long_tap_injector
8039   type: bool
8040   value: false
8041   mirror: always
8043 # To support magnify glass, whether we dispatch additional chrome event such as
8044 # dragcaret.
8045 - name: layout.accessiblecaret.magnifier.enabled
8046   type: bool
8047   value: @IS_ANDROID@
8048   mirror: always
8050 # One of several prefs affecting the maximum area to pre-render when animating
8051 # a large element on the compositor.
8052 # This pref enables transform (and transform like properties) animations on a
8053 # large element run on the compositor with rendering partial area of the
8054 # element on the main thread instead of rendering the whole area.  Once the
8055 # animation tried to composite out of the partial rendered area, the animation
8056 # is rendered again with the latest visible partial area.
8057 - name: layout.animation.prerender.partial
8058   type: RelaxedAtomicBool
8059   value: false
8060   mirror: always
8062 # One of several prefs affecting the maximum area to pre-render when animating
8063 # a large element on the compositor.
8064 # This value is applied to both x and y axes and a perfect square contructed
8065 # by the greater axis value which will be capped by the absolute limits is used
8066 # for the partial pre-render area.
8067 - name: layout.animation.prerender.viewport-ratio-limit
8068   type: AtomicFloat
8069   value: 1.125f
8070   mirror: always
8072 # One of several prefs affecting the maximum area to pre-render when animating
8073 # a large element on the compositor.
8074 - name: layout.animation.prerender.absolute-limit-x
8075   type: RelaxedAtomicUint32
8076   value: 4096
8077   mirror: always
8079 # One of several prefs affecting the maximum area to pre-render when animating
8080 # a large element on the compositor.
8081 - name: layout.animation.prerender.absolute-limit-y
8082   type: RelaxedAtomicUint32
8083   value: 4096
8084   mirror: always
8086 # Test-only pref, if this is true, partial pre-rendered transform animations
8087 # get stuck when it reaches to the pre-rendered boundaries and the pre-render
8088 # region is never updated.
8089 - name: layout.animation.prerender.partial.jank
8090   type: RelaxedAtomicBool
8091   value: false
8092   mirror: always
8094 # Override DPI. A value of -1 means use the maximum of 96 and the system DPI.
8095 # A value of 0 means use the system DPI. A positive value is used as the DPI.
8096 # This sets the physical size of a device pixel and thus controls the
8097 # interpretation of physical units such as "pt".
8098 - name: layout.css.dpi
8099   type: int32_t
8100   value: -1
8101   mirror: always
8103 # Whether Container Queries are enabled
8104 - name: layout.css.container-queries.enabled
8105   type: RelaxedAtomicBool
8106   value: true
8107   mirror: always
8108   rust: true
8110 # Whether content-box and stroke-box are enabled for transform-box.
8111 - name: layout.css.transform-box-content-stroke.enabled
8112   type: RelaxedAtomicBool
8113   value: @IS_NIGHTLY_BUILD@
8114   mirror: always
8115   rust: true
8117 # Whether trigonometric constants and functions are enabled in calc().
8118 - name: layout.css.trig.enabled
8119   type: RelaxedAtomicBool
8120   value: true
8121   mirror: always
8122   rust: true
8124 # Whether the round() function is enabled in calc().
8125 - name: layout.css.round.enabled
8126   type: RelaxedAtomicBool
8127   value: true
8128   mirror: always
8129   rust: true
8131 # Whether the mod() / rem() functions are enabled in calc().
8132 - name: layout.css.mod-rem.enabled
8133   type: RelaxedAtomicBool
8134   value: true
8135   mirror: always
8136   rust: true
8138 # Whether exponential functions are enabled in calc().
8139 - name: layout.css.exp.enabled
8140   type: RelaxedAtomicBool
8141   value: true
8142   mirror: always
8143   rust: true
8145 # Whether sign/abs functions are enabled in calc().
8146 - name: layout.css.abs-sign.enabled
8147   type: RelaxedAtomicBool
8148   value: true
8149   mirror: always
8150   rust: true
8152 # Whether infinity / nan constants are enabled in calc().
8153 - name: layout.css.nan-inf.enabled
8154   type: RelaxedAtomicBool
8155   value: true
8156   mirror: always
8157   rust: true
8159 # Should we look for counter ancestor scopes first?
8160 - name: layout.css.counter-ancestor-scope.enabled
8161   type: bool
8162   value: true
8163   mirror: always
8165 # Whether the `-moz-control-character-visibility` property is exposed to
8166 # content.
8168 # Only for testing purposes.
8169 - name: layout.css.moz-control-character-visibility.enabled
8170   type: RelaxedAtomicBool
8171   value: false
8172   mirror: always
8173   rust: true
8175 # This pref controls whether the `prefers-color-scheme` value of iframes images
8176 # reacts to the embedder `color-scheme` in content.
8177 - name: layout.css.iframe-embedder-prefers-color-scheme.content.enabled
8178   type: RelaxedAtomicBool
8179   value: true
8180   mirror: always
8182 # The minimum contrast ratio between the accent color foreground and background
8183 # colors.
8185 # We don't use this for text, so we need a contrast of at least AA (for user
8186 # interface components and graphical objects), which per WCAG is 3:1
8187 - name: layout.css.accent-color.min-contrast-ratio
8188   type: AtomicFloat
8189   value: 3.0
8190   mirror: always
8192 # The target contrast ratio between the accent color foreground and background
8193 # colors when darkening.
8195 # We aim a bit further than the minimum contrast ratio, which seems to provide
8196 # nice results in practice.
8197 - name: layout.css.accent-color.darkening-target-contrast-ratio
8198   type: AtomicFloat
8199   value: 6.0
8200   mirror: always
8202 # Whether the `animation-composition` in css-animations-2 is enabled.
8203 - name: layout.css.animation-composition.enabled
8204   type: bool
8205   value: true
8206   mirror: always
8208 # Is the codepath for using cached scrollbar styles enabled?
8209 - name: layout.css.cached-scrollbar-styles.enabled
8210   type: bool
8211   value: true
8212   mirror: always
8214 # Whether we cache inline styles in a document unconditionally or not.
8215 - name: layout.css.inline-style-caching.always-enabled
8216   type: bool
8217   value: true
8218   mirror: always
8220 # Whether computed local-fragment-only image urls serialize using the same
8221 # rules as filter/mask/etc (not resolving the URL for local refs).
8223 # See https://github.com/w3c/csswg-drafts/issues/3195
8224 - name: layout.css.computed-style.dont-resolve-image-local-refs
8225   type: RelaxedAtomicBool
8226   value: true
8227   mirror: always
8228   rust: true
8230 # Whether we should expose all shorthands in getComputedStyle().
8231 - name: layout.css.computed-style.shorthands
8232   type: bool
8233   value: true
8234   mirror: always
8236 # Whether we should avoid exposing styles of elements outside the flat tree in getComputedStyle().
8237 - name: layout.css.computed-style.styles-outside-flat-tree
8238   type: bool
8239   value: false
8240   mirror: always
8242 # Are implicit tracks in computed grid templates serialized?
8243 - name: layout.css.serialize-grid-implicit-tracks
8244   type: RelaxedAtomicBool
8245   value: true
8246   mirror: always
8248 # Whether the system-ui generic family is enabled.
8249 - name: layout.css.system-ui.enabled
8250   type: RelaxedAtomicBool
8251   value: true
8252   mirror: always
8253   rust: true
8255 # Whether the rule hash is applied to attribute names too, not
8256 # only classes / id / namespaces / etc.
8257 - name: layout.css.bucket-attribute-names.enabled
8258   type: RelaxedAtomicBool
8259   value: true
8260   mirror: always
8261   rust: true
8263 # Set the number of device pixels per CSS pixel. A value <= 0 means choose
8264 # automatically based on user settings for the platform (e.g., "UI scale factor"
8265 # on Mac). If browser.display.os-zoom-behavior == 1, then a positive value
8266 # will be multiplied by the text scale factor; otherwise a positive value is
8267 # used as-is. This controls the size of a CSS "px" at 100% full-zoom.
8268 # The size of system fonts is also changed in proportion with the change in
8269 # "px" sizes. Use "ui.textScaleFactor" instead to only change the size of "px".
8270 # This is only used for windows on the screen, not for printing.
8271 - name: layout.css.devPixelsPerPx
8272   type: AtomicFloat
8273   value: -1.0f
8274   mirror: always
8276 # Is support for CSS backdrop-filter enabled?
8277 - name: layout.css.backdrop-filter.enabled
8278   type: bool
8279   value: true
8280   mirror: always
8282 # Do we override the blocklist for CSS backdrop-filter?
8283 - name: layout.css.backdrop-filter.force-enabled
8284   type: bool
8285   value: false
8286   mirror: always
8288 # Is support for rect() enabled?
8289 - name: layout.css.basic-shape-rect.enabled
8290   type: RelaxedAtomicBool
8291   value: @IS_NIGHTLY_BUILD@
8292   mirror: always
8293   rust: true
8295 # Is support for xywh() enabled?
8296 - name: layout.css.basic-shape-xywh.enabled
8297   type: RelaxedAtomicBool
8298   value: @IS_NIGHTLY_BUILD@
8299   mirror: always
8300   rust: true
8302 # Should stray control characters be rendered visibly?
8303 - name: layout.css.control-characters.visible
8304   type: RelaxedAtomicBool
8305   value: @IS_NOT_RELEASE_OR_BETA@
8306   mirror: always
8307   rust: true
8309 # Whether the `content-visibility` CSS property is enabled
8310 - name: layout.css.content-visibility.enabled
8311   type: RelaxedAtomicBool
8312   value: @IS_NIGHTLY_BUILD@
8313   mirror: always
8314   rust: true
8316 # Whether the `contain-intrinsic-size` CSS property is enabled
8317 - name: layout.css.contain-intrinsic-size.enabled
8318   type: RelaxedAtomicBool
8319   value: true
8320   mirror: always
8321   rust: true
8323 # Is support for GeometryUtils.convert*FromNode enabled?
8324 - name: layout.css.convertFromNode.enabled
8325   type: bool
8326   value: @IS_NOT_RELEASE_OR_BETA@
8327   mirror: always
8329 - name: layout.css.cross-fade.enabled
8330   type: RelaxedAtomicBool
8331   value: false
8332   mirror: always
8333   rust: true
8335 - name: layout.css.linear-easing-function.enabled
8336   type: RelaxedAtomicBool
8337   value: true
8338   mirror: always
8339   rust: true
8341 # Is support for color-mix on content enabled?
8342 - name: layout.css.color-mix.enabled
8343   type: RelaxedAtomicBool
8344   value: true
8345   mirror: always
8346   rust: true
8348 # Is support for light-dark() on content enabled?
8349 - name: layout.css.light-dark.enabled
8350   type: RelaxedAtomicBool
8351   value: false
8352   mirror: always
8353   rust: true
8355 # Is support for color-mix with non-SRGB color spaces on content enabled?
8356 - name: layout.css.color-mix.color-spaces.enabled
8357   type: RelaxedAtomicBool
8358   value: true
8359   mirror: always
8360   rust: true
8362 # Is support for fit-content() enabled?
8363 - name: layout.css.fit-content-function.enabled
8364   type: RelaxedAtomicBool
8365   value: false
8366   mirror: always
8367   rust: true
8369 # Whether to use tight bounds for floating ::first-letter (legacy Gecko behavior)
8370 # or loose bounds based on overall font metrics (WebKit/Blink-like behavior)?
8371 # Values mean:
8372 #     1   legacy Gecko behavior (tight bounds)
8373 #     0   loose typographic bounds (similar to webkit/blink)
8374 #    -1   auto behavior: use loose bounds if reduced line-height (<1em) or negative
8375 #         block-start margin is present; otherwise use tight bounds.
8376 - name: layout.css.floating-first-letter.tight-glyph-bounds
8377   type: int32_t
8378 #ifdef NIGHTLY_BUILD
8379   value: -1
8380 #else
8381   value: 1
8382 #endif
8383   mirror: always
8385 # Is support for the font-display @font-face descriptor enabled?
8386 - name: layout.css.font-display.enabled
8387   type: RelaxedAtomicBool
8388   value: true
8389   mirror: always
8390   rust: true
8392 # Is support for document.fonts enabled?
8393 - name: layout.css.font-loading-api.enabled
8394   type: RelaxedAtomicBool
8395   value: true
8396   mirror: always
8398 # Is support for workerGlobalScope.fonts enabled?
8399 - name: layout.css.font-loading-api.workers.enabled
8400   type: RelaxedAtomicBool
8401   value: true
8402   mirror: always
8404 # Is support for the @font-face metrics override descriptors enabled?
8405 - name: layout.css.font-metrics-overrides.enabled
8406   type: RelaxedAtomicBool
8407   value: true
8408   mirror: always
8409   rust: true
8411 # Is support for the @font-palette-values rule and font-palette property enabled?
8412 - name: layout.css.font-palette.enabled
8413   type: RelaxedAtomicBool
8414   value: true
8415   mirror: always
8416   rust: true
8418 # Is support for variation fonts enabled?
8419 - name: layout.css.font-variations.enabled
8420   type: RelaxedAtomicBool
8421   value: true
8422   mirror: always
8423   rust: true
8425 # Is support for the size-adjust @font-face descriptor enabled?
8426 - name: layout.css.size-adjust.enabled
8427   type: RelaxedAtomicBool
8428   value: true
8429   mirror: always
8430   rust: true
8432 # Is support for the tech() function in the @font-face src descriptor enabled?
8433 - name: layout.css.font-tech.enabled
8434   type: RelaxedAtomicBool
8435   value: true
8436   mirror: always
8437   rust: true
8439 # Is support for font-variant-emoji enabled?
8440 - name: layout.css.font-variant-emoji.enabled
8441   type: RelaxedAtomicBool
8442   value: @IS_NIGHTLY_BUILD@
8443   mirror: always
8444   rust: true
8446 # Visibility level of font families available to CSS font-matching:
8447 #   1 - only base system fonts
8448 #   2 - also fonts from optional language packs
8449 #   3 - also user-installed fonts
8450 - name: layout.css.font-visibility
8451   type: int32_t
8452   value: 3
8453   mirror: always
8455 # Is support for GeometryUtils.getBoxQuads enabled?
8456 - name: layout.css.getBoxQuads.enabled
8457   type: bool
8458   value: @IS_NOT_RELEASE_OR_BETA@
8459   mirror: always
8461 # Is support for (linear|radial|conic)-gradient color interpolation methods enabled?
8462 - name: layout.css.gradient-color-interpolation-method.enabled
8463   type: RelaxedAtomicBool
8464   value: false
8465   mirror: always
8466   rust: true
8468 # Is support for caching an grid item's block axis measurement enabled?
8469 - name: layout.css.grid-item-baxis-measurement.enabled
8470   type: bool
8471   value: true
8472   mirror: always
8474 # Is support for CSS masonry layout enabled?
8475 - name: layout.css.grid-template-masonry-value.enabled
8476   type: RelaxedAtomicBool
8477   value: @IS_NIGHTLY_BUILD@
8478   mirror: always
8479   rust: true
8481 # Is support for :has() enabled?
8482 - name: layout.css.has-selector.enabled
8483   type: RelaxedAtomicBool
8484   value: false
8485   mirror: always
8486   rust: true
8488 # Is support for CSS hyphenate-character enabled?
8489 - name: layout.css.hyphenate-character.enabled
8490   type: RelaxedAtomicBool
8491   value: true
8492   mirror: always
8494 # Is support for CSS individual transform enabled?
8495 - name: layout.css.individual-transform.enabled
8496   type: bool
8497   value: true
8498   mirror: always
8500 # Is support for CSS initial-letter property enabled?
8501 - name: layout.css.initial-letter.enabled
8502   type: bool
8503   value: false
8504   mirror: always
8506 # Pref to control whether line-height: -moz-block-height is exposed to content.
8507 - name: layout.css.line-height-moz-block-height.content.enabled
8508   type: RelaxedAtomicBool
8509   value: false
8510   mirror: always
8511   rust: true
8513 # Is support for motion-path enabled?
8514 - name: layout.css.motion-path.enabled
8515   type: bool
8516   value: true
8517   mirror: always
8519 # Is support for motion-path <basic-shape> other than path() enabled?
8520 # https://drafts.fxtf.org/motion-1/#valdef-offset-path-basic-shape
8521 - name: layout.css.motion-path-basic-shapes.enabled
8522   type: RelaxedAtomicBool
8523   value: @IS_NIGHTLY_BUILD@
8524   mirror: always
8525   rust: true
8527 # Is support for motion-path <coord-box> enabled?
8528 # https://drafts.fxtf.org/motion-1/#valdef-offset-path-coord-box
8529 - name: layout.css.motion-path-coord-box.enabled
8530   type: RelaxedAtomicBool
8531   value: @IS_NIGHTLY_BUILD@
8532   mirror: always
8533   rust: true
8535 # Is support for motion-path ray() enabled?
8536 - name: layout.css.motion-path-ray.enabled
8537   type: RelaxedAtomicBool
8538   value: @IS_NIGHTLY_BUILD@
8539   mirror: always
8540   rust: true
8542 # Is support for motion-path offset-position enabled?
8543 - name: layout.css.motion-path-offset-position.enabled
8544   type: RelaxedAtomicBool
8545   value: @IS_NIGHTLY_BUILD@
8546   mirror: always
8547   rust: true
8549 # Is support for motion-path url enabled?
8550 - name: layout.css.motion-path-url.enabled
8551   type: RelaxedAtomicBool
8552   value: @IS_NIGHTLY_BUILD@
8553   mirror: always
8554   rust: true
8556 # Pref to control whether the ::marker property restrictions defined in [1]
8557 # apply.
8559 # [1]: https://drafts.csswg.org/css-pseudo-4/#selectordef-marker
8560 - name: layout.css.marker.restricted
8561   type: RelaxedAtomicBool
8562   value: true
8563   mirror: always
8564   rust: true
8566 # Is support for math-style enabled?
8567 - name: layout.css.math-style.enabled
8568   type: RelaxedAtomicBool
8569   value: true
8570   mirror: always
8571   rust: true
8573 # Is support for math-depth enabled?
8574 - name: layout.css.math-depth.enabled
8575   type: RelaxedAtomicBool
8576   value: true
8577   mirror: always
8578   rust: true
8580 # Pref to control whether @-moz-document rules are enabled in content pages.
8581 - name: layout.css.moz-document.content.enabled
8582   type: RelaxedAtomicBool
8583   value: false
8584   mirror: always
8585   rust: true
8587 # Is -moz-osx-font-smoothing enabled? (Only supported in OSX builds)
8588 - name: layout.css.osx-font-smoothing.enabled
8589   type: bool
8590 #if defined(XP_MACOSX)
8591   value: true
8592 #else
8593   value: false
8594 #endif
8595   mirror: always
8597 # Is support for CSS overflow-clip-box enabled for non-UA sheets?
8598 - name: layout.css.overflow-clip-box.enabled
8599   type: bool
8600   value: false
8601   mirror: always
8603 # Is support for CSS overflow: -moz-hidden-unscrollable enabled
8604 - name: layout.css.overflow-moz-hidden-unscrollable.enabled
8605   type: RelaxedAtomicBool
8606   value: @IS_NOT_NIGHTLY_BUILD@
8607   mirror: always
8608   rust: true
8610 # Is support for CSS overflow: overlay enabled
8611 - name: layout.css.overflow-overlay.enabled
8612   type: RelaxedAtomicBool
8613   value: true
8614   mirror: always
8615   rust: true
8617 # Is support for overscroll-behavior enabled?
8618 - name: layout.css.overscroll-behavior.enabled
8619   type: bool
8620   value: true
8621   mirror: always
8623 - name: layout.css.overflow-logical.enabled
8624   type: bool
8625   value: true
8626   mirror: always
8628 # Enables support for the page-orientation  property inside of CSS @page rules.
8629 - name: layout.css.page-orientation.enabled
8630   type: RelaxedAtomicBool
8631   value: @IS_NIGHTLY_BUILD@
8632   mirror: always
8633   rust: true
8635 # Enables support for the size property inside of CSS @page rules.
8636 - name: layout.css.page-size.enabled
8637   type: RelaxedAtomicBool
8638   value: true
8639   mirror: always
8640   rust: true
8642 # Enables support for different CSS page sizes on each page when printing.
8643 - name: layout.css.allow-mixed-page-sizes
8644   type: RelaxedAtomicBool
8645   value: @IS_EARLY_BETA_OR_EARLIER@
8646   mirror: always
8648 # Whether Properties and Values is enabled
8649 - name: layout.css.properties-and-values.enabled
8650   type: RelaxedAtomicBool
8651   value: @IS_NIGHTLY_BUILD@
8652   mirror: always
8653   rust: true
8655 # Dictates whether or not the prefers contrast media query will be
8656 # usable.
8657 #   true: prefers-contrast will toggle based on OS and browser settings.
8658 #   false: prefers-contrast will only parse and toggle in the browser
8659 #   chrome and ua.
8660 - name: layout.css.prefers-contrast.enabled
8661   type: RelaxedAtomicBool
8662   value: true
8663   mirror: always
8664   rust: true
8666 # An override for prefers-color-scheme for content documents.
8667 #   0: Dark
8668 #   1: Light
8669 #   2: Auto (system color scheme unless overridden by browser theme)
8670 - name: layout.css.prefers-color-scheme.content-override
8671   type: RelaxedAtomicInt32
8672   value: 2
8673   mirror: always
8675 # Dictates whether or not the forced-colors media query is enabled.
8676 - name: layout.css.forced-colors.enabled
8677   type: RelaxedAtomicBool
8678   value: true
8679   mirror: always
8680   rust: true
8682 # Dictates whether or not the prefers-reduced-transparency media query is enabled.
8683 - name: layout.css.prefers-reduced-transparency.enabled
8684   type: RelaxedAtomicBool
8685   value: false
8686   mirror: always
8687   rust: true
8689 # Dictates whether or not the inverted-colors media query is enabled.
8690 - name: layout.css.inverted-colors.enabled
8691   type: RelaxedAtomicBool
8692   value: false
8693   mirror: always
8694   rust: true
8696 # Is support for forced-color-adjust properties enabled?
8697 - name: layout.css.forced-color-adjust.enabled
8698   type: RelaxedAtomicBool
8699   value: true
8700   mirror: always
8701   rust: true
8703 # Is support for -moz-prefixed animation properties enabled?
8704 - name: layout.css.prefixes.animations
8705   type: bool
8706   value: true
8707   mirror: always
8709 # Is support for -moz-border-image enabled?
8710 - name: layout.css.prefixes.border-image
8711   type: bool
8712   value: true
8713   mirror: always
8715 # Is support for -moz-box-sizing enabled?
8716 - name: layout.css.prefixes.box-sizing
8717   type: bool
8718   value: true
8719   mirror: always
8721 # Is support for -moz-prefixed font feature properties enabled?
8722 - name: layout.css.prefixes.font-features
8723   type: bool
8724   value: true
8725   mirror: always
8727 # Is support for -moz-prefixed transform properties enabled?
8728 - name: layout.css.prefixes.transforms
8729   type: bool
8730   value: true
8731   mirror: always
8733 # Is support for -moz-prefixed transition properties enabled?
8734 - name: layout.css.prefixes.transitions
8735   type: bool
8736   value: true
8737   mirror: always
8739 # Is CSS error reporting enabled?
8740 - name: layout.css.report_errors
8741   type: bool
8742   value: true
8743   mirror: always
8745 # Are inter-character ruby annotations enabled?
8746 - name: layout.css.ruby.intercharacter.enabled
8747   type: bool
8748   value: false
8749   mirror: always
8751 - name: layout.css.scroll-behavior.damping-ratio
8752   type: AtomicFloat
8753   value: 1.0f
8754   mirror: always
8756 # Tuning of the smooth scroll motion used by CSSOM-View scroll-behavior.
8757 # Spring-constant controls the strength of the simulated MSD
8758 # (Mass-Spring-Damper).
8759 - name: layout.css.scroll-behavior.spring-constant
8760   type: AtomicFloat
8761   value: 250.0f
8762   mirror: always
8764 # Whether the scroll-driven animations generated by CSS is enabled. This
8765 # also include animation-timelime property.
8766 - name: layout.css.scroll-driven-animations.enabled
8767   type: RelaxedAtomicBool
8768   value: false
8769   mirror: always
8770   rust: true
8772 # When selecting the snap point for CSS scroll snapping, the velocity of the
8773 # scroll frame is clamped to this speed, in CSS pixels / s.
8774 - name: layout.css.scroll-snap.prediction-max-velocity
8775   type: RelaxedAtomicInt32
8776   value: 2000
8777   mirror: always
8779 #  When selecting the snap point for CSS scroll snapping, the velocity of the
8780 # scroll frame is integrated over this duration, in seconds.  The snap point
8781 # best suited for this position is selected, enabling the user to perform fling
8782 # gestures.
8783 - name: layout.css.scroll-snap.prediction-sensitivity
8784   type: AtomicFloat
8785   value: 0.750f
8786   mirror: always
8788 # Stylo thread-pool size.
8789 # Negative means auto, 0 disables the thread-pool (main-thread styling), other
8790 # numbers override as specified.
8791 # Note that 1 still creates a thread-pool of one thread!
8792 - name: layout.css.stylo-threads
8793   type: int32_t
8794   value: -1
8795   mirror: once
8796   rust: true
8798 # Stylo work unit size. This is the amount of nodes we'll process in a single
8799 # unit of work of the thread-pool.
8801 # Larger values will increase style sharing cache hits and general DOM locality
8802 # at the expense of decreased opportunities for parallelism.  There are some
8803 # measurements in bug 1385982 comments 11, 12, 13 that investigate some
8804 # slightly different values for the work unit size.
8806 # If the size is significantly increased, make sure to also review
8807 # stylo-local-work-queue prefs, since we might end up doing too much work
8808 # sequentially.
8810 # A value of 0 disables parallelism altogether.
8811 - name: layout.css.stylo-work-unit-size
8812   type: RelaxedAtomicUint32
8813   value: 16
8814   mirror: always
8815   rust: true
8817 # The minimum amount of work that a thread doing styling will try to keep
8818 # locally before sending work to other threads, in a worker.
8819 - name: layout.css.stylo-local-work-queue.in-worker
8820   type: RelaxedAtomicUint32
8821   value: 0
8822   mirror: always
8823   rust: true
8825 # As above but for the main thread. The main thread can't really steal from
8826 # other threads so it might want a bigger min queue size before giving work to
8827 # other threads.
8828 - name: layout.css.stylo-local-work-queue.in-main-thread
8829   type: RelaxedAtomicUint32
8830   value: 32
8831   mirror: always
8832   rust: true
8834 # Are counters for implemented CSS properties enabled?
8835 - name: layout.css.use-counters.enabled
8836   type: bool
8837   value: true
8838   mirror: always
8840 # Are counters for unimplemented CSS properties enabled?
8841 - name: layout.css.use-counters-unimplemented.enabled
8842   type: RelaxedAtomicBool
8843   value: true
8844   mirror: always
8845   rust: true
8847 # Should the :visited selector ever match (otherwise :link matches instead)?
8848 - name: layout.css.visited_links_enabled
8849   type: bool
8850   value: true
8851   mirror: always
8853 # Enable experimental enhanced color CSS color spaces. (lab(), lch(), oklab(), oklch(), color())
8854 - name: layout.css.more_color_4.enabled
8855   type: RelaxedAtomicBool
8856   value: true
8857   mirror: always
8858   rust: true
8860 # The margin used for detecting relevancy for `content-visibility: auto`.
8861 - name: layout.css.content-visibility-relevant-content-margin
8862   type: float
8863   value: 50 # 50%
8864   mirror: always
8866 # Whether the "modern" uppercase mapping of ÃŸ to áºž (rather than SS) is used.
8867 - name: layout.css.text-transform.uppercase-eszett.enabled
8868   type: bool
8869   value: false
8870   mirror: always
8872 # Whether to block large cursors intersecting UI.
8873 - name: layout.cursor.block.enabled
8874   type: bool
8875   value: true
8876   mirror: always
8878 # The maximum width or height of the cursor we should allow when intersecting
8879 # the UI, in CSS pixels.
8880 - name: layout.cursor.block.max-size
8881   type: uint32_t
8882   value: 32
8883   mirror: always
8885 - name: layout.display-list.build-twice
8886   type: RelaxedAtomicBool
8887   value: false
8888   mirror: always
8890 # Toggle retaining display lists between paints.
8891 - name: layout.display-list.retain
8892   type: RelaxedAtomicBool
8893   value: true
8894   mirror: always
8896 # Toggle retaining display lists between paints.
8897 - name: layout.display-list.retain.chrome
8898   type: RelaxedAtomicBool
8899   value: true
8900   mirror: always
8902 - name: layout.display-list.retain.sc
8903   type: RelaxedAtomicBool
8904   value: false
8905   mirror: always
8907 # Set the maximum number of modified frames allowed before doing a full
8908 # display list rebuild.
8909 - name: layout.display-list.rebuild-frame-limit
8910   type: RelaxedAtomicUint32
8911   value: 500
8912   mirror: always
8914 # Pref to dump the display list to the log. Useful for debugging drawing.
8915 - name: layout.display-list.dump
8916   type: RelaxedAtomicBool
8917   value: false
8918   mirror: always
8920 # Pref to dump the display list to the log. Useful for debugging drawing.
8921 - name: layout.display-list.dump-content
8922   type: RelaxedAtomicBool
8923   value: false
8924   mirror: always
8926 # Pref to dump the display list to the log. Useful for debugging drawing.
8927 - name: layout.display-list.dump-parent
8928   type: RelaxedAtomicBool
8929   value: false
8930   mirror: always
8932 - name: layout.display-list.show-rebuild-area
8933   type: RelaxedAtomicBool
8934   value: false
8935   mirror: always
8937 - name: layout.display-list.improve-fragmentation
8938   type: RelaxedAtomicBool
8939   value: true
8940   mirror: always
8942 # Are dynamic reflow roots enabled?
8943 - name: layout.dynamic-reflow-roots.enabled
8944   type: bool
8945   value: @IS_EARLY_BETA_OR_EARLIER@
8946   mirror: always
8948 # Enables the mechanism to optimize away flex item's final reflow.
8949 # Warning: Disabling the pref will impact the performance. This is useful only for
8950 # debugging flexbox issues.
8951 - name: layout.flexbox.item-final-reflow-optimization.enabled
8952   type: bool
8953   value: true
8954   mirror: always
8956 # Enables the <input type=search> custom layout frame with a clear icon.
8957 # Still needs tests and a web-exposed way to remove that icon, see bug 1654288.
8958 - name: layout.forms.input-type-search.enabled
8959   type: bool
8960   value: false
8961   mirror: always
8963 # Enables the Reveal Password button inside a <input type=password>.
8964 - name: layout.forms.reveal-password-button.enabled
8965   type: bool
8966   value: false
8967   mirror: always
8969 # Enables the Reveal Password context-menu entry.
8970 - name: layout.forms.reveal-password-context-menu.enabled
8971   type: bool
8972   value: true
8973   mirror: always
8975 # Pref to control browser frame rate, in Hz. A value <= 0 means choose
8976 # automatically based on knowledge of the platform (or 60Hz if no platform-
8977 # specific information is available).
8978 - name: layout.frame_rate
8979   type: RelaxedAtomicInt32
8980   value: -1
8981   mirror: always
8983 # If it has been this many frame periods since a refresh, assume that painting
8984 # is quiescent (will not happen again soon).
8985 - name: layout.idle_period.required_quiescent_frames
8986   type: uint32_t
8987   value: 2
8988   mirror: always
8990 # The amount of time (milliseconds) needed between an idle period's
8991 # end and the start of the next tick to avoid jank.
8992 - name: layout.idle_period.time_limit
8993   type: uint32_t
8994   value: 1
8995   mirror: always
8997 # The minimum amount of time (milliseconds) required to be remaining
8998 # in the current vsync interval for us to attempt an extra tick, or
8999 # <0 to disable extra ticks entirely.
9000 - name: layout.extra-tick.minimum-ms
9001   type: int32_t
9002   value: 4
9003   mirror: always
9005 # Whether to load the broken image icon eagerly. This is mostly needed for
9006 # reftests, since the broken image icon doesn't block the load event and thus
9007 # there's no easy way to guarantee it's loaded.
9008 - name: layout.image.eager_broken_image_icon
9009   type: bool
9010   value: false
9011   mirror: always
9013 # Enable/disable interruptible reflow, which allows reflows to stop
9014 # before completion (and display the partial results) when user events
9015 # are pending.
9016 - name: layout.interruptible-reflow.enabled
9017   type: bool
9018   value: true
9019   mirror: always
9021 # On Android, don't synth mouse move events after scrolling, as they cause
9022 # unexpected user-visible behaviour. Can remove this after bug 1633450 is
9023 # satisfactorily resolved.
9024 - name: layout.reflow.synthMouseMove
9025   type: bool
9026   value: @IS_NOT_ANDROID@
9027   mirror: always
9029 # This pref is to be set by test code only.
9030 - name: layout.scrollbars.always-layerize-track
9031   type: RelaxedAtomicBool
9032   value: false
9033   mirror: always
9035 - name: layout.scrollbars.click_and_hold_track.continue_to_end
9036   type: bool
9037 # On Linux, click-and-hold on the scrollbar track should continue scrolling
9038 # until the mouse is released. On the other platforms we want to stop
9039 # scrolling as soon as the scrollbar thumb has reached the current mouse
9040 # position.
9041 #ifdef MOZ_WIDGET_GTK
9042   value: true
9043 #else
9044   value: false
9045 #endif
9046   mirror: always
9048 # Whether anchor is kept selected.
9049 - name: layout.selectanchor
9050   type: bool
9051   value: false
9052   mirror: always
9054 # Controls caret style and word-delete during text selection.
9055 # 0: Use platform default
9056 # 1: Caret moves and blinks as when there is no selection; word
9057 #    delete deselects the selection and then deletes word.
9058 # 2: Caret moves to selection edge and is not visible during selection;
9059 #    word delete deletes the selection (Mac and Linux default).
9060 # 3: Caret moves and blinks as when there is no selection; word delete
9061 #    deletes the selection.
9062 # Windows default is 1 for word delete behavior, the rest as for 2.
9063 - name: layout.selection.caret_style
9064   type: int32_t
9065   value: 0
9066   mirror: always
9068 # If layout.show_previous_page is true then during loading of a new page we
9069 # will draw the previous page if the new page has painting suppressed.
9070 - name: layout.show_previous_page
9071   type: bool
9072   value: true
9073   mirror: always
9075 # Pref to stop overlay scrollbars from fading out, for testing purposes.
9076 - name: layout.testing.overlay-scrollbars.always-visible
9077   type: bool
9078   value: false
9079   mirror: always
9081 # Throttled frame rate, in frames per second.
9082 - name: layout.throttled_frame_rate
9083   type: uint32_t
9084   value: 1
9085   mirror: always
9087 # Whether we should throttle in-process iframes in the active tab.
9088 - name: layout.throttle_in_process_iframes
9089   type: bool
9090   value: true
9091   mirror: always
9093 # Activity granted to out-of-process iframes in the foreground tab, in milliseconds.
9094 - name: layout.oopif_activity_grace_period_ms
9095   type: uint32_t
9096   value: 1000
9097   mirror: always
9099 - name: layout.lower_priority_refresh_driver_during_load
9100   type: bool
9101   value: true
9102   mirror: always
9104 # If > 0, nsRefreshDriver will keep ticking this amount of milliseconds after
9105 # top level page load.
9106 - name: layout.keep_ticking_after_load_ms
9107   type: uint32_t
9108   value: 1000
9109   mirror: always
9111 # Pref to control enabling scroll anchoring.
9112 - name: layout.css.scroll-anchoring.enabled
9113   type: bool
9114   value: true
9115   mirror: always
9117 # Pref to control whether to suspend also RefreshDriver::Tick when the page
9118 # itself is suspended because of some synchronous operation, like sync XHR.
9119 - name: layout.skip_ticks_while_page_suspended
9120   type: bool
9121   value: true
9122   mirror: always
9124 # Pref to control how many consecutive scroll-anchoring adjustments (since the
9125 # most recent user scroll or timeout) we'll average, before we consider whether
9126 # to automatically turn off scroll anchoring. When we hit this threshold, the
9127 # actual decision to disable also depends on the
9128 # min-average-adjustment-threshold pref, see below for more details.
9130 # Zero disables the heuristic.
9131 - name: layout.css.scroll-anchoring.max-consecutive-adjustments
9132   type: uint32_t
9133   value: 10
9134   mirror: always
9136 # Whether to reset counting the consecutive scroll-anchoring adjustments during
9137 # running async scrolling by APZ.
9138 - name: layout.css.scroll-anchoring.reset-heuristic-during-animation
9139   type: bool
9140   value: false
9141   mirror: always
9143 # The time after which we reset the max-consecutive-adjustments period, in
9144 # milliseconds.
9146 # This prevents sporadic back-and-forth scroll anchoring to trigger the
9147 # max-consecutive-adjustments heuristic.
9148 - name: layout.css.scroll-anchoring.max-consecutive-adjustments-timeout-ms
9149   type: uint32_t
9150   value: 500
9151   mirror: always
9153 # Pref to control whether we should disable scroll anchoring on a scroller
9154 # where at least max-consecutive-adjustments have happened, and which the
9155 # average adjustment ends up being less than this number, in CSS pixels.
9157 # So, for example, given max-consecutive-adjustments=10 and
9158 # min-average-adjustment-treshold=3, we'll block scroll anchoring if there have
9159 # been 10 consecutive adjustments without a user scroll or more, and the
9160 # average offset difference between them amount to less than 3 CSS pixels.
9161 - name: layout.css.scroll-anchoring.min-average-adjustment-threshold
9162   type: uint32_t
9163   value: 2
9164   mirror: always
9166 # Pref to control disabling scroll anchoring suppression triggers, see
9168 # https://drafts.csswg.org/css-scroll-anchoring/#suppression-triggers
9170 # Those triggers should be unnecessary after bug 1561450.
9171 - name: layout.css.scroll-anchoring.suppressions.enabled
9172   type: bool
9173   value: true
9174   mirror: always
9176 - name: layout.css.scroll-anchoring.highlight
9177   type: bool
9178   value: false
9179   mirror: always
9181 # Pref to control whether we reselect scroll anchors if sub-optimal
9183 # See https://github.com/w3c/csswg-drafts/issues/6787
9184 - name: layout.css.scroll-anchoring.reselect-if-suboptimal
9185   type: bool
9186   value: true
9187   mirror: always
9189 # Are shared memory User Agent style sheets enabled?
9190 - name: layout.css.shared-memory-ua-sheets.enabled
9191   type: bool
9192   value: true
9193   mirror: always
9195 # Is support for -webkit-line-clamp on regular blocks enabled?
9196 - name: layout.css.webkit-line-clamp.block.enabled
9197   type: bool
9198   value: false
9199   mirror: always
9201 # Is support for -webkit-slider* pseudos enabled?
9202 - name: layout.css.webkit-range-pseudos.enabled
9203   type: RelaxedAtomicBool
9204   value: false
9205   mirror: always
9206   rust: true
9208 # Is 'content:none' supported on (non-pseudo) elements?
9209 - name: layout.css.element-content-none.enabled
9210   type: RelaxedAtomicBool
9211   value: false
9212   mirror: always
9213   rust: true
9215 # Whether we want scrollbar-width: thin to behave as scrollbar-width: auto.
9216 - name: layout.css.scrollbar-width-thin.disabled
9217   type: RelaxedAtomicBool
9218   value: false
9219   mirror: always
9221 # Whether the `scrollbar-gutter` CSS property is enabled.
9222 - name: layout.css.scrollbar-gutter.enabled
9223   type: RelaxedAtomicBool
9224   value: true
9225   mirror: always
9226   rust: true
9228 # Whether supports() conditions in @import is enabled
9229 - name: layout.css.import-supports.enabled
9230   type: RelaxedAtomicBool
9231   value: true
9232   mirror: always
9233   rust: true
9235 # Whether frame visibility tracking is enabled globally.
9236 - name: layout.framevisibility.enabled
9237   type: bool
9238   value: true
9239   mirror: always
9241 # The fraction of the scrollport we allow to horizontally scroll by before we
9242 # schedule an update of frame visibility.
9243 - name: layout.framevisibility.amountscrollbeforeupdatehorizontal
9244   type: int32_t
9245   value: 2
9246   mirror: always
9248 # The fraction of the scrollport we allow to vertically scroll by before we
9249 # schedule an update of frame visibility.
9250 - name: layout.framevisibility.amountscrollbeforeupdatevertical
9251   type: int32_t
9252   value: 2
9253   mirror: always
9255 # The number of scrollports wide to expand when tracking frame visibility.
9256 - name: layout.framevisibility.numscrollportwidths
9257   type: uint32_t
9258 #ifdef ANDROID
9259   value: 1
9260 #else
9261   value: 0
9262 #endif
9263   mirror: always
9265 # The number of scrollports high to expand when tracking frame visibility.
9266 - name: layout.framevisibility.numscrollportheights
9267   type: uint32_t
9268   value: 1
9269   mirror: always
9271 # Test only.
9272 - name: layout.dynamic-toolbar-max-height
9273   type: RelaxedAtomicInt32
9274   value: 0
9275   mirror: always
9277 # Whether outlines should include all overflowing descendants, or just the
9278 # border-box of a given element.
9280 # Historically we have included descendants but other browsers have not.
9281 - name: layout.outline.include-overflow
9282   type: bool
9283   value: false
9284   mirror: always
9286 - name: layout.visibility.min-recompute-interval-ms
9287   type: uint32_t
9288   value: 1000
9289   mirror: always
9291 # Controls double click and Alt+Arrow word selection behavior.
9292 - name: layout.word_select.eat_space_to_next_word
9293   type: bool
9294 #ifdef XP_WIN
9295   value: true
9296 #else
9297   value: false
9298 #endif
9299   mirror: always
9301 - name: layout.word_select.stop_at_punctuation
9302   type: bool
9303   value: true
9304   mirror: always
9306 # Whether underscore should be treated as a word-breaking character for
9307 # word selection/arrow-key movement purposes.
9308 - name: layout.word_select.stop_at_underscore
9309   type: bool
9310   value: false
9311   mirror: always
9313 # Should deprecated plugin behavior fallback to normal behavior or use
9314 # the experimental design.
9315 - name: layout.use-plugin-fallback
9316   type: bool
9317   value: false
9318   mirror: always
9320 # Whether to draw images in CSS backgrounds if we only have a partial frame.
9321 - name: layout.display_partial_background_images
9322   type: bool
9323   value: true
9324   mirror: always
9326 # Controls whether nsRefreshDriver::IsInHighRateMode() may ever return true.
9327 - name: layout.expose_high_rate_mode_from_refreshdriver
9328   type: bool
9329   value: true
9330   mirror: always
9332 #---------------------------------------------------------------------------
9333 # Prefs starting with "mathml."
9334 #---------------------------------------------------------------------------
9336 # Whether to disable legacy names "thickmathspace", "mediummathspace",
9337 # "thickmathspace" etc for length attributes.
9338 - name: mathml.mathspace_names.disabled
9339   type: bool
9340   value: @IS_NIGHTLY_BUILD@
9341   mirror: always
9343 # Whether to disable support for stretching operators with STIXGeneral fonts.
9344 # macos still has the deprecated STIXGeneral font pre-installed.
9345 - name: mathml.stixgeneral_operator_stretching.disabled
9346   type: bool
9347 #if defined(XP_MACOSX)
9348   value: @IS_NIGHTLY_BUILD@
9349 #else
9350   value: true
9351 #endif
9352   mirror: always
9354 # Whether to disable fallback for mathvariant=italic/bold/bold-italic via
9355 # styling when lacking proper fonts for Mathematical Alphanumeric Symbols.
9356 # We expect all OSes to have relevant fonts, except Android, see bug 1789083.
9357 - name: mathml.mathvariant_styling_fallback.disabled
9358   type: bool
9359 #if defined(ANDROID)
9360   value: false
9361 #else
9362   value: true
9363 #endif
9364   mirror: always
9366 # Whether to disable the MathML3 support for the mathvariant attribute. For
9367 # MathML Core, support is restricted to the <mi> element and to value "normal".
9368 # Corresponding automatic italicization on single-char <mi> element is also
9369 # implemented via text-transform: auto when that flag is enabled.
9370 - name: mathml.legacy_mathvariant_attribute.disabled
9371   type: bool
9372   value: @IS_NIGHTLY_BUILD@
9373   mirror: always
9374   rust: true
9376 #---------------------------------------------------------------------------
9377 # Prefs starting with "media."
9378 #---------------------------------------------------------------------------
9381 # This pref defines what the blocking policy would be used in blocking autoplay.
9382 # 0 : use sticky activation (default)
9383 # https://html.spec.whatwg.org/multipage/interaction.html#sticky-activation
9384 # 1 : use transient activation (the transient activation duration can be
9385 #     adjusted by the pref `dom.user_activation.transient.timeout`)
9386 # https://html.spec.whatwg.org/multipage/interaction.html#transient-activation
9387 # 2 : user input depth (allow autoplay when the play is trigged by user input
9388 #     which is determined by the user input depth)
9389 - name: media.autoplay.blocking_policy
9390   type: uint32_t
9391   value: 0
9392   mirror: always
9394 # Whether to allow autoplay on extension background pages.
9395 - name: media.autoplay.allow-extension-background-pages
9396   type: bool
9397   value: true
9398   mirror: always
9400 # Block autoplay, asking for permission by default.
9401 # 0=Allowed, 1=Blocked, 5=All Blocked
9402 - name: media.autoplay.default
9403   type: int32_t
9404   value: 1
9405   mirror: always
9407 # Wether to block autoplay for webaudio
9408 - name: media.autoplay.block-webaudio
9409   type: bool
9410   value: true
9411   mirror: always
9413 # File-backed MediaCache size.
9414 - name: media.cache_size
9415   type: RelaxedAtomicUint32
9416   value: 512000   # Measured in KiB
9417   mirror: always
9419 # Size of file backed MediaCache while on a connection which is cellular (3G,
9420 # etc), and thus assumed to be "expensive".
9421 - name: media.cache_size.cellular
9422   type: RelaxedAtomicUint32
9423   value: 32768   # Measured in KiB
9424   mirror: always
9426 # Whether cubeb is sandboxed (AudioIPC)
9427 - name: media.cubeb.sandbox
9428   type: bool
9429   mirror: always
9430 #if defined(XP_LINUX) && !defined(MOZ_WIDGET_ANDROID) || defined(XP_WIN) || defined(XP_MACOSX)
9431   value: true
9432 #else
9433   value: false
9434 #endif
9436 # Whether or not to pass AUDCLNT_STREAMOPTIONS_RAW when initializing audio
9437 # streams when using WASAPI.
9438 # 0 - don't use RAW streams
9439 # 1 - use RAW streams for input streams only
9440 # 2 - use RAW streams for output streams only
9441 # 3 - use RAW streams for input and output streams
9442 #if defined (XP_WIN)
9443 - name: media.cubeb.wasapi-raw
9444   type: RelaxedAtomicUint32
9445   mirror: always
9446   value: 0
9447 #endif // XP_WIN
9449 # Whether to make the start of cubeb stream slower, and by how many
9450 # milliseconds.
9451 - name: media.cubeb.slow_stream_init_ms
9452   type: RelaxedAtomicUint32
9453   mirror: always
9454   value: 0
9456 # ClockDrift desired buffering in milliseconds
9457 - name: media.clockdrift.buffering
9458   type: RelaxedAtomicUint32
9459   mirror: always
9460   value: 50
9462 # If a resource is known to be smaller than this size (in kilobytes), a
9463 # memory-backed MediaCache may be used; otherwise the (single shared global)
9464 # file-backed MediaCache is used.
9465 - name: media.memory_cache_max_size
9466   type: uint32_t
9467   value: 8192        # Measured in KiB
9468   mirror: always
9470 # Don't create more memory-backed MediaCaches if their combined size would go
9471 # above this absolute size limit.
9472 - name: media.memory_caches_combined_limit_kb
9473   type: uint32_t
9474   value: 524288
9475   mirror: always
9477 # Don't create more memory-backed MediaCaches if their combined size would go
9478 # above this relative size limit (a percentage of physical memory).
9479 - name: media.memory_caches_combined_limit_pc_sysmem
9480   type: uint32_t
9481   value: 5           # A percentage
9482   mirror: always
9484 # When a network connection is suspended, don't resume it until the amount of
9485 # buffered data falls below this threshold (in seconds).
9486 - name: media.cache_resume_threshold
9487   type: RelaxedAtomicUint32
9488   value: 30
9489   mirror: always
9490 - name: media.cache_resume_threshold.cellular
9491   type: RelaxedAtomicUint32
9492   value: 10
9493   mirror: always
9495 # Stop reading ahead when our buffered data is this many seconds ahead of the
9496 # current playback position. This limit can stop us from using arbitrary
9497 # amounts of network bandwidth prefetching huge videos.
9498 - name: media.cache_readahead_limit
9499   type: RelaxedAtomicUint32
9500   value: 60
9501   mirror: always
9502 - name: media.cache_readahead_limit.cellular
9503   type: RelaxedAtomicUint32
9504   value: 30
9505   mirror: always
9507 # MediaCapabilities
9508 - name: media.mediacapabilities.drop-threshold
9509   type: RelaxedAtomicInt32
9510   value: 95
9511   mirror: always
9513 - name: media.mediacapabilities.from-database
9514   type: RelaxedAtomicBool
9515   value: @IS_NIGHTLY_BUILD@
9516   mirror: always
9518 # AudioSink
9519 - name: media.resampling.enabled
9520   type: RelaxedAtomicBool
9521   value: false
9522   mirror: always
9524 # libcubeb backend implements .get_preferred_channel_layout
9525 - name: media.forcestereo.enabled
9526   type: RelaxedAtomicBool
9527 #if defined(XP_WIN) || defined(XP_DARWIN) || defined(MOZ_PULSEAUDIO)
9528   value: false
9529 #else
9530   value: true
9531 #endif
9532   mirror: always
9534 # MediaSource
9536 # Whether to enable MediaSource support.
9537 - name: media.mediasource.enabled
9538   type: RelaxedAtomicBool
9539   value: true
9540   mirror: always
9542 - name: media.mediasource.mp4.enabled
9543   type: RelaxedAtomicBool
9544   value: true
9545   mirror: always
9547 - name: media.mediasource.webm.enabled
9548   type: RelaxedAtomicBool
9549   value: true
9550   mirror: always
9552 # Check if vp9 is enabled by default in mediasource. False on Android.
9553 # If disabled, vp9 will only be enabled under some conditions:
9554 # - h264 HW decoding is not supported
9555 # - mp4 is not enabled
9556 # - Device was deemed fast enough to decode VP9 via the VP9Benchmark utility
9557 # - A VP9 HW decoder is present.
9558 - name: media.mediasource.vp9.enabled
9559   type: RelaxedAtomicBool
9560   value: @IS_NOT_ANDROID@
9561   mirror: always
9563 - name: media.mediasource.webm.audio.enabled
9564   type: RelaxedAtomicBool
9565   value: true
9566   mirror: always
9568 # Whether to enable MediaSource v2 support.
9569 - name: media.mediasource.experimental.enabled
9570   type: RelaxedAtomicBool
9571   value: false
9572   mirror: always
9574 # VideoSink
9575 - name: media.ruin-av-sync.enabled
9576   type: RelaxedAtomicBool
9577   value: false
9578   mirror: always
9580 # Encrypted Media Extensions
9581 - name: media.eme.enabled
9582   type: bool
9583 #if defined(XP_LINUX) && !defined(MOZ_WIDGET_ANDROID)
9584   # On Linux EME is visible but disabled by default. This is so that the "Play
9585   # DRM content" checkbox in the Firefox UI is unchecked by default. DRM
9586   # requires downloading and installing proprietary binaries, which users on an
9587   # open source operating systems didn't opt into. The first time a site using
9588   # EME is encountered, the user will be prompted to enable DRM, whereupon the
9589   # EME plugin binaries will be downloaded if permission is granted.
9590   value: false
9591 #else
9592   value: true
9593 #endif
9594   mirror: always
9596 # Whether we expose the functionality proposed in
9597 # https://github.com/WICG/encrypted-media-encryption-scheme/blob/master/explainer.md
9598 # I.e. if true, apps calling navigator.requestMediaKeySystemAccess() can pass
9599 # an optional encryption scheme as part of MediaKeySystemMediaCapability
9600 # objects. If a scheme is present when we check for support, we must ensure we
9601 # support that scheme in order to provide key system access.
9602 - name: media.eme.encrypted-media-encryption-scheme.enabled
9603   type: bool
9604   value: false
9605   mirror: always
9607 # Do we need explicit approval from the application to allow access to EME?
9608 # If true, Gecko will ask for permission before allowing MediaKeySystemAccess.
9609 # At time of writing this is aimed at GeckoView, and setting this to true
9610 # outside of GeckoView or test environments will likely break EME.
9611 - name: media.eme.require-app-approval
9612   type: bool
9613   value: false
9614   mirror: always
9616 - name: media.eme.audio.blank
9617   type: RelaxedAtomicBool
9618   value: false
9619   mirror: always
9621 - name: media.eme.video.blank
9622   type: RelaxedAtomicBool
9623   value: false
9624   mirror: always
9626 - name: media.eme.chromium-api.video-shmems
9627   type: RelaxedAtomicUint32
9628   value: 6
9629   mirror: always
9631 # Is support for MediaKeys.getStatusForPolicy enabled?
9632 - name: media.eme.hdcp-policy-check.enabled
9633   type: bool
9634   value: false
9635   mirror: always
9637 - name: media.eme.max-throughput-ms
9638   type: RelaxedAtomicUint32
9639   value: 500
9640   mirror: always
9642 - name: media.clearkey.persistent-license.enabled
9643   type: bool
9644   value: false
9645   mirror: always
9647 # Are test specific clearkey key systems enabled and exposed?
9648 - name: media.clearkey.test-key-systems.enabled
9649   type: bool
9650   value: false
9651   mirror: always
9653 - name: media.cloneElementVisually.testing
9654   type: bool
9655   value: false
9656   mirror: always
9658 # Does the GMPlugin process initialize minimal XPCOM
9659 - name: media.gmp.use-minimal-xpcom
9660   type: RelaxedAtomicBool
9661   value: false
9662   mirror: always
9664 # Does the GMPlugin process initialize minimal XPCOM
9665 - name: media.gmp.use-native-event-processing
9666   type: RelaxedAtomicBool
9667   value: true
9668   mirror: always
9670 #if defined(XP_LINUX) && defined(MOZ_SANDBOX)
9671   # Whether to allow, on a Linux system that doesn't support the necessary
9672   # sandboxing features, loading Gecko Media Plugins unsandboxed.  However, EME
9673   # CDMs will not be loaded without sandboxing even if this pref is changed.
9674 -   name: media.gmp.insecure.allow
9675     type: RelaxedAtomicBool
9676     value: false
9677     mirror: always
9678 #endif
9680 # (When reading the next line, know that preprocessor.py doesn't
9681 # understand parentheses, but && is higher precedence than ||.)
9682 #if defined(XP_WIN) && defined(_ARM64_) || defined(XP_MACOSX)
9683   # These prefs control whether or not we will allow x86/x64 plugins
9684   # to run on Windows ARM or Apple Silicon machines. This requires
9685   # launching the GMP child process executable in x86/x64 mode. We
9686   # expect to allow this for Widevine until an arm64 version of
9687   # Widevine and Clearkey is made available. We don't expect to need
9688   # to allow this for OpenH264.
9689   #
9690   # For Apple Silicon and OSX, it will be for universal builds and
9691   # whether or not it can use the x64 Widevine plugin.
9692   #
9693   # For Windows ARM, it will be for ARM builds and whether or not it
9694   # can use x86 Widevine or Clearkey plugins.
9696   # May a Widevine GMP x64 process be executed on ARM builds.
9697 - name: media.gmp-widevinecdm.allow-x64-plugin-on-arm64
9698   type: RelaxedAtomicBool
9699   value: true
9700   mirror: always
9702   # May an OpenH264 GMP x64 process be executed on ARM builds.
9703 - name: media.gmp-gmpopenh264.allow-x64-plugin-on-arm64
9704   type: RelaxedAtomicBool
9705   value: false
9706   mirror: always
9708   # May a Clearkey GMP x64 process be executed on ARM builds.
9709 - name: media.gmp-gmpclearkey.allow-x64-plugin-on-arm64
9710   type: RelaxedAtomicBool
9711   value: false
9712   mirror: always
9713 #endif
9715 # Specifies whether the PDMFactory can create a test decoder that just outputs
9716 # blank frames/audio instead of actually decoding. The blank decoder works on
9717 # all platforms.
9718 - name: media.use-blank-decoder
9719   type: RelaxedAtomicBool
9720   value: false
9721   mirror: always
9723 - name: media.gpu-process-decoder
9724   type: RelaxedAtomicBool
9725 #if defined(XP_WIN)
9726   value: true
9727 #else
9728   value: false
9729 #endif
9730   mirror: always
9732 - name: media.rdd-process.enabled
9733   type: RelaxedAtomicBool
9734 #if defined(XP_WIN)
9735   value: true
9736 #elif defined(XP_MACOSX)
9737   value: true
9738 #elif defined(XP_LINUX) && !defined(ANDROID)
9739   value: true
9740 #elif defined(XP_FREEBSD)
9741   value: true
9742 #elif defined(XP_OPENBSD)
9743   value: true
9744 #else
9745   value: false
9746 #endif
9747   mirror: always
9749 - name: media.rdd-retryonfailure.enabled
9750   type: RelaxedAtomicBool
9751   value: true
9752   mirror: always
9754 - name: media.rdd-process.startup_timeout_ms
9755   type: RelaxedAtomicInt32
9756   value: 5000
9757   mirror: always
9759 # Specifies how many times we restart RDD process after crash till we give up.
9760 # After first RDD restart we disable HW acceleration on Linux.
9761 - name: media.rdd-process.max-crashes
9762   type: RelaxedAtomicInt32
9763   value: 2
9764   mirror: always
9766 #ifdef MOZ_FFMPEG
9767 - name: media.rdd-ffmpeg.enabled
9768   type: RelaxedAtomicBool
9769   value: true
9770   mirror: always
9771 #endif
9773 #ifdef MOZ_FFVPX
9774 - name: media.rdd-ffvpx.enabled
9775   type: RelaxedAtomicBool
9776 #if defined(XP_WIN)
9777   value: true
9778 #elif defined(XP_MACOSX)
9779   value: true
9780 #elif defined(XP_LINUX) && !defined(ANDROID)
9781   value: true
9782 #elif defined(XP_FREEBSD)
9783   value: true
9784 #elif defined(XP_OPENBSD)
9785   value: true
9786 #else
9787   value: false
9788 #endif
9789   mirror: always
9790 #endif
9792 #ifdef MOZ_WMF
9793 - name: media.rdd-wmf.enabled
9794   type: RelaxedAtomicBool
9795   value: true
9796   mirror: always
9797 #endif
9799 #ifdef MOZ_APPLEMEDIA
9800 - name: media.rdd-applemedia.enabled
9801   type: RelaxedAtomicBool
9802   value: true
9803   mirror: always
9804 #endif
9806 - name: media.rdd-theora.enabled
9807   type: RelaxedAtomicBool
9808 #if defined(XP_WIN)
9809   value: true
9810 #elif defined(XP_MACOSX)
9811   value: true
9812 #elif defined(XP_LINUX) && !defined(ANDROID)
9813   value: true
9814 #elif defined(XP_FREEBSD)
9815   value: true
9816 #elif defined(XP_OPENBSD)
9817   value: true
9818 #else
9819   value: false
9820 #endif
9821   mirror: always
9823 - name: media.rdd-vorbis.enabled
9824   type: RelaxedAtomicBool
9825 #if defined(XP_WIN)
9826   value: true
9827 #elif defined(XP_MACOSX)
9828   value: true
9829 #elif defined(XP_LINUX) && !defined(ANDROID)
9830   value: true
9831 #elif defined(XP_FREEBSD)
9832   value: true
9833 #elif defined(XP_OPENBSD)
9834   value: true
9835 #else
9836   value: false
9837 #endif
9838   mirror: always
9840 - name: media.rdd-vpx.enabled
9841   type: RelaxedAtomicBool
9842 #if defined(XP_WIN)
9843   value: true
9844 #elif defined(XP_MACOSX)
9845   value: true
9846 #elif defined(XP_LINUX) && !defined(ANDROID)
9847   value: true
9848 #elif defined(XP_FREEBSD)
9849   value: true
9850 #elif defined(XP_OPENBSD)
9851   value: true
9852 #else
9853   value: false
9854 #endif
9855   mirror: always
9857 - name: media.rdd-wav.enabled
9858   type: RelaxedAtomicBool
9859 #if defined(XP_WIN)
9860   value: true
9861 #elif defined(XP_MACOSX)
9862   value: true
9863 #elif defined(XP_LINUX) && !defined(ANDROID)
9864   value: true
9865 #elif defined(XP_FREEBSD)
9866   value: true
9867 #elif defined(XP_OPENBSD)
9868   value: true
9869 #else
9870   value: false
9871 #endif
9872   mirror: always
9874 - name: media.rdd-opus.enabled
9875   type: RelaxedAtomicBool
9876 #if defined(XP_WIN)
9877   value: true
9878 #elif defined(XP_MACOSX)
9879   value: true
9880 #elif defined(XP_LINUX) && !defined(ANDROID)
9881   value: true
9882 #elif defined(XP_FREEBSD)
9883   value: true
9884 #elif defined(XP_OPENBSD)
9885   value: true
9886 #else
9887   value: false
9888 #endif
9889   mirror: always
9891 - name: media.rdd-webaudio.batch.size
9892   type: RelaxedAtomicInt32
9893   value: 100
9894   mirror: always
9896 # This pref is here to control whether we want to perform audio decoding by
9897 # using the IPC actor within the Utility process rather than the RDD process.
9898 # When it is set to true, then the utility process will take precedence over RDD
9899 # to perform audio decoding.
9900 # TODO: Enabling for Isolated Processes builds on Android
9901 - name: media.utility-process.enabled
9902   type: RelaxedAtomicBool
9903 #if defined(XP_WIN)
9904   value: true
9905 #elif defined(XP_MACOSX)
9906   value: true
9907 #elif defined(XP_LINUX) && !defined(ANDROID)
9908   value: true
9909 #elif defined(ANDROID) && !defined(MOZ_ANDROID_CONTENT_SERVICE_ISOLATED_PROCESS)
9910   value: true
9911 #elif defined(XP_OPENBSD)
9912   value: true
9913 #else
9914   value: false
9915 #endif
9916   mirror: always
9918 # Specifies how many times we restart Utility process after crash till we give
9919 # up.
9920 - name: media.utility-process.max-crashes
9921   type: RelaxedAtomicInt32
9922   value: 2
9923   mirror: always
9925 #ifdef MOZ_FFMPEG
9926 - name: media.utility-ffmpeg.enabled
9927   type: RelaxedAtomicBool
9928   value: true
9929   mirror: always
9930 #endif
9932 #ifdef MOZ_FFVPX
9933 - name: media.utility-ffvpx.enabled
9934   type: RelaxedAtomicBool
9935   value: true
9936   mirror: always
9937 #endif
9939 #ifdef MOZ_WMF
9940 - name: media.utility-wmf.enabled
9941   type: RelaxedAtomicBool
9942   value: true
9943   mirror: always
9944 #endif
9946 #ifdef MOZ_APPLEMEDIA
9947 - name: media.utility-applemedia.enabled
9948   type: RelaxedAtomicBool
9949   value: true
9950   mirror: always
9951 #endif
9953 - name: media.utility-vorbis.enabled
9954   type: RelaxedAtomicBool
9955   value: true
9956   mirror: always
9958 - name: media.utility-wav.enabled
9959   type: RelaxedAtomicBool
9960   value: true
9961   mirror: always
9963 - name: media.utility-opus.enabled
9964   type: RelaxedAtomicBool
9965   value: true
9966   mirror: always
9968 #ifdef ANDROID
9969   # Enable the MediaCodec PlatformDecoderModule by default.
9970 -   name: media.android-media-codec.enabled
9971     type: RelaxedAtomicBool
9972     value: true
9973     mirror: always
9975   # Bug 1771196
9976   # Dont yet enable AndroidDecoderModule on Utility
9977 -   name: media.utility-android-media-codec.enabled
9978     type: RelaxedAtomicBool
9979     value: false
9980     mirror: always
9982 -   name: media.android-media-codec.preferred
9983     type: RelaxedAtomicBool
9984     value: true
9985     mirror: always
9986 #endif  # ANDROID
9988 # Now we will completely disable the ability to perform audio decoding outside
9989 # of Utility.
9990 # We do that only on nightly builds for now.
9991 -   name: media.allow-audio-non-utility
9992     type: RelaxedAtomicBool
9993 #if defined(NIGHTLY_BUILD)
9994     value: false
9995 #else
9996     value: true
9997 #endif // defined(NIGHTLY_BUILD)
9998     mirror: always
10000 #ifdef MOZ_OMX
10001 -   name: media.omx.enabled
10002     type: bool
10003     value: false
10004     mirror: always
10005 #endif
10007 # Allow ffmpeg decoder to decode directly onto shmem buffer
10008 - name: media.ffmpeg.customized-buffer-allocation
10009   type: RelaxedAtomicBool
10010   value: true
10011   mirror: always
10013 #ifdef MOZ_FFMPEG
10014 -   name: media.ffmpeg.enabled
10015     type: RelaxedAtomicBool
10016   #if defined(XP_MACOSX)
10017     value: false
10018   #else
10019     value: true
10020   #endif
10021     mirror: always
10023 -   name: media.libavcodec.allow-obsolete
10024     type: bool
10025     value: false
10026     mirror: always
10027 #endif  # MOZ_FFMPEG
10029 #if defined(MOZ_FFMPEG) || defined(MOZ_FFVPX)
10030 # Allow using openh264 decoding with ffmpeg
10031 -   name: media.ffmpeg.allow-openh264
10032     type: RelaxedAtomicBool
10033     value: @IS_NOT_NIGHTLY_BUILD@
10034     mirror: always
10035 #endif  # MOZ_FFMPEG || MOZ_FFVPX
10037 #ifdef MOZ_WIDGET_GTK
10038 # Use VA-API for ffmpeg video playback on Linux
10039 - name: media.ffmpeg.vaapi.enabled
10040   type: bool
10041   value: false
10042   mirror: once
10044 # Force to copy dmabuf video frames
10045 # Used for debugging/troubleshooting only
10046 # 0 - force disable
10047 # 1 - force enable
10048 # 2 - default
10049 - name: media.ffmpeg.vaapi.force-surface-zero-copy
10050   type: uint32_t
10051   value: 2
10052   mirror: once
10053 #endif # MOZ_WIDGET_GTK
10055 -   name: media.ffvpx.enabled
10056     type: RelaxedAtomicBool
10057 #ifdef MOZ_FFVPX
10058     value: true
10059 #else
10060     value: false
10061 #endif
10062     mirror: always
10064 -   name: media.ffvpx.mp3.enabled
10065     type: RelaxedAtomicBool
10066 #ifdef MOZ_FFVPX
10067     value: true
10068 #else
10069     value: false
10070 #endif
10071     mirror: always
10073 -   name: media.ffvpx.vorbis.enabled
10074     type: RelaxedAtomicBool
10075 #ifdef MOZ_FFVPX
10076     value: true
10077 #else
10078     value: false
10079 #endif
10080     mirror: always
10082 -   name: media.ffvpx.opus.enabled
10083     type: RelaxedAtomicBool
10084 #ifdef MOZ_FFVPX
10085     value: true
10086 #else
10087     value: false
10088 #endif
10089     mirror: always
10091 -   name: media.ffvpx.wav.enabled
10092     type: RelaxedAtomicBool
10093 #ifdef MOZ_FFVPX
10094     value: true
10095 #else
10096     value: false
10097 #endif
10098     mirror: always
10100 # Set to true in marionette tests to disable the sanity test
10101 # which would lead to unnecessary start of the RDD process.
10102 -   name: media.sanity-test.disabled
10103     type: RelaxedAtomicBool
10104     value: false
10105     mirror: always
10107 #ifdef MOZ_WMF
10109 -   name: media.wmf.enabled
10110     type: RelaxedAtomicBool
10111     value: true
10112     mirror: always
10114   # Whether DD should consider WMF-disabled a WMF failure, useful for testing.
10115 -   name: media.decoder-doctor.wmf-disabled-is-failure
10116     type: RelaxedAtomicBool
10117     value: false
10118     mirror: always
10120 -   name: media.wmf.dxva.d3d11.enabled
10121     type: RelaxedAtomicBool
10122     value: true
10123     mirror: always
10125 -   name: media.wmf.dxva.max-videos
10126     type: RelaxedAtomicUint32
10127     value: 8
10128     mirror: always
10130 -   name: media.wmf.dxva.d3d9.amd-pre-uvd4.disabled
10131     type: RelaxedAtomicBool
10132     value: true
10133     mirror: always
10135 -   name: media.wmf.use-nv12-format
10136     type: RelaxedAtomicBool
10137     value: true
10138     mirror: always
10140 -   name: media.wmf.zero-copy-nv12-textures
10141     type: bool
10142     value: true
10143     mirror: once
10144 # Enable hardware decoded video no copy even when it is blocked.
10145 -   name: media.wmf.zero-copy-nv12-textures-force-enabled
10146     type: bool
10147     value: false
10148     mirror: once
10150 -   name: media.wmf.force.allow-p010-format
10151     type: RelaxedAtomicBool
10152     value: false
10153     mirror: always
10155 -   name: media.wmf.use-sync-texture
10156     type: bool
10157     value: true
10158     mirror: once
10160 -   name: media.wmf.low-latency.enabled
10161     type: RelaxedAtomicBool
10162     value: true
10163     mirror: always
10165 -   name: media.wmf.skip-blacklist
10166     type: RelaxedAtomicBool
10167     value: false
10168     mirror: always
10170 -   name: media.wmf.amd.highres.enabled
10171     type: RelaxedAtomicBool
10172     value: true
10173     mirror: always
10175 -   name: media.wmf.allow-unsupported-resolutions
10176     type: RelaxedAtomicBool
10177     value: false
10178     mirror: always
10180 -   name: media.wmf.vp9.enabled
10181     type: RelaxedAtomicBool
10182     value: true
10183     mirror: always
10185 -   name: media.wmf.av1.enabled
10186     type: RelaxedAtomicBool
10187     value: true
10188     mirror: always
10190 # Using Windows Media Foundation Media Engine for encrypted playback
10191 # 0 : disable, 1 : enable for encrypted and clear,
10192 # 2 : enable for encrypted only, 3 : enable for clear only
10193 -   name: media.wmf.media-engine.enabled
10194     type: RelaxedAtomicUint32
10195     value: 0
10196     mirror: always
10198 # Testing purpose, enable media engine on channel decoder as well.
10199 -   name: media.wmf.media-engine.channel-decoder.enabled
10200     type: RelaxedAtomicBool
10201     value: false
10202     mirror: always
10204 # The amount of video raw data the engine stream will queue
10205 -   name: media.wmf.media-engine.raw-data-threshold.video
10206     type: RelaxedAtomicInt32
10207     value: 500000
10208     mirror: always
10210 # The amount of audio raw data the engine stream will queue
10211 -   name: media.wmf.media-engine.raw-data-threshold.audio
10212     type: RelaxedAtomicInt32
10213     value: 2000000
10214     mirror: always
10216 # Specifies how many times we restart MFCDM process after crash till we give up.
10217 -   name: media.wmf.media-engine.max-crashes
10218     type: RelaxedAtomicInt32
10219     value: 2
10220     mirror: always
10222 # Enable PlayReady DRM for EME
10223 -   name: media.eme.playready.enabled
10224     type: RelaxedAtomicBool
10225 #if defined(MOZ_WMF_CDM) && defined(NIGHTLY_BUILD)
10226     value: false # TODO: enable this when ready to play.
10227 #else
10228     value: false
10229 #endif
10230     mirror: always
10232 #endif  # MOZ_WMF
10234 - name: media.decoder-doctor.testing
10235   type: bool
10236   value: false
10237   mirror: always
10239 - name: media.hardware-video-decoding.enabled
10240   type: bool
10241   value: true
10242   mirror: once
10244 - name: media.hardware-video-decoding.force-enabled
10245   type: bool
10246   value: false
10247   mirror: once
10249 # Whether to check the decoder supports recycling.
10250 - name: media.decoder.recycle.enabled
10251   type: RelaxedAtomicBool
10252   value: @IS_ANDROID@
10253   mirror: always
10255 # Should MFR try to skip to the next key frame?
10256 - name: media.decoder.skip-to-next-key-frame.enabled
10257   type: RelaxedAtomicBool
10258   value: true
10259   mirror: always
10261 # When video continues later than the current media time for this period of
10262 # time, then it will trigger skip-to-next-keyframe mechanism. As this aims to
10263 # solve the drop frames issue where video decoding too slow for high
10264 # resolution videos. eg. 4k+. Therefore, the value is is determined by the
10265 # telemetry probe `video_inter_keyframe_max_ms` in the key of `AV,h>2160` which
10266 # shows that 95% video's key frame interval are less than ~5000. We use its
10267 # half value as a threashold to decide whether we should keep decoding in the
10268 # current video position or jump to the next keyframe in order to decode future
10269 # frames in advance.
10270 - name: media.decoder.skip_when_video_too_slow_ms
10271   type: RelaxedAtomicInt32
10272   value: 2500
10273   mirror: always
10275 # True if we want to decode in batches.
10276 - name: media.gmp.decoder.decode_batch
10277   type: RelaxedAtomicBool
10278   value: false
10279   mirror: always
10281 # True if we allow use of any decoders found in GMP plugins.
10282 - name: media.gmp.decoder.enabled
10283   type: RelaxedAtomicBool
10284   value: true
10285   mirror: always
10287 # True if we want to request the multithreaded GMP decoder.
10288 - name: media.gmp.decoder.multithreaded
10289   type: RelaxedAtomicBool
10290   value: false
10291   mirror: always
10293 # True if we want to try using the GMP plugin decoders first.
10294 - name: media.gmp.decoder.preferred
10295   type: RelaxedAtomicBool
10296   value: false
10297   mirror: always
10299 # True if we want to reorder frames from the decoder based on the timestamp.
10300 - name: media.gmp.decoder.reorder_frames
10301   type: RelaxedAtomicBool
10302   value: true
10303   mirror: always
10305 # Whether to suspend decoding of videos in background tabs.
10306 - name: media.suspend-background-video.enabled
10307   type: RelaxedAtomicBool
10308   value: true
10309   mirror: always
10311 # Delay, in ms, from time window goes to background to suspending
10312 # video decoders. Defaults to 10 seconds.
10313 - name: media.suspend-background-video.delay-ms
10314   type: RelaxedAtomicUint32
10315   value: 10000
10316   mirror: always
10318 - name: media.dormant-on-pause-timeout-ms
10319   type: RelaxedAtomicInt32
10320   value: 5000
10321   mirror: always
10323 # AudioTrack and VideoTrack support
10324 - name: media.track.enabled
10325   type: bool
10326   value: false
10327   mirror: always
10329 # This pref disables the reception of RTCP. It is used for testing.
10330 - name: media.webrtc.net.force_disable_rtcp_reception
10331   type: ReleaseAcquireAtomicBool
10332   value: false
10333   mirror: always
10335 # This pref controls whether dispatch testing-only events.
10336 - name: media.webvtt.testing.events
10337   type: bool
10338   value: true
10339   mirror: always
10341 - name: media.webspeech.synth.force_global_queue
10342   type: bool
10343   value: false
10344   mirror: always
10346 - name: media.webspeech.test.enable
10347   type: bool
10348   value: false
10349   mirror: always
10351 - name: media.webspeech.test.fake_fsm_events
10352   type: bool
10353   value: false
10354   mirror: always
10356 - name: media.webspeech.test.fake_recognition_service
10357   type: bool
10358   value: false
10359   mirror: always
10361 #ifdef MOZ_WEBSPEECH
10362 -   name: media.webspeech.recognition.enable
10363     type: bool
10364     value: false
10365     mirror: always
10366 #endif
10368 - name: media.webspeech.recognition.force_enable
10369   type: bool
10370   value: false
10371   mirror: always
10373 #ifdef MOZ_WEBSPEECH
10374 -   name: media.webspeech.synth.enabled
10375     type: bool
10376     value: false
10377     mirror: always
10378 #endif  # MOZ_WEBSPEECH
10380 - name: media.encoder.webm.enabled
10381   type: RelaxedAtomicBool
10382   value: true
10383   mirror: always
10385 - name: media.audio-max-decode-error
10386   type: uint32_t
10387 #if defined(RELEASE_OR_BETA)
10388   value: 3
10389 #else
10390   # Zero tolerance in pre-release builds to detect any decoder regression.
10391   value: 0
10392 #endif
10393   mirror: always
10395 - name: media.video-max-decode-error
10396   type: uint32_t
10397 #if defined(RELEASE_OR_BETA)
10398   value: 2
10399 #else
10400   # Zero tolerance in pre-release builds to detect any decoder regression.
10401   value: 0
10402 #endif
10403   mirror: always
10405 # Are video stats enabled? (Disabling can help prevent fingerprinting.)
10406 - name: media.video_stats.enabled
10407   type: bool
10408   value: true
10409   mirror: always
10411 # forces the number of dropped frames to 0
10412 - name: media.video.dropped_frame_stats.enabled
10413   type: bool
10414   value: true
10415   mirror: always
10417 # Opus
10418 - name: media.opus.enabled
10419   type: RelaxedAtomicBool
10420   value: true
10421   mirror: always
10423 # Wave
10424 - name: media.wave.enabled
10425   type: RelaxedAtomicBool
10426   value: true
10427   mirror: always
10429 # Ogg
10430 - name: media.ogg.enabled
10431   type: RelaxedAtomicBool
10432   value: true
10433   mirror: always
10435 # WebM
10436 - name: media.webm.enabled
10437   type: RelaxedAtomicBool
10438   value: true
10439   mirror: always
10441 # AV1
10442 - name: media.av1.enabled
10443   type: RelaxedAtomicBool
10444 #if defined(XP_WIN) && !defined(_ARM64_)
10445   value: true
10446 #elif defined(XP_MACOSX)
10447   value: true
10448 #elif defined(MOZ_WIDGET_ANDROID)
10449   value: true
10450 #elif defined(XP_UNIX)
10451   value: true
10452 #else
10453   value: false
10454 #endif
10455   mirror: always
10457 - name: media.av1.use-dav1d
10458   type: RelaxedAtomicBool
10459 #if defined(XP_WIN) && !defined(_ARM64_)
10460   value: true
10461 #elif defined(XP_MACOSX)
10462   value: true
10463 #elif defined(XP_UNIX)
10464   value: true
10465 #else
10466   value: false
10467 #endif
10468   mirror: always
10470 - name: media.av1.new-thread-count-strategy
10471   type: RelaxedAtomicBool
10472   value: false
10473   mirror: always
10475 - name: media.av1.force-thread-count
10476   type: RelaxedAtomicInt32
10477   value: 0
10478   mirror: always
10480 - name: media.flac.enabled
10481   type: RelaxedAtomicBool
10482   value: true
10483   mirror: always
10485 # Hls
10486 - name: media.hls.enabled
10487   type: RelaxedAtomicBool
10488   value: @IS_ANDROID@
10489   mirror: always
10491 # Max number of HLS players that can be created concurrently. Used only on
10492 # Android and when "media.hls.enabled" is true.
10493 #ifdef ANDROID
10494 -   name: media.hls.max-allocations
10495     type: uint32_t
10496     value: 20
10497     mirror: always
10498 #endif
10500 - name: media.mp4.enabled
10501   type: RelaxedAtomicBool
10502   value: true
10503   mirror: always
10505 - name: media.mp4.sniff_iso_brand
10506   type: RelaxedAtomicBool
10507   value: true
10508   mirror: always
10510 # Error/warning handling, Decoder Doctor.
10512 # Set to true to force demux/decode warnings to be treated as errors.
10513 - name: media.playback.warnings-as-errors
10514   type: RelaxedAtomicBool
10515   value: false
10516   mirror: always
10518 # Resume video decoding when the cursor is hovering on a background tab to
10519 # reduce the resume latency and improve the user experience.
10520 - name: media.resume-background-video-on-tabhover
10521   type: bool
10522   value: true
10523   mirror: always
10525 - name: media.videocontrols.lock-video-orientation
10526   type: bool
10527   value: false
10528   mirror: always
10530 # Media Seamless Looping
10531 - name: media.seamless-looping
10532   type: RelaxedAtomicBool
10533   value: true
10534   mirror: always
10536 - name: media.seamless-looping-video
10537   type: RelaxedAtomicBool
10538   value: true
10539   mirror: always
10541 - name: media.autoplay.block-event.enabled
10542   type: bool
10543   value: false
10544   mirror: always
10546 - name: media.media-capabilities.enabled
10547   type: RelaxedAtomicBool
10548   value: true
10549   mirror: always
10551 - name: media.media-capabilities.screen.enabled
10552   type: RelaxedAtomicBool
10553   value: false
10554   mirror: always
10556 - name: media.benchmark.vp9.fps
10557   type: RelaxedAtomicUint32
10558   value: 0
10559   mirror: always
10561 - name: media.benchmark.vp9.threshold
10562   type: RelaxedAtomicUint32
10563   value: 150
10564   mirror: always
10566 - name: media.benchmark.vp9.versioncheck
10567   type: RelaxedAtomicUint32
10568   value: 0
10569   mirror: always
10571 - name: media.benchmark.frames
10572   type: RelaxedAtomicUint32
10573   value: 300
10574   mirror: always
10576 - name: media.benchmark.timeout
10577   type: RelaxedAtomicUint32
10578   value: 1000
10579   mirror: always
10581 - name: media.test.video-suspend
10582   type: RelaxedAtomicBool
10583   value: false
10584   mirror: always
10586 # MediaCapture prefs follow
10588 # Enables navigator.mediaDevices and getUserMedia() support. See also
10589 # media.peerconnection.enabled
10590 - name: media.navigator.enabled
10591   type: bool
10592   value: true
10593   mirror: always
10595 # This pref turns off window-focus checks on the navigator.mediaDevices methods,
10596 # for partner testing frameworks.
10597 # Prefer "focusmanager.testmode", which is already set by default for
10598 # web-platform tests.
10599 - name: media.devices.unfocused.enabled
10600   type: bool
10601   value: false
10602   mirror: always
10604 # This pref turns off [SecureContext] on the navigator.mediaDevices object, for
10605 # more compatible legacy behavior.
10606 - name: media.devices.insecure.enabled
10607   type: bool
10608   value: false
10609   mirror: always
10611 # If the above pref is also enabled, this pref enabled getUserMedia() support
10612 # in http, bypassing the instant NotAllowedError you get otherwise.
10613 - name: media.getusermedia.insecure.enabled
10614   type: bool
10615   value: false
10616   mirror: always
10618 # Enable tab sharing
10619 - name: media.getusermedia.browser.enabled
10620   type: RelaxedAtomicBool
10621   value: false
10622   mirror: always
10624 # The getDisplayMedia method is always SecureContext regardless of the above two
10625 # prefs. But it is not implemented on android, and can be turned off elsewhere.
10626 - name: media.getdisplaymedia.enabled
10627   type: bool
10628   value: @IS_NOT_ANDROID@
10629   mirror: always
10631 # The getDisplayMedia prompt uses getDisplayMedia under the hood to show previews.
10632 # This can be turned off if, e.g. on systems with known issues like X11, or if
10633 # previews are not desired.
10634 - name: media.getdisplaymedia.previews.enabled
10635   type: bool
10636   value: @IS_NOT_ANDROID@
10637   mirror: always
10639 # Turn off any cameras (but not mics) while in the background. This is desirable
10640 # on mobile.
10641 - name: media.getusermedia.camera.background.mute.enabled
10642   type: bool
10643   value: @IS_ANDROID@
10644   mirror: always
10646 # Use the libwebrtc AVFoundation camera backend on Mac by default. When
10647 # disabled, an older forked capture module is used.
10648 - name: media.getusermedia.camera.macavf.enabled
10649   type: bool
10650   value: true
10651   mirror: once
10653 # This pref turns on legacy (non-spec) exposure of camera and microphone
10654 # information from enumerateDevices and devicechange ahead of successful
10655 # getUserMedia calls. Should only be turned on to resolve web compat issues,
10656 # since doing so reveals more user fingerprinting information to trackers.
10658 # In this mode, camera and microphone device labels are exposed if the site has a
10659 # persisted permission to either kind, as well as while actively capturing either
10660 # kind (temporary and tab-specific grace-period permissions do not count).
10662 # Planned next steps: true â†’ @IS_NOT_NIGHTLY_BUILD@ â†’ false
10663 - name: media.devices.enumerate.legacy.enabled
10664   type: bool
10665   value: true
10666   mirror: always
10668 # WebRTC prefs follow
10670 # Enables auto refresh of stats by default
10671 - name: media.aboutwebrtc.auto_refresh
10672   type: bool
10673   value: @IS_NOT_NIGHTLY_BUILD@
10674   mirror: always
10676 # Enables RTCPeerConnection support. Note that, when true, this pref enables
10677 # navigator.mediaDevices and getUserMedia() support as well.
10678 # See also media.navigator.enabled
10679 - name: media.peerconnection.enabled
10680   type: RelaxedAtomicBool
10681   value: true
10682   mirror: always
10684 - name: media.peerconnection.scripttransform.enabled
10685   type: RelaxedAtomicBool
10686   value: true
10687   mirror: always
10689 #ifdef MOZ_WEBRTC
10690   # Use MediaDataDecoder API for VP8/VP9 in WebRTC. This includes hardware
10691   # acceleration for decoding.
10692 -   name: media.navigator.mediadatadecoder_vpx_enabled
10693     type: RelaxedAtomicBool
10694 #if defined(NIGHTLY_BUILD) || defined(MOZ_WIDGET_GTK)
10695     value: true
10696 #else
10697     value: false
10698 #endif
10699     mirror: always
10701   # Use MediaDataDecoder API for H264 in WebRTC. This includes hardware
10702   # acceleration for decoding.
10703 -   name: media.navigator.mediadatadecoder_h264_enabled
10704     type: RelaxedAtomicBool
10705   #if defined(_ARM64_) && defined(XP_WIN)
10706     value: false
10707   #else
10708     value: true
10709   #endif
10710     mirror: always
10712 #if defined(MOZ_WIDGET_GTK)
10713   # Use hardware acceleration for VP8 decoding on Linux.
10714 -   name: media.navigator.mediadatadecoder_vp8_hardware_enabled
10715     type: RelaxedAtomicBool
10716     value: false
10717     mirror: always
10718 #endif
10720   # Interval in milliseconds at which to gather WebRTC stats for use in about:webrtc.
10721 -   name: media.aboutwebrtc.hist.poll_interval_ms
10722     type: RelaxedAtomicUint32
10723     value: 250
10724     mirror: always
10726   # History time depth in seconds to keep for webrtc:stats for use in about:webrtc.
10727 -   name: media.aboutwebrtc.hist.storage_window_s
10728     type: RelaxedAtomicUint32
10729     value: 60
10730     mirror: always
10732   # Time in minutes to retain peer connection stats after closing.
10733 -   name: media.aboutwebrtc.hist.prune_after_m
10734     type: RelaxedAtomicUint32
10735     value: 60 * 24 * 2
10736     mirror: always
10738   # Max number of closed PC stats histories to retain
10739 -   name: media.aboutwebrtc.hist.closed_stats_to_retain
10740     type: RelaxedAtomicUint32
10741     value: 8
10742     mirror: always
10744   # Gather PeerConnection stats history for display in about:webrtc. If
10745   # disabled history will only gather when about:webrtc is open. Additionally,
10746   # if disabled and when about:webrtc is not in the foreground history data
10747   # will become sparse.
10748 -   name: media.aboutwebrtc.hist.enabled
10749     type: RelaxedAtomicBool
10750 #if defined(MOZ_WIDGET_ANDROID)
10751     value: false
10752 #else
10753     value: @IS_NIGHTLY_BUILD@
10754 #endif
10755     mirror: always
10757 #endif  # MOZ_WEBRTC
10759 # HTMLMediaElement.allowedToPlay should be exposed to web content when
10760 # block autoplay rides the trains to release. Until then, Nightly only.
10761 - name: media.allowed-to-play.enabled
10762   type: bool
10763   value: @IS_NIGHTLY_BUILD@
10764   mirror: always
10766 # Is support for MediaDevices.ondevicechange enabled?
10767 - name: media.ondevicechange.enabled
10768   type: bool
10769   value: true
10770   mirror: always
10772 # Is support for HTMLMediaElement.seekToNextFrame enabled?
10773 - name: media.seekToNextFrame.enabled
10774   type: bool
10775   value: true
10776   mirror: always
10778 # Is the Audio Output Devices API enabled?
10779 - name: media.setsinkid.enabled
10780   type: bool
10781 #if defined(MOZ_WIDGET_ANDROID)
10782   value: false # bug 1473346
10783 #else
10784   value: true
10785 #endif
10786   mirror: always
10788 # Turn on this pref can enable test-only events for media element.
10789 - name: media.testing-only-events
10790   type: bool
10791   value: false
10792   mirror: always
10794 - name: media.useAudioChannelService.testing
10795   type: bool
10796   value: false
10797   mirror: always
10799 - name: media.audioFocus.management
10800   type: bool
10801 #if defined(MOZ_WIDGET_ANDROID)
10802   value: true
10803 #else
10804   value: false
10805 #endif
10806   mirror: always
10808 - name: media.hardwaremediakeys.enabled
10809   type: bool
10810   value: true
10811   mirror: always
10813 # If this pref is on, then `media.mediacontrol.stopcontrol.timer.ms` would take
10814 # effect and determine the timing to stop controlling media.
10815 - name: media.mediacontrol.stopcontrol.timer
10816   type: bool
10817   value: true
10818   mirror: always
10820 # If media is being paused after a certain period, then we would think that
10821 # media doesn't need to be controlled anymore. Therefore, that media would stop
10822 # listening to the media control key events. The value of this pref is how long
10823 # media would stop listening to the event after it's paused. The default value
10824 # is set to 24 hrs (24*60*60*1000)
10825 - name: media.mediacontrol.stopcontrol.timer.ms
10826   type: RelaxedAtomicUint32
10827   value: 86400000
10828   mirror: always
10830 # If this pref is on, we would stop controlling media after it reaches to the
10831 # end.
10832 - name: media.mediacontrol.stopcontrol.aftermediaends
10833   type: bool
10834   value: true
10835   mirror: always
10837 # We would only use media control to control media which duration is longer
10838 # than this value.
10839 - name: media.mediacontrol.eligible.media.duration.s
10840   type: AtomicFloat
10841   value: 3.0f
10842   mirror: always
10844 - name: media.webrtc.platformencoder
10845   type: RelaxedAtomicBool
10846 #if defined(MOZ_WIDGET_ANDROID)
10847   value: true
10848 #else
10849   value: @IS_EARLY_BETA_OR_EARLIER@
10850 #endif
10851   mirror: always
10853 - name: media.webrtc.platformencoder.sw_only
10854   type: RelaxedAtomicBool
10855 #if defined(MOZ_WIDGET_ANDROID)
10856   value: false
10857 #else
10858   value: true
10859 #endif
10860   mirror: always
10862 - name: media.webrtc.software_encoder.fallback
10863   type: RelaxedAtomicBool
10864 #if !defined(MOZ_WIDGET_GTK)
10865   value: true
10866 #else
10867   value: false
10868 #endif
10869   mirror: always
10871 #if defined(XP_MACOSX)
10872 - name: media.webrtc.capture.allow-iosurface
10873   type: RelaxedAtomicBool
10874   value: true
10875   mirror: always
10876 #endif
10878 #if defined(XP_WIN)
10879 - name: media.webrtc.capture.allow-directx
10880   type: RelaxedAtomicBool
10881   value: true
10882   mirror: always
10884 - name: media.webrtc.capture.allow-wgc
10885   type: RelaxedAtomicBool
10886   value: @IS_EARLY_BETA_OR_EARLIER@
10887   mirror: always
10888 #endif
10890 #if defined(MOZ_WIDGET_GTK)
10891 - name: media.webrtc.capture.allow-pipewire
10892   type: RelaxedAtomicBool
10893   value: true
10894   mirror: always
10896 - name: media.webrtc.camera.allow-pipewire
10897   type: bool
10898   value: false
10899   mirror: once
10900 #endif
10902 - name: media.block-autoplay-until-in-foreground
10903   type: bool
10904 #if !defined(MOZ_WIDGET_ANDROID)
10905   value: true
10906 #else
10907   value: false
10908 #endif
10909   mirror: always
10911 - name: media.webrtc.hw.h264.enabled
10912   type: bool
10913 #if defined(MOZ_WIDGET_ANDROID)
10914   value: true
10915 #else
10916   value: false
10917 #endif
10918   mirror: always
10920  # If true, then we require explicit approval from the embedding app (ex. Fenix)
10921  # on GeckoView to know if we can allow audible, inaudible media or both kinds
10922  # of media to autoplay.
10923 - name: media.geckoview.autoplay.request
10924   type: bool
10925   value: false
10926   mirror: always
10928  # This is used in testing only, in order to skip the prompting process. This
10929  # pref works only when enabling the pref `media.geckoview.autoplay.request`.
10930  # 0=prompt as normal, 1=allow all, 2=deny all, 3=allow audible request,
10931  # 4=deny audible request, 5=allow inaudible request, 6=deny inaudible request.
10932  # 7=leave all requests pending.
10933 - name: media.geckoview.autoplay.request.testing
10934   type: uint32_t
10935   value: 0
10936   mirror: always
10938 - name: media.mediacontrol.testingevents.enabled
10939   type: bool
10940   value: false
10941   mirror: always
10943 #if defined(XP_MACOSX)
10944 - name: media.macos.screenrecording.oscheck.enabled
10945   type: bool
10946   value: true
10947   mirror: always
10948 #endif
10950 # When the playback rate of an HTMLMediaElement is greater than this value, or
10951 # lower than the inverse of this value, the audio is muted.
10952 - name: media.audio.playbackrate.muting_threshold
10953   type: uint32_t
10954   value: 8
10955   mirror: always
10957 # The interval of time in milliseconds between attempts to reopen any
10958 # previously unavailable audio device.
10959 - name: media.audio.device.retry.ms
10960   type: RelaxedAtomicInt32
10961   value: 1000
10962   mirror: always
10964 # Time-stretch algorithm single processing sequence length in milliseconds.
10965 # This determines to how long sequences the original sound is chopped in the
10966 # time-stretch algorithm.
10967 - name: media.audio.playbackrate.soundtouch_sequence_ms
10968   type: RelaxedAtomicInt32
10969   value: 10
10970   mirror: always
10972 # Time-stretch algorithm seeking window length in milliseconds for algorithm
10973 # that finds the best possible overlapping location. This determines from how
10974 # wide window the algorithm may look for an optimal joining location when mixing
10975 # the sound sequences back together.
10976 - name: media.audio.playbackrate.soundtouch_seekwindow_ms
10977   type: RelaxedAtomicInt32
10978   value: 15
10979   mirror: always
10981 # Time-stretch algorithm overlap length in milliseconds. When the chopped sound
10982 # sequences are mixed back together, to form a continuous sound stream, this
10983 # parameter defines over how long period the two consecutive sequences are let
10984 # to overlap each other.
10985 - name: media.audio.playbackrate.soundtouch_overlap_ms
10986   type: RelaxedAtomicInt32
10987   value: 8
10988   mirror: always
10990 # The duration, in milliseconds, of decoded audio to keep around in the
10991 # AudioSink ring-buffer. New decoding operations are started when this limit is
10992 # reached. The total size of the ring-buffer is slightly bigger than this.
10993 - name: media.audio.audiosink.threshold_ms
10994   type: AtomicFloat
10995 #if defined(XP_MACOSX) && defined(MOZ_AARCH64)
10996   value: 1000.0
10997 #else
10998   value: 200.0
10999 #endif
11000   mirror: always
11002 - name: media.video-wakelock
11003   type: RelaxedAtomicBool
11004   value: true
11005   mirror: always
11007 # On Mac, enables using the `<Brand> Media Plugin Helper` executable as the
11008 # GMP child process instead of the plugin-container executable.
11009 #if defined(XP_MACOSX)
11010 -   name: media.plugin_helper_process.enabled
11011     type: RelaxedAtomicBool
11012     value: true
11013     mirror: always
11014 #endif
11016 #---------------------------------------------------------------------------
11017 # Prefs starting with "midi."
11018 #---------------------------------------------------------------------------
11020 - name: midi.testing
11021   type: RelaxedAtomicBool
11022   value: false
11023   mirror: always
11025 #---------------------------------------------------------------------------
11026 # Prefs starting with "mousewheel."
11027 #---------------------------------------------------------------------------
11029 # This affects how line scrolls from wheel events will be accelerated.
11030 # Factor to be multiplied for constant acceleration.
11031 - name: mousewheel.acceleration.factor
11032   type: RelaxedAtomicInt32
11033   value: 10
11034   mirror: always
11036 # This affects how line scrolls from wheel events will be accelerated.
11037 # Number of mousewheel clicks when acceleration starts.
11038 # Acceleration can be turned off if pref is set to -1.
11039 - name: mousewheel.acceleration.start
11040   type: RelaxedAtomicInt32
11041   value: -1
11042   mirror: always
11044 # Auto-dir is a feature which treats any single-wheel scroll as a scroll in the
11045 # only one scrollable direction if the target has only one scrollable
11046 # direction. For example, if the user scrolls a vertical wheel inside a target
11047 # which is horizontally scrollable but vertical unscrollable, then the vertical
11048 # scroll is converted to a horizontal scroll for that target.
11049 # Note that auto-dir only takes effect for |mousewheel.*.action|s and
11050 # |mousewheel.*.action.override_x|s whose values are 1.
11051 - name: mousewheel.autodir.enabled
11052   type: bool
11053   value: false
11054   mirror: always
11056 # When a wheel scroll is converted due to auto-dir, which side the converted
11057 # scroll goes towards is decided by one thing called "honoured target". If the
11058 # content of the honoured target horizontally starts from right to left, then
11059 # an upward scroll maps to a rightward scroll and a downward scroll maps to a
11060 # leftward scroll; otherwise, an upward scroll maps to a leftward scroll and a
11061 # downward scroll maps to a rightward scroll.
11062 # If this pref is set to false, then consider the scrolling target as the
11063 # honoured target.
11064 # If set to true, then consider the root element in the document where the
11065 # scrolling target is as the honoured target. But note that there's one
11066 # exception: for targets in an HTML document, the real root element(I.e. the
11067 # <html> element) is typically not considered as a root element, but the <body>
11068 # element is typically considered as a root element. If there is no <body>
11069 # element, then consider the <html> element instead.
11070 - name: mousewheel.autodir.honourroot
11071   type: bool
11072   value: false
11073   mirror: always
11075 - name: mousewheel.system_scroll_override.enabled
11076   type: RelaxedAtomicBool
11077 #if defined(XP_WIN) || defined(MOZ_WIDGET_GTK)
11078   value: true
11079 #else
11080   value: false
11081 #endif
11082   mirror: always
11084 # Prefs for overriding the system mouse wheel scrolling speed on
11085 # content of the web pages.  When
11086 # "mousewheel.system_scroll_override.enabled" is true and the
11087 # system scrolling speed isn't customized by the user, the content scrolling
11088 # speed is multiplied by the following factors.  The value will be used as
11089 # 1/100.  E.g., 200 means 2.00.
11090 # NOTE: Even if "mousewheel.system_scroll_override.enabled" is
11091 # true, when Gecko detects the user customized the system scrolling speed
11092 # settings, the override isn't executed.
11093 - name: mousewheel.system_scroll_override.horizontal.factor
11094   type: RelaxedAtomicInt32
11095   value: 200
11096   mirror: always
11097 - name: mousewheel.system_scroll_override.vertical.factor
11098   type: RelaxedAtomicInt32
11099   value: 200
11100   mirror: always
11102 # Mouse wheel scroll transaction is held even if the mouse cursor is moved.
11103 - name: mousewheel.transaction.ignoremovedelay
11104   type: RelaxedAtomicInt32
11105   value: 100
11106   mirror: always
11108 # Mouse wheel scroll transaction period of time (in milliseconds).
11109 - name: mousewheel.transaction.timeout
11110   type: RelaxedAtomicInt32
11111   value: 1500
11112   mirror: always
11114 # Mouse wheel scroll position is determined by GetMessagePos rather than
11115 # LPARAM msg value
11116 - name: mousewheel.ignore_cursor_position_in_lparam
11117   type: RelaxedAtomicBool
11118   value: false
11119   mirror: always
11121 # If line-height is lower than this value (in device pixels), 1 line scroll
11122 # scrolls this height.
11123 - name: mousewheel.min_line_scroll_amount
11124   type: int32_t
11125   value: 5
11126   mirror: always
11128 # Timeout period (in milliseconds) when the mouse wheel event is no longer
11129 # handled as the same series.
11130 - name: mousewheel.scroll_series_timeout
11131   type: RelaxedAtomicInt32
11132   value: 80
11133   mirror: always
11135 #---------------------------------------------------------------------------
11136 # Prefs starting with "mozilla."
11137 #---------------------------------------------------------------------------
11139 - name: mozilla.widget.raise-on-setfocus
11140   type: bool
11141   value: true
11142   mirror: once
11144 #---------------------------------------------------------------------------
11145 # Prefs starting with "network."
11146 #---------------------------------------------------------------------------
11148 # Force less-secure NTLMv1 when needed (NTLMv2 is the default).
11149 - name: network.auth.force-generic-ntlm-v1
11150   type: RelaxedAtomicBool
11151   value: false
11152   mirror: always
11154 # Sub-resources HTTP-authentication:
11155 #   0 - don't allow sub-resources to open HTTP authentication credentials
11156 #       dialogs
11157 #   1 - allow sub-resources to open HTTP authentication credentials dialogs,
11158 #       but don't allow it for cross-origin sub-resources
11159 #   2 - allow the cross-origin authentication as well.
11160 - name: network.auth.subresource-http-auth-allow
11161   type: uint32_t
11162   value: 2
11163   mirror: always
11165 # Sub-resources HTTP-authentication for cross-origin images:
11166 # - true: It is allowed to present http auth. dialog for cross-origin images.
11167 # - false: It is not allowed.
11168 # If network.auth.subresource-http-auth-allow has values 0 or 1 this pref does
11169 # not have any effect.
11170 - name: network.auth.subresource-img-cross-origin-http-auth-allow
11171   type: bool
11172   value: false
11173   mirror: always
11175 # Resources that are triggered by some non-web-content:
11176 # - true: They are allow to present http auth. dialog
11177 # - false: They are not allow to present http auth. dialog.
11178 - name: network.auth.non-web-content-triggered-resources-http-auth-allow
11179   type: bool
11180   value: false
11181   mirror: always
11183 # Whether to show anti-spoof confirmation prompts when navigating to a url
11184 # with userinfo
11185 - name: network.auth.confirmAuth.enabled
11186   type: bool
11187   value: true
11188   mirror: always
11190 # Whether to display auth prompts if X-Frame-Options header will block loading
11191 # page
11192 - name: network.auth.supress_auth_prompt_for_XFO_failures
11193   type: bool
11194   value: true
11195   mirror: always
11197 # Whether to use new implementation of ParseReasm
11198 - name: network.auth.use_new_parse_realm
11199   type: RelaxedAtomicBool
11200   value: true
11201   mirror: always
11203 # Whether to use new implementation of ParseReasm
11204 - name: network.auth.allow_multiple_challenges_same_line
11205   type: RelaxedAtomicBool
11206   value: true
11207   mirror: always
11209 # Whether to use challenges in the most secure order. See bug 650091.
11210 - name: network.auth.choose_most_secure_challenge
11211   type: RelaxedAtomicBool
11212   value: true
11213   mirror: always
11215 # Whether to allow truncated brotli with empty output. This also fixes
11216 # throwing an erroring when receiving highly compressed brotli files when
11217 # no content type is specified (Bug 1715401). This pref can be removed after
11218 # some time (Bug 1841061)
11219 - name: network.compress.allow_truncated_empty_brotli
11220   type: RelaxedAtomicBool
11221   value: true
11222   mirror: always
11224 # See the full list of values in nsICookieService.idl.
11225 - name: network.cookie.cookieBehavior
11226   type: RelaxedAtomicInt32
11227   value: 0 # accept all cookies
11228   mirror: always
11230 # See the full list of values in nsICookieService.idl.
11231 - name: network.cookie.rejectForeignWithExceptions.enabled
11232   type: bool
11233   value: false
11234   mirror: always
11236 # The cookieBehavior to be used in Private Browsing mode.
11237 - name: network.cookie.cookieBehavior.pbmode
11238   type: RelaxedAtomicInt32
11239   value: 0 # accept all cookies
11240   mirror: always
11242 # Stale threshold for cookies in seconds.
11243 - name: network.cookie.staleThreshold
11244   type: uint32_t
11245   value: 60
11246   mirror: always
11248 - name: network.cookie.sameSite.laxByDefault
11249   type: RelaxedAtomicBool
11250   value: false
11251   mirror: always
11253 # lax-by-default 2 minutes tollerance for unsafe methods. The value is in seconds.
11254 - name: network.cookie.sameSite.laxPlusPOST.timeout
11255   type: uint32_t
11256   value: 120
11257   mirror: always
11259 # For lax-by-default cookies ignore cross-site redirects when the final
11260 # redirect is same-site again.
11261 # https://github.com/httpwg/http-extensions/issues/2104
11262 - name: network.cookie.sameSite.laxByDefault.allowBoomerangRedirect
11263   type: bool
11264   value: true
11265   mirror: always
11267 - name: network.cookie.sameSite.noneRequiresSecure
11268   type: bool
11269   value: @IS_EARLY_BETA_OR_EARLIER@
11270   mirror: always
11272 - name: network.cookie.sameSite.schemeful
11273   type: bool
11274   value: false
11275   mirror: always
11277 - name: network.cookie.thirdparty.sessionOnly
11278   type: bool
11279   value: false
11280   mirror: always
11282 - name: network.cookie.thirdparty.nonsecureSessionOnly
11283   type: bool
11284   value: false
11285   mirror: always
11287 # If we should not store "persistent" cookies at all, i.e., make the
11288 # "persistent" storage be like "private" storage.  This value is only read when
11289 # instantiating persistent storage for the cookie service, which usually only
11290 # happens when the cookie service singleton is created.
11291 - name: network.cookie.noPersistentStorage
11292   type: bool
11293   value: false
11294   mirror: always
11296 # If true then any cookies containing unicode will be rejected
11297 - name: network.cookie.blockUnicode
11298   type: RelaxedAtomicBool
11299   value: false
11300   mirror: always
11302 # If true cookies loaded from the sqlite DB that have a creation or
11303 # last accessed time that is in the future will be fixed and the
11304 # timestamps will be set to the current time.
11305 - name: network.cookie.fixup_on_db_load
11306   type: RelaxedAtomicBool
11307   value: true
11308   mirror: always
11310 # If we should attempt to race the cache and network.
11311 - name: network.http.rcwn.enabled
11312   type: bool
11313   value: true
11314   mirror: always
11316 - name: network.http.rcwn.cache_queue_normal_threshold
11317   type: uint32_t
11318   value: 8
11319   mirror: always
11321 - name: network.http.rcwn.cache_queue_priority_threshold
11322   type: uint32_t
11323   value: 2
11324   mirror: always
11326 # We might attempt to race the cache with the network only if a resource
11327 # is smaller than this size.
11328 - name: network.http.rcwn.small_resource_size_kb
11329   type: uint32_t
11330   value: 256
11331   mirror: always
11333 - name: network.http.rcwn.min_wait_before_racing_ms
11334   type: uint32_t
11335   value: 0
11336   mirror: always
11338 - name: network.http.rcwn.max_wait_before_racing_ms
11339   type: uint32_t
11340   value: 500
11341   mirror: always
11343 # false=real referer, true=spoof referer (use target URI as referer).
11344 - name: network.http.referer.spoofSource
11345   type: bool
11346   value: false
11347   mirror: always
11349 # Check whether we need to hide referrer when leaving a .onion domain.
11350 # false=allow onion referer, true=hide onion referer (use empty referer).
11351 - name: network.http.referer.hideOnionSource
11352   type: bool
11353   value: false
11354   mirror: always
11356 # Include an origin header on non-GET and non-HEAD requests regardless of CORS.
11357 # 0=never send, 1=send when same-origin only, 2=always send.
11358 - name: network.http.sendOriginHeader
11359   type: uint32_t
11360   value: 2
11361   mirror: always
11363 # Whether to respect the redirected-tainted origin flag
11364 # https://fetch.spec.whatwg.org/#concept-request-tainted-origin
11365 - name: network.http.origin.redirectTainted
11366   type: bool
11367   value: true
11368   mirror: always
11370 # Whether to strip auth headers for redirected fetch/xhr channels
11371 # https://fetch.spec.whatwg.org/#http-redirect-fetch
11372 - name: network.fetch.redirect.stripAuthHeader
11373   type: RelaxedAtomicBool
11374   value: true
11375   mirror: always
11377 # Whether to strip auth headers for redirected http channels
11378 # https://fetch.spec.whatwg.org/#http-redirect-fetch
11379 - name: network.http.redirect.stripAuthHeader
11380   type: RelaxedAtomicBool
11381   value: true
11382   mirror: always
11384 # Prefs allowing granular control of referers.
11385 # 0=don't send any, 1=send only on clicks, 2=send on image requests as well
11386 - name: network.http.sendRefererHeader
11387   type: uint32_t
11388   value: 2
11389   mirror: always
11390   do_not_use_directly: true
11392 # The maximum allowed length for a referrer header - 4096 default.
11393 # 0 means no limit.
11394 - name: network.http.referer.referrerLengthLimit
11395   type: uint32_t
11396   value: 4096
11397   mirror: always
11399 #  0=always send, 1=send iff base domains match, 2=send iff hosts match.
11400 - name: network.http.referer.XOriginPolicy
11401   type: uint32_t
11402   value: 0
11403   mirror: always
11404   do_not_use_directly: true
11406 # 0=full URI, 1=scheme+host+port+path, 2=scheme+host+port.
11407 - name: network.http.referer.trimmingPolicy
11408   type: uint32_t
11409   value: 0
11410   mirror: always
11411   do_not_use_directly: true
11413 # 0=full URI, 1=scheme+host+port+path, 2=scheme+host+port.
11414 - name: network.http.referer.XOriginTrimmingPolicy
11415   type: uint32_t
11416   value: 0
11417   mirror: always
11418   do_not_use_directly: true
11420 # Set the default Referrer Policy; to be used unless overriden by the site.
11421 # 0=no-referrer, 1=same-origin, 2=strict-origin-when-cross-origin,
11422 # 3=no-referrer-when-downgrade.
11423 - name: network.http.referer.defaultPolicy
11424   type: uint32_t
11425   value: 2
11426   mirror: always
11428 # Set the default Referrer Policy applied to third-party trackers when the
11429 # default cookie policy is set to reject third-party trackers, to be used
11430 # unless overriden by the site.
11431 # 0=no-referrer, 1=same-origin, 2=strict-origin-when-cross-origin,
11432 # 3=no-referrer-when-downgrade.
11433 # Trim referrers from trackers to origins by default.
11434 - name: network.http.referer.defaultPolicy.trackers
11435   type: uint32_t
11436   value: 2
11437   mirror: always
11439 # Set the Private Browsing Default Referrer Policy, to be used
11440 # unless overriden by the site.
11441 # 0=no-referrer, 1=same-origin, 2=strict-origin-when-cross-origin,
11442 # 3=no-referrer-when-downgrade.
11443 - name: network.http.referer.defaultPolicy.pbmode
11444   type: uint32_t
11445   value: 2
11446   mirror: always
11448 # Set to ignore referrer policies which is less restricted than the default for
11449 # cross-site requests, including 'unsafe-url', 'no-referrer-when-downgrade' and
11450 # 'origin-when-cross-origin'.
11451 - name: network.http.referer.disallowCrossSiteRelaxingDefault
11452   type: bool
11453   value: true
11454   mirror: always
11456 # Whether we ignore less restricted referrer policies for top navigations.
11457 - name: network.http.referer.disallowCrossSiteRelaxingDefault.top_navigation
11458   type: bool
11459   value: false
11460   mirror: always
11463 # Set to ignore referrer policies which is less restricted than the default for
11464 # cross-site requests in the private browsing mode, including 'unsafe-url',
11465 # 'no-referrer-when-downgrade' and 'origin-when-cross-origin'.
11466 - name: network.http.referer.disallowCrossSiteRelaxingDefault.pbmode
11467   type: bool
11468   value: true
11469   mirror: always
11471 # Whether we ignore less restricted referrer policies for top navigations in the
11472 # private browsing mode.
11473 - name: network.http.referer.disallowCrossSiteRelaxingDefault.pbmode.top_navigation
11474   type: bool
11475   value: true
11476   mirror: always
11478 # Set the Private Browsing Default Referrer Policy applied to third-party
11479 # trackers when the default cookie policy is set to reject third-party
11480 # trackers, to be used unless overriden by the site.
11481 # 0=no-referrer, 1=same-origin, 2=strict-origin-when-cross-origin,
11482 # 3=no-referrer-when-downgrade.
11483 # No need to change this pref for trimming referrers from trackers since in
11484 # private windows we already trim all referrers to origin only.
11485 - name: network.http.referer.defaultPolicy.trackers.pbmode
11486   type: uint32_t
11487   value: 2
11488   mirror: always
11490 # Whether certain http header values should be censored out in logs.
11491 # Specifically filters out "authorization" and "proxy-authorization".
11492 - name: network.http.sanitize-headers-in-logs
11493   type: RelaxedAtomicBool
11494   value: true
11495   mirror: always
11497 # Set this pref to an integer like 99 to override the User-Agent string's
11498 # 'rv' bit. The value 0 means use the default Firefox version. We introduced
11499 # this for Firefox 110 because it turned out websites used user agent parsing
11500 # for "rv:11" to detect IE11.
11501 - name: network.http.useragent.forceRVOnly
11502   type: uint32_t
11503   value: 109
11504   mirror: always
11506 # Whether or not we use Windows for SSO to Microsoft sites.
11507 - name: network.http.windows-sso.enabled
11508   type: RelaxedAtomicBool
11509   value: false
11510   mirror: always
11512 # Whether windows-sso is enabled for the default (0) container.
11513 # To enable SSO for additional containers, add a new pref like
11514 # `network.http.windows-sso.container-enabled.${containerId}` = true
11515 - name: network.http.windows-sso.container-enabled.0
11516   type: bool
11517   value: true
11518   mirror: never
11520 # The factor by which to increase the keepalive timeout when the
11521 # NS_HTTP_LARGE_KEEPALIVE flag is used for a connection
11522 - name: network.http.largeKeepaliveFactor
11523   type: RelaxedAtomicUint32
11524   value: 10
11525   mirror: always
11527 # This preference, if true, causes all UTF-8 domain names to be normalized to
11528 # punycode.  The intention is to allow UTF-8 domain names as input, but never
11529 # generate them from punycode.
11530 - name: network.IDN_show_punycode
11531   type: RelaxedAtomicBool
11532   value: false
11533   mirror: always
11535 # If set to true, IOService.offline depends on IOService.connectivity.
11536 - name: network.offline-mirrors-connectivity
11537   type: RelaxedAtomicBool
11538   value: false
11539   mirror: always
11541 # If set to true, disallow localhost connections when offline.
11542 - name: network.disable-localhost-when-offline
11543   type: RelaxedAtomicBool
11544   value: false
11545   mirror: always
11547 # Enables the predictive service.
11548 - name: network.predictor.enabled
11549   type: bool
11550   value: true
11551   mirror: always
11553 # Set true to allow resolving proxy for localhost
11554 - name: network.proxy.allow_hijacking_localhost
11555   type: RelaxedAtomicBool
11556   value: false
11557   mirror: always
11559 # This pref will still treat localhost URLs as secure even when hijacked
11560 # during testing. This is necessary for automated testing to check that we
11561 # actually treat localhost as a secure origin.
11562 - name: network.proxy.testing_localhost_is_secure_when_hijacked
11563   type: RelaxedAtomicBool
11564   value: false
11565   mirror: always
11567 # Allow CookieJarSettings to be unblocked for channels without a document.
11568 # This is for testing only.
11569 - name: network.cookieJarSettings.unblocked_for_testing
11570   type: bool
11571   value: false
11572   mirror: always
11574 - name: network.predictor.enable-hover-on-ssl
11575   type: bool
11576   value: false
11577   mirror: always
11579 - name: network.predictor.enable-prefetch
11580   type: bool
11581   value: @IS_EARLY_BETA_OR_EARLIER@
11582   mirror: always
11584 - name: network.predictor.page-degradation.day
11585   type: int32_t
11586   value: 0
11587   mirror: always
11588 - name: network.predictor.page-degradation.week
11589   type: int32_t
11590   value: 5
11591   mirror: always
11592 - name: network.predictor.page-degradation.month
11593   type: int32_t
11594   value: 10
11595   mirror: always
11596 - name: network.predictor.page-degradation.year
11597   type: int32_t
11598   value: 25
11599   mirror: always
11600 - name: network.predictor.page-degradation.max
11601   type: int32_t
11602   value: 50
11603   mirror: always
11605 - name: network.predictor.subresource-degradation.day
11606   type: int32_t
11607   value: 1
11608   mirror: always
11609 - name: network.predictor.subresource-degradation.week
11610   type: int32_t
11611   value: 10
11612   mirror: always
11613 - name: network.predictor.subresource-degradation.month
11614   type: int32_t
11615   value: 25
11616   mirror: always
11617 - name: network.predictor.subresource-degradation.year
11618   type: int32_t
11619   value: 50
11620   mirror: always
11621 - name: network.predictor.subresource-degradation.max
11622   type: int32_t
11623   value: 100
11624   mirror: always
11626 - name: network.predictor.prefetch-rolling-load-count
11627   type: int32_t
11628   value: 10
11629   mirror: always
11631 - name: network.predictor.prefetch-min-confidence
11632   type: int32_t
11633   value: 100
11634   mirror: always
11635 - name: network.predictor.preconnect-min-confidence
11636   type: int32_t
11637   value: 90
11638   mirror: always
11639 - name: network.predictor.preresolve-min-confidence
11640   type: int32_t
11641   value: 60
11642   mirror: always
11644 - name: network.predictor.prefetch-force-valid-for
11645   type: int32_t
11646   value: 10
11647   mirror: always
11649 - name: network.predictor.max-resources-per-entry
11650   type: int32_t
11651   value: 100
11652   mirror: always
11654 # This is selected in concert with max-resources-per-entry to keep memory
11655 # usage low-ish. The default of the combo of the two is ~50k.
11656 - name: network.predictor.max-uri-length
11657   type: uint32_t
11658   value: 500
11659   mirror: always
11661 # A testing flag.
11662 - name: network.predictor.doing-tests
11663   type: bool
11664   value: false
11665   mirror: always
11667 # Enables `<link rel="preconnect">` tag and `Link: rel=preconnect` response header
11668 # handling.
11669 - name: network.preconnect
11670   type: RelaxedAtomicBool
11671   value: true
11672   mirror: always
11674 # Enables `<link rel="modulepreload">` tag and `Link: rel=modulepreload`
11675 # response header handling.
11676 - name: network.modulepreload
11677   type: RelaxedAtomicBool
11678   value: true
11679   mirror: always
11681 # Enable 103 Early Hint status code (RFC 8297)
11682 - name: network.early-hints.enabled
11683   type: RelaxedAtomicBool
11684   value: @IS_EARLY_BETA_OR_EARLIER@
11685   mirror: always
11687 # Enable `Link: rel=preconnect` in 103 Early Hint response.
11688 - name: network.early-hints.preconnect.enabled
11689   type: RelaxedAtomicBool
11690   value: @IS_EARLY_BETA_OR_EARLIER@
11691   mirror: always
11693 # The max number of speculative connections we allow for `Link: rel=preconnect`.
11694 # When 0, the speculative connection created due to `Link: rel=preconnect` will
11695 # be limited by "network.http.speculative-parallel-limit".
11696 - name: network.early-hints.preconnect.max_connections
11697   type: uint32_t
11698   value: 10
11699   mirror: always
11701 # How long we should wait for EarlyHintPreloader to be used.
11702 # Under normal circumstances it should be used immidiately.
11703 - name: network.early-hints.parent-connect-timeout
11704   type: uint32_t
11705   value: 10000
11706   mirror: always
11708 # Whether to use the network process or not
11709 # Start a separate socket process. Performing networking on the socket process
11710 # is control by a sepparate pref
11711 # ("network.http.network_access_on_socket_process.enabled").
11712 # Changing these prefs requires a restart.
11713 - name: network.process.enabled
11714   type: RelaxedAtomicBool
11715   mirror: always
11716 #if defined(ANDROID) || defined(MOZ_THUNDERBIRD)
11717   value: false # see bug 1641427
11718 #else
11719   value: true
11720 #endif
11722 # Whether we can send OnDataAvailable to content process directly.
11723 - name: network.send_ODA_to_content_directly
11724   type: RelaxedAtomicBool
11725   value: true
11726   mirror: always
11728 # Perform all network access on the socket process.
11729 # The pref requires "network.process.enabled" to be true.
11730 # Changing these prefs requires a restart.
11731 - name: network.http.network_access_on_socket_process.enabled
11732   type: RelaxedAtomicBool
11733   mirror: always
11734   value: false
11736 # Telemetry of traffic categories. Whether or not to enable HttpTrafficAnalyzer.
11737 - name: network.traffic_analyzer.enabled
11738   type: RelaxedAtomicBool
11739   value: true
11740   mirror: always
11742 # Whether DNS resolution is limited to literals and cached entries.
11743 - name: network.dns.disabled
11744   type: RelaxedAtomicBool
11745   value: false
11746   mirror: always
11748 # Whether DNS resolution is limited to literals and cached entries.
11749 - name: network.dns.skipTRR-when-parental-control-enabled
11750   type: RelaxedAtomicBool
11751   value: true
11752   mirror: always
11754 - name: network.dns.disablePrefetchFromHTTPS
11755   type: bool
11756   value: true
11757   mirror: always
11759 # Max time to shutdown the resolver threads
11760 - name: network.dns.resolver_shutdown_timeout_ms
11761   type: uint32_t
11762   value: 2000
11763   mirror: always
11765 # When true on Windows DNS resolutions for single label domains
11766 # (domains that don't contain a dot) will be resolved using the DnsQuery
11767 # API instead of PR_GetAddrInfoByName
11768 - name: network.dns.dns_query_single_label
11769   type: RelaxedAtomicBool
11770   value: false
11771   mirror: always
11773 # When this pref is true we enforce a 253 character limit on domains we try to
11774 # resolve. See bug 1264117. If it doesn't cause any web-compat issues we can
11775 # remove it in a few releases
11776 - name: network.dns.limit_253_chars
11777   type: RelaxedAtomicBool
11778   value: true
11779   mirror: always
11781 # When this pref is true, we copy the host name to a fresh string before
11782 # calling into getaddrinfo.
11783 - name: network.dns.copy_string_before_call
11784   type: RelaxedAtomicBool
11785   value: true
11786   mirror: always
11788 - name: network.dns.max_high_priority_threads
11789   type: RelaxedAtomicUint32
11790   value: 5
11791   mirror: always
11793 - name: network.dns.max_any_priority_threads
11794   type: RelaxedAtomicUint32
11795   value: 3
11796   mirror: always
11798 # The proxy type. See nsIProtocolProxyService.idl
11799 #     PROXYCONFIG_DIRECT   = 0
11800 #     PROXYCONFIG_MANUAL   = 1
11801 #     PROXYCONFIG_PAC      = 2
11802 #     PROXYCONFIG_WPAD     = 4
11803 #     PROXYCONFIG_SYSTEM   = 5
11804 - name: network.proxy.type
11805   type: RelaxedAtomicUint32
11806   value: 5
11807   mirror: always
11809 # Whether the SOCKS proxy should be in charge of DNS resolution.
11810 - name: network.proxy.socks_remote_dns
11811   type: RelaxedAtomicBool
11812   value: false
11813   mirror: always
11815 # When receiving a network change event, the time (in ms) we wait to reload the
11816 # PAC url.
11817 - name: network.proxy.reload_pac_delay
11818   type: RelaxedAtomicUint32
11819   value: 2000
11820   mirror: always
11822 # When parsing "SOCKS" in PAC string, the default version of SOCKS that will be
11823 # used.
11824 - name: network.proxy.default_pac_script_socks_version
11825   type: RelaxedAtomicUint32
11826   value: 4
11827   mirror: always
11829 # Whether to force failover to direct for system requests.
11830 #ifdef MOZ_PROXY_DIRECT_FAILOVER
11831 - name: network.proxy.failover_direct
11832   type: bool
11833   value: true
11834   mirror: always
11835 #endif
11837 # Whether to allow a bypass flag to be set on httpChannel that will
11838 # prevent proxies from being used for that specific request.
11839 - name: network.proxy.allow_bypass
11840   type: bool
11841 #ifdef MOZ_PROXY_BYPASS_PROTECTION
11842   value: false
11843 #else
11844   value: true
11845 #endif
11846   mirror: always
11848 - name: network.proxy.parse_pac_on_socket_process
11849   type: RelaxedAtomicBool
11850   value: false
11851   mirror: always
11853 - name: network.proxy.detect_system_proxy_changes
11854   type: RelaxedAtomicBool
11855   value: false
11856   mirror: always
11858 # If all non-direct proxies have failed, we retry all of them in case they
11859 # are online now.
11860 - name: network.proxy.retry_failed_proxies
11861   type: RelaxedAtomicBool
11862   value: true
11863   mirror: always
11865 # Some requests during a page load are marked as "tail", mainly trackers, but not only.
11866 # This pref controls whether such requests are put to the tail, behind other requests
11867 # emerging during page loading process.
11868 - name: network.http.tailing.enabled
11869   type: bool
11870   value: true
11871   mirror: always
11873 # Whether to run proxy checks when processing Alt-Svc headers.
11874 - name: network.http.altsvc.proxy_checks
11875   type: bool
11876   value: true
11877   mirror: always
11879 - name: network.http.stale_while_revalidate.enabled
11880   type: RelaxedAtomicBool
11881   value: true
11882   mirror: always
11884 # Capacity of the above cache, in kilobytes.
11885 - name: network.ssl_tokens_cache_capacity
11886   type: RelaxedAtomicUint32
11887   value: 2048
11888   mirror: always
11890 # How many records we store per entry
11891 - name: network.ssl_tokens_cache_records_per_entry
11892   type: RelaxedAtomicUint32
11893   value: 2
11894   mirror: always
11896 # If true, only use the token once
11897 - name: network.ssl_tokens_cache_use_only_once
11898   type: RelaxedAtomicBool
11899   value: true
11900   mirror: always
11902 # The maximum allowed length for a URL - 1MB default.
11903 - name: network.standard-url.max-length
11904   type: RelaxedAtomicUint32
11905   value: 1048576
11906   mirror: always
11908 # DNS Trusted Recursive Resolver
11909 # 0 - default off, 1 - reserved/off, 2 - TRR first, 3 - TRR only,
11910 # 4 - reserved/off, 5 off by choice
11911 - name: network.trr.mode
11912   type: RelaxedAtomicUint32
11913   value: 0
11914   mirror: always
11916 # Default global TRR provider
11917 - name: network.trr.default_provider_uri
11918   type: String
11919   value: "https://mozilla.cloudflare-dns.com/dns-query"
11920   mirror: never
11922 # If true, retry TRR for recoverable errors once.
11923 - name: network.trr.retry_on_recoverable_errors
11924   type: RelaxedAtomicBool
11925   value: true
11926   mirror: always
11928 # If true, don't fallback to native DNS upon network errors.
11929 - name: network.trr.strict_native_fallback
11930   type: RelaxedAtomicBool
11931   value: false
11932   mirror: always
11934 # If true, we'll fallback to native if the retry also times out.
11935 - name: network.trr.strict_native_fallback_allow_timeouts
11936   type: RelaxedAtomicBool
11937   value: true
11938   mirror: always
11940 # Single TRR request timeout (ms) when strict native fallback is enabled.
11941 - name: network.trr.strict_fallback_request_timeout_ms
11942   type: RelaxedAtomicUint32
11943   value: 6000
11944   mirror: always
11946 # If false, the temporary blocklisting feature is disabled.
11947 # This is useful for tests to prevent bleeding extra reqs
11948 # between tasks, since we may attempt to look up the
11949 # parent domain in the background when blocklisting a host.
11950 - name: network.trr.temp_blocklist
11951   type: RelaxedAtomicBool
11952   value: true
11953   mirror: always
11955 # TRR blocklist entry expire time (in seconds). Default is one minute.
11956 # Meant to survive basically a page load.
11957 - name: network.trr.temp_blocklist_duration_sec
11958   type: RelaxedAtomicUint32
11959   value: 60
11960   mirror: always
11962 # Single TRR request timeout, in milliseconds
11963 - name: network.trr.request_timeout_ms
11964   type: RelaxedAtomicUint32
11965   value: 1500
11966   mirror: always
11968 # Single TRR request timeout, in milliseconds for mode 3
11969 - name: network.trr.request_timeout_mode_trronly_ms
11970   type: RelaxedAtomicUint32
11971   value: 30000
11972   mirror: always
11974 # Similar to network.http.http2.ping-timeout, but this is used when the
11975 # Http/2 connection is connected to the TRR server.
11976 - name: network.trr.ping_timeout
11977   type: RelaxedAtomicUint32
11978   value: 3000
11979   mirror: always
11981 # The timeout of the TRR confirmation request
11982 - name: network.trr.confirmation_timeout_ms
11983   type: RelaxedAtomicUint32
11984   value: 6000
11985   mirror: always
11987 # The timeout of the TRR confirmation request
11988 - name: network.trr.confirmation_telemetry_enabled
11989   type: RelaxedAtomicBool
11990   value: true
11991   mirror: always
11993 # Whether to send the Accept-Language header for TRR requests
11994 - name: network.trr.send_accept-language_headers
11995   type: RelaxedAtomicBool
11996   value: false
11997   mirror: always
11999 # Whether to send an empty Accept-Encoding header for TRR requests
12000 - name: network.trr.send_empty_accept-encoding_headers
12001   type: RelaxedAtomicBool
12002   value: true
12003   mirror: always
12005 # Whether to send the User-Agent header for TRR requests
12006 - name: network.trr.send_user-agent_headers
12007   type: RelaxedAtomicBool
12008   value: false
12009   mirror: always
12011 # This pref controls whether to use TRRServiceChannel off main thread.
12012 - name: network.trr.fetch_off_main_thread
12013   type: RelaxedAtomicBool
12014   value: true
12015   mirror: always
12017 # If we should wait for captive portal confirmation before enabling TRR
12018 - name: network.trr.wait-for-portal
12019   type: RelaxedAtomicBool
12020   value: false
12021   mirror: always
12023 # If we should wait for TRR service confirmation to complete before enabling
12024 # TRR for lookups when fallback is enabled. Confirmation is always skipped when
12025 # global mode is TRR-only (no fallback).
12026 - name: network.trr.wait-for-confirmation
12027   type: RelaxedAtomicBool
12028   value: false
12029   mirror: always
12031 # Normally when confirmation fails we wait for the confirmation to succeed
12032 # before attempting to do TRR. When this pref is true, we optimistically
12033 # assume the confirmation will succeed and might attempt TRR anyway.
12034 # If network.trr.wait-for-confirmation is true, this pref is ignored.
12035 - name: network.trr.attempt-when-retrying-confirmation
12036   type: RelaxedAtomicBool
12037   value: false
12038   mirror: always
12040 # Use GET (rather than POST)
12041 - name: network.trr.useGET
12042   type: RelaxedAtomicBool
12043   value: false
12044   mirror: always
12046 # Allow RFC1918 address in responses?
12047 - name: network.trr.allow-rfc1918
12048   type: RelaxedAtomicBool
12049   value: false
12050   mirror: always
12052 # When true, it only sends AAAA when the system has IPv6 connectivity
12053 - name: network.trr.skip-AAAA-when-not-supported
12054   type: RelaxedAtomicBool
12055   value: true
12056   mirror: always
12058 # Whether to apply split horizon mitigations when using TRR.
12059 # These include adding the DNS suffix to the excluded domains
12060 - name: network.trr.split_horizon_mitigations
12061   type: RelaxedAtomicBool
12062   value: true
12063   mirror: always
12065 # Explicitly disable ECS (EDNS Client Subnet, RFC 7871)
12066 - name: network.trr.disable-ECS
12067   type: RelaxedAtomicBool
12068   value: true
12069   mirror: always
12071 # When true, the DNS+TRR cache will be cleared when a relevant TRR pref
12072 # changes. (uri, bootstrapAddress, excluded-domains)
12073 - name: network.trr.clear-cache-on-pref-change
12074   type: RelaxedAtomicBool
12075   value: true
12076   mirror: always
12078 # After this many failed TRR requests in a row, consider TRR borked
12079 - name: network.trr.max-fails
12080   type: RelaxedAtomicUint32
12081   value: 15
12082   mirror: always
12084 # When the TRR confirmation is set to CONFIRM_FAILED due to many failures in
12085 # a row, we set a timer to retry. This has an exponential backoff up to
12086 # 64 seconds.
12087 - name: network.trr.retry-timeout-ms
12088   type: RelaxedAtomicUint32
12089   value: 125
12090   mirror: always
12092 # Retry with no TRR when the response contained only 0.0.0.0 or ::
12093 - name: network.trr.fallback-on-zero-response
12094   type: RelaxedAtomicBool
12095   value: false
12096   mirror: always
12098 # If true we parse the /etc/hosts file and exclude any host names from TRR.
12099 # Reading the file is only done once, when TRR is first enabled - this could be
12100 # soon after startup or when the pref is flipped.
12101 - name: network.trr.exclude-etc-hosts
12102   type: RelaxedAtomicBool
12103   value: true
12104   mirror: always
12106 # Whether to add padding in the doh dns queries (rfc 7830)
12107 - name: network.trr.padding
12108   type: RelaxedAtomicBool
12109   value: true
12110   mirror: always
12112 # The block size to pad to. Capped at 1024 bytes.
12113 # Setting it to 0 doesn't add additional padding, but allows the server to
12114 # respond with padding (RFC7930 Sec 4)
12115 - name: network.trr.padding.length
12116   type: RelaxedAtomicUint32
12117   value: 128
12118   mirror: always
12120 # Whether to skip the NS check for the blocked host.
12121 # Note this is used for test only.
12122 - name: network.trr.skip-check-for-blocked-host
12123   type: RelaxedAtomicBool
12124   value: false
12125   mirror: always
12127 # Whether to use the connection info that is generated asynchronously.
12128 - name: network.trr.async_connInfo
12129   type: RelaxedAtomicBool
12130   value: false
12131   mirror: always
12133 # The base URL of the `Learn more` button for skip reasons
12134 - name: network.trr_ui.skip_reason_learn_more_url
12135   type: String
12136   value: "https://firefox-source-docs.mozilla.org/networking/dns/trr-skip-reasons.html#"
12137   mirror: never
12139 # If true, display a warning before fallback to native
12140 - name: network.trr.display_fallback_warning
12141   type: RelaxedAtomicBool
12142   value: false
12143   mirror: always
12145 # Heuristics in this list will trigger the fallback to native warning
12146 - name: network.trr.fallback_warning_heuristic_list
12147   type: String
12148   value: "canary"
12149   mirror: never
12151 # Use Oblivious HTTP when making TRR requests.
12152 - name: network.trr.use_ohttp
12153   type: RelaxedAtomicBool
12154   value: false
12155   mirror: always
12157 # Oblivious HTTP relay URI for TRR requests.
12158 - name: network.trr.ohttp.relay_uri
12159   type: String
12160   value: ""
12161   mirror: never
12163 # URI from which to fetch the configuration for the Oblivious HTTP gateway for TRR requests.
12164 - name: network.trr.ohttp.config_uri
12165   type: String
12166   value: ""
12167   mirror: never
12169 # The URI used for the target DoH server when network.trr.use_ohttp is true
12170 - name: network.trr.ohttp.uri
12171   type: String
12172   value: ""
12173   mirror: never
12175 # Allow the network changed event to get sent when a network topology or setup
12176 # change is noticed while running.
12177 - name: network.notify.changed
12178   type: RelaxedAtomicBool
12179   value: true
12180   mirror: always
12182 # Allow network detection of IPv6 related changes (bug 1245059)
12183 - name: network.notify.IPv6
12184   type: RelaxedAtomicBool
12185 #ifdef XP_WIN
12186   value: false
12187 #else
12188   value: true
12189 #endif
12190   mirror: always
12192 # Whether to check the dnsSuffix on network changes
12193 - name: network.notify.dnsSuffixList
12194   type: RelaxedAtomicBool
12195   value: true
12196   mirror: always
12198 # Whether to check the registry for proxies on network changes that indicate
12199 # that TRR should not be used.
12200 - name: network.notify.checkForProxies
12201   type: RelaxedAtomicBool
12202   value: true
12203   mirror: always
12205 # Whether to check the registry for NRPT rules on network changes that
12206 # indicate that TRR should not be used.
12207 - name: network.notify.checkForNRPT
12208   type: RelaxedAtomicBool
12209   value: true
12210   mirror: always
12212 # Whether NotifyIpInterfaceChange should be called immediately after
12213 # registration in order to record the initial state of the network adapters.
12214 - name: network.notify.initial_call
12215   type: RelaxedAtomicBool
12216   value: true
12217   mirror: always
12219 # Whether to check for DNS resolvers
12220 - name: network.notify.resolvers
12221   type: RelaxedAtomicBool
12222   value: true
12223   mirror: always
12225 # Whether to use the rust implemented DefaultURI for unknown scheme types
12226 - name: network.url.useDefaultURI
12227   type: RelaxedAtomicBool
12228   value: false
12229   mirror: always
12231 # The maximum allowed length for a URL - 32MB default.
12232 # If 0 that means no limit.
12233 - name: network.url.max-length
12234   type: RelaxedAtomicUint32
12235   value: 32 * 1024 * 1024
12236   mirror: always
12238 # Should be removed if no breakage occurs. See bug 1797846
12239 - name: network.url.strip-data-url-whitespace
12240   type: RelaxedAtomicBool
12241   value: false
12242   mirror: always
12244   # If true, will be more strict with status code parsing
12245 - name: network.url.strict_data_url_base64_placement
12246   type: RelaxedAtomicBool
12247   value: true
12248   mirror: always
12250 # Force remapping of remote port numbers to allow reaching local testing
12251 # servers or port forwarders listening on non-standard ports.  Note that
12252 # this is not changing the origin URL in the addressbar, only internally
12253 # the port number used.  This is intended to be used along with the
12254 # `network.dns.forceResolve` preference.
12256 # The form is:
12257 #   "80,443,808-888=8080; 563=8081"
12258 # this will remap ports for HTTP, HTTPS and the range of 808-888 included
12259 # to use port 8080, and port 563 to go to 8081.
12260 - name: network.socket.forcePort
12261   type: String
12262   value: ""
12263   mirror: never
12265 # Try and use HTTP2 when using SSL
12266 - name: network.http.http2.enabled
12267   type: RelaxedAtomicBool
12268   value: true
12269   mirror: always
12271 - name: network.http.http2.enabled.deps
12272   type: RelaxedAtomicBool
12273   value: true
12274   mirror: always
12276 - name: network.http.http2.enforce-tls-profile
12277   type: RelaxedAtomicBool
12278   value: true
12279   mirror: always
12281 - name: network.http.http2.chunk-size
12282   type: RelaxedAtomicInt32
12283   value: 16000
12284   mirror: always
12286 - name: network.http.http2.timeout
12287   type: RelaxedAtomicInt32
12288   value: 170
12289   mirror: always
12291 - name: network.http.http2.coalesce-hostnames
12292   type: RelaxedAtomicBool
12293   value: true
12294   mirror: always
12296 - name: network.http.http2.ping-threshold
12297   type: RelaxedAtomicInt32
12298   value: 58
12299   mirror: always
12301 - name: network.http.http2.ping-timeout
12302   type: RelaxedAtomicInt32
12303   value: 8
12304   mirror: always
12306 - name: network.http.http2.send-buffer-size
12307   type: RelaxedAtomicInt32
12308   value: 0
12309   mirror: always
12311 - name: network.http.http2.allow-push
12312   type: RelaxedAtomicBool
12313   value: true
12314   mirror: always
12316 - name: network.http.http2.push-allowance
12317   type: RelaxedAtomicInt32
12318   value: 131072  # 128KB
12319   mirror: always
12321 - name: network.http.http2.pull-allowance
12322   type: RelaxedAtomicInt32
12323   value: 12582912  # 12MB
12324   mirror: always
12326 - name: network.http.http2.default-concurrent
12327   type: RelaxedAtomicInt32
12328   value: 100
12329   mirror: always
12331 - name: network.http.http2.default-hpack-buffer
12332   type: RelaxedAtomicInt32
12333   value: 65536 # 64K
12334   mirror: always
12336 - name: network.http.http2.websockets
12337   type: RelaxedAtomicBool
12338   value: true
12339   mirror: always
12341 - name: network.http.http2.enable-hpack-dump
12342   type: RelaxedAtomicBool
12343   value: false
12344   mirror: always
12346 # Enable HTTP/3
12347 - name: network.http.http3.enable
12348   type: RelaxedAtomicBool
12349   value: true
12350   mirror: always
12352 # Receive buffer size of QUIC socket
12353 - name: network.http.http3.recvBufferSize
12354   type: RelaxedAtomicInt32
12355   value: 1048576
12356   mirror: always
12358 - name: network.http.http3.enable_qlog
12359   type: RelaxedAtomicBool
12360   value: false
12361   mirror: always
12363 - name: network.http.http3.enable_0rtt
12364   type: RelaxedAtomicBool
12365   value: true
12366   mirror: always
12368 # When a h3 transaction is inserted in the pending queue, the time (ms) we wait
12369 # to create a TCP backup connection.
12370 - name: network.http.http3.backup_timer_delay
12371   type: RelaxedAtomicUint32
12372   value: 100
12373   mirror: always
12375 # The global half open sockets allowed for creating a backup connection.
12376 - name: network.http.http3.parallel_fallback_conn_limit
12377   type: RelaxedAtomicUint32
12378   value: 32
12379   mirror: always
12381 # Receive buffer size of QUIC socket
12382 - name: network.http.http3.max_data
12383   type: RelaxedAtomicUint32
12384   value: 25165824
12385   mirror: always
12387 # Receive buffer size of QUIC socket
12388 - name: network.http.http3.max_stream_data
12389   type: RelaxedAtomicUint32
12390   value: 12582912
12391   mirror: always
12393 # Enable http3 network priority as described in
12394 # https://httpwg.org/http-extensions/draft-ietf-httpbis-priority.html
12395 - name: network.http.http3.priority
12396   type: RelaxedAtomicBool
12397   value: true
12398   mirror: always
12400 # Depriorizing background tabs notifies websites when switching to or from the
12401 # tab while still loading resources for the website. On one hand it might
12402 # improve performance when switching to an tab with a website using the same
12403 # QUIC connection. On the other hand it sends more data to the website and
12404 # might be a privacy concern.
12405 - name: network.http.http3.send_background_tabs_deprioritization
12406   type: RelaxedAtomicBool
12407   value: false
12408   mirror: always
12410 - name: network.http.http3.version_negotiation.enabled
12411   type: RelaxedAtomicBool
12412   value: false
12413   mirror: always
12415 # When a Http/3 connection failed, whether to retry with a different IP address.
12416 - name: network.http.http3.retry_different_ip_family
12417   type: RelaxedAtomicBool
12418   value: false
12419   mirror: always
12421 # This is for testing purpose. When true, nsUDPSocket::SendWithAddress will
12422 # return NS_ERROR_CONNECTION_REFUSED for address "::1".
12423 - name: network.http.http3.block_loopback_ipv6_addr
12424   type: RelaxedAtomicBool
12425   value: false
12426   mirror: always
12428 # When true, a http request will be upgraded to https when HTTPS RR is
12429 # available.
12430 - name: network.dns.upgrade_with_https_rr
12431   type: RelaxedAtomicBool
12432   value: true
12433   mirror: always
12435 # Whether to use HTTPS RR as AltSvc
12436 - name: network.dns.use_https_rr_as_altsvc
12437   type: RelaxedAtomicBool
12438   value: true
12439   mirror: always
12441 # Whether to check for NAT64 using the system resolver
12442 - name: network.connectivity-service.nat64-check
12443   type: bool
12444   value: true
12445   mirror: always
12447 # Manually enter the NAT64 prefix that will be used if IPv4 is unavailable.
12448 # The value is formatted as IPv6 with the least significant bits to be dropped.
12449 # For example, 64:ff9b:: is a common prefix. This will not disable
12450 # the NAT64 check, although the value of this pref will be prioritized.
12451 - name: network.connectivity-service.nat64-prefix
12452   type: String
12453   value: ""
12454   mirror: never
12456 # Whether to enable echconfig.
12457 - name: network.dns.echconfig.enabled
12458   type: RelaxedAtomicBool
12459   value: @IS_NIGHTLY_BUILD@
12460   mirror: always
12462 # Whether to enable echconfig for http3.
12463 - name: network.dns.http3_echconfig.enabled
12464   type: RelaxedAtomicBool
12465   value: @IS_NIGHTLY_BUILD@
12466   mirror: always
12468 # This pref needs to be worked together with network.dns.echconfig.enabled
12469 # being true and there is no record without ECHConfig.
12470 # When we try all records with ECHConfig in HTTPS RRs and still can't connect,
12471 # this pref indicate whether we can fallback to the origin server.
12472 - name: network.dns.echconfig.fallback_to_origin_when_all_failed
12473   type: RelaxedAtomicBool
12474   value: @IS_NOT_NIGHTLY_BUILD@
12475   mirror: always
12477 # When true, reset the exclusion list when all records are excluded.
12478 - name: network.dns.httpssvc.reset_exclustion_list
12479   type: RelaxedAtomicBool
12480   value: true
12481   mirror: always
12483 # If the http3 connection cannot be ready after the timeout value here, the
12484 # transaction will start another non-http3 conneciton.
12485 # Setting this value to 0 indicates this feature is disabled.
12486 - name: network.dns.httpssvc.http3_fast_fallback_timeout
12487   type: RelaxedAtomicUint32
12488   value: 50
12489   mirror: always
12491 # Whether to force a transaction to wait https rr.
12492 - name: network.dns.force_waiting_https_rr
12493   type: RelaxedAtomicBool
12494   value: @IS_NIGHTLY_BUILD@
12495   mirror: always
12497 # The TTL for negative responses of TXT and HTTPS records.
12498 - name: network.dns.negative_ttl_for_type_record
12499   type: RelaxedAtomicUint32
12500   value: 300   # 5 minutes (in seconds)
12501   mirror: always
12503 # Whether to use port prefixed QNAME for HTTPS RR
12504 - name: network.dns.port_prefixed_qname_https_rr
12505   type: RelaxedAtomicBool
12506   value: false
12507   mirror: always
12509 # Whether to use HTTPS RR and ignore NS_HTTP_DISALLOW_HTTPS_RR
12510 # This pref is only set when running tests
12511 - name: network.dns.force_use_https_rr
12512   type: RelaxedAtomicBool
12513   value: false
12514   mirror: always
12516 # This preference can be used to turn off IPv6 name lookups. See bug 68796.
12517 - name: network.dns.disableIPv6
12518   type: RelaxedAtomicBool
12519   value: false
12520   mirror: always
12522 # Whether to add additional record IPs to the cache
12523 - name: network.trr.add_additional_records
12524   type: RelaxedAtomicBool
12525   value: true
12526   mirror: always
12528 # When this pref is true, AddStorageEntry will return an error if the
12529 # OPEN_READONLY & OPEN_SECRETLY flags are passed and no entry exists.
12530 # If no regressions occur this pref should be removed.
12531 - name: network.cache.bug1708673
12532   type: RelaxedAtomicBool
12533   value: false
12534   mirror: always
12536 # When true we will dispatch a background task (separate process) to
12537 # delete the cache folder at shutdown in order to avoid shutdown hangs.
12538 - name: network.cache.shutdown_purge_in_background_task
12539   type: RelaxedAtomicBool
12540 #if defined(XP_WIN)
12541   value: true
12542 #else
12543   value: false
12544 #endif
12545   mirror: always
12547 # Number of seconds to wait for the cache folder to be renamed before
12548 # the background task forcefully exists.
12549 - name: network.cache.shutdown_purge_folder_wait_seconds
12550   type: RelaxedAtomicUint32
12551   value: 10
12552   mirror: always
12554 # This is used for a temporary workaround for a web-compat issue. If pref is
12555 # true CORS preflight requests are allowed to send client certificates.
12556 - name: network.cors_preflight.allow_client_cert
12557   type: RelaxedAtomicBool
12558   value: false
12559   mirror: always
12561 # If true nsCORSListenerProxy will reject any URL that contains user & password
12562 # regardless if it's a redirect or not. When false nsCORSListenerProxy will
12563 # only reject URLs with a username and password when they happen on a redirected
12564 # channel.
12565 - name: network.cors_preflight.block_userpass_uri
12566   type: RelaxedAtomicBool
12567   value: false
12568   mirror: always
12570 # Whether to record the telemetry event when a JAR channel is failed to load.
12571 - name: network.jar.record_failure_reason
12572   type: RelaxedAtomicBool
12573   value: @IS_EARLY_BETA_OR_EARLIER@
12574   mirror: always
12576 # nsJARInputStream::Available returns the size indicated by the archived entry
12577 # so we need a limit so we don't OOM if the archive is corrupted.
12578 - name: network.jar.max_available_size
12579   type: RelaxedAtomicUint32
12580   value: 256*1024*1024 # 256 Mb
12581   mirror: always
12583 # Whether JAR entries that defate to a different size than RealSize/orglen
12584 # are considered corrupted or not
12585 - name: network.jar.require_size_match
12586   type: RelaxedAtomicBool
12587   value: true
12588   mirror: always
12590 # When this pref is true, we will use the HTTPS acceptable content encoding
12591 # list for trustworthy domains such as http://localhost
12592 - name: network.http.encoding.trustworthy_is_https
12593   type: RelaxedAtomicBool
12594   value: true
12595   mirror: always
12597 # Support http3 version1
12598 - name: network.http.http3.support_version1
12599   type: RelaxedAtomicBool
12600   value: true
12601   mirror: always
12603 # Disable early data on an origin if SSL_ERROR_PROTOCOL_VERSION_ALERT is received
12604 - name: network.http.early_data_disable_on_error
12605   type: RelaxedAtomicBool
12606   value: true
12607   mirror: always
12609 # Disable early data if it fails for more than this number of origins
12610 - name: network.http.early_data_max_error
12611   type: RelaxedAtomicUint32
12612   value: 5
12613   mirror: always
12615   # If true, requests will be canceled if any of the response headers values has a NUL character
12616 - name: network.http.reject_NULs_in_response_header_values
12617   type: RelaxedAtomicBool
12618   value: true
12619   mirror: always
12621   # If true, will be more strict with status code parsing
12622 - name: network.http.strict_response_status_line_parsing
12623   type: RelaxedAtomicBool
12624   value: true
12625   mirror: always
12627   # If true, remove the resumption token when 0RTT failed.
12628 - name: network.http.remove_resumption_token_when_early_data_failed
12629   type: RelaxedAtomicBool
12630   value: true
12631   mirror: always
12633 # The maximum count that we allow socket prrocess to crash. If this count is
12634 # reached, we won't use networking over socket process.
12635 - name: network.max_socket_process_failed_count
12636   type: RelaxedAtomicUint32
12637   value: 1
12638   mirror: always
12640 - name: network.allow_redirect_to_data
12641   type: RelaxedAtomicBool
12642   value: false
12643   mirror: always
12645 - name: network.allow_raw_sockets_in_content_processes
12646   type: bool
12647   value: false
12648   mirror: once
12650 - name: network.allow_large_stack_size_for_socket_thread
12651   type: RelaxedAtomicBool
12652   value: true
12653   mirror: always
12655 # WebTransport
12656 - name: network.webtransport.enabled
12657   type: RelaxedAtomicBool
12658   value: true
12659   mirror: always
12661 # WebTransport Datagram support
12662 - name: network.webtransport.datagrams.enabled
12663   type: RelaxedAtomicBool
12664   value: true
12665   mirror: always
12667 # WebTransport Datagram size
12668 - name: network.webtransport.datagram_size
12669   type: RelaxedAtomicUint32
12670   value: 1200
12671   mirror: always
12673 # WebTransport Redirect support
12674 - name: network.webtransport.redirect.enabled
12675   type: RelaxedAtomicBool
12676   value: false
12677   mirror: always
12679 # Wifi-scan polling period, in ms, when on a mobile network.
12680 # A value of 0 indicates that no polling should be done.
12681 - name: network.wifi.scanning_period
12682   type: RelaxedAtomicUint32
12683   value: 60000
12684   mirror: always
12686 # When the Access-Control-Allow-Headers is wildcard (*), whether to allow
12687 # CORS-protected requests with the Authorization request header.
12688 - name: network.cors_preflight.authorization_covered_by_wildcard
12689   type: bool
12690   value: true
12691   mirror: always
12693 #---------------------------------------------------------------------------
12694 # Prefs starting with "nglayout."
12695 #---------------------------------------------------------------------------
12697 # Enable/disable display list invalidation logging --- useful for debugging.
12698 - name: nglayout.debug.invalidation
12699   type: bool
12700   value: false
12701   mirror: always
12703 - name: nglayout.debug.disable_xul_cache
12704   type: bool
12705   value: false
12706   mirror: always
12708 - name: nglayout.initialpaint.delay
12709   type: int32_t
12710   value: 5
12711   mirror: always
12713 - name: nglayout.initialpaint.delay_in_oopif
12714   type: int32_t
12715   value: 5
12716   mirror: always
12718 #---------------------------------------------------------------------------
12719 # Prefs starting with "page_load."
12720 #---------------------------------------------------------------------------
12722 # Time in milliseconds during which certain tasks are deprioritized during
12723 # page load.
12724 - name: page_load.deprioritization_period
12725   type: RelaxedAtomicUint32
12726   value: 5000
12727   mirror: always
12729 #---------------------------------------------------------------------------
12730 # Prefs starting with "pdfjs."
12731 #---------------------------------------------------------------------------
12733 - name: pdfjs.disabled
12734   type: bool
12735   value: false
12736   mirror: always
12738 #---------------------------------------------------------------------------
12739 # Prefs starting with "permissions."
12740 #---------------------------------------------------------------------------
12742 # 1-Accept, 2-Deny, Any other value: Accept
12743 - name: permissions.default.image
12744   type: RelaxedAtomicUint32
12745   value: 1
12746   mirror: always
12748 - name: permissions.isolateBy.userContext
12749   type: RelaxedAtomicBool
12750   value: false
12751   mirror: always
12753 - name: permissions.isolateBy.privateBrowsing
12754   type: RelaxedAtomicBool
12755   value: true
12756   mirror: always
12758 #---------------------------------------------------------------------------
12759 # Prefs starting with "places."
12760 #---------------------------------------------------------------------------
12762 # Whether pages alternative frecency is enabled. This and the following related
12763 # prefs only apply at restart.
12764 - name: places.frecency.pages.alternative.featureGate
12765   type: bool
12766   value: false
12767   mirror: once
12769 - name: places.frecency.pages.alternative.highWeight
12770   type: uint32_t
12771   value: 100
12772   mirror: once
12774 - name: places.frecency.pages.alternative.mediumWeight
12775   type: uint32_t
12776   value: 50
12777   mirror: once
12779 - name: places.frecency.pages.alternative.lowWeight
12780   type: uint32_t
12781   value: 20
12782   mirror: once
12784 - name: places.frecency.pages.alternative.halfLifeDays
12785   type: uint32_t
12786   value: 30
12787   mirror: once
12789 - name: places.frecency.pages.alternative.numSampledVisits
12790   type: uint32_t
12791   value: 10
12792   mirror: once
12794 #---------------------------------------------------------------------------
12795 # Prefs starting with "plain_text."
12796 #---------------------------------------------------------------------------
12798 # When false, text in plaintext documents does not wrap long lines.
12799 - name: plain_text.wrap_long_lines
12800   type: bool
12801   value: true
12802   mirror: always
12804 #---------------------------------------------------------------------------
12805 # Prefs starting with "preferences."
12806 #---------------------------------------------------------------------------
12808 - name: preferences.allow.omt-write
12809   type: bool
12810   value: true
12811   mirror: never
12813 #ifdef DEBUG
12814   # If set to true, setting a Preference matched to a `Once` StaticPref will
12815   # assert that the value matches. Such assertion being broken is a clear flag
12816   # that the Once policy shouldn't be used.
12817 -   name: preferences.check.once.policy
12818     type: bool
12819     value: false
12820     mirror: always
12822   # If set to true, StaticPrefs Once policy check will be skipped during
12823   # automation regression test. Use with care. This pref must be set back to
12824   # false as soon as specific test has completed.
12825 -   name: preferences.force-disable.check.once.policy
12826     type: bool
12827     value: false
12828     mirror: always
12829 #endif
12831 #---------------------------------------------------------------------------
12832 # Prefs starting with "print."
12833 #---------------------------------------------------------------------------
12835 # Variation fonts can't always be embedded in certain output formats
12836 # such as PDF. To work around this, draw the variation fonts using
12837 # paths instead of using font embedding.
12838 - name: print.font-variations-as-paths
12839   type: RelaxedAtomicBool
12840   value: true
12841   mirror: always
12843 # Whether we always print silently (without a print dialog).
12844 - name: print.always_print_silent
12845   type: RelaxedAtomicBool
12846   value: false
12847   mirror: always
12849 # Whether we attempt to generate links in Save As PDF output.
12850 - name: print.save_as_pdf.links.enabled
12851   type: RelaxedAtomicBool
12852   value: true
12853   mirror: always
12855 # Whether we attempt to generate and use document-internal PDF destinations.
12856 # This currently sometimes results in an internal cairo error, see bug 1725743;
12857 # disabled by default until that is resolved.
12858 - name: print.save_as_pdf.internal_destinations.enabled
12859   type: RelaxedAtomicBool
12860   value: false
12861   mirror: always
12863 # Whether we use the CSS @page size as the paper size in PDF output.
12864 - name: print.save_as_pdf.use_page_rule_size_as_paper_size.enabled
12865   type: RelaxedAtomicBool
12866   value: true
12867   mirror: always
12869 # The default DPI for printing.
12871 # For PDF-based output, DPI should ideally be irrelevant, but in fact it is not
12872 # for multiple reasons:
12874 #  * Layout code that tries to respect device pixels (e.g. for snapping glyph
12875 #    positions and baselines, and especially for the "GDI Classic"
12876 #    rendering-mode threshold for certain fonts).
12878 #  * The limitations of the PDF format mean that we can't natively represent
12879 #    certain effects, such as filters, in PDF output, so we need to rasterize
12880 #    the parts of the document with these applied.
12882 #  * Other rasterized things like images and such are also affected by DPI
12883 #    (both in the output, and the images we select via srcset, for example).
12885 # Therefore, using a high DPI is preferable. For now, we use 144dpi to match
12886 # physical printer output on Windows, but higher (e.g. 300dpi) might be better,
12887 # but only if it does not lead to issues such as excessive memory use.
12888 - name: print.default_dpi
12889   type: float
12890   value: 144.0f
12891   mirror: always
12893 # Whether support for monochrome printing is enabled for CUPS.
12894 - name: print.cups.monochrome.enabled
12895   type: RelaxedAtomicBool
12896   value: true
12897   mirror: always
12899 #---------------------------------------------------------------------------
12900 # Prefs starting with "privacy."
12901 #---------------------------------------------------------------------------
12903 # Annotate trackers using the strict list. If set to false, the basic list will
12904 # be used instead.
12905 - name: privacy.annotate_channels.strict_list.enabled
12906   type: bool
12907   value: @IS_EARLY_BETA_OR_EARLIER@
12908   mirror: always
12910 # Annotate trackers using the strict list in the private browsing mode. If set
12911 # to false, the basic list will be used instead.
12912 - name: privacy.annotate_channels.strict_list.pbmode.enabled
12913   type: bool
12914   value: true
12915   mirror: always
12917 # First Party Isolation (double keying), disabled by default.
12918 - name: privacy.firstparty.isolate
12919   type: RelaxedAtomicBool
12920   value: false
12921   mirror: always
12923 # If false, two windows in the same domain with different first party domains
12924 # (top level URLs) can access resources through window.opener. This pref is
12925 # effective only when "privacy.firstparty.isolate" is true.
12926 - name: privacy.firstparty.isolate.restrict_opener_access
12927   type: RelaxedAtomicBool
12928   value: true
12929   mirror: always
12931 - name: privacy.firstparty.isolate.block_post_message
12932   type: RelaxedAtomicBool
12933   value: false
12934   mirror: always
12936 - name: privacy.firstparty.isolate.use_site
12937   type: RelaxedAtomicBool
12938   value: false
12939   mirror: always
12941 # Enforce tracking protection in all modes.
12942 - name: privacy.trackingprotection.enabled
12943   type: bool
12944   value: false
12945   mirror: always
12947 # Enforce tracking protection in Private Browsing mode.
12948 - name: privacy.trackingprotection.pbmode.enabled
12949   type: bool
12950   value: true
12951   mirror: always
12953 # Annotate channels based on the tracking protection list in all modes
12954 - name: privacy.trackingprotection.annotate_channels
12955   type: bool
12956   value: true
12957   mirror: always
12959 # Block 3rd party fingerprinting resources.
12960 - name: privacy.trackingprotection.fingerprinting.enabled
12961   type: bool
12962   value: false
12963   mirror: always
12965 # Block 3rd party cryptomining resources.
12966 - name: privacy.trackingprotection.cryptomining.enabled
12967   type: bool
12968   value: false
12969   mirror: always
12971 # Block 3rd party socialtracking resources.
12972 - name: privacy.trackingprotection.socialtracking.enabled
12973   type: bool
12974   value: false
12975   mirror: always
12977 # Consider socialtracking annotation as trackers (see ETP).
12978 - name: privacy.socialtracking.block_cookies.enabled
12979   type: bool
12980   value: true
12981   mirror: always
12983 # Block 3rd party emailtracking resources in all mode.
12984 - name: privacy.trackingprotection.emailtracking.enabled
12985   type: bool
12986   value: false
12987   mirror: always
12989 # Block 3rd party emailtracking resources in Private Browsing mode.
12990 - name: privacy.trackingprotection.emailtracking.pbmode.enabled
12991   type: bool
12992   value: true
12993   mirror: always
12995 # Collecting 3rd party emailtracking telemetry.
12996 - name: privacy.trackingprotection.emailtracking.data_collection.enabled
12997   type: bool
12998   value: true
12999   mirror: always
13001 - name: privacy.trackingprotection.testing.report_blocked_node
13002   type: RelaxedAtomicBool
13003   value: false
13004   mirror: always
13006 # Whether to spoof user locale to English (used as part of Resist
13007 # Fingerprinting).
13008 # 0 - will prompt
13009 # 1 - don't spoof
13010 # 2 - spoof
13011 - name: privacy.spoof_english
13012   type: RelaxedAtomicUint32
13013   value: 0
13014   mirror: always
13016 # Send "do not track" HTTP header, disabled by default.
13017 - name: privacy.donottrackheader.enabled
13018   type: bool
13019   value: false
13020   mirror: always
13022 # Potentially send "global privacy control" HTTP header and set navigator
13023 # property accordingly. Communicates user's desire to opt-out/in of
13024 # websites or services selling or sharing the user's information, false by
13025 # default.
13026 # true - Send the header with a value of 1 to indicate opting-out
13027 # false - Do not send header to indicate opting-in
13028 - name: privacy.globalprivacycontrol.enabled
13029   type: RelaxedAtomicBool
13030   value: false
13031   mirror: always
13033 # Controls whether or not GPC signals are sent. Meant to act as a third option
13034 # of 'undecided' by leaving the navigator property undefined and not attaching
13035 # the Sec-GPC HTTP header.
13036 - name: privacy.globalprivacycontrol.functionality.enabled
13037   type: RelaxedAtomicBool
13038   value: false
13039   mirror: always
13041 # Lower the priority of network loads for resources on the tracking protection
13042 # list.  Note that this requires the
13043 # privacy.trackingprotection.annotate_channels pref to be on in order to have
13044 # any effect.
13045 - name: privacy.trackingprotection.lower_network_priority
13046   type: bool
13047   value: @IS_NIGHTLY_BUILD@
13048   mirror: always
13050 # A subset of Resist Fingerprinting protections focused specifically on timers.
13051 # This affects the Animation API, the performance APIs, Date.getTime,
13052 # Event.timestamp, File.lastModified, audioContext.currentTime,
13053 # canvas.captureStream.currentTime.
13054 - name: privacy.reduceTimerPrecision
13055   type: RelaxedAtomicBool
13056   value: true
13057   mirror: always
13059 # If privacy.reduceTimerPrecision is false, this pref controls whether or not
13060 # to clamp all timers at a fixed 20 microsconds. It should always be enabled,
13061 # and is only specified as a pref to enable an emergency disabling in the event
13062 # of catastrophic failure.
13063 - name: privacy.reduceTimerPrecision.unconditional
13064   type: RelaxedAtomicBool
13065   value: true
13066   mirror: always
13068 # The resistFingerprinting variables are marked with 'Relaxed' memory ordering.
13069 # We don't particurally care that threads have a percently consistent view of
13070 # the values of these prefs. They are not expected to change often, and having
13071 # an outdated view is not particurally harmful. They will eventually become
13072 # consistent.
13074 # The variables will, however, be read often (specifically .microseconds on
13075 # each timer rounding) so performance is important.
13076 - name: privacy.resistFingerprinting
13077   type: RelaxedAtomicBool
13078   value: false
13079   mirror: always
13080   do_not_use_directly: true
13082 # When the .pbmode pref is on, RFP or FPP will be enabled in PBM
13083 # When the non-pbm pref is on, they will be enabled in PBM and non-PBM
13084 - name: privacy.resistFingerprinting.pbmode
13085   type: RelaxedAtomicBool
13086   value: false
13087   mirror: always
13088   do_not_use_directly: true
13090 # privacy.fingerprintingProtection enables a set of fingerprinting protections
13091 # designed to minimize breakage while maximizing protection.
13092 - name: privacy.fingerprintingProtection
13093   type: RelaxedAtomicBool
13094   value: false
13095   mirror: always
13096   do_not_use_directly: true
13098 - name: privacy.fingerprintingProtection.pbmode
13099   type: RelaxedAtomicBool
13100   value: false
13101   mirror: always
13102   do_not_use_directly: true
13104 # We automatically decline canvas permission requests if they are not initiated
13105 # from user input. Just in case that breaks something, we allow the user to
13106 # revert this behavior with this obscure pref. We do not intend to support this
13107 # long term. If you do set it, to work around some broken website, please file
13108 # a bug with information so we can understand why it is needed.
13109 - name: privacy.resistFingerprinting.autoDeclineNoUserInputCanvasPrompts
13110   type: bool
13111   value: true
13112   mirror: always
13114 # This pref can be used to disable mozAddonManager entirely for fingerprinting
13115 # reasons. Someone like Tor browser will use this pref.
13116 # NOTE: We'd like this to be a "hidden" pref once StaticPrefs supports it.
13117 - name: privacy.resistFingerprinting.block_mozAddonManager
13118   type: RelaxedAtomicBool
13119   value: false
13120   mirror: always
13122 # Whether canvas extraction should result in random data. If false, canvas
13123 # extraction results in all-white, opaque pixel data.
13124 - name: privacy.resistFingerprinting.randomDataOnCanvasExtract
13125   type: RelaxedAtomicBool
13126   value: true
13127   mirror: always
13129 # The log level for browser console messages logged in RFPHelper.sys.mjs. Change to
13130 # 'All' and restart to see the messages.
13131 - name: privacy.resistFingerprinting.jsmloglevel
13132   type: String
13133   value: "Warn"
13134   mirror: never
13136 # Enable jittering the clock one precision value forward.
13137 - name: privacy.resistFingerprinting.reduceTimerPrecision.jitter
13138   type: RelaxedAtomicBool
13139   value: true
13140   mirror: always
13142 # Dynamically tune the resolution of the timer reduction for
13143 # `privacy.reduceTimerPrecision` and `privacy.resistFingerprinting`.
13144 - name: privacy.resistFingerprinting.reduceTimerPrecision.microseconds
13145   type: RelaxedAtomicUint32
13146   value: 1000
13147   mirror: always
13149 - name: privacy.resistFingerprinting.target_video_res
13150   type: uint32_t
13151   value: 480
13152   mirror: always
13154 # Enable resetting the fingerprinting randomization key daily for normal windwos.
13155 - name: privacy.resistFingerprinting.randomization.daily_reset.enabled
13156   type: RelaxedAtomicBool
13157   value: false
13158   mirror: always
13160 # Enable resetting the fingerprinting randomization key daily for private windwos.
13161 - name: privacy.resistFingerprinting.randomization.daily_reset.private.enabled
13162   type: RelaxedAtomicBool
13163   value: false
13164   mirror: always
13167 # Anti-tracking permission expiration.
13168 - name: privacy.restrict3rdpartystorage.expiration
13169   type: uint32_t
13170   value: 2592000   # 30 days (in seconds)
13171   mirror: always
13173 # Report Anti-tracking warnings to console lazily
13174 - name: privacy.restrict3rdpartystorage.console.lazy
13175   type: bool
13176   value: true
13177   mirror: always
13179 # Enable the heuristic to allow storage access for windows opened using window.open() after user interaction
13180 - name: privacy.restrict3rdpartystorage.heuristic.opened_window_after_interaction
13181   type: bool
13182   value: true
13183   mirror: always
13185 # Enable the heuristic to allow storage access for windows opened using window.open()
13186 - name: privacy.restrict3rdpartystorage.heuristic.window_open
13187   type: bool
13188   value: true
13189   mirror: always
13191 # Enable the heuristic to allow storage access for windows opened using window.open()
13192 - name: privacy.restrict3rdpartystorage.heuristic.redirect
13193   type: bool
13194   value: true
13195   mirror: always
13197 # Anti-tracking permission expiration.
13198 - name: privacy.restrict3rdpartystorage.expiration_redirect
13199   type: uint32_t
13200   value: 2592000   # 30 days (in seconds)
13201   mirror: always
13203 # Anti-tracking user-interaction expiration.
13204 - name: privacy.userInteraction.expiration
13205   type: uint32_t
13206   value: 3888000   # 45 days (in seconds)
13207   mirror: always
13209 # Anti-tracking user-interaction document interval.
13210 - name: privacy.userInteraction.document.interval
13211   type: uint32_t
13212   value: 1800   # 30 minutes (in seconds)
13213   mirror: always
13215 # Enable Anti-tracking testing. When it enables, it will notify the observers
13216 # when user-interaction permission or storage access permission is added. This
13217 # is for testing only.
13218 - name: privacy.antitracking.testing
13219   type: bool
13220   value: false
13221   mirror: always
13223 # Controls the anti-tracking webcompat features. This includes:
13224 # - All URL-Classifier and state partitioning skip lists (prefs and remote
13225 #   settings)
13226 # - Storage access heuristics (opener, redirect, etc.)
13227 # - StorageAccessAPI automatic grants (skips the prompt)
13228 # - Allowing specific tracking channels on user opt-in (e.g. facebook login
13229 #   shim).
13230 - name: privacy.antitracking.enableWebcompat
13231   type: RelaxedAtomicBool
13232   value: true
13233   mirror: always
13235 # Enable the heuristic to allow storage access for recent visited pages
13236 - name: privacy.restrict3rdpartystorage.heuristic.recently_visited
13237   type: bool
13238   value: true
13239   mirror: always
13241 # Valid time gap since last visit
13242 - name: privacy.restrict3rdpartystorage.heuristic.recently_visited_time
13243   type: uint32_t
13244   value: 600    # 10 minutes
13245   mirror: always
13247 # Recent visited pages redirection permission expiration.
13248 - name: privacy.restrict3rdpartystorage.expiration_visited
13249   type: uint32_t
13250   value: 2592000   # 30 days (in seconds)
13251   mirror: always
13253 # Maximum client-side cookie life-time cap. Measured in seconds, set to 0 to
13254 # disable.
13255 - name: privacy.documentCookies.maxage
13256   type: uint32_t
13257   value: 0
13258   mirror: always
13260 - name: privacy.window.maxInnerWidth
13261   type: int32_t
13262   value: 1000
13263   mirror: always
13265 - name: privacy.window.maxInnerHeight
13266   type: int32_t
13267   value: 1000
13268   mirror: always
13270 - name: privacy.sanitize.sanitizeOnShutdown
13271   type: RelaxedAtomicBool
13272   value: false
13273   mirror: always
13275 - name: privacy.clearOnShutdown.cache
13276   type: RelaxedAtomicBool
13277   value: false
13278   mirror: always
13280 - name: privacy.dynamic_firstparty.limitForeign
13281   type: RelaxedAtomicBool
13282   value: false
13283   mirror: always
13285 - name: privacy.dynamic_firstparty.use_site
13286   type: RelaxedAtomicBool
13287   value: true
13288   mirror: always
13290 - name: privacy.partition.network_state
13291   type: RelaxedAtomicBool
13292   value: true
13293   mirror: always
13295 # Partition the OCSP cache by the partitionKey.
13296 - name: privacy.partition.network_state.ocsp_cache
13297   type: RelaxedAtomicBool
13298   value: @IS_NIGHTLY_BUILD@
13299   mirror: always
13301 # Partition the OCSP cache by the partitionKey for private browsing mode.
13302 - name: privacy.partition.network_state.ocsp_cache.pbmode
13303   type: RelaxedAtomicBool
13304   value: true
13305   mirror: always
13307 # Always partition web storage APIs except cookies.
13308 - name: privacy.partition.always_partition_third_party_non_cookie_storage
13309   type: RelaxedAtomicBool
13310   value: true
13311   mirror: always
13313 # Exclude session storage from the above preference.
13314 - name: privacy.partition.always_partition_third_party_non_cookie_storage.exempt_sessionstorage
13315   type: RelaxedAtomicBool
13316   value: false
13317   mirror: always
13319 - name: privacy.partition.bloburl_per_agent_cluster
13320   type: RelaxedAtomicBool
13321   value: false
13322   mirror: always
13324 - name: privacy.window.name.update.enabled
13325   type: bool
13326   value: true
13327   mirror: always
13329 # By default, the network state isolation is not active when there is a proxy
13330 # setting. This pref forces the network isolation even in these scenarios.
13331 - name: privacy.partition.network_state.connection_with_proxy
13332   type: bool
13333   value: false
13334   mirror: always
13336 # Partition the service workers unconditionally when dFPI is enabled.
13337 - name: privacy.partition.serviceWorkers
13338   type: RelaxedAtomicBool
13339   value: true
13340   mirror: always
13342 # Enables / disables the strip on share feature which strips query parameters
13343 # when copying/sharing in-content links or from the url bar.
13344 - name: privacy.query_stripping.strip_on_share.enabled
13345   type: RelaxedAtomicBool
13346   value: false
13347   mirror: always
13349 # Enables / disables the URL query string stripping in normal browsing mode
13350 # which strips query parameters from loading URIs to prevent bounce (redirect)
13351 # tracking.
13352 - name: privacy.query_stripping.enabled
13353   type: RelaxedAtomicBool
13354   value: false
13355   mirror: always
13357 # Same as the pref above, but controls query stripping for private browsing
13358 # mode.
13359 - name: privacy.query_stripping.enabled.pbmode
13360   type: RelaxedAtomicBool
13361   value: false
13362   mirror: always
13364 # The list which contains query parameters that are needed to be stripped from
13365 # URIs. The query parameters are separated by a space.
13366 - name: privacy.query_stripping.strip_list
13367   type: String
13368   value: ""
13369   mirror: never
13371 # This controls if we will do the query string stripping for redirects.
13372 - name: privacy.query_stripping.redirect
13373   type: bool
13374   value: true
13375   mirror: always
13377 # the list which contains sites where should exempt from query stripping
13378 - name: privacy.query_stripping.allow_list
13379   type: String
13380   value: ""
13381   mirror: never
13383 # Main pref to enable / disable the feature.
13384 - name: privacy.bounceTrackingProtection.enabled
13385   type: bool
13386   value: false
13387   mirror: once
13389 # How long to wait for a client redirect after a navigation ends.
13390 - name: privacy.bounceTrackingProtection.clientBounceDetectionTimerPeriodMS
13391   type: uint32_t
13392   value: 10000
13393   mirror: always
13395 # How long user activations will protect a site host from storage deletion.
13396 - name: privacy.bounceTrackingProtection.bounceTrackingActivationLifetimeSec
13397   type: uint32_t
13398   value: 3888000
13399   mirror: always
13401 # How long to wait for interaction after a possible bounce tracking event before
13402 # deleting a site host's storage.
13403 - name: privacy.bounceTrackingProtection.bounceTrackingGracePeriodSec
13404   type: uint32_t
13405   value: 3600
13406   mirror: always
13408 # How often to run the bounce tracking timer algorithm  which purges bounce
13409 # tracker state periodically. Set to 0 to disable purging.
13410 - name: privacy.bounceTrackingProtection.bounceTrackingPurgeTimerPeriodSec
13411   type: uint32_t
13412   value: 3600
13413   mirror: always
13415 # Whether only bounces that access storage should be considered trackers.
13416 - name: privacy.bounceTrackingProtection.requireStatefulBounces
13417   type: bool
13418   value: false
13419   mirror: always
13421 # To be used in test environments to enable observer messages.
13422 - name: privacy.bounceTrackingProtection.enableTestMode
13423   type: bool
13424   value: false
13425   mirror: always
13427 #---------------------------------------------------------------------------
13428 # Prefs starting with "prompts."
13429 #---------------------------------------------------------------------------
13431 # Prompt modal type prefs
13432 # See nsIPromptService::MODAL_TYPE fields for possible values.
13434 # Insecure form submit warning.
13435 - name: prompts.modalType.insecureFormSubmit
13436   type: int32_t
13437   value: 2
13438   mirror: always
13440 # nsHttpChannelAuthProvider#ConfirmAuth anti-phishing prompts.
13441 - name: prompts.modalType.confirmAuth
13442   type: int32_t
13443   value: 2
13444   mirror: always
13446 #---------------------------------------------------------------------------
13447 # Prefs starting with "security."
13448 #---------------------------------------------------------------------------
13450 # Mochitests that need to load resource:// URIs not declared content-accessible
13451 # in manifests should set this pref.
13452 - name: security.all_resource_uri_content_accessible
13453   type: bool
13454   value: false
13455   mirror: always
13457 - name: security.bad_cert_domain_error.url_fix_enabled
13458   type: bool
13459   value: true
13460   mirror: always
13462 - name: security.csp.reporting.script-sample.max-length
13463   type: int32_t
13464   value: 40
13465   mirror: always
13467 - name: security.csp.truncate_blocked_uri_for_frame_navigations
13468   type: bool
13469   value: true
13470   mirror: always
13472 # Limit the number of CSP reports that are send in a specific timespan.
13473 - name: security.csp.reporting.limit.count
13474   type: uint32_t
13475   value: 100
13476   mirror: always
13478 # Time span in seconds for reporting limit.
13479 - name: security.csp.reporting.limit.timespan
13480   type: uint32_t
13481   value: 2
13482   mirror: always
13484 # If true, all toplevel data: URI navigations will be blocked.
13485 # Please note that manually entering a data: URI in the
13486 # URL-Bar will not be blocked when flipping this pref.
13487 - name: security.data_uri.block_toplevel_data_uri_navigations
13488   type: bool
13489   value: true
13490   mirror: always
13492 # Whether window A is allowed to navigate cross-origin window B (that is not
13493 # a descendant frame of A) to a URI that loads externally.
13494 - name: security.allow_disjointed_external_uri_loads
13495   type: bool
13496   value: false
13497   mirror: always
13499 # Allowed by default so it doesn't affect Thunderbird/SeaMonkey, but
13500 # not allowed for Firefox Desktop in firefox.js
13501 - name: security.allow_parent_unrestricted_js_loads
13502   type: RelaxedAtomicBool
13503   value: true
13504   mirror: always
13506 # Allowed by default so it doesn't affect Thunderbird/SeaMonkey, but
13507 # not allowed for Firefox Desktop in firefox.js
13508 - name: security.allow_eval_with_system_principal
13509   type: RelaxedAtomicBool
13510   value: true
13511   mirror: always
13513 # Allowed by default so it doesn't affect Thunderbird/SeaMonkey, but
13514 # not allowed for Firefox Desktop in firefox.js
13515 - name: security.allow_eval_in_parent_process
13516   type: RelaxedAtomicBool
13517   value: true
13518   mirror: always
13520 # Disallowed by default, ensure not disallowed content is loaded in the parent
13521 # process.
13522 - name: security.allow_unsafe_parent_loads
13523   type: bool
13524   value: false
13525   mirror: always
13527 # Pref to block mixed scripts (fonts, plugin content, scripts, stylesheets,
13528 # iframes, websockets, XHR).
13529 - name: security.mixed_content.block_active_content
13530   type: bool
13531   value: @IS_ANDROID@
13532   mirror: always
13534 # Pref to block sub requests that happen within an object.
13535 - name: security.mixed_content.block_object_subrequest
13536   type: bool
13537   value: false
13538   mirror: always
13540 # Pref for mixed display content blocking (images, audio, video).
13541 - name: security.mixed_content.block_display_content
13542   type: bool
13543   value: false
13544   mirror: always
13546 # Pref for mixed display content upgrading (images, audio, video).
13547 - name: security.mixed_content.upgrade_display_content
13548   type: bool
13549   value: @IS_NIGHTLY_BUILD@
13550   mirror: always
13552 # Whether strict file origin policy is in effect. "False" is traditional.
13553 - name: security.fileuri.strict_origin_policy
13554   type: RelaxedAtomicBool
13555   value: true
13556   mirror: always
13558 # The level to which we sandbox the content process. firefox.js sets the
13559 # default to different values on a per-OS basis, and has documentation
13560 # on what the defaults are and what the numbers mean.
13561 - name: security.sandbox.content.level
13562   type: int32_t
13563   value: 0
13564   mirror: always
13565   do_not_use_directly: true # Consumers should use SandboxSettings to ask.
13567 - name: security.sandbox.socket.process.level
13568   type: int32_t
13569   value: 0
13570   mirror: always
13571   do_not_use_directly: true # Consumers should use SandboxSettings to ask.
13573 # This controls the strength of the Windows GPU process sandbox.  Changes
13574 # will require restart.
13575 # For information on what the level number means, see
13576 # SetSecurityLevelForGPUProcess() in
13577 # security/sandbox/win/src/sandboxbroker/sandboxBroker.cpp
13578 - name: security.sandbox.gpu.level
13579   type: int32_t
13580 #if defined(XP_WIN)
13581   value: 1
13582 #else
13583   value: 0
13584 #endif
13585   mirror: always
13587 # Enrollment preferences for the win32k experiment, set and managed by Normandy
13588 - name: security.sandbox.content.win32k-experiment.enrollmentStatus
13589   type: uint32_t
13590   value: 0
13591   mirror: never
13593 - name: security.sandbox.content.win32k-experiment.startupEnrollmentStatus
13594   type: uint32_t
13595   value: 0
13596   mirror: never
13598 #if defined(XP_WIN) && defined(MOZ_SANDBOX)
13600   # Whether win32k is disabled for content processes.
13601   # true means win32k system calls are not permitted.
13602 -   name: security.sandbox.content.win32k-disable
13603     type: RelaxedAtomicBool
13604     value: true
13605     mirror: always
13607   # Note: win32k is currently _not_ disabled for GMP due to intermittent test
13608   # failures, where the GMP process fails very early. See bug 1449348.
13609 -   name: security.sandbox.gmp.win32k-disable
13610     type: RelaxedAtomicBool
13611     value: false
13612     mirror: always
13614   # Whether win32k is disabled for socket processes.
13615   # true means win32k system calls are not permitted.
13616 -   name: security.sandbox.socket.win32k-disable
13617     type: RelaxedAtomicBool
13618     value: true
13619     mirror: always
13621   # Whether CET User Shadow Stack compatible modules only is enabled for the
13622   # relevant process type.
13623 -   name: security.sandbox.content.shadow-stack.enabled
13624     type: RelaxedAtomicBool
13625     value: false
13626     mirror: always
13628 -   name: security.sandbox.rdd.shadow-stack.enabled
13629     type: RelaxedAtomicBool
13630     value: true
13631     mirror: always
13633 -   name: security.sandbox.socket.shadow-stack.enabled
13634     type: RelaxedAtomicBool
13635     value: true
13636     mirror: always
13638 -   name: security.sandbox.gpu.shadow-stack.enabled
13639     type: RelaxedAtomicBool
13640     value: true
13641     mirror: always
13643 -   name: security.sandbox.gmp.shadow-stack.enabled
13644     type: RelaxedAtomicBool
13645     value: true
13646     mirror: always
13648   # Whether a Low Privilege AppContainer (LPAC) is enabled for the relevant
13649   # process type.
13651 #if defined(MOZ_WMF_MEDIA_ENGINE)
13652 -   name: security.sandbox.utility-wmf-cdm.lpac.enabled
13653     type: RelaxedAtomicBool
13654     value: false
13655     mirror: always
13656 #endif
13658   # Whether Arbitrary Code Guard is enabled for the RDD process.
13659 -   name: security.sandbox.rdd.acg.enabled
13660     type: RelaxedAtomicBool
13661     value: true
13662     mirror: always
13664 #ifdef MOZ_WMF
13665   # Whether Arbitrary Code Guard is enabled for the utility WMF audio decoder
13666   # process.
13668 -   name: security.sandbox.utility-wmf.acg.enabled
13669     type: RelaxedAtomicBool
13670     value: true
13671     mirror: always
13672 #endif  // MOZ_WMF
13674   # This controls the depth of stack trace that is logged when Windows sandbox
13675   # logging is turned on. This is only currently available for the content
13676   # process because the only other sandbox (for GMP) has too strict a policy to
13677   # allow stack tracing. This does not require a restart to take effect.
13678 -   name: security.sandbox.windows.log.stackTraceDepth
13679     type: RelaxedAtomicUint32
13680     value: 0
13681     mirror: always
13682 #endif
13684 #if defined(XP_LINUX) && defined(MOZ_SANDBOX)
13685   # Run content processes in headless mode and disallow
13686   # connections to the X server.  Requires:
13687   # * `webgl.out-of-process` (or else WebGL breaks)
13688   # * `widget.non-native-theme.enabled` (scrollbars & form controls)
13689   # Changing it requires a restart because sandbox policy information
13690   # dependent on it is cached.  See bug 1640345 for details.
13691 - name: security.sandbox.content.headless
13692   type: bool
13693   value: true
13694   mirror: once
13695 #endif
13697 # Pref to show warning when submitting from secure to insecure.
13698 - name: security.warn_submit_secure_to_insecure
13699   type: bool
13700   value: true
13701   mirror: always
13703 # Hardware Origin-bound Second Factor Support
13704 - name: security.webauth.webauthn
13705   type: bool
13706   value: true
13707   mirror: always
13709 # Navigate-to CSP 3 directive
13710 - name: security.csp.enableNavigateTo
13711   type: bool
13712   value: false
13713   mirror: always
13715 # wasm-unsafe-eval source keyword
13716 - name: security.csp.wasm-unsafe-eval.enabled
13717   type: bool
13718   value: true
13719   mirror: always
13721 # unsafe-hashes source keyword
13722 - name: security.csp.unsafe-hashes.enabled
13723   type: bool
13724   value: true
13725   mirror: always
13727 # The script-src-attr and script-src-elem directive
13728 - name: security.csp.script-src-attr-elem.enabled
13729   type: bool
13730   value: true
13731   mirror: always
13733 # The style-src-attr and style-src-elem directive
13734 - name: security.csp.style-src-attr-elem.enabled
13735   type: bool
13736   value: true
13737   mirror: always
13739 - name: security.csp.external-hashes.enabled
13740   type: bool
13741   value: true
13742   mirror: always
13744 # WebAuthn CTAP2 support
13745 - name: security.webauthn.ctap2
13746   type: RelaxedAtomicBool
13747   value: true
13748   mirror: always
13749   rust: true
13751 # Dispatch WebAuthn requests to the software CTAP1 token.
13752 # (mutually exclusive with webauthn_enable_android_fido2,
13753 # and webauthn_enable_usbtoken)
13754 - name: security.webauth.webauthn_enable_softtoken
13755   type: RelaxedAtomicBool
13756   value: false
13757   mirror: always
13758   rust: true
13760 # Dispatch WebAuthn requests to the Android platform API
13761 - name: security.webauth.webauthn_enable_android_fido2
13762   type: RelaxedAtomicBool
13763   value: @IS_ANDROID@
13764   mirror: always
13766 # residentKey support when using Android platform API
13767 - name: security.webauthn.webauthn_enable_android_fido2.residentkey
13768   type: RelaxedAtomicBool
13769   value: false
13770   mirror: always
13772 # Dispatch WebAuthn requests to authenticator-rs
13773 - name: security.webauth.webauthn_enable_usbtoken
13774   type: RelaxedAtomicBool
13775   value: @IS_NOT_ANDROID@
13776   mirror: always
13777   rust: true
13779 # Skip direct attestation consent prompts (for tests).
13780 - name: security.webauth.webauthn_testing_allow_direct_attestation
13781   type: RelaxedAtomicBool
13782   value: false
13783   mirror: always
13785 # Block Worker/SharedWorker scripts with wrong MIME type.
13786 - name: security.block_Worker_with_wrong_mime
13787   type: bool
13788   value: true
13789   mirror: always
13791 # Block the execution of scripts using a wrong type as defined by the file extension
13792 # (OS) mapping when loaded via the file:// protocol.
13793 - name: security.block_fileuri_script_with_wrong_mime
13794   type: bool
13795   value: @IS_EARLY_BETA_OR_EARLIER@
13796   mirror: always
13798 # Cancel outgoing requests from SystemPrincipal:
13799 # but only with scheme http(s) and contentpolicytype subdocument
13800 - name: security.disallow_privileged_https_subdocuments_loads
13801   type: bool
13802   value: true
13803   mirror: always
13805 # but only with scheme data and contentpolicytype subdocument
13806 - name: security.disallow_privileged_data_subdocuments_loads
13807   type: bool
13808   value: true
13809   mirror: always
13811 # Cancel outgoing requests from SystemPrincipal:
13812 # but only with scheme http(s) and contentpolicytype stylesheet
13813 - name: security.disallow_privileged_https_stylesheet_loads
13814   type: bool
13815   value: true
13816   mirror: always
13818 # Cancel outgoing requests from SystemPrincipal:
13819 # but only with scheme http(s) and contentpolicytype script
13820 - name: security.disallow_privileged_https_script_loads
13821   type: bool
13822   value: true
13823   mirror: always
13825 # Cancel outgoing requests from SystemPrincipal:
13826 # where there is no finalURI.
13827 - name: security.disallow_privileged_no_finaluri_loads
13828   type: bool
13829   value: true
13830   mirror: always
13832 # Cancel outgoing requests from privileged about pages:
13833 # but only with scheme http(s) and contentpolicytype script
13834 - name: security.disallow_privilegedabout_remote_script_loads
13835   type: bool
13836   value: true
13837   mirror: always
13839 # Disable preloaded static key pins by default.
13840 - name: security.cert_pinning.enforcement_level
13841   type: RelaxedAtomicUint32
13842   value: 0
13843   mirror: always
13844   do_not_use_directly: true
13846 # OCSP fetching behavior:
13847 # 0: do not fetch OCSP
13848 # 1: fetch OCSP for DV and EV certificates
13849 # 2: fetch OCSP only for EV certificates
13850 - name: security.OCSP.enabled
13851   type: RelaxedAtomicUint32
13852 #ifdef ANDROID
13853   value: 2
13854 #else
13855   value: 1
13856 #endif
13857   mirror: always
13860 # Whether or not OCSP is required.
13861 # true => hard-fail (if an OCSP request times out, stop the connection)
13862 # false => soft-fail (if an OCSP request times out, continue the connection)
13863 - name: security.OCSP.require
13864   type: RelaxedAtomicBool
13865   value: false
13866   mirror: always
13868 # How many milliseconds to wait for an OCSP response before assuming it failed
13869 # (when fetching for soft-fail).
13870 - name: security.OCSP.timeoutMilliseconds.soft
13871   type: RelaxedAtomicUint32
13872 #ifdef RELEASE_OR_BETA
13873   value: 2000
13874 #else
13875   value: 1000
13876 #endif
13877   mirror: always
13879 # How many milliseconds to wait for an OCSP response before assuming it failed
13880 # (when fetching for hard-fail).
13881 - name: security.OCSP.timeoutMilliseconds.hard
13882   type: RelaxedAtomicUint32
13883   value: 10000
13884   mirror: always
13886 # Whether or not to enable OCSP must-staple (in other words, TLS-feature with
13887 # status request).
13888 - name: security.ssl.enable_ocsp_must_staple
13889   type: RelaxedAtomicBool
13890   value: true
13891   mirror: always
13893 # Whether or not to enable OCSP stapling.
13894 - name: security.ssl.enable_ocsp_stapling
13895   type: RelaxedAtomicBool
13896   value: true
13897   mirror: always
13899 # This is checked at startup to see if NSS should be initialized without the
13900 # user's certificate and key databases.
13901 - name: security.nocertdb
13902   type: bool
13903   value: false
13904   mirror: once
13906 # Whether or not to import and trust third party root certificates from the OS.
13907 - name: security.enterprise_roots.enabled
13908   type: RelaxedAtomicBool
13909   value: false
13910   mirror: always
13912 - name: security.intermediate_preloading_healer.enabled
13913   type: RelaxedAtomicBool
13914   value: @IS_NOT_ANDROID@
13915   mirror: always
13917 - name: security.intermediate_preloading_healer.timer_interval_ms
13918   type: RelaxedAtomicUint32
13919   value: 300000
13920   mirror: always
13922 # If true, attempt to load the osclientcerts PKCS#11 module at startup on a
13923 # background thread. This module allows Firefox to use client certificates
13924 # stored in OS certificate storage. Currently only available for Windows and
13925 # macOS.
13926 - name: security.osclientcerts.autoload
13927   type: RelaxedAtomicBool
13928   value: true
13929   mirror: always
13931 # If true, assume tokens accessed via osclientcerts implement RSA-PSS. If a
13932 # given token does not support RSA-PSS, users may see the error
13933 # 'SEC_ERROR_PKCS11_GENERAL_ERROR' if a server indicates it will accept an
13934 # RSA-PSS signature in the client's certificate verify message.
13935 # Setting this to false may allow such connections to succeed, if the server
13936 # also accepts RSA-PKCS1 signatures.
13937 - name: security.osclientcerts.assume_rsa_pss_support
13938   type: RelaxedAtomicBool
13939   value: true
13940   mirror: always
13942 - name: security.pki.cert_short_lifetime_in_days
13943   type: RelaxedAtomicUint32
13944   value: 10
13945   mirror: always
13947 # security.pki.netscape_step_up_policy controls how the platform handles the
13948 # id-Netscape-stepUp OID in extended key usage extensions of CA certificates.
13949 # 0: id-Netscape-stepUp is always considered equivalent to id-kp-serverAuth
13950 # 1: it is considered equivalent when the notBefore is before 23 August 2016
13951 # 2: similarly, but for 23 August 2015
13952 # 3: it is never considered equivalent
13953 - name: security.pki.netscape_step_up_policy
13954   type: RelaxedAtomicUint32
13955 #ifdef RELEASE_OR_BETA
13956   value: 1
13957 #else
13958   value: 2
13959 #endif
13960   mirror: always
13962 # Configures Certificate Transparency support mode:
13963 # 0: Fully disabled.
13964 # 1: Only collect telemetry. CT qualification checks are not performed.
13965 - name: security.pki.certificate_transparency.mode
13966   type: RelaxedAtomicUint32
13967   value: 0
13968   mirror: always
13970 # 0: Disable CRLite entirely.
13971 # 1: Consult CRLite but only collect telemetry.
13972 # 2: Consult CRLite and enforce both "Revoked" and "Not Revoked" results.
13973 # 3: Consult CRLite and enforce "Not Revoked" results, but defer to OCSP for "Revoked".
13974 - name: security.pki.crlite_mode
13975   type: RelaxedAtomicUint32
13976   value: 3
13977   mirror: always
13979 - name: security.tls.version.min
13980   type: RelaxedAtomicUint32
13981   value: 3
13982   mirror: always
13984 - name: security.tls.version.max
13985   type: RelaxedAtomicUint32
13986   value: 4
13987   mirror: always
13989 - name: security.tls.version.enable-deprecated
13990   type: RelaxedAtomicBool
13991   value: false
13992   mirror: always
13994 - name: security.tls.version.fallback-limit
13995   type: RelaxedAtomicUint32
13996   value: 4
13997   mirror: always
13999 # Turn off post-handshake authentication for TLS 1.3 by default,
14000 # until the incompatibility with HTTP/2 is resolved:
14001 # https://tools.ietf.org/html/draft-davidben-http2-tls13-00
14002 - name: security.tls.enable_post_handshake_auth
14003   type: RelaxedAtomicBool
14004   value: false
14005   mirror: always
14007 # Probability of GREASEing a TLS connection with ECH (0-100)
14008 # 0 means never GREASE, 100 means always GREASE
14009 - name: security.tls.ech.grease_probability
14010   type: RelaxedAtomicUint32
14011 #ifdef NIGHTLY_BUILD
14012   value: 100
14013 #else
14014   value: 0
14015 #endif
14016   mirror: always
14018 # Whether to apply ECH GREASE settings to HTTP3/QUIC connections
14019 - name: security.tls.ech.grease_http3
14020   type: RelaxedAtomicBool
14021   value: @IS_NIGHTLY_BUILD@
14022   mirror: always
14024 # Whether to retry connections without ECH Grease
14025 - name: security.tls.ech.disable_grease_on_fallback
14026   type: RelaxedAtomicBool
14027   value: @IS_NOT_NIGHTLY_BUILD@
14028   mirror: always
14030 # ECH GREASE Padding target (1-255)
14031 - name: security.tls.ech.grease_size
14032   type: RelaxedAtomicUint32
14033   value: 100
14034   mirror: always
14036 # Whether to apply GREASE settings to HTTP3/QUIC connections
14037 - name: security.tls.grease_http3_enable
14038   type: RelaxedAtomicBool
14039   value: false
14040   mirror: always
14041   rust: true
14043 - name: security.tls.hello_downgrade_check
14044   type: RelaxedAtomicBool
14045   value: true
14046   mirror: always
14048 - name: security.tls.enable_delegated_credentials
14049   type: RelaxedAtomicBool
14050   value: true
14051   mirror: always
14053 - name: security.tls.enable_0rtt_data
14054   type: RelaxedAtomicBool
14055   value: true
14056   mirror: always
14058 - name: security.ssl.treat_unsafe_negotiation_as_broken
14059   type: RelaxedAtomicBool
14060   value: false
14061   mirror: always
14063 - name: security.ssl.require_safe_negotiation
14064   type: RelaxedAtomicBool
14065   value: false
14066   mirror: always
14068 - name: security.ssl.enable_false_start
14069   type: RelaxedAtomicBool
14070   value: true
14071   mirror: always
14073 - name: security.ssl.enable_alpn
14074   type: RelaxedAtomicBool
14075   value: true
14076   mirror: always
14078 - name: security.ssl.disable_session_identifiers
14079   type: RelaxedAtomicBool
14080   value: false
14081   mirror: always
14083 - name: security.ssl3.ecdhe_rsa_aes_128_gcm_sha256
14084   type: RelaxedAtomicBool
14085   value: true
14086   mirror: always
14088 - name: security.ssl3.ecdhe_ecdsa_aes_128_gcm_sha256
14089   type: RelaxedAtomicBool
14090   value: true
14091   mirror: always
14093 - name: security.ssl3.ecdhe_ecdsa_chacha20_poly1305_sha256
14094   type: RelaxedAtomicBool
14095   value: true
14096   mirror: always
14098 - name: security.ssl3.ecdhe_rsa_chacha20_poly1305_sha256
14099   type: RelaxedAtomicBool
14100   value: true
14101   mirror: always
14103 - name: security.ssl3.ecdhe_ecdsa_aes_256_gcm_sha384
14104   type: RelaxedAtomicBool
14105   value: true
14106   mirror: always
14108 - name: security.ssl3.ecdhe_rsa_aes_256_gcm_sha384
14109   type: RelaxedAtomicBool
14110   value: true
14111   mirror: always
14113 - name: security.ssl3.ecdhe_rsa_aes_128_sha
14114   type: RelaxedAtomicBool
14115   value: true
14116   mirror: always
14118 - name: security.ssl3.ecdhe_ecdsa_aes_128_sha
14119   type: RelaxedAtomicBool
14120   value: @IS_NOT_EARLY_BETA_OR_EARLIER@
14121   mirror: always
14123 - name: security.ssl3.ecdhe_rsa_aes_256_sha
14124   type: RelaxedAtomicBool
14125   value: true
14126   mirror: always
14128 - name: security.ssl3.ecdhe_ecdsa_aes_256_sha
14129   type: RelaxedAtomicBool
14130   value: @IS_NOT_EARLY_BETA_OR_EARLIER@
14131   mirror: always
14133 - name: security.ssl3.dhe_rsa_aes_128_sha
14134   type: RelaxedAtomicBool
14135   value: false
14136   mirror: always
14138 - name: security.ssl3.dhe_rsa_aes_256_sha
14139   type: RelaxedAtomicBool
14140   value: false
14141   mirror: always
14143 - name: security.ssl3.rsa_aes_128_sha
14144   type: RelaxedAtomicBool
14145   value: true
14146   mirror: always
14148 - name: security.ssl3.rsa_aes_256_sha
14149   type: RelaxedAtomicBool
14150   value: true
14151   mirror: always
14153 - name: security.ssl3.rsa_aes_128_gcm_sha256
14154   type: RelaxedAtomicBool
14155   value: true
14156   mirror: always
14158 - name: security.ssl3.rsa_aes_256_gcm_sha384
14159   type: RelaxedAtomicBool
14160   value: true
14161   mirror: always
14163 - name: security.ssl3.deprecated.rsa_des_ede3_sha
14164   type: RelaxedAtomicBool
14165   value: true
14166   mirror: always
14168 - name: security.tls13.aes_128_gcm_sha256
14169   type: RelaxedAtomicBool
14170   value: true
14171   mirror: always
14173 - name: security.tls13.chacha20_poly1305_sha256
14174   type: RelaxedAtomicBool
14175   value: true
14176   mirror: always
14178 - name: security.tls13.aes_256_gcm_sha384
14179   type: RelaxedAtomicBool
14180   value: true
14181   mirror: always
14183 #---------------------------------------------------------------------------
14184 # Prefs starting with "signon."
14185 #---------------------------------------------------------------------------
14186 - name: signon.usernameOnlyForm.enabled
14187   type: bool
14188   value: true
14189   mirror: always
14191 #---------------------------------------------------------------------------
14192 # Prefs starting with "slider."
14193 #---------------------------------------------------------------------------
14195 # Scrollbar snapping region.
14196 # - 0: off
14197 # - 1 and higher: slider thickness multiple
14198 - name: slider.snapMultiplier
14199   type: int32_t
14200 #ifdef XP_WIN
14201   value: 6
14202 #else
14203   value: 0
14204 #endif
14205   mirror: always
14207 #---------------------------------------------------------------------------
14208 # Prefs starting with "storage."
14209 #---------------------------------------------------------------------------
14211 # Whether to use a non-exclusive VFS.
14212 # By default we use the unix-excl VFS, for the following reasons:
14213 # 1. It improves compatibility with NFS shares, whose implementation
14214 #    is incompatible with SQLite's locking requirements (reliable fcntl), and
14215 #    in particular with WAL journaling.
14216 #    Bug 433129 attempted to automatically identify such file-systems,
14217 #    but a reliable way was not found and the fallback locking is slower than
14218 #    POSIX locking, so we do not want to do it by default.
14219 # 2. It allows wal mode to avoid the memory mapped -shm file, reducing the
14220 #    likelihood of SIGBUS failures when disk space is exhausted.
14221 # 3. It provides some protection from third party database tampering while a
14222 #    connection is open.
14223 # Note there's no win32-excl VFS, so this has no effect on Windows.
14224 - name: storage.sqlite.exclusiveLock.enabled
14225   type: RelaxedAtomicBool
14226   value: @IS_NOT_ANDROID@
14227   mirror: always
14229 #---------------------------------------------------------------------------
14230 # Prefs starting with "svg."
14231 #---------------------------------------------------------------------------
14233 # This pref controls whether the 'context-fill' and 'context-stroke' keywords
14234 # can be used in SVG-as-an-image in the content processes to use the fill/
14235 # stroke specified on the element that embeds the image. (These keywords are
14236 # always enabled in the chrome process, regardless of this pref.) Also, these
14237 # keywords are currently not part of any spec, which is partly why we disable
14238 # them for web content.
14239 - name: svg.context-properties.content.enabled
14240   type: RelaxedAtomicBool
14241   value: false
14242   mirror: always
14244 # This pref controls whether the `prefers-color-scheme` value of SVG images
14245 # reacts to the embedder `color-scheme` in content.
14246 - name: svg.embedder-prefers-color-scheme.content.enabled
14247   type: RelaxedAtomicBool
14248   value: true
14249   mirror: always
14251 # Enables the 'context-fill' and 'context-stroke' keywords for particular
14252 # domains. We expect this list to be Mozilla-controlled properties, since the
14253 # 'context-*' keywords are not part of any spec. We expect to remove this
14254 # preference and the 'context-` keyword support entirely in the
14255 # not-too-distant future when a standardized alternative ships. This preference
14256 # is _not_ for allowing web content to use these keywords. For performance
14257 # reasons, the list of domains in this preference should remain short in
14258 # length.
14259 - name: svg.context-properties.content.allowed-domains
14260   type: String
14261   value: ""
14262   mirror: never
14264 # Is support for the new getBBox method from SVG 2 enabled?
14265 # See https://svgwg.org/svg2-draft/single-page.html#types-SVGBoundingBoxOptions
14266 - name: svg.new-getBBox.enabled
14267   type: bool
14268   value: false
14269   mirror: always
14271 # Whether SVGGraphicsElement.nearestViewportElement and SVGGraphicsElement.farthestViewportElement are enabled.
14272 - name: svg.nearestAndFarthestViewportElement.enabled
14273   type: bool
14274   value: @IS_NOT_EARLY_BETA_OR_EARLIER@
14275   mirror: always
14277 # Tweak which elements are allowed in <svg:use> subtrees, and in which
14278 # circumstances. See RemoveForbiddenNodes in SVGUseElement.cpp for the spec
14279 # text.
14281 # - 0: Don't restrict ever.
14282 # - 1: Restrict only cross-document.
14283 # - 2/other: restrict always.
14285 # We allow the behavior to be configurable via this pref. Our chosen default
14286 # value forbids non-graphical content in <svg:use> clones of cross-document
14287 # elements. This is a compromise between our more-permissive pre-existing
14288 # behavior (which SVG 2 seems to call for, and maps to pref value 0) and the
14289 # behavior of other UAs (which SVG 1.1 seems to call for, and maps to pref
14290 # value 2).
14291 - name: svg.use-element.graphics-element-restrictions
14292   type: int32_t
14293   value: 1
14294   mirror: always
14296 # Whether to restrict <svg:use> element recursion levels.
14298 # - 0: Don't restrict ever.
14299 # - 1: Restrict everywhere
14300 # - 2/other: Restrict only in the parent process.
14302 - name: svg.use-element.recursive-clone-limit.enabled
14303   type: int32_t
14304   value: 2
14305   mirror: always
14307 # What is the recursion limit for svg use element cloning if enabled.
14308 - name: svg.use-element.recursive-clone-limit
14309   type: uint32_t
14310   value: 8
14311   mirror: always
14313 #---------------------------------------------------------------------------
14314 # Prefs starting with "telemetry."
14315 #---------------------------------------------------------------------------
14317 - name: telemetry.number_of_site_origin.min_interval
14318   type: uint32_t
14319   value: 300000
14320   mirror: always
14322 - name: telemetry.fog.test.localhost_port
14323   type: RelaxedAtomicInt32
14324   value: 0
14325   mirror: always
14326   rust: true
14328 - name: telemetry.fog.test.activity_limit
14329   type: RelaxedAtomicUint32
14330   value: 120
14331   mirror: always
14332   rust: true
14334 - name: telemetry.fog.test.inactivity_limit
14335   type: RelaxedAtomicUint32
14336   value: 1200
14337   mirror: always
14338   rust: true
14340 - name: telemetry.fog.artifact_build
14341   type: RelaxedAtomicBool
14342   value: false
14343   mirror: always
14345 #---------------------------------------------------------------------------
14346 # Prefs starting with "test."
14347 #---------------------------------------------------------------------------
14349 - name: test.events.async.enabled
14350   type: RelaxedAtomicBool
14351   value: false
14352   mirror: always
14354 - name: test.mousescroll
14355   type: RelaxedAtomicBool
14356   value: false
14357   mirror: always
14359 #---------------------------------------------------------------------------
14360 # Prefs starting with "thread."
14361 #---------------------------------------------------------------------------
14363 # If control tasks aren't enabled, they get medium high priority.
14364 - name: threads.control_event_queue.enabled
14365   type: RelaxedAtomicBool
14366   value: true
14367   mirror: always
14369 # If the service is available, set threads to low-power mode when in the background.
14370 - name: threads.use_low_power.enabled
14371   type: RelaxedAtomicBool
14372   value: @IS_NIGHTLY_BUILD@
14373   mirror: always
14376 # If the process priority is set to background, put the main thread in the background.
14377 # Currently off by default.
14378 - name: threads.lower_mainthread_priority_in_background.enabled
14379   type: bool
14380   value: @IS_NIGHTLY_BUILD@
14381   mirror: always
14383 #---------------------------------------------------------------------------
14384 # Prefs starting with "timer."
14385 #---------------------------------------------------------------------------
14387 # Since our timestamp on macOS does not increment while the system is asleep, we
14388 # should ignore sleep/wake notifications to make timer thread process timers.
14389 - name: timer.ignore_sleep_wake_notifications
14390   type: RelaxedAtomicBool
14391 #ifdef XP_MACOSX
14392   value: true
14393 #else
14394   value: false
14395 #endif
14396   mirror: always
14398 # Amount of time by which it is always acceptable to delay the firing of a timer.
14399 # Any timer may be delayed by up to this amount in order to enable timers to be
14400 # bundled together for efficiency.
14401 - name: timer.minimum_firing_delay_tolerance_ms
14402   type: AtomicFloat
14403   value: 1.0
14404   mirror: always
14406 # Maximum amount of time by which it is ever acceptable to delay the firing of a timer.
14407 # Setting this to zero will effectively disable timer coalescing.
14408 - name: timer.maximum_firing_delay_tolerance_ms
14409   type: AtomicFloat
14410   value: 10000.0
14411   mirror: always
14413 #---------------------------------------------------------------------------
14414 # Prefs starting with "toolkit."
14415 #---------------------------------------------------------------------------
14417 # Makes removeDirectory background task wait for the given milliseconds before removal.
14418 - name: toolkit.background_tasks.remove_directory.testing.sleep_ms
14419   type: RelaxedAtomicUint32
14420   value: 0
14421   mirror: always
14423 # Returns true if BHR is disabled.
14424 - name: toolkit.content-background-hang-monitor.disabled
14425   type: bool
14426   value: false
14427   mirror: always
14429 - name: toolkit.scrollbox.smoothScroll
14430   type: RelaxedAtomicBool
14431   value: true
14432   mirror: always
14434 - name: toolkit.scrollbox.horizontalScrollDistance
14435   type: RelaxedAtomicInt32
14436   value: 5
14437   mirror: always
14439 - name: toolkit.scrollbox.verticalScrollDistance
14440   type: RelaxedAtomicInt32
14441   value: 3
14442   mirror: always
14444 # The lateWriteChecksStage and fastShutdownStage below represent the stage
14445 # of shutdown after which we (for lateWriteChecksStage) crash / gather
14446 # telemetry data on file writes, or (for fastShutdownStage) we call _exit(0).
14447 # Higher values are earlier during shutdown, and the full enumeration can
14448 # be found in AppShutdown.h in the AppShutdownPhase enum.
14449 - name: toolkit.shutdown.lateWriteChecksStage
14450   type: int32_t
14451 #ifdef MOZ_CODE_COVERAGE
14452   value: 0
14453 #else
14454   value: 2
14455 #endif
14456   mirror: always
14458 # See the comment above toolkit.shutdown.lateWriteChecksStage. A higher value
14459 # for this pref means we call _exit(0) earlier during shutdown.
14460 - name: toolkit.shutdown.fastShutdownStage
14461   type: int32_t
14462 #if !defined(DEBUG) && !defined(MOZ_ASAN) && !defined(MOZ_TSAN) && !defined(MOZ_CODE_COVERAGE) && !defined(MOZ_VALGRIND) && !defined(MOZ_PROFILE_GENERATE) && !defined(JS_STRUCTURED_SPEW)
14463   value: 1
14464 #else
14465   value: 0
14466 #endif
14467   mirror: always
14469 # Sending each remote accumulation immediately places undue strain on the IPC
14470 # subsystem. Batch the remote accumulations for a period of time before sending
14471 # them all at once. This value was chosen as a balance between data timeliness
14472 # and performance (see bug 1218576).
14473 - name: toolkit.telemetry.ipcBatchTimeout
14474   type: uint32_t
14475   value: 2000
14476   mirror: always
14478 - name: toolkit.telemetry.geckoview.batchDurationMS
14479   type: RelaxedAtomicUint32
14480   value: 5000
14481   mirror: always
14483 - name: toolkit.telemetry.geckoview.maxBatchStalenessMS
14484   type: RelaxedAtomicUint32
14485   value: 60000
14486   mirror: always
14488 - name: toolkit.telemetry.geckoview.streaming
14489   type: RelaxedAtomicBool
14490   value: false
14491   mirror: always
14493 - name: toolkit.telemetry.testing.overrideProductsCheck
14494   type: RelaxedAtomicBool
14495   value: false
14496   mirror: always
14498 #---------------------------------------------------------------------------
14499 # Prefs starting with "ui."
14500 #---------------------------------------------------------------------------
14502 - name: ui.key.generalAccessKey
14503   type: int32_t
14504   value: -1
14505   mirror: always
14507 # Use 17 for Ctrl, 18 for Alt, 91 or 224 for Meta, 0 for none.
14508 - name: ui.key.accelKey
14509   type: uint32_t
14510 #ifdef XP_MACOSX
14511   value: 224
14512 #else
14513   value: 17
14514 #endif
14515   mirror: always
14517 # See above for the key codes to use.
14518 - name: ui.key.menuAccessKey
14519   type: uint32_t
14520 #ifdef XP_MACOSX
14521   value: 0
14522 #else
14523   value: 18
14524 #endif
14525   mirror: always
14527 # Only used if generalAccessKey is -1.
14528 - name: ui.key.chromeAccess
14529   type: int32_t
14530 #ifdef XP_MACOSX
14531   # 0 = disabled, 1 = Shift, 2 = Ctrl, 4 = Alt, 3 =  ctrl+shift, 8 = Meta
14532   value: 2
14533 #else
14534   # 0 = disabled, 1 = Shift, 2 = Ctrl, 4 = Alt, 5 =  Alt+Shift, 8 = Win
14535   value: 4
14536 #endif
14537   mirror: always
14539 # Only used if generalAccessKey is -1.
14540 - name: ui.key.contentAccess
14541   type: int32_t
14542 #ifdef XP_MACOSX
14543   # 0 = disabled, 1 = Shift, 2 = Ctrl, 4 = Alt, 3 = ctrl+shift, 8 = Meta
14544   value: 6
14545 #else
14546   # 0 = disabled, 1 = Shift, 2 = Ctrl, 4 = Alt, 5 =  Alt+Shift, 8 = Win
14547   value: 5
14548 #endif
14549   mirror: always
14551 # Does the access key by itself focus the menu bar?
14552 - name: ui.key.menuAccessKeyFocuses
14553   type: bool
14554 #if defined(XP_WIN) || defined(MOZ_WIDGET_GTK)
14555   # On Windows and Linux, we now default to showing the menu bar only when alt
14556   # is pressed.
14557   value: true
14558 #else
14559   value: false
14560 #endif
14561   mirror: always
14563 # Whether native key bindings in the environment or builtin shortcut key
14564 # definitions in Gecko are used first in <input> and <textarea>
14565 - name: ui.key.textcontrol.prefer_native_key_bindings_over_builtin_shortcut_key_definitions
14566   type: bool
14567   value: true
14568   mirror: always
14570 #ifdef MOZ_WIDGET_GTK
14571 # Only GtkTextView (native multiline text viewer/editor) supports "select-all"
14572 # signal so that we cannot know "select-all" key bindings only with GtkEntry.
14573 # When this pref is set to true, if a key combination does not cause any
14574 # signals in GtkEntry, try to check the key combination is mapped to
14575 # "select-all" in GtkTextView or not.  If it's mapped to other commands, they
14576 # are just ignored.
14577 - name: ui.key.use_select_all_in_single_line_editor
14578   type: bool
14579   value: true
14580   mirror: always
14581 #endif
14583 # Duration of timeout of incremental search in menus (ms).  0 means infinite.
14584 - name: ui.menu.incremental_search.timeout
14585   type: uint32_t
14586   value: 1000
14587   mirror: always
14589 # If true, all popups won't hide automatically on blur
14590 - name: ui.popup.disable_autohide
14591   type: RelaxedAtomicBool
14592   value: false
14593   mirror: always
14595 # Negate scroll, true will make the mouse scroll wheel move the screen the
14596 # same direction as with most desktops or laptops.
14597 - name: ui.scrolling.negate_wheel_scroll
14598   type: RelaxedAtomicBool
14599   value: @IS_ANDROID@
14600   mirror: always
14602 # If the user puts a finger down on an element and we think the user might be
14603 # executing a pan gesture, how long do we wait before tentatively deciding the
14604 # gesture is actually a tap and activating the target element?
14605 - name: ui.touch_activation.delay_ms
14606   type: int32_t
14607   value: 100
14608   mirror: always
14610 # If the user has clicked an element, how long do we keep the :active state
14611 # before it is cleared by the mouse sequences fired after a
14612 # touchstart/touchend.
14613 - name: ui.touch_activation.duration_ms
14614   type: int32_t
14615   value: 10
14616   mirror: always
14618 # Prevent system colors from being exposed to CSS or canvas.
14619 - name: ui.use_standins_for_native_colors
14620   type: RelaxedAtomicBool
14621   value: false
14622   mirror: always
14624 # Disable page loading activity cursor by default.
14625 - name: ui.use_activity_cursor
14626   type: bool
14627   value: false
14628   mirror: always
14630 # Whether context menus should only appear on mouseup instead of mousedown,
14631 # on OSes where they normally appear on mousedown (macOS, *nix).
14632 # Note: ignored on Windows (context menus always use mouseup).
14633 - name: ui.context_menus.after_mouseup
14634   type: bool
14635   value: false
14636   mirror: always
14638 # Whether click-hold context menus are enabled.
14639 - name: ui.click_hold_context_menus
14640   type: RelaxedAtomicBool
14641   value: false
14642   mirror: always
14644 # How long to wait for a drag gesture before displaying click-hold context menu,
14645 # in milliseconds.
14646 - name: ui.click_hold_context_menus.delay
14647   type: RelaxedAtomicInt32
14648   value: 500
14649   mirror: always
14651 # When enabled, the touch.radius and mouse.radius prefs allow events to be
14652 # dispatched to nearby elements that are sensitive to the event. See
14653 # PositionedEventTargeting.cpp. The 'mm' prefs define a rectangle around the
14654 # nominal event target point within which we will search for suitable elements.
14655 # 'visitedWeight' is a percentage weight; a value > 100 makes a visited link be
14656 # treated as further away from the event target than it really is, while a
14657 # value < 100 makes a visited link be treated as closer to the event target
14658 # than it really is.
14660 - name: ui.touch.radius.enabled
14661   type: bool
14662   value: @IS_ANDROID@
14663   mirror: always
14665 - name: ui.touch.radius.topmm
14666   type: uint32_t
14667 #ifdef ANDROID
14668   value: 2
14669 #else
14670   value: 12
14671 #endif
14672   mirror: always
14674 - name: ui.touch.radius.rightmm
14675   type: uint32_t
14676 #ifdef ANDROID
14677   value: 3
14678 #else
14679   value: 8
14680 #endif
14681   mirror: always
14683 - name: ui.touch.radius.bottommm
14684   type: uint32_t
14685 #ifdef ANDROID
14686   value: 2
14687 #else
14688   value: 4
14689 #endif
14690   mirror: always
14692 - name: ui.touch.radius.leftmm
14693   type: uint32_t
14694 #ifdef ANDROID
14695   value: 3
14696 #else
14697   value: 8
14698 #endif
14699   mirror: always
14701 - name: ui.touch.radius.visitedWeight
14702   type: uint32_t
14703   value: 120
14704   mirror: always
14706 - name: ui.mouse.radius.enabled
14707   type: bool
14708   value: @IS_ANDROID@
14709   mirror: always
14711 - name: ui.mouse.radius.topmm
14712   type: uint32_t
14713 #ifdef ANDROID
14714   value: 2
14715 #else
14716   value: 12
14717 #endif
14718   mirror: always
14720 - name: ui.mouse.radius.rightmm
14721   type: uint32_t
14722 #ifdef ANDROID
14723   value: 3
14724 #else
14725   value: 8
14726 #endif
14727   mirror: always
14729 - name: ui.mouse.radius.bottommm
14730   type: uint32_t
14731 #ifdef ANDROID
14732   value: 2
14733 #else
14734   value: 4
14735 #endif
14736   mirror: always
14738 - name: ui.mouse.radius.leftmm
14739   type: uint32_t
14740 #ifdef ANDROID
14741   value: 3
14742 #else
14743   value: 8
14744 #endif
14745   mirror: always
14747 - name: ui.mouse.radius.visitedWeight
14748   type: uint32_t
14749   value: 120
14750   mirror: always
14752 - name: ui.mouse.radius.reposition
14753   type: bool
14754   value: @IS_ANDROID@
14755   mirror: always
14757 # When true, the ui.mouse.radius.* prefs will only affect simulated mouse
14758 # events generated by touch input. When false, the prefs will be used for all
14759 # mouse events.
14760 - name: ui.mouse.radius.inputSource.touchOnly
14761   type: bool
14762   value: true
14763   mirror: always
14765 #---------------------------------------------------------------------------
14766 # Prefs starting with "urlclassifier."
14767 #---------------------------------------------------------------------------
14769 # Update server response timeout for Safe Browsing.
14770 - name: urlclassifier.update.response_timeout_ms
14771   type: uint32_t
14772   value: 30000
14773   mirror: always
14775 # Download update timeout for Safe Browsing.
14776 - name: urlclassifier.update.timeout_ms
14777   type: uint32_t
14778   value: 90000
14779   mirror: always
14781 #---------------------------------------------------------------------------
14782 # Prefs starting with "view_source."
14783 #---------------------------------------------------------------------------
14785 - name: view_source.editor.external
14786   type: bool
14787   value: false
14788   mirror: always
14790 - name: view_source.wrap_long_lines
14791   type: bool
14792   value: @IS_ANDROID@
14793   mirror: always
14795 - name: view_source.syntax_highlight
14796   type: bool
14797   value: true
14798   mirror: always
14800 - name: view_source.tab_size
14801   type: int32_t
14802   value: 4
14803   mirror: always
14805 #---------------------------------------------------------------------------
14806 # Prefs starting with "webgl." (for pref access from Worker threads)
14807 #---------------------------------------------------------------------------
14809 - name: webgl.1.allow-core-profiles
14810   type: RelaxedAtomicBool
14811 #ifdef XP_MACOSX
14812   value: true
14813 #else
14814   value: false
14815 #endif
14816   mirror: always
14818 - name: webgl.angle.force-d3d11
14819   type: RelaxedAtomicBool
14820   value: false
14821   mirror: always
14823 - name: webgl.angle.try-d3d11
14824   type: RelaxedAtomicBool
14825 #ifdef XP_WIN
14826   value: true
14827 #else
14828   value: false
14829 #endif
14830   mirror: always
14832 - name: webgl.angle.force-warp
14833   type: RelaxedAtomicBool
14834   value: false
14835   mirror: always
14837 - name: webgl.auto-flush
14838   type: RelaxedAtomicBool
14839   value: true
14840   mirror: always
14842 - name: webgl.auto-flush.gl
14843   type: RelaxedAtomicBool
14844   value: false
14845   mirror: always
14847 - name: webgl.can-lose-context-in-foreground
14848   type: RelaxedAtomicBool
14849   value: true
14850   mirror: always
14852 - name: webgl.cgl.multithreaded
14853   type: RelaxedAtomicBool
14854   value: true
14855   mirror: always
14857 - name: webgl.colorspaces.prototype
14858   type: RelaxedAtomicBool
14859   value: false
14860   mirror: always
14862 - name: webgl.debug.incomplete-tex-color
14863   type: RelaxedAtomicUint32
14864   value: 0
14865   mirror: always
14867 - name: webgl.default-antialias
14868   type: RelaxedAtomicBool
14869   value: @IS_NOT_ANDROID@
14870   mirror: always
14872 - name: webgl.default-no-alpha
14873   type: RelaxedAtomicBool
14874   value: false
14875   mirror: always
14877 - name: webgl.disable-angle
14878   type: RelaxedAtomicBool
14879   value: false
14880   mirror: always
14882 - name: webgl.disable-wgl
14883   type: RelaxedAtomicBool
14884   value: false
14885   mirror: always
14887 - name: webgl.dxgl.enabled
14888   type: RelaxedAtomicBool
14889 #ifdef XP_WIN
14890   value: true
14891 #else
14892   value: false
14893 #endif
14894   mirror: always
14896 - name: webgl.dxgl.needs-finish
14897   type: RelaxedAtomicBool
14898   value: false
14899   mirror: always
14901 - name: webgl.disable-fail-if-major-performance-caveat
14902   type: RelaxedAtomicBool
14903   value: true
14904   mirror: always
14906 - name: webgl.disable-DOM-blit-uploads
14907   type: RelaxedAtomicBool
14908 #if defined(MOZ_AARCH64) && defined(XP_MACOSX)
14909   value: true
14910 #else
14911   value: false
14912 #endif
14913   mirror: always
14915 - name: webgl.disabled
14916   type: RelaxedAtomicBool
14917   value: false
14918   mirror: always
14920 - name: webgl.enable-debug-renderer-info
14921   type: RelaxedAtomicBool
14922   value: true
14923   mirror: always
14925 - name: webgl.enable-draft-extensions
14926   type: RelaxedAtomicBool
14927   value: false
14928   mirror: always
14930 - name: webgl.enable-privileged-extensions
14931   type: RelaxedAtomicBool
14932   value: false
14933   mirror: always
14935 - name: webgl.enable-renderer-query
14936   type: RelaxedAtomicBool
14937   value: true
14938   mirror: always
14940 - name: webgl.enable-surface-texture
14941   type: RelaxedAtomicBool
14942   value: true
14943   mirror: always
14945 - name: webgl.enable-webgl2
14946   type: RelaxedAtomicBool
14947   value: true
14948   mirror: always
14950 - name: webgl.fake-verts.max
14951   type: RelaxedAtomicUint32
14952   value: 10*1000*1000  # 10M as vec4 is count*4*4 = 160MB
14953   mirror: always
14955 # Only works on Mac for now.
14956 - name: webgl.forbid-hardware
14957   type: RelaxedAtomicBool
14958   value: false
14959   mirror: always
14961 # Only works on Mac for now.
14962 - name: webgl.forbid-software
14963   type: RelaxedAtomicBool
14964   value: true  # It's generally better to encourage fallback to e.g. canvas2d.
14965   mirror: always
14967 - name: webgl.force-enabled
14968   type: RelaxedAtomicBool
14969   value: false
14970   mirror: always
14972 - name: webgl.force-index-validation
14973   type: RelaxedAtomicInt32
14974   value: 0
14975   mirror: always
14977 - name: webgl.lose-context-on-memory-pressure
14978   type: RelaxedAtomicBool
14979   value: false
14980   mirror: always
14982 - name: webgl.max-contexts
14983   type: RelaxedAtomicUint32
14984   value: 1000
14985   mirror: always
14987 - name: webgl.max-contexts-per-principal
14988   type: RelaxedAtomicUint32
14989   value: 300
14990   mirror: always
14992 - name: webgl.max-size-per-texture-mib
14993   type: RelaxedAtomicUint32
14994   value: 1024
14995   mirror: always
14997 - name: webgl.max-vert-ids-per-draw
14998   type: RelaxedAtomicUint32
14999   value: 30*1000*1000
15000   mirror: always
15002 - name: webgl.max-warnings-per-context
15003   type: RelaxedAtomicUint32
15004   value: 32
15005   mirror: always
15007 - name: webgl.min_capability_mode
15008   type: RelaxedAtomicBool
15009   value: false
15010   mirror: always
15012 - name: webgl.msaa-force
15013   type: RelaxedAtomicBool
15014   value: false
15015   mirror: always
15017 - name: webgl.msaa-samples
15018   type: RelaxedAtomicUint32
15019   value: 4
15020   mirror: always
15022 - name: webgl.out-of-process
15023   type: RelaxedAtomicBool
15024 # (When reading the next line, know that preprocessor.py doesn't
15025 # understand parentheses, but && is higher precedence than ||.)
15026   value: true
15027   mirror: always
15029 - name: webgl.out-of-process.worker
15030   type: RelaxedAtomicBool
15031 # (When reading the next line, know that preprocessor.py doesn't
15032 # understand parentheses, but && is higher precedence than ||.)
15033   value: true
15034   mirror: always
15036 - name: webgl.out-of-process.force
15037   type: RelaxedAtomicBool
15038   value: false
15039   mirror: always
15041 - name: webgl.out-of-process.shmem-size
15042   type: RelaxedAtomicUint32
15043   value: 100000 # 100KB
15044   mirror: always
15046 - name: webgl.out-of-process.async-present
15047   type: RelaxedAtomicBool
15048   value: true
15049   mirror: always
15051 # Forces async present to wait for a sync, even while using remote textures.
15052 - name: webgl.out-of-process.async-present.force-sync
15053   type: RelaxedAtomicBool
15054   value: false
15055   mirror: always
15057 #if defined(MOZ_WIDGET_ANDROID)
15058 - name: webgl.out-of-process.enable-ahardwarebuffer
15059   type: bool
15060   value: false
15061   mirror: once
15062 #endif
15064 # Override the blocklist to assume that GL is threadsafe.
15065 - name: webgl.threadsafe-gl.force-enabled
15066   type: bool
15067   value: false
15068   mirror: once
15070 # Override the blocklist to assume that GL is not threadsafe.
15071 - name: webgl.threadsafe-gl.force-disabled
15072   type: bool
15073   value: false
15074   mirror: once
15076 - name: webgl.use-canvas-render-thread
15077   type: bool
15078   value: true
15079   mirror: once
15081 - name: webgl.override-unmasked-renderer
15082   type: DataMutexString
15083   value: ""
15084   mirror: always
15086 - name: webgl.override-unmasked-vendor
15087   type: DataMutexString
15088   value: ""
15089   mirror: always
15091 - name: webgl.power-preference-override
15092   type: RelaxedAtomicInt32
15093   value: 0
15094   mirror: always
15096 - name: webgl.prefer-16bpp
15097   type: RelaxedAtomicBool
15098   value: false
15099   mirror: always
15101 - name: webgl.sanitize-unmasked-renderer
15102   type: RelaxedAtomicBool
15103   value: true
15104   mirror: always
15106 - name: webgl.allow-immediate-queries
15107   type: RelaxedAtomicBool
15108   value: false
15109   mirror: always
15111 - name: webgl.allow-fb-invalidation
15112   type: RelaxedAtomicBool
15113   value: false
15114   mirror: always
15117 - name: webgl.perf.max-warnings
15118   type: RelaxedAtomicInt32
15119   value: 0
15120   mirror: always
15122 - name: webgl.perf.max-acceptable-fb-status-invals
15123   type: RelaxedAtomicInt32
15124   value: 0
15125   mirror: always
15127 - name: webgl.perf.spew-frame-allocs
15128   type: RelaxedAtomicBool
15129   value: true
15130   mirror: always
15132 #---------------------------------------------------------------------------
15133 # Prefs starting with "widget."
15134 #---------------------------------------------------------------------------
15136 # Global user preference for disabling native theme in content processes.
15138 # NOTE(emilio): When changing this make sure to update the non_native_theme
15139 # entry in python/mozbuild/mozbuild/mozinfo.py and test_fission_autostart.py
15140 - name: widget.non-native-theme.enabled
15141   type: RelaxedAtomicBool
15142   value: true
15143   mirror: always
15145 # Whether the non-native theme should always use system colors. Useful mostly
15146 # for testing forced colors mode.
15147 - name: widget.non-native-theme.always-high-contrast
15148   type: RelaxedAtomicBool
15149   value: false
15150   mirror: always
15152 # The style of scrollbars to use. Here are the current options:
15154 #   0: Default platform scrollbar style.
15155 #   1: macOS scrollbars
15156 #   2: GTK scrollbars
15157 #   3: Android scrollbars
15158 #   4: Windows 10 scrollbars
15159 #   5: Windows 11 scrollbars
15161 # Note that switching to non-default scrollbars is experimental and other
15162 # scrollbar-related prefs may interfere with the experience. For example,
15163 # setting the GTK thumb size may have no effect when using non-GTK scrollbars
15164 # on GTK.
15165 - name: widget.non-native-theme.scrollbar.style
15166   type: uint32_t
15167   value: 0
15168   mirror: always
15170 # An override that allows to override the default platform size. The size in CSS
15171 # pixels at full zoom of the minimum scrollbar width.
15172 - name: widget.non-native-theme.scrollbar.size.override
15173   type: uint32_t
15174   value: 0
15175   mirror: always
15177 # Whether we should use themed values for dark scrollbars.
15178 - name: widget.non-native-theme.scrollbar.dark-themed
15179   type: RelaxedAtomicBool
15180   value: true
15181   mirror: always
15183 # Whether the active thumb color should always use the themed colors, even if
15184 # dark scrollbars are in use.
15185 - name: widget.non-native-theme.scrollbar.active-always-themed
15186   type: RelaxedAtomicBool
15187   value: true
15188   mirror: always
15190 # Whether we use the Windows CSS scrollbar sizes, or the scrollbar sizes
15191 # defined above.
15192 - name: widget.non-native-theme.win.scrollbar.use-system-size
15193   type: bool
15194   value: true
15195   mirror: always
15197 # Whether Windows 11 scrollbars are always drawn with the thinner "overlay"
15198 # scrollbar style.
15199 - name: widget.non-native-theme.win11.scrollbar.force-overlay-style
15200   type: bool
15201   value: false
15202   mirror: always
15204 # The amount of space that the thumb should fill the scrollbar, from zero to
15205 # one.
15206 - name: widget.non-native-theme.gtk.scrollbar.thumb-size
15207   type: float
15208   value: 0.75
15209   mirror: always
15211 # The minimum size of the scroll thumb, in the scrollbar direction.
15212 - name: widget.non-native-theme.gtk.scrollbar.thumb-cross-size
15213   type: uint32_t
15214   value: 40
15215   mirror: always
15217 # Whether the thumb should be rounded for the non-native scrollbars.
15218 - name: widget.non-native-theme.gtk.scrollbar.round-thumb
15219   type: bool
15220   value: true
15221   mirror: always
15223 # Whether buttons shouldn't be suppressed for non-native scrollbars.
15224 - name: widget.non-native-theme.gtk.scrollbar.allow-buttons
15225   type: bool
15226   value: false
15227   mirror: always
15229 # Whether we should use the default accent color or the theme-provided one for
15230 # content (e.g. for form controls and CSS system colors).
15232 # Turned off on Windows, for now (we always use the default blue-ish
15233 # accent-color there). We might want to turn this on there, though it's worth
15234 # thinking on what the behavior should be for grey-ish accent colors (which are
15235 # a thing on Windows and can cause confusion with things like disabled form
15236 # controls). Maybe it's just fine.
15237 - name: widget.non-native-theme.use-theme-accent
15238   type: RelaxedAtomicBool
15239 #ifdef XP_WIN
15240   value: false
15241 #else
15242   value: true
15243 #endif
15244   mirror: always
15246 # Whether we should try to use WebRender to render widgets.
15247 - name: widget.non-native-theme.webrender
15248   type: bool
15249 #if defined(XP_MACOSX)
15250   # Disabled on macOS release / beta because of a suspected AMD driver bug (see
15251   # bug 1715452).
15252   value: @IS_NIGHTLY_BUILD@
15253 #else
15254   value: true
15255 #endif
15256   mirror: always
15258 # Whether the outline style should be one big stroke or two contrasting strokes
15259 - name: widget.non-native-theme.solid-outline-style
15260   type: bool
15261   value: false
15262   mirror: always
15264 # Preference to disable dark scrollbar implementation.
15265 # This is mainly for testing because dark scrollbars have to be semi-
15266 # transparent, but many reftests expect scrollbars to look identical
15267 # among different backgrounds.
15268 # However, some users may want to disable this as well.
15269 - name: widget.disable-dark-scrollbar
15270   type: bool
15271   value: false
15272   mirror: always
15274 - name: widget.window-transforms.disabled
15275   type: RelaxedAtomicBool
15276   value: false
15277   mirror: always
15279 #ifdef XP_MACOSX
15281 # Whether to shift by the menubar height on fullscreen mode.
15282 # 0: never
15283 # 1: always
15284 # 2: auto (tries to detect when it is needed)
15285 - name: widget.macos.shift-by-menubar-on-fullscreen
15286   type: RelaxedAtomicUint32
15287   value: 2
15288   mirror: always
15290 - name: widget.macos.native-context-menus
15291   type: RelaxedAtomicBool
15292   value: true
15293   mirror: always
15294 #endif
15296 # Whether native GTK context menus are enabled.
15297 # Disabled because at the very least there's missing custom icon support.
15298 - name: widget.gtk.native-context-menus
15299   type: RelaxedAtomicBool
15300   value: false
15301   mirror: always
15303 # Whether we use overlay scrollbars on GTK.
15304 - name: widget.gtk.overlay-scrollbars.enabled
15305   type: RelaxedAtomicBool
15306   value: true
15307   mirror: always
15309 # Whether we honor the scrollbar colors from the gtk theme.
15310 - name: widget.gtk.theme-scrollbar-colors.enabled
15311   type: bool
15312   value: true
15313   mirror: always
15315 # Whether selection colors for the non-system theme get passed from the system
15316 # GTK theme.
15317 - name: widget.gtk.alt-theme.selection
15318   type: bool
15319   value: true
15320   mirror: always
15322 # Whether form control accent colors for the non-system theme get passed from
15323 # the system GTK theme.
15324 - name: widget.gtk.alt-theme.accent
15325   type: bool
15326   value: true
15327   mirror: always
15329 # Whether the scrollbar thumb active color from the non-system theme gets
15330 # passed from the system GTK theme.
15331 - name: widget.gtk.alt-theme.scrollbar_active
15332   type: bool
15333   value: true
15334   mirror: always
15336 # Whether we should try to grab the pointer on popups.
15337 #  0: Never
15338 #  1: Always
15339 #  2: Auto (depending on the system)
15340 - name: widget.gtk.grab-pointer
15341   type: int32_t
15342   value: 2
15343   mirror: always
15345 # Whether we should try ignore bogus leave-notify events from the window
15346 # manager.
15347 #  0: Never
15348 #  1: Always
15349 #  2: Auto (depending on the system)
15350 - name: widget.gtk.ignore-bogus-leave-notify
15351   type: int32_t
15352   value: 2
15353   mirror: always
15355 # Whether to use gtk high contrast themes to disable content styling like on
15356 # windows high contrast mode.
15357 - name: widget.content.gtk-high-contrast.enabled
15358   type: bool
15359   value: true
15360   mirror: always
15362 #ifdef MOZ_WAYLAND
15363 - name: widget.wayland.fractional-scale.enabled
15364   type: bool
15365   value: false
15366   mirror: once
15368 # Use opaque region for MozContainer wl_surface
15369 - name: widget.wayland.opaque-region.enabled
15370   type: bool
15371   value: true
15372   mirror: once
15374 # Use frame callback based vsync
15375 - name: widget.wayland.vsync.enabled
15376   type: bool
15377   value: true
15378   mirror: once
15380 # Whether to keep firing vsync at layout.throttled_frame_rate after we've been
15381 # occluded.
15382 - name: widget.wayland.vsync.keep-firing-at-idle
15383   type: bool
15384   value: false
15385   mirror: always
15386 #endif
15388 #ifdef MOZ_WIDGET_GTK
15389 # Whether to override the DMABuf blocklist.
15390 - name: widget.dmabuf.force-enabled
15391   type: bool
15392   value: false
15393   mirror: once
15395 #ifdef NIGHTLY_BUILD
15396 # Keep those pref hidden on non-nightly builds to avoid people accidentally
15397 # turning it on.
15399 # Use DMABuf for content textures.
15400 # For testing purposes only.
15401 - name: widget.dmabuf-textures.enabled
15402   type: RelaxedAtomicBool
15403   value: false
15404   mirror: always
15405 #endif
15407 # Use DMABuf backend for WebGL.
15408 - name: widget.dmabuf-webgl.enabled
15409   type: RelaxedAtomicBool
15410   value: true
15411   mirror: always
15413 # Use gdk_window_move_to_rect to move Wayland popups when available.
15414 - name: widget.wayland.use-move-to-rect
15415   type: bool
15416   value: true
15417   mirror: once
15419 # The time we should spend on a DBUS call to the FileManager1 interface before
15420 # giving up and trying an alternative method.
15422 # -1 for the default system timeout, INT_MAX for "infinite time".
15424 # This happens right now on the main thread so 1 second should be enough, we
15425 # should consider moving it to a background task and just use the default
15426 # timeout.
15427 - name: widget.gtk.file-manager-show-items-timeout-ms
15428   type: int32_t
15429   value: 1000
15430   mirror: always
15432 # The timeout we should spend on a DBUS call to the Settings proxy before
15433 # giving up.
15435 # -1 for the default system timeout, INT_MAX for "infinite time".
15437 # This runs just once, but during startup, so make sure it doesn't take too
15438 # long. Three seconds should be way more than enough, and if we don't get the
15439 # reply on time then the only potential issue is that we use a light instead of
15440 # dark interface or vice versa.
15441 - name: widget.gtk.settings-portal-timeout-ms
15442   type: int32_t
15443   value: 3000
15444   mirror: always
15446 # Whether to use gtk portal for the file picker.
15447 #  - 0: never
15448 #  - 1: always
15449 #  - 2: auto (true for flatpak or GTK_USE_PORTAL=1, false otherwise)
15450 - name: widget.use-xdg-desktop-portal.file-picker
15451   type: int32_t
15452   value: 2
15453   mirror: always
15455 # Whether to use gtk portal for the mime handler.
15456 #  - 0: never
15457 #  - 1: always
15458 #  - 2: auto (for now only true for flatpak, see bug 1516290)
15459 - name: widget.use-xdg-desktop-portal.mime-handler
15460   type: int32_t
15461   value: 2
15462   mirror: always
15464 # Whether to try to use XDG portal for settings / look-and-feel information.
15465 # https://flatpak.github.io/xdg-desktop-portal/#gdbus-org.freedesktop.portal.Settings
15466 #  - 0: never
15467 #  - 1: always
15468 #  - 2: auto
15469 - name: widget.use-xdg-desktop-portal.settings
15470   type: int32_t
15471   value: 2
15472   mirror: always
15474 # Whether to use XDG portal for geolocation.
15475 # https://flatpak.github.io/xdg-desktop-portal/#gdbus-org.freedesktop.portal.Location
15476 #  - 0: never
15477 #  - 1: always
15478 #  - 2: auto
15479 - name: widget.use-xdg-desktop-portal.location
15480   type: int32_t
15481   value: 2
15482   mirror: always
15483 # Whether to use XDG portal for opening to a file.
15484 # https://flatpak.github.io/xdg-desktop-portal/#gdbus-org.freedesktop.portal.OpenURI
15485 #  - 0: never
15486 #  - 1: always
15487 #  - 2: auto (true for flatpak or GTK_USE_PORTAL=1, false otherwise)
15488 - name: widget.use-xdg-desktop-portal.open-uri
15489   type: int32_t
15490   value: 2
15491   mirror: always
15492 #endif
15494 #ifdef XP_WIN
15495 # WindowsUIUtils::Share to wait for user action on Windows share dialog
15496 # `true` means the promise resolves when user completes or cancels the share
15497 # action. This can be unsafe since selecting copy action fires no DataPackage
15498 # event as of 21H1.
15499 # `false` means the promise resolves when the share data is passed to
15500 # DataPackage.
15501 # This affects the behavior of `navigator.share()`.
15502 - name: widget.windows.share.wait_action.enabled
15503   type: bool
15504   value: false
15505   mirror: always
15507 - name: widget.windows.window_occlusion_tracking.enabled
15508   type: bool
15509   value: true
15510   mirror: always
15512 # Whether overlay scrollbars respect the system settings.
15513 # Note that these can be overridden by the ui.useOverlayScrollbars pref.
15514 - name: widget.windows.overlay-scrollbars.enabled
15515   type: bool
15516   value: true
15517   mirror: always
15519 # Whether we allow accessing the UWP system color pallete.
15520 - name: widget.windows.uwp-system-colors.enabled
15521   type: bool
15522   value: true
15523   mirror: always
15525 # Whether we use the accent color for highlight as some other UWP apps do.
15527 # false for now since it can cause some contrast-with-background issues
15528 # specially with grey accents, see bug 1776588.
15529 - name: widget.windows.uwp-system-colors.highlight-accent
15530   type: bool
15531   value: false
15532   mirror: always
15534 - name: widget.windows.window_occlusion_tracking_display_state.enabled
15535   type: bool
15536   value: false
15537   mirror: always
15539 - name: widget.windows.window_occlusion_tracking_session_lock.enabled
15540   type: bool
15541   value: true
15542   mirror: always
15544 - name: widget.windows.hide_cursor_when_typing
15545   type: bool
15546   value: false
15547   mirror: always
15549 # Whether to give explorer.exe a delated nudge to recalculate the fullscreenness
15550 # of a window after maximizing it.
15551 - name: widget.windows.fullscreen_remind_taskbar
15552   type: RelaxedAtomicBool
15553   value: true
15554   mirror: always
15556 # The number of messages of each type to keep for display in
15557 # about:windows-messages
15558 - name: widget.windows.messages_to_log
15559   type: RelaxedAtomicUint32
15560   value: 6
15561   mirror: always
15563 # Whether to flush the Ole clipboard synchronously.
15564 # Possible values are:
15565 #  * 0: never
15566 #  * 1: always
15567 #  * 2 (or others): when needed
15568 - name: widget.windows.sync-clipboard-flush
15569   type: uint32_t
15570   value: 2
15571   mirror: always
15573 # Whether to apply a hack (adjusting the window height by -1px and back again)
15574 # upon first entering fullscreen intended to work around a bug exhibited under
15575 # on some Windows 11 machines under some configurations. (See bug 1763981.)
15577 # Semantics:
15578 #  * 0: never
15579 #  * 1: always
15580 #  * 2: auto
15581 - name: widget.windows.apply-dwm-resize-hack
15582   type: RelaxedAtomicInt32
15583   value: 2
15584   mirror: always
15585 #endif
15587 # Whether to disable SwipeTracker (e.g. swipe-to-nav).
15588 - name: widget.disable-swipe-tracker
15589   type: bool
15590   value: false
15591   mirror: always
15593 # Various metrics to control SwipeTracker.
15594 - name: widget.swipe.velocity-twitch-tolerance
15595   type: float
15596   value: 0.0000001f
15597   mirror: always
15599 - name: widget.swipe.success-velocity-contribution
15600   type: float
15601   value: 0.05f
15602   mirror: always
15604 # When using pixel deltas for pan input, how many pixels do we consider a whole
15605 # swipe?
15607 # The values for this pref are derived from trial and error in an effort to
15608 # match the existing behavior on the respective platforms.
15609 - name: widget.swipe.pixel-size
15610   type: float
15611 #if defined(XP_MACOSX)
15612   value: 550.0f
15613 #else
15614   value: 1100.0f
15615 #endif
15616   mirror: always
15618 # When using page deltas for pan input, how many pages do we consider a whole
15619 # swipe navigation?
15621 # This is only relevant for GTK which is as of right now the only platform
15622 # which supports page-based pan gestures.
15623 - name: widget.swipe.page-size
15624   type: float
15625   value: 40.0f
15626   mirror: always
15628 - name: widget.transparent-windows
15629   type: bool
15630   value: true
15631   mirror: once
15633 # Whether the clipboard cached are used while getting system clipboard data.
15634 - name: widget.clipboard.use-cached-data.enabled
15635   type: bool
15636 #if defined(XP_MACOSX)
15637   value: true
15638 #else
15639   value: false
15640 #endif
15641   mirror: always
15643 #---------------------------------------------------------------------------
15644 # Prefs starting with "zoom."
15645 #---------------------------------------------------------------------------
15647 - name: zoom.maxPercent
15648   type: uint32_t
15649 #ifdef ANDROID
15650   value: 400
15651 #else
15652   value: 500
15653 #endif
15654   mirror: always
15656 - name: zoom.minPercent
15657   type: uint32_t
15658 #ifdef ANDROID
15659   value: 20
15660 #else
15661   value: 30
15662 #endif
15663   mirror: always
15665 #---------------------------------------------------------------------------
15666 # End of prefs
15667 #---------------------------------------------------------------------------