Backed out changeset 3152110c63b5 (bug 1868374) as requested because it is not yet...
[gecko.git] / modules / libpref / init / StaticPrefList.yaml
blob5a29c29ccfc8d0bf358acfe6fda0863fd2d49aa3
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 #ifdef XP_MACOSX
184 #define IS_XP_MACOSX true
185 #define IS_NOT_XP_MACOSX false
186 #else
187 #define IS_XP_MACOSX false
188 #define IS_NOT_XP_MACOSX true
189 #endif
191 #---------------------------------------------------------------------------
192 # Prefs starting with "accessibility."
193 #---------------------------------------------------------------------------
195 - name: accessibility.accesskeycausesactivation
196   type: bool
197   value: true
198   mirror: always
200 - name: accessibility.monoaudio.enable
201   type: RelaxedAtomicBool
202   value: false
203   mirror: always
205 - name: accessibility.browsewithcaret
206   type: RelaxedAtomicBool
207   value: false
208   mirror: always
210 - name: accessibility.AOM.enabled
211   type: bool
212   value: false
213   mirror: always
215 - name: accessibility.ARIAReflection.enabled
216   type: bool
217   value: true
218   mirror: always
220 # Whether form controls and images should be focusable with mouse, in content
221 # documents.
223 # This matches historical macOS / Safari behavior.
225 #  * 0: never
226 #  * 1: always
227 #  * 2: on content documents
228 - name: accessibility.mouse_focuses_formcontrol
229   type: int32_t
230 #ifdef XP_MACOSX
231   value: 2
232 #else
233   value: 1
234 #endif
235   mirror: always
237 # Whether to avoid accessibility activation on Windows shortly after clipboard
238 # copy.
240 # Possible values are:
241 #  * 0: never
242 #  * 1: always
243 #  * 2 (or others): when needed
244 - name: accessibility.windows.suppress-after-clipboard-copy
245   type: uint32_t
246   value: 2
247   mirror: always
249 #---------------------------------------------------------------------------
250 # Prefs starting with "alerts."
251 #---------------------------------------------------------------------------
253 # Whether to use platform-specific backends for showing desktop notifications.
254 # If no such backend is available, or if the pref is false, then XUL
255 # notifications are used.
256 - name: alerts.useSystemBackend
257   type: bool
258   value: true
259   mirror: always
261 #if defined(XP_WIN)
262  # On Windows, a COM Surrogate notification server receives notification events
263  # and can relaunch the application after it has been closed.
264 - name: alerts.useSystemBackend.windows.notificationserver.enabled
265   type: bool
266   value: true
267   mirror: never
268 #endif
270 #ifdef ANDROID
271   #---------------------------------------------------------------------------
272   # Prefs starting with "android."
273   #---------------------------------------------------------------------------
275   # On Android, we want an opaque background to be visible under the page,
276   # so layout should not force a default background.
277 -   name: android.widget_paints_background
278     type: RelaxedAtomicBool
279     value: true
280     mirror: always
282 -   name: android.touch_resampling.enabled
283     type: RelaxedAtomicBool
284     value: true
285     mirror: always
287 #endif
289 #---------------------------------------------------------------------------
290 # Prefs starting with "apz."
291 # The apz prefs are explained in AsyncPanZoomController.cpp
292 #---------------------------------------------------------------------------
294 # amount we zoom in for a double tap gesture if we couldn't find any content
295 # based rect to zoom to
296 - name: apz.doubletapzoom.defaultzoomin
297   type: AtomicFloat
298   value: 1.2f
299   mirror: always
301 - name: apz.scrollbarbuttonrepeat.enabled
302   type: RelaxedAtomicBool
303   value: true
304   mirror: always
306 - name: apz.scrollend-event.content.enabled
307   type: RelaxedAtomicBool
308   value: true
309   mirror: always
311 # After a user has executed a pan gesture, we may receive momentum phase pan
312 # gestures from the OS. This specifies how long we should wait following the
313 # pan end gesture for possible momentum phase pan gestures before sending the
314 # TransformEnd notification.
315 - name: apz.scrollend-event.content.delay_ms
316   type: RelaxedAtomicInt32
317   value: 100
318   mirror: always
320 - name: apz.wr.activate_all_scroll_frames
321   type: RelaxedAtomicBool
322   value: false
323   mirror: always
325 - name: apz.wr.activate_all_scroll_frames_when_fission
326   type: RelaxedAtomicBool
327   value: true
328   mirror: always
330 - name: apz.prefer_jank_minimal_displayports
331   type: RelaxedAtomicBool
332   value: true
333   mirror: always
335 - name: apz.allow_double_tap_zooming
336   type: RelaxedAtomicBool
337   value: true
338   mirror: always
340 - name: apz.mac.enable_double_tap_zoom_touchpad_gesture
341   type: RelaxedAtomicBool
342   value: true
343   mirror: always
345 - name: apz.allow_immediate_handoff
346   type: RelaxedAtomicBool
347   value: false
348   mirror: always
350 - name: apz.allow_zooming
351   type: RelaxedAtomicBool
352   value: true
353   mirror: always
355 - name: apz.max_zoom
356   type: AtomicFloat
357   value: 10.0f
358   mirror: always
360 - name: apz.min_zoom
361   type: AtomicFloat
362   value: 0.25f
363   mirror: always
365 - name: apz.allow_zooming_out
366   type: RelaxedAtomicBool
367   value: false
368   mirror: always
370 - name: apz.android.chrome_fling_physics.friction
371   type: AtomicFloat
372   value: 0.015f
373   mirror: always
375 - name: apz.android.chrome_fling_physics.inflexion
376   type: AtomicFloat
377   value: 0.35f
378   mirror: always
380 - name: apz.android.chrome_fling_physics.stop_threshold
381   type: AtomicFloat
382   value: 0.1f
383   mirror: always
385 - name: apz.autoscroll.enabled
386   type: RelaxedAtomicBool
387   value: true
388   mirror: always
390 - name: apz.axis_lock.breakout_angle
391   type: AtomicFloat
392   value: float(M_PI / 8.0)    # 22.5 degrees
393   mirror: always
394   include: <cmath>
396 - name: apz.axis_lock.breakout_threshold
397   type: AtomicFloat
398   value: 1.0f / 32.0f
399   mirror: always
401 - name: apz.axis_lock.direct_pan_angle
402   type: AtomicFloat
403   value: float(M_PI / 3.0)    # 60 degrees
404   mirror: always
405   include: <cmath>
407 - name: apz.axis_lock.lock_angle
408   type: AtomicFloat
409   value: float(M_PI / 6.0)    # 30 degrees
410   mirror: always
411   include: <cmath>
413 # Whether to lock touch scrolling to one axis at a time. When a new
414 # axis lock mode is added, the APZCAxisLockCompatTester GTest shoud
415 # be updated to include the lock mode value.
416 # 0 = FREE (No locking at all)
417 # 1 = STANDARD (Once locked, remain locked until scrolling ends)
418 # 2 = STICKY (Allow lock to be broken, with hysteresis)
419 # 3 = DOMINANT_AXIS (Only allow movement on one axis at a time, only
420 #     applies to touchpad scrolling)
421 - name: apz.axis_lock.mode
422   type: RelaxedAtomicInt32
423 #if defined(XP_MACOSX)
424   value: 3
425 #else
426   value: 2
427 #endif
428   mirror: always
430 - name: apz.content_response_timeout
431   type: RelaxedAtomicInt32
432   value: 400
433   mirror: always
435 - name: apz.danger_zone_x
436   type: RelaxedAtomicInt32
437   value: 50
438   mirror: always
440 - name: apz.danger_zone_y
441   type: RelaxedAtomicInt32
442   value: 100
443   mirror: always
445 - name: apz.disable_for_scroll_linked_effects
446   type: RelaxedAtomicBool
447   value: false
448   mirror: always
450 - name: apz.displayport_expiry_ms
451   type: RelaxedAtomicUint32
452   value: 15000
453   mirror: always
455 - name: apz.drag.enabled
456   type: RelaxedAtomicBool
457   value: true
458   mirror: always
460 - name: apz.drag.initial.enabled
461   type: RelaxedAtomicBool
462   value: true
463   mirror: always
465 - name: apz.drag.touch.enabled
466   type: RelaxedAtomicBool
467   value: true
468   mirror: always
470 - name: apz.enlarge_displayport_when_clipped
471   type: RelaxedAtomicBool
472   value: @IS_ANDROID@
473   mirror: always
475 # Test only.
476 - name: apz.fixed-margin-override.enabled
477   type: RelaxedAtomicBool
478   value: false
479   mirror: always
481 # Test only.
482 - name: apz.fixed-margin-override.bottom
483   type: RelaxedAtomicInt32
484   value: 0
485   mirror: always
487 # Test only.
488 - name: apz.fixed-margin-override.top
489   type: RelaxedAtomicInt32
490   value: 0
491   mirror: always
493 - name: apz.fling_accel_base_mult
494   type: AtomicFloat
495   value: 1.0f
496   mirror: always
498 - name: apz.fling_accel_supplemental_mult
499   type: AtomicFloat
500   value: 1.0f
501   mirror: always
503 - name: apz.fling_accel_min_fling_velocity
504   type: AtomicFloat
505   value: 1.5f
506   mirror: always
508 - name: apz.fling_accel_min_pan_velocity
509   type: AtomicFloat
510   value: 0.8f
511   mirror: always
513 - name: apz.fling_accel_max_pause_interval_ms
514   type: RelaxedAtomicInt32
515   value: 50
516   mirror: always
518 - name: apz.fling_curve_function_x1
519   type: float
520   value: 0.0f
521   mirror: once
523 - name: apz.fling_curve_function_x2
524   type: float
525   value: 1.0f
526   mirror: once
528 - name: apz.fling_curve_function_y1
529   type: float
530   value: 0.0f
531   mirror: once
533 - name: apz.fling_curve_function_y2
534   type: float
535   value: 1.0f
536   mirror: once
538 - name: apz.fling_curve_threshold_inches_per_ms
539   type: AtomicFloat
540   value: -1.0f
541   mirror: always
543 - name: apz.fling_friction
544   type: AtomicFloat
545   value: 0.002f
546   mirror: always
548 - name: apz.fling_min_velocity_threshold
549   type: AtomicFloat
550   value: 0.5f
551   mirror: always
553 - name: apz.fling_stop_on_tap_threshold
554   type: AtomicFloat
555   value: 0.05f
556   mirror: always
558 - name: apz.fling_stopped_threshold
559   type: AtomicFloat
560   value: 0.01f
561   mirror: always
563 - name: apz.touch_acceleration_factor_x
564   type: float
565   value: 1.0f
566   mirror: always
568 - name: apz.touch_acceleration_factor_y
569   type: float
570   value: 1.0f
571   mirror: always
573 # new scrollbar code for desktop zooming
574 - name: apz.force_disable_desktop_zooming_scrollbars
575   type: RelaxedAtomicBool
576   value: false
577   mirror: always
579 #ifdef MOZ_WIDGET_GTK
580 -   name: apz.gtk.kinetic_scroll.enabled
581     type: RelaxedAtomicBool
582     value: true
583     mirror: always
585 -   name: apz.gtk.pangesture.enabled
586     type: RelaxedAtomicBool
587     value: true
588     mirror: always
590 # Mode to use when receiving pan gesture input.
592 #  * 0: Auto mode (uses the default behavior, subject to change).
593 #  * 1: Page mode: Uses gtk deltas as a percentage of the page size to scroll. This mode matches:
595 #    https://gitlab.gnome.org/GNOME/gtk/blob/c734c7e9188b56f56c3a504abee05fa40c5475ac/gtk/gtkrange.c#L3063-3074
597 #  * 2: Pixel mode: Uses gtk deltas as a fixed pixel multiplier. This mode matches e.g. GNOME web.
599 #    https://webkit-search.igalia.com/webkit/rev/215039ef09d6bfd6e088175bfe30788d95b9705d/Source/WebKit/Shared/gtk/WebEventFactory.cpp#265-296
600 #    (multiplied then by pixelsPerLineStep which in GNOME-web is 40).
601 -   name: apz.gtk.pangesture.delta_mode
602     type: uint32_t
603     value: 0
604     mirror: always
606 -   name: apz.gtk.pangesture.page_delta_mode_multiplier
607     type: float
608     value: 1.0f
609     mirror: always
611 -   name: apz.gtk.pangesture.pixel_delta_mode_multiplier
612     type: float
613     value: 40.0f
614     mirror: always
616 -   name: apz.gtk.touchpad_pinch.enabled
617     type: RelaxedAtomicBool
618     value: true
619     mirror: always
621 -   name: apz.gtk.touchpad_pinch.three_fingers.enabled
622     type: RelaxedAtomicBool
623     value: false
624     mirror: always
625 #endif
627 - name: apz.keyboard.enabled
628   type: bool
629   value: @IS_NOT_ANDROID@
630   mirror: once
632 - name: apz.keyboard.passive-listeners
633   type: RelaxedAtomicBool
634   value: @IS_NOT_ANDROID@
635   mirror: always
637 - name: apz.max_tap_time
638   type: RelaxedAtomicInt32
639   value: 300
640   mirror: always
642 - name: apz.max_velocity_inches_per_ms
643   type: AtomicFloat
644   value: -1.0f
645   mirror: always
647 - name: apz.max_velocity_queue_size
648   type: uint32_t
649   value: 5
650   mirror: once
652 - name: apz.min_skate_speed
653   type: AtomicFloat
654   value: 1.0f
655   mirror: always
657 - name: apz.mvm.force-enabled
658   type: RelaxedAtomicBool
659   value: true
660   mirror: always
662 - name: apz.one_touch_pinch.enabled
663   type: RelaxedAtomicBool
664   value: @IS_ANDROID@
665   mirror: always
667 - name: apz.overscroll.enabled
668   type: RelaxedAtomicBool
669 #if defined(XP_MACOSX) || defined(XP_WIN)
670   value: true
671 #else
672   value: false
673 #endif
674   mirror: always
676 # The "test async scroll offset" (used via reftest-async-scroll
677 # or nsIDOMWindowUtils.setAsyncScrollOffset()) can be used to
678 # trigger overscroll. Used for tests only.
679 - name: apz.overscroll.test_async_scroll_offset.enabled
680   type: RelaxedAtomicBool
681   value: false
682   mirror: always
684 - name: apz.overscroll.min_pan_distance_ratio
685   type: AtomicFloat
686   value: 1.0f
687   mirror: always
689 - name: apz.overscroll.stop_distance_threshold
690   type: AtomicFloat
691   value: 5.0f
692   mirror: always
694 - name: apz.overscroll.spring_stiffness
695   type: AtomicFloat
696   value: 200
697   mirror: always
699 - name: apz.overscroll.damping
700   type: AtomicFloat
701   value: 1.1
702   mirror: always
704 - name: apz.overscroll.max_velocity
705   type: AtomicFloat
706   value: 10
707   mirror: always
709 - name: apz.paint_skipping.enabled
710   type: RelaxedAtomicBool
711   value: true
712   mirror: always
714 # Fetch displayport updates early from the message queue.
715 - name: apz.pinch_lock.mode
716   type: RelaxedAtomicInt32
717   value: 2
718   mirror: always
720 - name: apz.pinch_lock.scroll_lock_threshold
721   type: AtomicFloat
722   value: 1.0f / 16.0f   # 1/16 inches
723   mirror: always
725 - name: apz.pinch_lock.span_breakout_threshold
726   type: AtomicFloat
727   value: 1.0f / 32.0f   # 1/32 inches
728   mirror: always
730 - name: apz.pinch_lock.span_lock_threshold
731   type: AtomicFloat
732   value: 1.0f / 32.0f   # 1/32 inches
733   mirror: always
735 - name: apz.pinch_lock.buffer_max_age
736   type: int32_t
737   value: 80   # milliseconds
738   mirror: once
740 - name: apz.popups.enabled
741   type: RelaxedAtomicBool
742   value: true
743   mirror: always
745 # Whether to print the APZC tree for debugging.
746 - name: apz.printtree
747   type: RelaxedAtomicBool
748   value: false
749   mirror: always
751 - name: apz.record_checkerboarding
752   type: RelaxedAtomicBool
753   value: @IS_NIGHTLY_BUILD@
754   mirror: always
756 - name: apz.second_tap_tolerance
757   type: AtomicFloat
758   value: 0.5f
759   mirror: always
761 # If this is true, APZ fully recalculates the scroll thumb size and
762 # position in the compositor. This leads to the size and position
763 # being more accurate in scenarios such as async zooming.
764 - name: apz.scrollthumb.recalc
765   type: RelaxedAtomicBool
766   value: true
767   mirror: always
769 - name: apz.test.fails_with_native_injection
770   type: RelaxedAtomicBool
771   value: false
772   mirror: always
774 - name: apz.test.logging_enabled
775   type: RelaxedAtomicBool
776   value: false
777   mirror: always
779 - name: apz.touch_move_tolerance
780   type: AtomicFloat
781   value: 0.1f
782   mirror: always
784 - name: apz.touch_start_tolerance
785   type: AtomicFloat
786   value: 0.1f
787   mirror: always
789 - name: apz.velocity_bias
790   type: AtomicFloat
791   value: 0.0f
792   mirror: always
794 - name: apz.velocity_relevance_time_ms
795   type: RelaxedAtomicUint32
796   value: 100
797   mirror: always
799 - name: apz.windows.force_disable_direct_manipulation
800   type: RelaxedAtomicBool
801   value: false
802   mirror: always
804 - name: apz.windows.use_direct_manipulation
805   type: RelaxedAtomicBool
806   value: true
807   mirror: always
809 - name: apz.windows.check_for_pan_gesture_conversion
810   type: RelaxedAtomicBool
811   value: true
812   mirror: always
814 - name: apz.x_skate_highmem_adjust
815   type: AtomicFloat
816   value: 0.0f
817   mirror: always
819 - name: apz.x_skate_size_multiplier
820   type: AtomicFloat
821   value: 1.25f
822   mirror: always
824 - name: apz.x_stationary_size_multiplier
825   type: AtomicFloat
826   value: 1.5f
827   mirror: always
829 - name: apz.y_skate_highmem_adjust
830   type: AtomicFloat
831   value: 0.0f
832   mirror: always
834 - name: apz.y_skate_size_multiplier
835   type: AtomicFloat
836 #if defined(MOZ_WIDGET_ANDROID)
837   value: 1.5f
838 #else
839   value: 3.5f
840 #endif
841   mirror: always
843 - name: apz.y_stationary_size_multiplier
844   type: AtomicFloat
845 #if defined(MOZ_WIDGET_ANDROID)
846   value: 1.5f
847 #else
848   value: 3.5f
849 #endif
850   mirror: always
852 - name: apz.zoom_animation_duration_ms
853   type: RelaxedAtomicInt32
854 #if defined(MOZ_WIDGET_ANDROID)
855   value: 250
856 #else
857   value: 350
858 #endif
859   mirror: always
861 - name: apz.scale_repaint_delay_ms
862   type: RelaxedAtomicInt32
863   value: 500
864   mirror: always
866 # Whether to use rounded external scroll offsets.
867 - name: apz.rounded_external_scroll_offset
868   type: bool
869   value: false
870   mirror: always
872 #---------------------------------------------------------------------------
873 # Prefs starting with "beacon."
874 #---------------------------------------------------------------------------
876 # Is support for Navigator.sendBeacon enabled?
877 - name: beacon.enabled
878   type: bool
879   value: true
880   mirror: always
882 #---------------------------------------------------------------------------
883 # Prefs starting with "bidi."
884 #---------------------------------------------------------------------------
886 # Whether delete and backspace should immediately delete characters not
887 # visually adjacent to the caret, or adjust the visual position of the caret
888 # on the first keypress and delete the character on a second keypress
889 - name: bidi.edit.delete_immediately
890   type: bool
891   value: true
892   mirror: always
894 # Bidi caret movement style:
895 # 0 = logical
896 # 1 = visual
897 # 2 = visual, but logical during selection
898 - name: bidi.edit.caret_movement_style
899   type: int32_t
900 #if !defined(XP_LINUX) && defined(NIGHTLY_BUILD)
901   value: 1
902 #else
903   value: 2 # See Bug 1638240
904 #endif
905   mirror: always
907 # Bidi numeral style:
908 # 0 = nominalnumeralBidi *
909 # 1 = regularcontextnumeralBidi
910 # 2 = hindicontextnumeralBidi
911 # 3 = arabicnumeralBidi
912 # 4 = hindinumeralBidi
913 # 5 = persiancontextnumeralBidi
914 # 6 = persiannumeralBidi
915 - name: bidi.numeral
916   type: RelaxedAtomicUint32
917   value: 0
918   mirror: always
920 # Bidi text type
921 # 1 = charsettexttypeBidi *
922 # 2 = logicaltexttypeBidi
923 # 3 = visualtexttypeBidi
924 - name: bidi.texttype
925   type: RelaxedAtomicUint32
926   value: 1
927   mirror: always
929 # Bidi direction
930 # 1 = directionLTRBidi *
931 # 2 = directionRTLBidi
932 - name: bidi.direction
933   type: RelaxedAtomicUint32
934   value: 1
935   mirror: always
937 # Setting this pref to |true| forces Bidi UI menu items and keyboard shortcuts
938 # to be exposed, and enables the directional caret hook. By default, only
939 # expose it for bidi-associated system locales.
940 - name: bidi.browser.ui
941   type: bool
942   value: false
943   mirror: always
945 #---------------------------------------------------------------------------
946 # Prefs starting with "browser."
947 #---------------------------------------------------------------------------
949 - name: browser.active_color
950   type: String
951   value: "#EE0000"
952   mirror: never
954 - name: browser.active_color.dark
955   type: String
956   value: "#FF6666"
957   mirror: never
959 - name: browser.anchor_color
960   type: String
961   value: "#0000EE"
962   mirror: never
964 # If you change this, you probably also want to change
965 # nsXPLookAndFeel::GenericDarkColor for MozNativehyperlinktext.
966 - name: browser.anchor_color.dark
967   type: String
968   value: "#8C8CFF"
969   mirror: never
971 # See http://dev.w3.org/html5/spec/forms.html#attr-fe-autofocus
972 - name: browser.autofocus
973   type: bool
974   value: true
975   mirror: always
977 - name: browser.cache.disk.enable
978   type: RelaxedAtomicBool
979   value: true
980   mirror: always
982 - name: browser.cache.memory.enable
983   type: RelaxedAtomicBool
984   value: true
985   mirror: always
987 # Limit of recent metadata we keep in memory for faster access, in KB.
988 - name: browser.cache.disk.metadata_memory_limit
989   type: RelaxedAtomicUint32
990   value: 250   # 0.25 MB
991   mirror: always
993 # Does the user want smart-sizing?
994 - name: browser.cache.disk.smart_size.enabled
995   type: RelaxedAtomicBool
996   value: true
997   mirror: always
999 # Disk cache capacity in kilobytes. It's used only when
1000 # browser.cache.disk.smart_size.enabled == false
1001 - name: browser.cache.disk.capacity
1002   type: RelaxedAtomicUint32
1003   value: 256000
1004   mirror: always
1006 # -1 = determine dynamically, 0 = none, n = memory capacity in kilobytes.
1007 - name: browser.cache.memory.capacity
1008   type: RelaxedAtomicInt32
1009   value: -1
1010   mirror: always
1012 # When smartsizing is disabled we could potentially fill all disk space by
1013 # cache data when the disk capacity is not set correctly. To avoid that we
1014 # check the free space every time we write some data to the cache. The free
1015 # space is checked against two limits. Once the soft limit is reached we start
1016 # evicting the least useful entries, when we reach the hard limit writing to
1017 # the entry fails.
1018 - name: browser.cache.disk.free_space_soft_limit
1019   type: RelaxedAtomicUint32
1020   value: 5 * 1024   # 5MB
1021   mirror: always
1023 - name: browser.cache.disk.free_space_hard_limit
1024   type: RelaxedAtomicUint32
1025   value: 1024    # 1MB
1026   mirror: always
1028 # The number of chunks we preload ahead of read. One chunk currently has
1029 # 256kB.
1030 - name: browser.cache.disk.preload_chunk_count
1031   type: RelaxedAtomicUint32
1032   value: 4    # 1 MB of read ahead
1033   mirror: always
1035 # Max-size (in KB) for entries in disk cache. Set to -1 for no limit.
1036 # (Note: entries bigger than 1/8 of disk-cache are never cached)
1037 - name: browser.cache.disk.max_entry_size
1038   type: RelaxedAtomicUint32
1039   value: 50 * 1024    # 50 MB
1040   mirror: always
1042 # Max-size (in KB) for entries in memory cache. Set to -1 for no limit.
1043 # (Note: entries bigger than than 90% of the mem-cache are never cached.)
1044 - name: browser.cache.memory.max_entry_size
1045   type: RelaxedAtomicInt32
1046   value: 5 * 1024
1047   mirror: always
1049 # Memory limit (in kB) for new cache data not yet written to disk. Writes to
1050 # the cache are buffered and written to disk on background with low priority.
1051 # With a slow persistent storage these buffers may grow when data is coming
1052 # fast from the network. When the amount of unwritten data is exceeded, new
1053 # writes will simply fail. We have two buckets, one for important data
1054 # (priority) like html, css, fonts and js, and one for other data like images,
1055 # video, etc.
1056 # Note: 0 means no limit.
1057 - name: browser.cache.disk.max_chunks_memory_usage
1058   type: RelaxedAtomicUint32
1059   value: 40 * 1024
1060   mirror: always
1061 - name: browser.cache.disk.max_priority_chunks_memory_usage
1062   type: RelaxedAtomicUint32
1063   value: 40 * 1024
1064   mirror: always
1067 # Number of seconds the cache spends writing pending data and closing files
1068 # after shutdown has been signalled. Past that time data is not written and
1069 # files are left open for the OS to clean up.
1070 - name: browser.cache.max_shutdown_io_lag
1071   type: RelaxedAtomicUint32
1072   value: 2
1073   mirror: always
1075 # After the max_shutdown_io_lag has passed, we will attempt to cancel
1076 # blocking IO (on windows). The CacheIOThread may pick up more blocking
1077 # tasks so we want to cancel those too. The main thread will be woken
1078 # up every shutdown_io_time_between_cancellations_ms to cancel the IO
1079 # on the other thread.
1080 - name: browser.cache.shutdown_io_time_between_cancellations_ms
1081   type: RelaxedAtomicUint32
1082   value: 5
1083   mirror: always
1085 # A percentage limit for media content type in the disk cache. When some entries
1086 # need to be evicted and media is over the limit, it's evicted first.
1087 - name: browser.cache.disk.content_type_media_limit
1088   type: RelaxedAtomicInt32
1089   value: 50
1090   mirror: always
1092 # How often to validate document in cache
1093 #   0 = once-per-session,
1094 #   1 = each-time,
1095 #   2 = never,
1096 #   3 = when-appropriate/automatically
1097 - name: browser.cache.check_doc_frequency
1098   type: RelaxedAtomicUint32
1099   value: 3
1100   mirror: always
1102 # Compression level for cached JavaScript bytecode
1103 #   0 = do not compress,
1104 #   1 = minimal compression,
1105 #   9 = maximal compression
1106 - name: browser.cache.jsbc_compression_level
1107   type: RelaxedAtomicUint32
1108   value: 0
1109   mirror: always
1111 # Whether tooltips are enabled.
1112 - name: browser.chrome.toolbar_tips
1113   type: bool
1114   value: true
1115   mirror: always
1117 # Whether tooltips are hidden on keydown.
1118 #  0: never
1119 #  1: always
1120 #  2: only on non-modifier keys
1121 - name: browser.chrome.toolbar_tips.hide_on_keydown
1122   type: uint32_t
1123 #if defined(XP_WIN)
1124   value: 0
1125 #else
1126   value: 2
1127 #endif
1128   mirror: always
1130 # Content analysis by external applications, e.g. data-loss prevention apps
1131 - name: browser.contentanalysis.enabled
1132   type: bool
1133   value: false
1134   mirror: never
1136 # Is the IPC pipe to the DLP tool specific to the user or to the system?
1137 - name: browser.contentanalysis.is_per_user
1138   type: bool
1139   value: true
1140   mirror: never
1142 # Path name of pipe used to connect to a configured DLP agent.
1143 - name: browser.contentanalysis.pipe_path_name
1144   type: String
1145   value: "path_user"
1146   mirror: never
1148 # Should CA ignore the system setting and use silent notifications?
1149 - name: browser.contentanalysis.silent_notifications
1150   type: bool
1151   value: false
1152   mirror: always
1154 # Content blocking for Enhanced Tracking Protection
1155 - name: browser.contentblocking.database.enabled
1156   type: bool
1157   value: false
1158   mirror: always
1160 # How many recent block/unblock actions per origins we remember in the
1161 # Content Blocking log for each top-level window.
1162 - name: browser.contentblocking.originlog.length
1163   type: uint32_t
1164   value: 32
1165   mirror: always
1167 # Min font device pixel size at which to turn on high quality.
1168 - name: browser.display.auto_quality_min_font_size
1169   type: RelaxedAtomicUint32
1170   value: 20
1171   mirror: always
1173 - name: browser.display.background_color
1174   type: String
1175   value: "#FFFFFF"
1176   mirror: never
1178 - name: browser.display.background_color.dark
1179   type: String
1180   value: "#1C1B22"
1181   mirror: never
1183 # This preference is a bit confusing because we use the opposite
1184 # string value in the colors dialog to indicate to users how FF HCM
1185 # will behave.
1186 # With resect to document colors, these values mean:
1187 # 0 = "default" = always, except in high contrast mode
1188 # 1 = "always"
1189 # 2 = "never"
1191 # On windows, we set this to 0, which means FF HCM will mirror OS HCM.
1192 # Everywhere else, we set this to 1, disabling FF HCM.
1193 - name: browser.display.document_color_use
1194   type: RelaxedAtomicUint32
1195 #if defined(XP_WIN)
1196   value: 0
1197 #else
1198   value: 1
1199 #endif
1200   mirror: always
1201   rust: true
1203 # 0 = always native
1204 # 1 = never native
1205 # other = default
1206 - name: browser.display.windows.non_native_menus
1207   type: RelaxedAtomicUint32
1208   value: 2
1209   mirror: always
1210   rust: true
1212 # This pref dictates whether or not backplates and background images
1213 # are to be drawn, when in high-contrast mode:
1214 #   false: do not draw backplates or render background images
1215 #   true: render background images and draw backplates
1216 # This condition is only considered when high-contrast mode is enabled
1217 # in Firefox, ie. when the user has:
1218 #   (1) mUseAccessibilityMode set to true (Widows high-contrast mode is on)
1219 #       AND browser.display.document_color_use set to 0
1220 #       (only with high-contrast themes) OR
1221 #   (2) browser.display.document_color_use set to 2 (always)
1222 - name: browser.display.permit_backplate
1223   type: RelaxedAtomicBool
1224   value: true
1225   mirror: always
1226   rust: true
1228 # Whether we should suppress the background-image of the canvas (the root
1229 # frame) if we're in forced colors mode.
1231 # This is important because some sites use background-image with a plain color
1232 # and it causes undesirable results in high-contrast mode.
1234 # See bug 1614921 for example.
1235 - name: browser.display.suppress_canvas_background_image_on_forced_colors
1236   type: bool
1237   value: true
1238   mirror: always
1240 - name: browser.display.foreground_color
1241   type: String
1242   value: "#000000"
1243   mirror: never
1245 - name: browser.display.foreground_color.dark
1246   type: String
1247   value: "#FBFBFE"
1248   mirror: never
1250 # Determines the behavior of OS zoom settings.
1252 #   0: doesn't affect rendering at all
1253 #   1: affects full zoom (dpi, effectively).
1254 #   2: affects text zoom.
1256 # Default is (1): Historical behavior on Linux, matches other browsers on
1257 # Windows, and generally creates more consistent rendering.
1258 - name: browser.display.os-zoom-behavior
1259   type: RelaxedAtomicInt32
1260   value: 1
1261   mirror: always
1262   rust: true
1264 # Whether focus rings are always shown by default.
1266 # This is the initial value of nsWindowRoot::mShowFocusRings, but it can be
1267 # overridden by system preferences.
1268 - name: browser.display.show_focus_rings
1269   type: bool
1270   value: false
1271   mirror: always
1273 # Enable showing image placeholders while image is loading or when image is broken.
1274 - name: browser.display.show_image_placeholders
1275   type: bool
1276   value: true
1277   mirror: always
1279 # Whether we should always enable focus rings after focus was moved by keyboard.
1281 # This behavior matches both historical and GTK / Windows focus behavior.
1283 # :focus-visible is intended to provide better heuristics than this.
1284 - name: browser.display.always_show_rings_after_key_focus
1285   type: bool
1286   value: false
1287   mirror: always
1289 # In theory: 0 = never, 1 = quick, 2 = always, though we always just use it as
1290 # a bool!
1291 - name: browser.display.use_document_fonts
1292   type: RelaxedAtomicInt32
1293   value: 1
1294   mirror: always
1295   rust: true
1297 # font-family names for which we'll override use_document_fonts=0, and always
1298 # use the specified font.
1299 # This is to support ligature-icon fonts, which render literal strings like
1300 # "arrow_drop_down" with an icon, even when use_document_fonts is disabled.
1301 # If an author provides & uses such a font, and we decline to use it, we'll end
1302 # up rendering these literal strings where the author intended an icon, which
1303 # can cause all sorts of overlapping/unreadable content.
1304 - name: browser.display.use_document_fonts.icon_font_allowlist
1305   type: String
1306   value: >-
1307     Material Icons,
1308     Material Icons Extended,
1309     Material Icons Outlined,
1310     Material Icons Round,
1311     Material Icons Sharp,
1312     Material Icons Two Tone,
1313     Google Material Icons,
1314     Material Symbols Outlined,
1315     Material Symbols Round,
1316     Material Symbols Rounded,
1317     Material Symbols Sharp
1318   mirror: never
1320 - name: browser.display.use_system_colors
1321   type: RelaxedAtomicBool
1322 #ifdef XP_WIN
1323   value: true
1324 #else
1325   value: false
1326 #endif
1327   mirror: always
1329 - name: browser.dom.window.dump.enabled
1330   type: RelaxedAtomicBool
1331   value: @IS_NOT_MOZILLA_OFFICIAL@
1332   mirror: always
1334 # See bug 1738574
1335 - name: browser.download.start_downloads_in_tmp_dir
1336   type: bool
1337   value: false
1338   mirror: always
1340 # See bug 1747343
1341 - name: browser.download.always_ask_before_handling_new_types
1342   type: bool
1343   value: false
1344   mirror: always
1346 # See bug 1731668
1347 - name: browser.download.enable_spam_prevention
1348   type: bool
1349   value: false
1350   mirror: always
1352 # See bug 1772569
1353 - name: browser.download.open_pdf_attachments_inline
1354   type: bool
1355   value: false
1356   mirror: always
1358 # See bug 1811830
1359 - name: browser.download.force_save_internally_handled_attachments
1360   type: bool
1361   value: false
1362   mirror: always
1364 - name: browser.download.sanitize_non_media_extensions
1365   type: bool
1366   value: true
1367   mirror: always
1369 # Image document's automatic image sizing.
1370 - name: browser.enable_automatic_image_resizing
1371   type: bool
1372   value: true
1373   mirror: always
1375 # Image document's click-to-resize.
1376 - name: browser.enable_click_image_resizing
1377   type: bool
1378   value: @IS_NOT_ANDROID@
1379   mirror: always
1381 - name: browser.find.ignore_ruby_annotations
1382   type: bool
1383   value: true
1384   mirror: always
1386 #if defined(XP_MACOSX)
1387 # Whether pressing Esc will exit fullscreen.
1388 - name: browser.fullscreen.exit_on_escape
1389   type: bool
1390   value: true
1391   mirror: always
1392 #endif
1394 # The max url length we'll store in history.
1396 # The default value is mostly a guess based on various facts:
1398 # * IE didn't support urls longer than 2083 chars
1399 # * Sitemaps protocol used to support a maximum of 2048 chars
1400 # * Various SEO guides suggest to not go over 2000 chars
1401 # * Various apps/services are known to have issues over 2000 chars
1402 # * RFC 2616 - HTTP/1.1 suggests being cautious about depending
1403 #   on URI lengths above 255 bytes
1405 - name: browser.history.maxUrlLength
1406   type: uint32_t
1407   value: 2000
1408   mirror: always
1410 # Max size of push/replaceState data parameter
1411 - name: browser.history.maxStateObjectSize
1412   type: int32_t
1413   value: 16777216
1414   mirror: always
1416 # True to collect wireframes upon navigations / pushState
1417 - name: browser.history.collectWireframes
1418   type: bool
1419   value: false
1420   mirror: always
1422 # The minimum area for a rect to be included in a wireframe, in CSS pixels.
1424 # The current value of 50 is pretty arbitrary, and will be tuned as we refine
1425 # and test the wireframing capability.
1426 - name: browser.history.wireframeAreaThreshold
1427   type: uint32_t
1428   value: 50
1429   mirror: always
1431 #if defined(XP_WIN) || defined(XP_LINUX)
1432   # Notify TabUnloader or send the memory pressure if the memory resource
1433   # notification is signaled AND the available commit space is lower than
1434   # this value.
1435 -   name: browser.low_commit_space_threshold_mb
1436     type: RelaxedAtomicUint32
1437     value: 200
1438     mirror: always
1439 #endif
1441 #ifdef XP_LINUX
1442   # On Linux we also check available memory in comparison to total memory,
1443   # and use this percent value (out of 100) to determine if we are in a
1444   # low memory scenario.
1445 -   name: browser.low_commit_space_threshold_percent
1446     type: RelaxedAtomicUint32
1447     value: 5
1448     mirror: always
1449 #endif
1451 # Render animations and videos as a solid color
1452 - name: browser.measurement.render_anims_and_video_solid
1453   type: RelaxedAtomicBool
1454   value: false
1455   mirror: always
1457 - name: browser.navigation.requireUserInteraction
1458   type: bool
1459   value: false
1460   mirror: always
1462 # Indicates if about:newtab shows content (enabled) or just blank.
1463 - name: browser.newtabpage.enabled
1464   type: bool
1465   value: true
1466   mirror: always
1468 # Open PDFs in Edge with the --app flag if it is the default.
1469 - name: browser.pdf.launchDefaultEdgeAsApp
1470   type: bool
1471   value: true
1472   mirror: always
1474 # Maximium delay between keystrokes that will be considered typing (milliseconds).
1475 - name: browser.places.interactions.typing_timeout_ms
1476   type: RelaxedAtomicUint32
1477   value: 3000
1478   mirror: always
1480 # Maximum delay between scroll input events that will be considered a scrolling interaction (milliseconds).
1481 - name: browser.places.interactions.scrolling_timeout_ms
1482   type: RelaxedAtomicUint32
1483   value: 5000
1484   mirror: always
1486 # Number of seconds till the sponsored session is timeout.
1487 - name: browser.places.sponsoredSession.timeoutSecs
1488   type: RelaxedAtomicUint32
1489   value: 3600
1490   mirror: always
1492 # Whether to start the private browsing mode at application startup
1493 - name: browser.privatebrowsing.autostart
1494   type: bool
1495   value: false
1496   mirror: always
1498 # Force usage of in-memory (rather than file on disk) media cache for video streaming when private browsing
1499 - name: browser.privatebrowsing.forceMediaMemoryCache
1500   type: bool
1501   value: false
1502   mirror: always
1504 # Communicates the toolbar color to platform (for e.g., prefers-color-scheme).
1506 # Returns whether the toolbar is dark (0), light (1), or system (2). The
1507 # theming code overrides it if appropriate.
1508 - name: browser.theme.toolbar-theme
1509   type: RelaxedAtomicUint32
1510   value: 2
1511   mirror: always
1513 # Communicates the preferred content theme color to platform (for e.g.,
1514 # prefers-color-scheme).
1516 # dark (0), light (1), system (2), or toolbar (3).
1518 # Default to "toolbar", the theming code sets it appropriately.
1519 - name: browser.theme.content-theme
1520   type: RelaxedAtomicUint32
1521   value: 2
1522   mirror: always
1523   rust: true
1525 # Whether the firefox titlebar respects the
1526 # -moz-windows-accent-color-in-titlebar setting on the tab strip.
1527 - name: browser.theme.windows.accent-color-in-tabs.enabled
1528   type: RelaxedAtomicBool
1529   value: false
1530   mirror: always
1531   rust: true
1533 # Blocked plugin content
1534 - name: browser.safebrowsing.blockedURIs.enabled
1535   type: bool
1536   value: true
1537   mirror: always
1539 # Malware protection
1540 - name: browser.safebrowsing.malware.enabled
1541   type: bool
1542   value: true
1543   mirror: always
1545 # Phishing protection
1546 - name: browser.safebrowsing.phishing.enabled
1547   type: bool
1548   value: true
1549   mirror: always
1551 # Maximum size for an array to store the safebrowsing prefixset.
1552 - name: browser.safebrowsing.prefixset_max_array_size
1553   type: RelaxedAtomicUint32
1554   value: 512*1024
1555   mirror: always
1557 # SessionStore prefs
1558 # Maximum number of bytes of DOMSessionStorage data we collect per origin.
1559 - name: browser.sessionstore.dom_storage_limit
1560   type: uint32_t
1561   value: 2048
1562   mirror: always
1564 # Maximum number of characters of form field data per field we collect.
1565 - name: browser.sessionstore.dom_form_limit
1566   type: uint32_t
1567   value: 1024*1024*2
1568   mirror: always
1570 # Maximum number of characters of form data we collect per origin.
1571 - name: browser.sessionstore.dom_form_max_limit
1572   type: uint32_t
1573   value: 1024*1024*50
1574   mirror: always
1576 # Minimal interval between two save operations in milliseconds (while the user is active).
1577 - name: browser.sessionstore.interval
1578   type: RelaxedAtomicUint32
1579   value: 15000
1580   mirror: always
1582 # Platform collection of data for session store
1583 - name: browser.sessionstore.platform_collection
1584   type: bool
1585 #if defined(ANDROID) || defined(MOZ_THUNDERBIRD)
1586   value: false
1587 #else
1588   value: true
1589 #endif
1590   mirror: once
1592 # Platform collection of session storage data for session store
1593 - name: browser.sessionstore.collect_session_storage
1594   type: bool
1595   value: @IS_NOT_ANDROID@
1596   mirror: once
1598 # Platform collection of zoom data for session store
1599 - name: browser.sessionstore.collect_zoom
1600   type: bool
1601   value: @IS_NOT_ANDROID@
1602   mirror: once
1604 # Causes SessionStore to ignore non-final update messages from
1605 # browser tabs that were not caused by a flush from the parent.
1606 # This is a testing flag and should not be used by end-users.
1607 - name: browser.sessionstore.debug.no_auto_updates
1608   type: RelaxedAtomicBool
1609   value: false
1610   mirror: always
1612 # Whether we should draw the tabs on top of the titlebar.
1614 # no (0), yes (1), or default (2), which is true everywhere except Linux.
1615 - name: browser.tabs.inTitlebar
1616   type: int32_t
1617   value: 2
1618   mirror: always
1620 # If set, use DocumentChannel to directly initiate loads entirely
1621 # from parent-process BrowsingContexts
1622 - name: browser.tabs.documentchannel.parent-controlled
1623   type: bool
1624   value: false
1625   mirror: always
1627 # Testing-only pref which makes data: URIs be loaded in a "web" content process
1628 # instead of within a process based on the URI's loader.
1629 - name: browser.tabs.remote.dataUriInDefaultWebProcess
1630   type: bool
1631   value: false
1632   mirror: always
1634 # Testing-only pref to force system-triggered about:blank loads to not change
1635 # content processes. This is used for performance tests which load an
1636 # about:blank document between navigations for historical reasons to avoid
1637 # unnecessary process switches.
1638 - name: browser.tabs.remote.systemTriggeredAboutBlankAnywhere
1639   type: bool
1640   value: false
1641   mirror: always
1643 # Testing-only pref to cause PBrowser creation for a specific BrowsingContext to
1644 # fail, to test the errored codepath.
1645 - name: browser.tabs.remote.testOnly.failPBrowserCreation.enabled
1646   type: bool
1647   value: false
1648   mirror: always
1650 - name: browser.tabs.remote.force-paint
1651   type: bool
1652   value: true
1653   mirror: always
1655 # When this pref is enabled document loads with a mismatched
1656 # Cross-Origin-Embedder-Policy header will fail to load
1657 - name: browser.tabs.remote.useCrossOriginEmbedderPolicy
1658   type: RelaxedAtomicBool
1659   value: true
1660   mirror: always
1662 # This pref makes `credentialless` a valid value for
1663 # Cross-Origin-Embedder-Policy header
1664 - name: browser.tabs.remote.coep.credentialless
1665   type: RelaxedAtomicBool
1666 #if defined(ANDROID)
1667   value: @IS_NIGHTLY_BUILD@
1668 #else
1669   value: true
1670 #endif
1671   mirror: always
1672   do_not_use_directly: true
1674 # When this pref is enabled top level loads with a mismatched
1675 # Cross-Origin-Opener-Policy header will be loaded in a separate process.
1676 - name: browser.tabs.remote.useCrossOriginOpenerPolicy
1677   type: RelaxedAtomicBool
1678   value: true
1679   mirror: always
1681 # When this pref is enabled then we use a separate content process for
1682 # top-level load of file:// URIs
1683 - name: browser.tabs.remote.separateFileUriProcess
1684   type: RelaxedAtomicBool
1685 #if !defined(ANDROID)
1686   value: true
1687 #else
1688   value: false
1689 #endif
1690   mirror: always
1692 # Pref to control whether we use a separate privileged content process
1693 # for certain mozilla webpages (which are listed in the pref
1694 # browser.tabs.remote.separatedMozillaDomains).
1695 - name: browser.tabs.remote.separatePrivilegedMozillaWebContentProcess
1696   type: bool
1697   value: false
1698   mirror: always
1700 # Whether or not process selection for subframes will prefer re-using an
1701 # existing content process over creating a new one. Enabling this pref should
1702 # reduce the number of processes allocated for non-first-party domains if
1703 # dom.ipc.processCount.webIsolated > 1.
1704 - name: browser.tabs.remote.subframesPreferUsed
1705   type: bool
1706   value: true
1707   mirror: always
1709 # When this pref is enabled, opaque response is only allowed to enter the
1710 # content process if it's a response for media (audio, image, video), CSS, or
1711 # JavaScript.
1712 - name: browser.opaqueResponseBlocking
1713   type: RelaxedAtomicBool
1714 #if defined(ANDROID)
1715   value: false
1716 #else
1717   value: true
1718 #endif
1719   mirror: always
1721 # When this pref is enabled, the JS validator will be enabled for
1722 # ORB.
1723 - name: browser.opaqueResponseBlocking.javascriptValidator
1724   type: bool
1725   value: true
1726   mirror: always
1728 # This pref controls how filtering of opaque responses for calls to `Window.fetch`.
1729 # (and similar) is performed in the parent process. This is intended to make sure
1730 # that data that would be filtered in a content process never actually reaches that
1731 # content process.
1732 # See https://fetch.spec.whatwg.org/#concept-filtered-response-opaque
1733 #   0) Don't filter in the parent process at all, and let content processes handle
1734 #      opaque filtering. Regardless of if ORB is enabled or not. N.B. that if ORB
1735 #      is enabled opaque responses will be blocked.
1736 #   1) If ORB is enabled, in the parent process, filter the responses that ORB allows.
1737 #      N.B. any responses ORB doesn't allow will not send data to a content process
1738 #      since they will return a NetworkError. If the request is allowed by ORB, the
1739 #      internal response will be intact and sent to the content process as is.
1740 #   2) If ORB is enabled, in the parent process, filter the responses that ORB blocks,
1741 #      when they were issued by `Window.fetch` (and similar).
1742 #   3) Filter all responses in the parent, regardless of if ORB is enabled or not.
1743 #      This means that opaque responses coming from `Window.fetch` won't even be
1744 #      considered for being blocked by ORB.
1745 - name: browser.opaqueResponseBlocking.filterFetchResponse
1746   type: uint32_t
1747   value: 2
1748   mirror: always
1749   do_not_use_directly: true
1751 # This pref controls how exceptions to opaque response blocking for the media MIME types
1752 # `audio/*` and `video/*` are handled. This is because step 8 in the spec that performs
1753 # audio or video type pattern matching cannot handle certain MIME types (yet).
1754 # See https://whatpr.org/fetch/1442.html#orb-algorithm
1755 #   0) No exceptions
1756 #   1) Some exceptions, explicitly hard coded in `IsOpaqueSafeListedSpecBreakingMIMEType`
1757 #   2) Allow all MIME types beginning with `audio/*` or `video/*`.
1758 - name: browser.opaqueResponseBlocking.mediaExceptionsStrategy
1759   type: uint32_t
1760   value: 1
1761   mirror: always
1762   do_not_use_directly: true
1764 # When this pref is enabled, <object> and <embed> elements will create
1765 # synthetic documents when the resource type they're loading is an image.
1766 - name: browser.opaqueResponseBlocking.syntheticBrowsingContext
1767   type: bool
1768   value: true
1769   mirror: once
1771 # When this pref is enabled, <object> and <embed> elements will filter the
1772 # browsing contexts created for the synthetic browsing contexts for the
1773 # synthetic documents when browser.opaqueResponseBlocking.syntheticBrowsingContext
1774 # is enabled from `Window.frames`, `Window.length` and named targeting.
1775 - name: browser.opaqueResponseBlocking.syntheticBrowsingContext.filter
1776   type: bool
1777   value: true
1778   mirror: once
1779   do_not_use_directly: true
1781 # When true, zooming will be enabled on all sites, even ones that declare
1782 # user-scalable=no.
1783 - name: browser.ui.zoom.force-user-scalable
1784   type: RelaxedAtomicBool
1785   value: false
1786   mirror: always
1788 - name: browser.viewport.desktopWidth
1789   type: RelaxedAtomicInt32
1790   value: 980
1791   mirror: always
1793 - name: browser.visited_color
1794   type: String
1795   value: "#551A8B"
1796   mirror: never
1798 # If you change this, you probably also want to change
1799 # nsXPLookAndFeel::GenericDarkColor for MozNativevisitedhyperlinktext.
1800 - name: browser.visited_color.dark
1801   type: String
1802   value: "#FFADFF"
1803   mirror: never
1805 # When true, soft reloads (including location.reload())
1806 # will only froce validate the top level document, subresources will
1807 # be loaded normally as-if users normally navigated to the page.
1808 - name: browser.soft_reload.only_force_validate_top_level_document
1809   type: bool
1810   value: true
1811   mirror: always
1813 # Whether or not to save and restore zoom levels on a per-site basis.
1814 - name: browser.zoom.siteSpecific
1815   type: bool
1816   value: @IS_NOT_ANDROID@
1817   mirror: always
1819 #---------------------------------------------------------------------------
1820 # Prefs starting with "channelclassifier."
1821 #---------------------------------------------------------------------------
1823 - name: channelclassifier.allowlist_example
1824   type: bool
1825   value: false
1826   mirror: always
1828 #---------------------------------------------------------------------------
1829 # Prefs starting with "clipboard."
1830 #---------------------------------------------------------------------------
1832 # Clipboard behavior.
1833 - name: clipboard.autocopy
1834   type: bool
1835 #if !defined(ANDROID) && !defined(XP_MACOSX) && defined(XP_UNIX)
1836   value: true
1837 #else
1838   value: false
1839 #endif
1840   mirror: always
1842 #ifdef XP_WIN
1843   # allow to copy clipboard data to Clipboard History/Cloud
1844   # (used on sensitive data in about:logins and Private Browsing)
1845 -   name: clipboard.copyPrivateDataToClipboardCloudOrHistory
1846     type: bool
1847     value: false
1848     mirror: always
1850   # Whether to put a file promise onto the clipboard when copying images on Windows
1851 -   name: clipboard.imageAsFile.enabled
1852     type: bool
1853     value: @IS_NOT_EARLY_BETA_OR_EARLIER@
1854     mirror: always
1855 #endif
1857 #---------------------------------------------------------------------------
1858 # Prefs starting with "consoleservice."
1859 #---------------------------------------------------------------------------
1861 #if defined(ANDROID)
1862   # Disable sending console to logcat on release builds.
1863 -   name: consoleservice.logcat
1864     type: RelaxedAtomicBool
1865     value: @IS_NOT_RELEASE_OR_BETA@
1866     mirror: always
1867 #endif
1869 #---------------------------------------------------------------------------
1870 # Prefs starting with "content."
1871 #---------------------------------------------------------------------------
1873 - name: content.cors.disable
1874   type: bool
1875   value: false
1876   mirror: always
1878 # Back off timer notification after count.
1879 # -1 means never.
1880 - name: content.notify.backoffcount
1881   type: int32_t
1882   value: -1
1883   mirror: always
1885 # Notification interval in microseconds.
1886 # The notification interval has a dramatic effect on how long it takes to
1887 # initially display content for slow connections. The current value
1888 # provides good incremental display of content without causing an increase
1889 # in page load time. If this value is set below 1/10 of a second it starts
1890 # to impact page load performance.
1891 # See bugzilla bug 72138 for more info.
1892 - name: content.notify.interval
1893   type: int32_t
1894   value: 120000
1895   mirror: always
1897 # Do we notify based on time?
1898 - name: content.notify.ontimer
1899   type: bool
1900   value: true
1901   mirror: always
1903 # How many times to deflect in interactive mode.
1904 - name: content.sink.interactive_deflect_count
1905   type: int32_t
1906   value: 0
1907   mirror: always
1909 # How many times to deflect in perf mode.
1910 - name: content.sink.perf_deflect_count
1911   type: int32_t
1912   value: 200
1913   mirror: always
1915 # Parse mode for handling pending events.
1916 # 0 = don't check for pending events
1917 # 1 = don't deflect if there are pending events
1918 # 2 = bail if there are pending events
1919 - name: content.sink.pending_event_mode
1920   type: int32_t
1921 #ifdef XP_WIN
1922   value: 1
1923 #else
1924   value: 0
1925 #endif
1926   mirror: always
1928 # How often to probe for pending events. 1 = every token.
1929 - name: content.sink.event_probe_rate
1930   type: int32_t
1931   value: 1
1932   mirror: always
1934 # How long to stay off the event loop in interactive mode (microseconds).
1935 - name: content.sink.interactive_parse_time
1936   type: int32_t
1937   value: 3000
1938   mirror: always
1940 # How long to stay off the event loop in perf mode.
1941 - name: content.sink.perf_parse_time
1942   type: int32_t
1943   value: 30000
1944   mirror: always
1946 #  How long to be in interactive mode after an event.
1947 - name: content.sink.interactive_time
1948   type: uint32_t
1949   value: 750000
1950   mirror: always
1952 # How long to stay in perf mode after initial loading.
1953 - name: content.sink.initial_perf_time
1954   type: uint32_t
1955   value: 2000000
1956   mirror: always
1958 # Should we switch between perf-mode and interactive-mode?
1959 # 0 = Switch
1960 # 1 = Interactive mode
1961 # 2 = Perf mode
1962 - name: content.sink.enable_perf_mode
1963   type: int32_t
1964   value: 0
1965   mirror: always
1967 #---------------------------------------------------------------------------
1968 # Prefs starting with "converter."
1969 #---------------------------------------------------------------------------
1971 # Whether we include ruby annotation in the text despite whether it
1972 # is requested. This was true because we didn't explicitly strip out
1973 # annotations. Set false by default to provide a better behavior, but
1974 # we want to be able to pref-off it if user doesn't like it.
1975 - name: converter.html2txt.always_include_ruby
1976   type: bool
1977   value: false
1978   mirror: always
1980 #---------------------------------------------------------------------------
1981 # Prefs starting with "cookiebanners."
1982 #---------------------------------------------------------------------------
1984 # Controls the cookie banner handling mode in normal browsing.
1985 # 0: Disables all cookie banner handling.
1986 # 1: Reject-all if possible, otherwise do nothing.
1987 # 2: Reject-all if possible, otherwise accept-all.
1988 - name: cookiebanners.service.mode
1989   type: uint32_t
1990   value: 0
1991   mirror: always
1993 # When set to true, cookie banners are detected and detection events are
1994 # dispatched, but they will not be handled. Requires the service to be enabled
1995 # for the desired mode via pref cookiebanners.service.mode*
1996 - name: cookiebanners.service.detectOnly
1997   type: bool
1998   value: false
1999   mirror: always
2001 # Controls the cookie banner handling mode in private browsing. Same mode
2002 # options as the normal browsing pref above.
2003 - name: cookiebanners.service.mode.privateBrowsing
2004   type: uint32_t
2005   value: 0
2006   mirror: always
2008 # Enables use of global CookieBannerRules, which apply to all sites. This is
2009 # used for click rules that can handle common Consent Management Providers
2010 # (CMP).
2011 # Enabling this (when the cookie handling feature is enabled) may negatively
2012 # impact site performance since it requires us to run rule-defined query
2013 # selectors for every page.
2014 - name: cookiebanners.service.enableGlobalRules
2015   type: bool
2016   value: true
2017   mirror: always
2019 # Whether global rules are allowed to run in sub-frames. Running query selectors
2020 # in every sub-frame may negatively impact performance, but is required for some
2021 # CMPs.
2022 - name: cookiebanners.service.enableGlobalRules.subFrames
2023   type: bool
2024   value: true
2025   mirror: always
2027 # Enables the cookie banner cookie injector. The cookie banner cookie injector
2028 # depends on the `cookiebanners.service.mode` pref above.
2029 - name: cookiebanners.cookieInjector.enabled
2030   type: bool
2031   value: true
2032   mirror: always
2034 # By default, how many seconds in the future cookies should expire after they
2035 # have been injected. Defaults to 12 months. Individual cookie rules may
2036 # override this.
2037 - name: cookiebanners.cookieInjector.defaultExpiryRelative
2038   type: uint32_t
2039   value: 31536000
2040   mirror: always
2042 # How many times per site and site load to check for cookie banners after which
2043 # the mechanism is considered on cooldown for the site in the current browsing
2044 # session. If the threshold is set to zero, banner clicking won't be considered
2045 # as being on cooldown regardless of how many times the site is loaded. The
2046 # maximum value for the retry is 255, any value over than that will be capped.
2047 - name: cookiebanners.bannerClicking.maxTriesPerSiteAndSession
2048   type: uint32_t
2049   value: 3
2050   mirror: always
2052 #---------------------------------------------------------------------------
2053 # Prefs starting with "datareporting."
2054 #---------------------------------------------------------------------------
2056 - name: datareporting.healthreport.uploadEnabled
2057   type: RelaxedAtomicBool
2058   value: false
2059   mirror: always
2060   rust: true
2062 #---------------------------------------------------------------------------
2063 # Prefs starting with "device."
2064 #---------------------------------------------------------------------------
2066 # Is support for the device sensors API enabled?
2067 - name: device.sensors.enabled
2068   type: bool
2069   value: true
2070   mirror: always
2072 # KaiOS-only, see https://bugzilla.mozilla.org/show_bug.cgi?id=1699707#c10
2073 - name: device.sensors.ambientLight.enabled
2074   type: bool
2075   value: false
2076   mirror: always
2078 - name: device.sensors.motion.enabled
2079   type: bool
2080   value: true
2081   mirror: always
2083 - name: device.sensors.orientation.enabled
2084   type: bool
2085   value: true
2086   mirror: always
2088 # KaiOS-only, see https://bugzilla.mozilla.org/show_bug.cgi?id=1699707#c10
2089 - name: device.sensors.proximity.enabled
2090   type: bool
2091   value: false
2092   mirror: always
2094 - name: device.sensors.test.events
2095   type: bool
2096   value: false
2097   mirror: always
2099 #---------------------------------------------------------------------------
2100 # Prefs starting with "devtools."
2101 #---------------------------------------------------------------------------
2103 - name: devtools.console.stdout.chrome
2104   type: RelaxedAtomicBool
2105   value: @IS_NOT_MOZILLA_OFFICIAL@
2106   mirror: always
2108 - name: devtools.console.stdout.content
2109   type: RelaxedAtomicBool
2110   value: false
2111   mirror: always
2113 #---------------------------------------------------------------------------
2114 # Prefs starting with "docshell."
2115 #---------------------------------------------------------------------------
2117 # Used to indicate whether session history listeners should be notified
2118 # about content viewer eviction. Used only for testing.
2119 - name: docshell.shistory.testing.bfevict
2120   type: bool
2121   value: false
2122   mirror: always
2124 # If true, pages with an opener won't be bfcached.
2125 - name: docshell.shistory.bfcache.require_no_opener
2126   type: bool
2127   value: @IS_ANDROID@
2128   mirror: always
2130 # If true, page with beforeunload or unload event listeners can be bfcached.
2131 - name: docshell.shistory.bfcache.allow_unload_listeners
2132   type: bool
2133   value: @IS_ANDROID@
2134   mirror: always
2136 # If true, page with beforeunload event listeners can be bfcached.
2137 # This only works when sessionHistoryInParent is enabled.
2138 - name: docshell.shistory.bfcache.ship_allow_beforeunload_listeners
2139   type: bool
2140   value: true
2141   mirror: always
2143 #---------------------------------------------------------------------------
2144 # Prefs starting with "dom."
2145 #---------------------------------------------------------------------------
2147 # Allow cut/copy
2148 - name: dom.allow_cut_copy
2149   type: bool
2150   value: true
2151   mirror: always
2153 # Checks if offscreen animation throttling is enabled.
2154 - name: dom.animations.offscreen-throttling
2155   type: bool
2156   value: true
2157   mirror: always
2159 # Is support for composite operations from the Web Animations API enabled?
2160 - name: dom.animations-api.compositing.enabled
2161   type: bool
2162   value: true
2163   mirror: always
2165 # Is support for Document.getAnimations() and Element.getAnimations()
2166 # supported?
2167 - name: dom.animations-api.getAnimations.enabled
2168   type: bool
2169   value: true
2170   mirror: always
2172 # Is support for timelines from the Web Animations API enabled?
2173 - name: dom.animations-api.timelines.enabled
2174   type: bool
2175   value: true
2176   mirror: always
2178 # Synchronize transform animations with geometric animations on the
2179 # main thread.
2180 - name: dom.animations.mainthread-synchronization-with-geometric-animations
2181   type: bool
2182   value: false
2183   mirror: always
2185 # Is support for Navigator.getBattery enabled?
2186 - name: dom.battery.enabled
2187   type: bool
2188   value: true
2189   mirror: always
2191 # Block multiple external protocol URLs in iframes per single event.
2192 - name: dom.block_external_protocol_in_iframes
2193   type: bool
2194   value: true
2195   mirror: always
2197 # Block sandboxed BrowsingContexts from navigating to external protocols.
2198 - name: dom.block_external_protocol_navigation_from_sandbox
2199   type: bool
2200   value: true
2201   mirror: always
2203 # Block Insecure downloads from Secure Origins
2204 - name: dom.block_download_insecure
2205   type: bool
2206   value: true
2207   mirror: always
2209 # Block multiple window.open() per single event.
2210 - name: dom.block_multiple_popups
2211   type: bool
2212   value: true
2213   mirror: always
2215 # The maximum number of popup that is allowed to be opened. Set to -1 for no
2216 # limit.
2217 - name: dom.popup_maximum
2218   type: int32_t
2219   value: 20
2220   mirror: always
2222 # Whether window.location.reload() and window.history.go(0) should be blocked
2223 # when called directly from a window resize event handler.
2225 # This used to be necessary long ago to prevent terrible UX when using stuff
2226 # like TypeAheadFind (bug 258917), but it also causes compat issues on mobile
2227 # (bug 1570566).
2228 - name: dom.block_reload_from_resize_event_handler
2229   type: bool
2230   value: false
2231   mirror: always
2233   # Enable CacheAPI in private browsing mode with encryption
2234 - name: dom.cache.privateBrowsing.enabled
2235   type: RelaxedAtomicBool
2236   value: true
2237   mirror: always
2239 # Exposes window.caches and skips SecureContext check.
2240 # dom.serviceWorkers.testing.enabled also includes the same effect.
2241 - name: dom.caches.testing.enabled
2242   type: RelaxedAtomicBool
2243   value: false
2244   mirror: always
2246 # Disable capture attribute for input elements; only supported on GeckoView.
2247 - name: dom.capture.enabled
2248   type: bool
2249   value: false
2250   mirror: always
2252 # HTML specification says the level should be 5
2253 # https://html.spec.whatwg.org/#timer-initialisation-steps
2254 - name: dom.clamp.timeout.nesting.level
2255   type: uint32_t
2256   value: 5
2257   mirror: once
2259 # Disable custom highlight API; implementation pending.
2260 - name: dom.customHighlightAPI.enabled
2261   type: RelaxedAtomicBool
2262   value: @IS_NIGHTLY_BUILD@
2263   mirror: always
2264   rust: true
2266 # Allow control characters appear in composition string.
2267 # When this is false, control characters except
2268 # CHARACTER TABULATION (horizontal tab) are removed from
2269 # both composition string and data attribute of compositionupdate
2270 # and compositionend events.
2271 - name: dom.compositionevent.allow_control_characters
2272   type: bool
2273   value: false
2274   mirror: always
2276 # Compression Streams (CompressionStream/DecompressionStream)
2277 - name: dom.compression_streams.enabled
2278   type: RelaxedAtomicBool
2279   value: true
2280   mirror: always
2282 # Is support for CSSPseudoElement enabled?
2283 - name: dom.css_pseudo_element.enabled
2284   type: bool
2285   value: false
2286   mirror: always
2288 # After how many seconds we allow external protocol URLs in iframe when not in
2289 # single events
2290 - name: dom.delay.block_external_protocol_in_iframes
2291   type: uint32_t
2292   value: 10   # in seconds
2293   mirror: always
2295 # Whether the above pref has any effect at all.
2296 # Make sure cases like bug 1795380 work before trying to turn this off. See
2297 # bug 1680721 for some other context that might be relevant.
2298 - name: dom.delay.block_external_protocol_in_iframes.enabled
2299   type: bool
2300   value: true
2301   mirror: always
2303 # Only propagate the open window click permission if the setTimeout() is equal
2304 # to or less than this value.
2305 - name: dom.disable_open_click_delay
2306   type: int32_t
2307   value: 1000
2308   mirror: always
2310 - name: dom.disable_open_during_load
2311   type: bool
2312   value: false
2313   mirror: always
2315 - name: dom.disable_beforeunload
2316   type: bool
2317   value: false
2318   mirror: always
2320 - name: dom.require_user_interaction_for_beforeunload
2321   type: bool
2322   value: true
2323   mirror: always
2325 # Enable/disable Gecko specific edit commands
2326 - name: dom.document.edit_command.contentReadOnly.enabled
2327   type: bool
2328   value: @IS_NOT_EARLY_BETA_OR_EARLIER@
2329   mirror: always
2331 - name: dom.document.edit_command.insertBrOnReturn.enabled
2332   type: bool
2333   value: @IS_NOT_EARLY_BETA_OR_EARLIER@
2334   mirror: always
2336 # If set this to true, `Document.execCommand` may be performed nestedly.
2337 # Otherwise, nested calls just return false.
2338 - name: dom.document.exec_command.nested_calls_allowed
2339   type: bool
2340   value: false
2341   mirror: always
2343 # Only intended for fuzzing purposes, this will break mozPrintCallback, etc.
2344 - name: dom.window_print.fuzzing.block_while_printing
2345   type: bool
2346   value: false
2347   mirror: always
2349 - name: dom.element.transform-getters.enabled
2350   type: bool
2351   value: false
2352   mirror: always
2354 # Whether the popover attribute implementation is enabled,
2355 # see https://html.spec.whatwg.org/#the-popover-attribute
2356 - name: dom.element.popover.enabled
2357   type: RelaxedAtomicBool
2358   value: @IS_NIGHTLY_BUILD@
2359   mirror: always
2360   rust: true
2362 # Whether CustomStateSet is enabled
2363 - name: dom.element.customstateset.enabled
2364   type: RelaxedAtomicBool
2365   value: false
2366   mirror: always
2367   rust: true
2369 # Whether the invoketarget attribute implementation is enabled
2370 - name: dom.element.invokers.enabled
2371   type: bool
2372   value: false
2373   mirror: always
2375 - name: dom.mouse_capture.enabled
2376   type: bool
2377   value: true
2378   mirror: always
2380 # Is support for Performance.mozMemory enabled?
2381 - name: dom.enable_memory_stats
2382   type: bool
2383   value: false
2384   mirror: always
2386 # Enable Performance API
2387 # Whether nonzero values can be returned from performance.timing.*
2388 - name: dom.enable_performance
2389   type: RelaxedAtomicBool
2390   value: true
2391   mirror: always
2393 # Enable Performance Observer API
2394 - name: dom.enable_performance_observer
2395   type: RelaxedAtomicBool
2396   value: true
2397   mirror: always
2399 # Whether resource timing will be gathered and returned by performance.GetEntries*
2400 - name: dom.enable_resource_timing
2401   type: bool
2402   value: true
2403   mirror: always
2405 # Whether event timing will be gathered and returned by performance observer*
2406 - name: dom.enable_event_timing
2407   type: RelaxedAtomicBool
2408   value: true
2409   mirror: always
2411 # Whether the LargestContentfulPaint API will be gathered and returned by performance observer*
2412 - name: dom.enable_largest_contentful_paint
2413   type: RelaxedAtomicBool
2414   value: true
2415   mirror: always
2417 # Whether performance.GetEntries* will contain an entry for the active document
2418 - name: dom.enable_performance_navigation_timing
2419   type: bool
2420   value: true
2421   mirror: always
2423 # Whether the scheduler interface will be exposed
2424 - name: dom.enable_web_task_scheduling
2425   type: RelaxedAtomicBool
2426   value: @IS_NIGHTLY_BUILD@
2427   mirror: always
2429 # If this is true, it's allowed to fire "cut", "copy" and "paste" events.
2430 # Additionally, "input" events may expose clipboard content when inputType
2431 # is "insertFromPaste" or something.
2432 - name: dom.event.clipboardevents.enabled
2433   type: bool
2434   value: true
2435   mirror: always
2437 # Whether Shift+Right click force-opens the context menu
2438 - name: dom.event.contextmenu.shift_suppresses_event
2439   type: bool
2440   value: true
2441   mirror: always
2443 # Whether wheel listeners are passive by default.
2444 - name: dom.event.default_to_passive_wheel_listeners
2445   type: bool
2446   value: true
2447   mirror: always
2449 - name: dom.event.dragexit.enabled
2450   type: bool
2451   value: @IS_NOT_NIGHTLY_BUILD@
2452   mirror: always
2454 # If this pref is set to true, typing a surrogate pair causes one `keypress`
2455 # event whose `charCode` stores the unicode code point over 0xFFFF.  This is
2456 # compatible with Safari and Chrome in non-Windows platforms.
2457 # Otherwise, typing a surrogate pair causes two `keypress` events.  This is
2458 # compatible with legacy web apps which does
2459 # `String.fromCharCode(event.charCode)`.
2460 - name: dom.event.keypress.dispatch_once_per_surrogate_pair
2461   type: bool
2462   value: false
2463   mirror: always
2465 # This is meaningful only when `dispatch_once_per_surrogate_pair` is false.
2466 # If this pref is set to true, `.key` of the first `keypress` is set to the
2467 # high-surrogate and `.key` of the other is set to the low-surrogate.
2468 # Therefore, setting this exposing ill-formed UTF-16 string with `.key`.
2469 # (And also `InputEvent.data` if pressed in an editable element.)
2470 # Otherwise, `.key` of the first `keypress` is set to the surrogate pair, and
2471 # `.key` of the second `keypress` is set to the empty string.
2472 - name: dom.event.keypress.key.allow_lone_surrogate
2473   type: bool
2474   value: @IS_NOT_EARLY_BETA_OR_EARLIER@
2475   mirror: always
2477 # Whether wheel event target's should be grouped. When enabled, all wheel
2478 # events that occur in a given wheel transaction have the same event target.
2479 - name: dom.event.wheel-event-groups.enabled
2480   type: bool
2481   value: true
2482   mirror: always
2484 # Whether WheelEvent should return pixels instead of lines for
2485 # WheelEvent.deltaX/Y/Z, when deltaMode hasn't been checked.
2487 # Other browsers don't use line deltas and websites forget to check for it, see
2488 # bug 1392460.
2489 - name: dom.event.wheel-deltaMode-lines.disabled
2490   type: bool
2491   value: true
2492   mirror: always
2494 # Mostly for debugging. Whether we should do the same as
2495 # dom.event.wheel-deltaMode-lines.disabled, but unconditionally rather than
2496 # only when deltaMode hasn't been checked.
2497 - name: dom.event.wheel-deltaMode-lines.always-disabled
2498   type: bool
2499   value: false
2500   mirror: always
2502 # A blocklist (list of domains) for the
2503 # dom.event.wheel-deltaMode-lines.disabled behavior, in case potential
2504 # unforeseen problems with it arrive.
2505 - name: dom.event.wheel-deltaMode-lines.always-enabled
2506   type: String
2507   value: ""
2508   mirror: never
2510 #if defined(XP_MACOSX)
2511 # Whether to disable treating ctrl click as right click
2512 - name: dom.event.treat_ctrl_click_as_right_click.disabled
2513   type: bool
2514   value: @IS_NIGHTLY_BUILD@
2515   mirror: always
2516 #endif
2518 # Whether .offset{X,Y} for events targeted at SVG nodes returns bounds relative
2519 # to the outer SVG.
2520 - name: dom.events.offset-in-svg-relative-to-svg-root
2521   type: bool
2522   value: true
2523   mirror: always
2525 # Control whether clipboard.read(), clipboard.write() and ClipboardItem are exposed
2526 # to content.
2527 - name: dom.events.asyncClipboard.clipboardItem
2528   type: bool
2529   value: @IS_EARLY_BETA_OR_EARLIER@
2530   mirror: always
2532 # Skips checking permission and user activation when accessing the clipboard.
2533 # Should only be enabled in tests.
2534 # Access with Clipboard::IsTestingPrefEnabled().
2535 - name: dom.events.testing.asyncClipboard
2536   type: bool
2537   value: false
2538   mirror: always
2539   do_not_use_directly: true
2541 # Control whether `navigator.clipboard.readText()` is exposed to content.
2542 - name: dom.events.asyncClipboard.readText
2543   type: bool
2544   value: @IS_EARLY_BETA_OR_EARLIER@
2545   mirror: always
2546   do_not_use_directly: true
2548 # Guard for bug 1731504, in case fix breaks more websites
2549 # If true, event is first captured then bubbled on target element
2550 - name: dom.events.phases.correctOrderOnTarget
2551   type: RelaxedAtomicBool
2552   value: true
2553   mirror: always
2555 # This pref controls whether or not the `protected` dataTransfer state is
2556 # enabled. If the `protected` dataTransfer stae is disabled, then the
2557 # DataTransfer will be read-only whenever it should be protected, and will not
2558 # be disconnected after a drag event is completed.
2559 - name: dom.events.dataTransfer.protected.enabled
2560   type: bool
2561   value: false
2562   mirror: always
2564 # Whether to hide normal files (i.e. non-images) in dataTransfer inside
2565 # the content process.
2566 - name: dom.events.dataTransfer.mozFile.enabled
2567   type: bool
2568   value: true
2569   mirror: always
2571 - name: dom.events.dataTransfer.imageAsFile.enabled
2572   type: bool
2573   value: false
2574   mirror: always
2576 # User interaction timer interval, in ms
2577 - name: dom.events.user_interaction_interval
2578   type: uint32_t
2579   value: 5000
2580   mirror: always
2582 # Whether to try to compress touchmove events on IPC layer.
2583 - name: dom.events.compress.touchmove
2584   type: bool
2585   value: true
2586   mirror: always
2588 # In addition to the above IPC layer compresison, allow touchmove
2589 # events to be further coalesced in the child side after they
2590 # are sent.
2591 - name: dom.events.coalesce.touchmove
2592   type: bool
2593   value: true
2594   mirror: always
2596 # Allow mousemove events to be coalesced in the child side after they are sent.
2597 - name: dom.events.coalesce.mousemove
2598   type: bool
2599   value: true
2600   mirror: always
2602 # Whether to expose test interfaces of various sorts
2603 - name: dom.expose_test_interfaces
2604   type: bool
2605   value: false
2606   mirror: always
2608 - name: dom.fetchObserver.enabled
2609   type: RelaxedAtomicBool
2610   value: false
2611   mirror: always
2613 # Allow the content process to create a File from a path. This is allowed just
2614 # on parent process, on 'file' Content process, or for testing.
2615 - name: dom.file.createInChild
2616   type: RelaxedAtomicBool
2617   value: false
2618   mirror: always
2620 # Support @autocomplete values for form autofill feature.
2621 - name: dom.forms.autocomplete.formautofill
2622   type: bool
2623   value: false
2624   mirror: always
2626 # Only trusted submit event could trigger form submission.
2627 - name: dom.forms.submit.trusted_event_only
2628   type: bool
2629   value: false
2630   mirror: always
2632 # This pref just controls whether we format the number with grouping separator
2633 # characters when the internal value is set or updated. It does not stop the
2634 # user from typing in a number and using grouping separators.
2635 - name: dom.forms.number.grouping
2636   type: bool
2637   value: false
2638   mirror: always
2640 # Whether the Gamepad API is enabled
2641 - name: dom.gamepad.enabled
2642   type: bool
2643   value: true
2644   mirror: always
2646 # Is Gamepad Extension API enabled?
2647 - name: dom.gamepad.extensions.enabled
2648   type: bool
2649   value: true
2650   mirror: always
2652 # Is LightIndicator API enabled in Gamepad Extension API?
2653 - name: dom.gamepad.extensions.lightindicator
2654   type: bool
2655   value: false
2656   mirror: always
2658 # Is MultiTouch API enabled in Gamepad Extension API?
2659 - name: dom.gamepad.extensions.multitouch
2660   type: bool
2661   value: false
2662   mirror: always
2664 # Is Gamepad vibrate haptic feedback function enabled?
2665 - name: dom.gamepad.haptic_feedback.enabled
2666   type: bool
2667   value: true
2668   mirror: always
2670 - name: dom.gamepad.non_standard_events.enabled
2671   type: bool
2672   value: @IS_NOT_RELEASE_OR_BETA@
2673   mirror: always
2675 - name: dom.gamepad.test.enabled
2676   type: RelaxedAtomicBool
2677   value: false
2678   mirror: always
2680 # W3C draft ImageCapture API
2681 - name: dom.imagecapture.enabled
2682   type: bool
2683   value: false
2684   mirror: always
2686 # The root margin for image lazy loading, defined as four (value, percentage)
2687 # pairs.
2688 - name: dom.image-lazy-loading.root-margin.top
2689   type: float
2690   value: 600
2691   mirror: always
2693 - name: dom.image-lazy-loading.root-margin.top.percentage
2694   type: bool
2695   value: false
2696   mirror: always
2698 - name: dom.image-lazy-loading.root-margin.bottom
2699   type: float
2700   value: 600
2701   mirror: always
2703 - name: dom.image-lazy-loading.root-margin.bottom.percentage
2704   type: bool
2705   value: false
2706   mirror: always
2708 - name: dom.image-lazy-loading.root-margin.left
2709   type: float
2710   value: 600
2711   mirror: always
2713 - name: dom.image-lazy-loading.root-margin.left.percentage
2714   type: bool
2715   value: false
2716   mirror: always
2718 - name: dom.image-lazy-loading.root-margin.right
2719   type: float
2720   value: 600
2721   mirror: always
2723 - name: dom.image-lazy-loading.root-margin.right.percentage
2724   type: bool
2725   value: false
2726   mirror: always
2728 # Enable indexedDB in private browsing mode with encryption
2729 - name: dom.indexedDB.privateBrowsing.enabled
2730   type: RelaxedAtomicBool
2731   value: true
2732   mirror: always
2734 # Whether or not indexedDB test mode is enabled.
2735 - name: dom.indexedDB.testing
2736   type: RelaxedAtomicBool
2737   value: false
2738   mirror: always
2740 # Whether or not indexedDB experimental features are enabled.
2741 - name: dom.indexedDB.experimental
2742   type: RelaxedAtomicBool
2743   value: false
2744   mirror: always
2746 # Whether or not indexedDB preprocessing is enabled.
2747 - name: dom.indexedDB.preprocessing
2748   type: RelaxedAtomicBool
2749   value: false
2750   mirror: always
2752 # Whether innerWidth / innerHeight return rounded or fractional sizes.
2754 # NOTE(emilio): Fractional sizes are not web-compatible, see the regressions
2755 # from bug 1676843, but we want to expose the fractional sizes (probably in
2756 # another API) one way or another, see [1], so we're keeping the code for the
2757 # time being.
2759 # [1]: https://github.com/w3c/csswg-drafts/issues/5260
2760 - name: dom.innerSize.rounded
2761   type: bool
2762   value: true
2763   mirror: always
2765 # Whether we conform to Input Events Level 1 or Input Events Level 2.
2766 # true:  conforming to Level 1
2767 # false: conforming to Level 2
2768 - name: dom.input_events.conform_to_level_1
2769   type: bool
2770   value: true
2771   mirror: always
2773 # Whether we allow BrowsingContextGroup to suspend input events
2774 - name: dom.input_events.canSuspendInBCG.enabled
2775   type: bool
2776   value: false
2777   mirror: always
2779 # The minimum number of ticks after page navigation
2780 # that need to occur before user input events are allowed to be handled.
2781 - name: dom.input_events.security.minNumTicks
2782   type: uint32_t
2783   value: 3
2784   mirror: always
2786 # The minimum elapsed time (in milliseconds) after page navigation
2787 # for user input events are allowed to be handled.
2788 - name: dom.input_events.security.minTimeElapsedInMS
2789   type: uint32_t
2790   value: 100
2791   mirror: always
2793 # By default user input handling delay is disabled (mostly) for testing ,
2794 # this is used for forcefully enable it for certain tests.
2795 - name: dom.input_events.security.isUserInputHandlingDelayTest
2796   type: bool
2797   value: false
2798   mirror: always
2800 # The maximum time (milliseconds) we reserve for handling input events in each
2801 # frame.
2802 - name: dom.input_event_queue.duration.max
2803   type: uint32_t
2804   value: 8
2805   mirror: always
2807 # Enable not moving the cursor to end when a text input or textarea has .value
2808 # set to the value it already has.  By default, enabled.
2809 - name: dom.input.skip_cursor_move_for_same_value_set
2810   type: bool
2811   value: true
2812   mirror: always
2814 # How often to check for CPOW timeouts (ms). CPOWs are only timed
2815 # out by the hang monitor.
2816 - name: dom.ipc.cpow.timeout
2817   type: uint32_t
2818   value: 500
2819   mirror: always
2821 #ifdef MOZ_ENABLE_FORKSERVER
2822 - name: dom.ipc.forkserver.enable
2823   type: bool
2824   value: false
2825   mirror: once
2826 #endif
2828 #ifdef MOZ_WIDGET_GTK
2830 # Avoid the use of GTK in content processes if possible, by running
2831 # them in headless mode, to conserve resources (e.g., connections to
2832 # the X server).  See the usage in `ContentParent.cpp` for the full
2833 # definition of "if possible".
2835 # This does not affect sandbox policies; content processes may still
2836 # dynamically connect to the display server for, e.g., WebGL.
2837 - name: dom.ipc.avoid-gtk
2838   type: bool
2839   value: true
2840   mirror: always
2841 #endif
2843 # Whether or not to collect a paired minidump when force-killing a
2844 # content process.
2845 - name: dom.ipc.tabs.createKillHardCrashReports
2846   type: bool
2847   value: @IS_NOT_RELEASE_OR_BETA@
2848   mirror: once
2850 # Enable e10s hang monitoring (slow script checking and plugin hang detection).
2851 - name: dom.ipc.processHangMonitor
2852   type: bool
2853   value: true
2854   mirror: once
2856 # Whether we report such process hangs
2857 - name: dom.ipc.reportProcessHangs
2858   type: RelaxedAtomicBool
2859 # Don't report hangs in DEBUG builds. They're too slow and often a
2860 # debugger is attached.
2861 #ifdef DEBUG
2862   value: false
2863 #else
2864   value: true
2865 #endif
2866   mirror: always
2868 # Process launch delay (in milliseconds).
2869 - name: dom.ipc.processPrelaunch.delayMs
2870   type: uint32_t
2871 # This number is fairly arbitrary ... the intention is to put off
2872 # launching another app process until the last one has finished
2873 # loading its content, to reduce CPU/memory/IO contention.
2874   value: 1000
2875   mirror: always
2877 - name: dom.ipc.processPrelaunch.startupDelayMs
2878   type: uint32_t
2879 # delay starting content processes for a short time after browser start
2880 # to provide time for the UI to come up
2881   value: 1000
2882   mirror: always
2884 # Process preallocation cache
2885 # Only used in fission; in e10s we use 1 always
2886 - name: dom.ipc.processPrelaunch.fission.number
2887   type: uint32_t
2888   value: 3
2889   mirror: always
2891 # Limit preallocated processes below this memory size (in MB)
2892 - name: dom.ipc.processPrelaunch.lowmem_mb
2893   type: uint32_t
2894   value: 4096
2895   mirror: always
2897 - name: dom.ipc.processPriorityManager.enabled
2898   type: bool
2899   value: true
2900   mirror: always
2902 - name: dom.ipc.processPriorityManager.testMode
2903   type: bool
2904   value: false
2905   mirror: always
2907 - name: dom.ipc.processPriorityManager.backgroundPerceivableGracePeriodMS
2908   type: uint32_t
2909 #if defined(MOZ_WIDGET_ANDROID) && defined(NIGHTLY_BUILD)
2910   value: 3000
2911 #else
2912   value: 0
2913 #endif
2914   mirror: always
2916 - name: dom.ipc.processPriorityManager.backgroundGracePeriodMS
2917   type: uint32_t
2918 #if defined(MOZ_WIDGET_ANDROID) && defined(NIGHTLY_BUILD)
2919   value: 3000
2920 #else
2921   value: 0
2922 #endif
2923   mirror: always
2925 #ifdef XP_WIN
2926 - name: dom.ipc.processPriorityManager.backgroundUsesEcoQoS
2927   type: bool
2928   value: false
2929   mirror: always
2930 #endif
2932 # Support for input type=month, type=week. By default, disabled.
2933 - name: dom.forms.datetime.others
2934   type: bool
2935   value: @IS_ANDROID@
2936   mirror: always
2938 - name: dom.forms.always_allow_pointer_events.enabled
2939   type: bool
2940   value: @IS_EARLY_BETA_OR_EARLIER@
2941   mirror: always
2943 # Is support for key events and focus events on disabled elements enabled?
2944 - name: dom.forms.always_allow_key_and_focus_events.enabled
2945   type: bool
2946   value: @IS_NIGHTLY_BUILD@
2947   mirror: always
2949 # Whether to disable only the descendants or the parent fieldset element too
2950 # Note that this still allows it to be selected by `:disable`.
2951 - name: dom.forms.fieldset_disable_only_descendants.enabled
2952   type: bool
2953   value: @IS_EARLY_BETA_OR_EARLIER@
2954   mirror: always
2956 # Whether to allow or disallow web apps to cancel `beforeinput` events caused
2957 # by MozEditableElement#setUserInput() which is used by autocomplete, autofill
2958 # and password manager.
2959 - name: dom.input_event.allow_to_cancel_set_user_input
2960   type: bool
2961   value: false
2962   mirror: always
2964 # How long a content process can take before closing its IPC channel
2965 # after shutdown is initiated.  If the process exceeds the timeout,
2966 # we fear the worst and kill it.
2967 - name: dom.ipc.tabs.shutdownTimeoutSecs
2968   type: RelaxedAtomicUint32
2969 #if !defined(DEBUG) && !defined(MOZ_ASAN) && !defined(MOZ_VALGRIND) && !defined(MOZ_TSAN)
2970   value: 20
2971 #else
2972   value: 0
2973 #endif
2974   mirror: always
2976 # Whether a native event loop should be used in the content process.
2977 - name: dom.ipc.useNativeEventProcessing.content
2978   type: RelaxedAtomicBool
2979 #if defined(XP_WIN) || defined(XP_MACOSX)
2980   value: false
2981 #else
2982   value: true
2983 #endif
2984   mirror: always
2986 # If this is true, TextEventDispatcher dispatches keydown and keyup events
2987 # even during composition (keypress events are never fired during composition
2988 # even if this is true).
2989 - name: dom.keyboardevent.dispatch_during_composition
2990   type: bool
2991   value: true
2992   mirror: always
2994 # Enable/disable KeyboardEvent.initKeyEvent function
2995 - name: dom.keyboardevent.init_key_event.enabled
2996   type: bool
2997   value: false
2998   mirror: always
3000 # Enable/disable KeyboardEvent.initKeyEvent function in addons even if it's
3001 # disabled.
3002 - name: dom.keyboardevent.init_key_event.enabled_in_addons
3003   type: bool
3004   value: @IS_NOT_NIGHTLY_BUILD@
3005   mirror: always
3007 # If this is true, keypress events for non-printable keys are dispatched only
3008 # for event listeners of the system event group in web content.
3009 - name: dom.keyboardevent.keypress.dispatch_non_printable_keys_only_system_group_in_content
3010   type: bool
3011   value: true
3012   mirror: always
3014 # If this is true, "keypress" event's keyCode value and charCode value always
3015 # become same if the event is not created/initialized by JS.
3016 - name: dom.keyboardevent.keypress.set_keycode_and_charcode_to_same_value
3017   type: bool
3018   value: true
3019   mirror: always
3021 # Whether "W3C Web Manifest" processing is enabled
3022 - name: dom.manifest.enabled
3023   type: bool
3024   value: true
3025   mirror: always
3027 # Enable mapped array buffer by default.
3028 - name: dom.mapped_arraybuffer.enabled
3029   type: bool
3030   value: true
3031   mirror: always
3033 # Autoplay Policy Detection https://w3c.github.io/autoplay/
3034 - name: dom.media.autoplay-policy-detection.enabled
3035   type: RelaxedAtomicBool
3036   value: true
3037   mirror: always
3039 # WebCodecs API
3040 - name: dom.media.webcodecs.enabled
3041   type: RelaxedAtomicBool
3042   value: @IS_NIGHTLY_BUILD@
3043   mirror: always
3045 - name: dom.media.webcodecs.force-osx-h264-enabled
3046   type: RelaxedAtomicBool
3047   value: false
3048   mirror: always
3050 # Number of seconds of very quiet or silent audio before considering the audio
3051 # inaudible.
3052 - name: dom.media.silence_duration_for_audibility
3053   type: AtomicFloat
3054   value: 2.0f
3055   mirror: always
3057 # Inform mozjemalloc that the foreground content processes can keep more dirty
3058 # pages in memory.
3059 - name: dom.memory.foreground_content_processes_have_larger_page_cache
3060   type: bool
3061   value: true
3062   mirror: always
3064 # Enable meta-viewport support in remote APZ-enabled frames.
3065 - name: dom.meta-viewport.enabled
3066   type: RelaxedAtomicBool
3067   value: false
3068   mirror: always
3070 # Timeout clamp in ms for timeouts we clamp.
3071 - name: dom.min_timeout_value
3072   type: RelaxedAtomicInt32
3073   value: 4
3074   mirror: always
3076 # Timeout clamp in ms for background windows.
3077 - name: dom.min_background_timeout_value
3078   type: int32_t
3079   value: 1000
3080   mirror: always
3082 # Timeout clamp in ms for background windows when throttling isn't enabled.
3083 - name: dom.min_background_timeout_value_without_budget_throttling
3084   type: int32_t
3085   value: 1000
3086   mirror: always
3088 # Are missing-property use counters for certain DOM attributes enabled?
3089 - name: dom.missing_prop_counters.enabled
3090   type: bool
3091   value: true
3092   mirror: always
3094 # Is support for import maps (<script type="importmap">) enabled for content?
3095 - name: dom.importMaps.enabled
3096   type: bool
3097   value: true
3098   mirror: always
3100 # Whether we disable triggering mutation events for changes to style
3101 # attribute via CSSOM.
3102 # NOTE: This preference is used in unit tests. If it is removed or its default
3103 # value changes, please update test_sharedMap_static_prefs.js accordingly.
3104 - name: dom.mutation-events.cssom.disabled
3105   type: bool
3106   value: true
3107   mirror: always
3109 # Limit of location change caused by content scripts in a time span per
3110 # BrowsingContext. This includes calls to History and Location APIs.
3111 - name: dom.navigation.locationChangeRateLimit.count
3112   type: uint32_t
3113   value: 200
3114   mirror: always
3116 # Time span in seconds for location change rate limit.
3117 - name: dom.navigation.locationChangeRateLimit.timespan
3118   type: uint32_t
3119   value: 10
3120   mirror: always
3122 # Network Information API
3123 # This feature is not available on Firefox desktop. It exposes too much
3124 # user information. Let's be consistent and disable it on Android.
3125 # But let's keep it around in case it becomes necessary for webcompat
3126 # reasons
3127 # https://bugzilla.mozilla.org/show_bug.cgi?id=1637922
3128 - name: dom.netinfo.enabled
3129   type: RelaxedAtomicBool
3130   value: false
3131   mirror: always
3133 # Whether we should open noopener links in a new process.
3134 - name: dom.noopener.newprocess.enabled
3135   type: bool
3136   value: true
3137   mirror: always
3139 # Whether we shouldn't show an error page for unknown protocols (and should
3140 # show a console warning instead).
3141 - name: dom.no_unknown_protocol_error.enabled
3142   type: bool
3143   value: true
3144   mirror: always
3146 # Whether origin trials are enabled.
3147 - name: dom.origin-trials.enabled
3148   type: bool
3149   value: true
3150   mirror: always
3152 # Whether we use the test key to verify tokens.
3153 - name: dom.origin-trials.test-key.enabled
3154   type: bool
3155   value: false
3156   mirror: always
3158 # Origin trial state for "TestTrial".
3159 # 0: normal, 1: always-enabled, 2: always-disabled
3160 - name: dom.origin-trials.test-trial.state
3161   type: RelaxedAtomicInt32
3162   value: 0
3163   mirror: always
3165 # Origin trial state for COEP: Credentialless.
3166 # 0: normal, 1: always-enabled, 2: always-disabled
3167 - name: dom.origin-trials.coep-credentialless.state
3168   type: RelaxedAtomicInt32
3169   value: 0
3170   mirror: always
3172 # Is support for Window.paintWorklet enabled?
3173 - name: dom.paintWorklet.enabled
3174   type: bool
3175   value: false
3176   mirror: always
3178 # Enable/disable the PaymentRequest API
3179 - name: dom.payments.request.enabled
3180   type: bool
3181   value: false
3182   mirror: always
3184 # Whether a user gesture is required to call PaymentRequest.prototype.show().
3185 - name: dom.payments.request.user_interaction_required
3186   type: bool
3187   value: true
3188   mirror: always
3190 # Time in milliseconds for PaymentResponse to wait for
3191 # the Web page to call complete().
3192 - name: dom.payments.response.timeout
3193   type: uint32_t
3194   value: 5000
3195   mirror: always
3197 # Enable printing performance marks/measures to log
3198 - name: dom.performance.enable_user_timing_logging
3199   type: RelaxedAtomicBool
3200   value: false
3201   mirror: always
3203 # Enable notification of performance timing
3204 - name: dom.performance.enable_notify_performance_timing
3205   type: bool
3206   value: false
3207   mirror: always
3209 # Is support for PerformanceTiming.timeToContentfulPaint enabled?
3210 - name: dom.performance.time_to_contentful_paint.enabled
3211   type: bool
3212   value: false
3213   mirror: always
3215 # Is support for PerformanceTiming.timeToDOMContentFlushed enabled?
3216 - name: dom.performance.time_to_dom_content_flushed.enabled
3217   type: bool
3218   value: false
3219   mirror: always
3221 # Is support for PerformanceTiming.timeToFirstInteractive enabled?
3222 - name: dom.performance.time_to_first_interactive.enabled
3223   type: bool
3224   value: false
3225   mirror: always
3227 # Is support for PerformanceTiming.timeToNonBlankPaint enabled?
3228 - name: dom.performance.time_to_non_blank_paint.enabled
3229   type: bool
3230   value: false
3231   mirror: always
3233 # Is support for Permissions.revoke enabled?
3234 - name: dom.permissions.revoke.enable
3235   type: bool
3236   value: false
3237   mirror: always
3239 # Is support for Element.requestPointerLock enabled?
3240 # This is added for accessibility purpose. When user has no way to exit
3241 # pointer lock (e.g. no keyboard available), they can use this pref to
3242 # disable the Pointer Lock API altogether.
3243 - name: dom.pointer-lock.enabled
3244   type: bool
3245   value: true
3246   mirror: always
3248 # re-SAB: Whether to allow postMessage of a SharedArrayBuffer if various
3249 # preconditions related to COOP and COEP are met
3250 - name: dom.postMessage.sharedArrayBuffer.withCOOP_COEP
3251   type: bool
3252   value: true
3253   mirror: once
3255 # Overridden in all.js on RELEASE_OR_BETA in order to add the locked attribute.
3256 - name: dom.postMessage.sharedArrayBuffer.bypassCOOP_COEP.insecure.enabled
3257   type: RelaxedAtomicBool
3258   value: false
3259   mirror: always
3261 # This currently only affects XHTML. For XUL the cache is always allowed.
3262 - name: dom.prototype_document_cache.enabled
3263   type: bool
3264   value: true
3265   mirror: always
3267 # Push
3268 - name: dom.push.enabled
3269   type: RelaxedAtomicBool
3270   value: true
3271   mirror: always
3273 # This enables the SVGPathSeg APIs
3274 - name: dom.svg.pathSeg.enabled
3275   type: bool
3276   value: false
3277   mirror: always
3279 # Preference that is primarily used for testing of problematic file paths.
3280 # It can also be used for switching between different storage directories, but
3281 # such feature is not officially supported.
3282 - name: dom.quotaManager.storageName
3283   type: String
3284   value: "storage"
3285   mirror: never
3287 # An upper limit for the "age" of an origin. Any origin which is older than the
3288 # threshold is considered as unaccessed. That doesn't necessarily mean that
3289 # such origins will be immediatelly archived. They will be archived only when
3290 # dom.quotaManager.checkQuotaInfoLoadTime is true and loading of quota info
3291 # takes a long time (dom.quotaManager.longQuotaInfoLoadTimeThresholdMs is used
3292 # to decide what is a long quota info load time).
3293 - name: dom.quotaManager.unaccessedForLongTimeThresholdSec
3294   type: RelaxedAtomicUint32
3295   value: 33696000 # 13 months
3296   mirror: always
3298 # Should we try to load origin information from the cache?
3299 # See bug 1563023 for more details.
3300 - name: dom.quotaManager.loadQuotaFromCache
3301   type: RelaxedAtomicBool
3302   value: true
3303   mirror: always
3305 # Should we check build ID as part of the cache validation?
3306 # When enabled, the cache is invalidated on any upgrade (or downgrade),
3307 # ensuring that changes in how quota usage is calculated can't cause
3308 # inconsistencies at the cost of a slower initialization. Currently, this
3309 # should only be set to false in tests using a packaged profile that inherently
3310 # includes a build id different from the building running the tests. In the
3311 # future this may be set to false if we are confident that we have sufficiently
3312 # thorough schema versioning.
3313 - name: dom.quotaManager.caching.checkBuildId
3314   type: RelaxedAtomicBool
3315   value: true
3316   mirror: always
3318 # Should we check quota info load time and eventually archive some unaccessed
3319 # origins if loading of quota info takes a long time ?
3320 - name: dom.quotaManager.checkQuotaInfoLoadTime
3321   type: RelaxedAtomicBool
3322   value: true
3323   mirror: always
3325 # An upper limit for quota info load time, anything which takes longer than the
3326 # threshold is considered as long quota info load time.
3327 - name: dom.quotaManager.longQuotaInfoLoadTimeThresholdMs
3328   type: RelaxedAtomicUint32
3329   value: 21000 # 21 seconds
3330   mirror: always
3332 # Preference that users can set to override temporary storage smart limit
3333 # calculation.
3334 - name: dom.quotaManager.temporaryStorage.fixedLimit
3335   type: RelaxedAtomicInt32
3336   value: -1
3337   mirror: always
3339 # A pref that is used to enable testing features.
3340 - name: dom.quotaManager.testing
3341   type: SequentiallyConsistentAtomicBool
3342   value: false
3343   mirror: always
3345 #if defined(XP_WIN)
3346   # Preference that is used to set nsILocalFileWin::useDOSDevicePathSyntax
3347   # attribute for all local file instances created by QuotaManager and its
3348   # clients. The value of this preference is cached so changing the preference
3349   # during runtime has no effect.
3350   # See bug 1626846 for setting this to false by default.
3351 -   name: dom.quotaManager.useDOSDevicePathSyntax
3352     type: RelaxedAtomicBool
3353     value: true
3354     mirror: always
3355     do_not_use_directly: true
3357   # Preference that is used to enable the hack for overrriding xFullPathname in
3358   # QuotaVFS.
3359 -   name: dom.quotaManager.overrideXFullPathname
3360     type: RelaxedAtomicBool
3361     value: true
3362     mirror: always
3363 #elif defined(XP_UNIX)
3364   # Preference that is used to enable the overriding of Unix xFullPathname
3365   # implementation in QuotaVFS.
3366 -   name: dom.quotaManager.overrideXFullPathnameUnix
3367     type: RelaxedAtomicBool
3368     value: true
3369     mirror: always
3370 #endif
3372 # How many times we should retry directory removal or renaming if access was
3373 # denied?
3374 - name: dom.quotaManager.directoryRemovalOrRenaming.maxRetries
3375   type: RelaxedAtomicUint32
3376 #ifdef XP_WIN
3377   value: 10
3378 #else
3379   value: 0
3380 #endif
3381   mirror: always
3383 # How long we should wait between retries (in milliseconds)?
3384 - name: dom.quotaManager.directoryRemovalOrRenaming.delayMs
3385   type: RelaxedAtomicUint32
3386   value: 200
3387   mirror: always
3389 #ifdef MOZ_BACKGROUNDTASKS
3390 # Use a Background Task to delete files at shutdown.
3391 - name: dom.quotaManager.backgroundTask.enabled
3392   type: bool
3393 #ifdef XP_MACOSX
3394 # Needs to figure out how to prevent bug 1827486.
3395   value: false
3396 #else
3397   value: true
3398 #endif
3399   mirror: never
3400 #endif
3402 # Use to control to dump CheckedUnsafePtr creation stack and assignment stacks.
3403 - name: dom.checkedUnsafePtr.dumpStacks.enabled
3404   type: RelaxedAtomicBool
3405   value: false
3406   mirror: always
3408 # Determines within what distance of a tick mark, in pixels, dragging an input
3409 # range range will snap the range's value to that tick mark. By default, this is
3410 # half the default width of the range thumb.
3411 - name: dom.range_element.magnet_effect_threshold
3412   type: float
3413   value: 10.0f
3414   mirror: always
3416 # Reporting API.
3417 - name: dom.reporting.enabled
3418   type: RelaxedAtomicBool
3419   value: false
3420   mirror: always
3422 - name: dom.reporting.testing.enabled
3423   type: RelaxedAtomicBool
3424   value: false
3425   mirror: always
3427 - name: dom.reporting.featurePolicy.enabled
3428   type: RelaxedAtomicBool
3429   value: false
3430   mirror: always
3432 - name: dom.reporting.crash.enabled
3433   type: RelaxedAtomicBool
3434   value: false
3435   mirror: always
3437 - name: dom.reporting.header.enabled
3438   type: RelaxedAtomicBool
3439   value: false
3440   mirror: always
3442 # In seconds. The timeout to remove not-active report-to endpoints.
3443 - name: dom.reporting.cleanup.timeout
3444   type: uint32_t
3445   value: 3600
3446   mirror: always
3448 # Any X seconds the reports are dispatched to endpoints.
3449 - name: dom.reporting.delivering.timeout
3450   type: uint32_t
3451   value: 5
3452   mirror: always
3454 # How many times the delivering of a report should be tried.
3455 - name: dom.reporting.delivering.maxFailures
3456   type: uint32_t
3457   value: 3
3458   mirror: always
3460 # How many reports should be stored in the report queue before being delivered.
3461 - name: dom.reporting.delivering.maxReports
3462   type: uint32_t
3463   value: 100
3464   mirror: always
3466 # Enable Screen Orientation lock
3467 - name: dom.screenorientation.allow-lock
3468   type: bool
3469   value: @IS_NIGHTLY_BUILD@
3470   mirror: always
3472 # Enable Screen Wake Lock API
3473 - name: dom.screenwakelock.enabled
3474   type: bool
3475   value: @IS_NIGHTLY_BUILD@
3476   mirror: always
3478 # Prevent errors when using set_permission from permissions.sys.mjs
3479 - name: dom.screenwakelock.testing
3480   type: bool
3481   value: false
3482   mirror: always
3484 # Whether to enable the JavaScript start-up cache. This causes one of the first
3485 # execution to record the bytecode of the JavaScript function used, and save it
3486 # in the existing cache entry. On the following loads of the same script, the
3487 # bytecode would be loaded from the cache instead of being generated once more.
3488 - name: dom.script_loader.bytecode_cache.enabled
3489   type: bool
3490   value: true
3491   mirror: always
3493 # Ignore the heuristics of the bytecode cache, and always record on the first
3494 # visit. (used for testing purposes).
3496 # Choose one strategy to use to decide when the bytecode should be encoded and
3497 # saved. The following strategies are available right now:
3498 #   * -2 : (reader mode) The bytecode cache would be read, but it would never
3499 #          be saved.
3500 #   * -1 : (eager mode) The bytecode would be saved as soon as the script is
3501 #          seen for the first time, independently of the size or last access
3502 #          time.
3503 #   *  0 : (default) The bytecode would be saved in order to minimize the
3504 #          page-load time.
3506 # Other values might lead to experimental strategies. For more details, have a
3507 # look at: ScriptLoader::ShouldCacheBytecode function.
3508 - name: dom.script_loader.bytecode_cache.strategy
3509   type: int32_t
3510   value: 0
3511   mirror: always
3513 # Select which parse/delazification strategy should be used while parsing
3514 # scripts off-main-thread. (see CompileOptions.h, DelazificationOption enum)
3516 #   0: On-demand only. Delazification will be triggered only on the main thread
3517 #      before the execution of the function.
3519 #   1: Compare on-demand delazification (= 0) with concurrent depth-first
3520 #      delazification (= 2).
3522 #   2: Depth-first. Delazify all functions off-thread in the order of appearance
3523 #      in the source.
3525 #   3: Large-first. Delazify all functions off-thread starting with the largest
3526 #      functions first, and the smallest as the last one to be delazified, where
3527 #      the size of function is measured in bytes between the start to the end of
3528 #      the function.
3530 # 255: Parse everything eagerly, from the first parse. All functions are parsed
3531 #      at the same time as the top-level of a file.
3532 - name: dom.script_loader.delazification.strategy
3533   type: uint32_t
3534   value: 255
3535   mirror: always
3537 # Maximum total size after which the delazification strategy, specified by
3538 # `dom.script_loader.delazification.strategy`, is no longer applied, and the
3539 # on-demand strategy is used by default.
3541 # -1 disable the threshold, and delazification strategy is applied to all
3542 # scripts.
3544 # Default value is 10MB for utf8 scripts.
3545 - name: dom.script_loader.delazification.max_size
3546   type: int32_t
3547   value: 10485760
3548   mirror: always
3550 # Minimum memory, in GB, required to enable delazification strategy, specified
3551 # by `dom.script_loader.delazification.strategy`. Otherwise, the on-demand
3552 # delazification strategy is used.
3553 - name: dom.script_loader.delazification.min_mem
3554   type: int32_t
3555   value: 2
3556   mirror: always
3558 # Enable  speculative off main thread parsing of external scripts as
3559 # soon as they are fetched.
3560 - name: dom.script_loader.external_scripts.speculative_omt_parse.enabled
3561   type: bool
3562   value: true
3563   mirror: always
3565 # Speculatively compile non parser inserted scripts
3566 - name: dom.script_loader.external_scripts.speculate_non_parser_inserted.enabled
3567   type: bool
3568   value: false
3569   mirror: always
3571 # Speculatively compile async scripts
3572 - name: dom.script_loader.external_scripts.speculate_async.enabled
3573   type: bool
3574   value: false
3575   mirror: always
3577 # Speculatively compile link preload scripts
3578 - name: dom.script_loader.external_scripts.speculate_link_preload.enabled
3579   type: bool
3580   value: false
3581   mirror: always
3583 - name: dom.securecontext.allowlist_onions
3584   type: bool
3585   value: false
3586   mirror: always
3588 # This pref enables the featurePolicy header support.
3589 - name: dom.security.featurePolicy.header.enabled
3590   type: bool
3591   value: false
3592   mirror: always
3594 - name: dom.security.featurePolicy.experimental.enabled
3595   type: bool
3596   value: false
3597   mirror: always
3599 # Expose the 'featurePolicy' attribute in document and HTMLIFrameElement
3600 - name: dom.security.featurePolicy.webidl.enabled
3601   type: bool
3602   value: false
3603   mirror: always
3605 # Perform IPC based Principal vetting in ContentParent
3606 - name: dom.security.enforceIPCBasedPrincipalVetting
3607   type: RelaxedAtomicBool
3608   value: true
3609   mirror: always
3611 # For testing purposes only: Flipping this pref to true allows
3612 # to skip the allowlist for about: pages and do not ship with a
3613 # CSP and NS_ASSERT right away.
3614 - name: dom.security.skip_about_page_csp_allowlist_and_assert
3615   type: RelaxedAtomicBool
3616   value: false
3617   mirror: always
3619 # For testing purposes only: Flipping this pref to true allows
3620 # to skip the assertion that every about page ships with a CSP.
3621 - name: dom.security.skip_about_page_has_csp_assert
3622   type: RelaxedAtomicBool
3623   value: false
3624   mirror: always
3626 # For testing purposes only: Flipping this pref to true allows
3627 # to skip the assertion that HTML fragments (e.g. innerHTML) can
3628 # not be used within chrome code or about: pages.
3629 - name: dom.security.skip_html_fragment_assertion
3630   type: RelaxedAtomicBool
3631   value: false
3632   mirror: always
3634 # For testing purposes only; Flipping this pref to true allows
3635 # to skip the assertion that remote scripts can not be loaded
3636 # in system privileged contexts.
3637 - name: dom.security.skip_remote_script_assertion_in_system_priv_context
3638   type: RelaxedAtomicBool
3639   value: false
3640   mirror: always
3642 # If true, all content requests will get upgraded to HTTPS://
3643 # (some Firefox functionality requests, like OCSP will not be affected)
3644 - name: dom.security.https_only_mode
3645   type: RelaxedAtomicBool
3646   value: false
3647   mirror: always
3649 # If true, all content requests in Private Browsing Mode will get
3650 # upgraded to HTTPS://. (If dom.security.https_only_mode is set
3651 # to true then this pref has no effect)
3652 - name: dom.security.https_only_mode_pbm
3653   type: RelaxedAtomicBool
3654   value: false
3655   mirror: always
3657 # If true, sends http background request for top-level sites to
3658 # counter long timeouts.
3659 - name: dom.security.https_only_mode_send_http_background_request
3660   type: RelaxedAtomicBool
3661   value: true
3662   mirror: always
3664 # Time limit, in milliseconds, before sending the http background
3665 # request for HTTPS-Only and HTTPS-First
3666 - name: dom.security.https_only_fire_http_request_background_timer_ms
3667   type: RelaxedAtomicUint32
3668   value: 3000
3669   mirror: always
3671 # If true, tries to break upgrade downgrade cycles where https-only tries
3672 # to upgrad ethe connection, but the website tries to downgrade again.
3673 - name: dom.security.https_only_mode_break_upgrade_downgrade_endless_loop
3674   type: RelaxedAtomicBool
3675   value: true
3676   mirror: always
3678 # If true, when checking if it's upgrade downgrade cycles, the URI path will be
3679 # also checked.
3680 - name: dom.security.https_only_check_path_upgrade_downgrade_endless_loop
3681   type: RelaxedAtomicBool
3682   value: true
3683   mirror: always
3685 # If true and HTTPS-only mode is enabled, requests
3686 # to local IP addresses are also upgraded
3687 - name: dom.security.https_only_mode.upgrade_local
3688   type: RelaxedAtomicBool
3689   value: false
3690   mirror: always
3692 # If true and HTTPS-only mode is enabled, requests
3693 # to .onion hosts are also upgraded
3694 - name: dom.security.https_only_mode.upgrade_onion
3695   type: RelaxedAtomicBool
3696   value: false
3697   mirror: always
3699 # WARNING: Don't ever update that pref manually! It is only used
3700 # for telemetry purposes and allows to reason about retention of
3701 # the pref dom.security.https_only_mode from above.
3702 - name: dom.security.https_only_mode_ever_enabled
3703   type: RelaxedAtomicBool
3704   value: false
3705   mirror: always
3707 # WARNING: Don't ever update that pref manually! It is only used
3708 # for telemetry purposes and allows to reason about retention of
3709 # the pref dom.security.https_only_mode_pbm from above.
3710 - name: dom.security.https_only_mode_ever_enabled_pbm
3711   type: RelaxedAtomicBool
3712   value: false
3713   mirror: always
3715 # If true checks for secure www connections when https fails
3716 # and gives the user suggestions on the error page
3717 - name: dom.security.https_only_mode_error_page_user_suggestions
3718   type: RelaxedAtomicBool
3719   value: false
3720   mirror: always
3722 # If true, top-level request will get upgraded to HTTPS and
3723 # downgraded again if the request failed.
3724 - name: dom.security.https_first
3725   type: RelaxedAtomicBool
3726   value: false
3727   mirror: always
3729 # If true, top-level requests in Private Browsing Mode will get
3730 # upgraded to HTTPS. (If dom.security.https_first
3731 # is set to true then this pref has no effect)
3732 - name: dom.security.https_first_pbm
3733   type: RelaxedAtomicBool
3734   value: true
3735   mirror: always
3737 # If true, top-level requests that are initiated from the address
3738 # bar and with an empty scheme get upgraded to HTTPS
3739 # with a fallback
3740 - name: dom.security.https_first_schemeless
3741   type: RelaxedAtomicBool
3742   value: @IS_EARLY_BETA_OR_EARLIER@
3743   mirror: always
3745 - name: dom.security.unexpected_system_load_telemetry_enabled
3746   type: bool
3747   value: true
3748   mirror: always
3750 # pref controls `Sanitizer` API being exposed
3751 # https://wicg.github.io/sanitizer-api/
3752 - name: dom.security.sanitizer.enabled
3753   type: bool
3754   value: false
3755   mirror: always
3757 # Pref that controls the Element.setHTML API idenpendetly of the sanitizer
3758 # API.
3759 - name: dom.security.setHTML.enabled
3760   type: bool
3761   value: false
3762   mirror: always
3764 # Logs elements and attributes removed by the Sanitizer API to the console.
3765 - name: dom.security.sanitizer.logging
3766   type: bool
3767   value: false
3768   mirror: always
3770 # pref controls `identity` credentials being exposed
3771 - name: dom.security.credentialmanagement.identity.enabled
3772   type: bool
3773   value: false
3774   mirror: always
3776 # pref controls `identity` credential UI for testing. When true, UI is not shown and
3777 # the first option in the account and provider lists are chosen
3778 - name: dom.security.credentialmanagement.identity.select_first_in_ui_lists
3779   type: bool
3780   value: false
3781   mirror: always
3783 # pref controls `identity` credential platform behavior for testing. When true,
3784 # the .well-known file check is not performed.
3785 - name: dom.security.credentialmanagement.identity.test_ignore_well_known
3786   type: bool
3787   value: false
3788   mirror: always
3790 # pref controls whether we should delay identity credential rejections at all
3791 - name: dom.security.credentialmanagement.identity.reject_delay.enabled
3792   type: bool
3793   value: true
3794   mirror: always
3796 # pref controls how long we should delay identity credential rejections if enabled
3797 - name: dom.security.credentialmanagement.identity.reject_delay.duration_ms
3798   type: uint32_t
3799   value: 120000
3800   mirror: always
3802 # SetDocumentURI security option, enforces origin check
3803 - name: dom.security.setdocumenturi
3804   type: bool
3805   value: true
3806   mirror: always
3808 # Whether or not selection events on text controls are enabled.
3809 - name: dom.select_events.textcontrols.selectionchange.enabled
3810   type: bool
3811   value: true
3812   mirror: always
3814 - name: dom.select_events.textcontrols.selectstart.enabled
3815   type: bool
3816   value: false
3817   mirror: always
3819 - name: dom.select.showPicker.enabled
3820   type: bool
3821   value: true
3822   mirror: always
3824 - name: dom.separate_event_queue_for_post_message.enabled
3825   type: bool
3826   value: true
3827   mirror: always
3829 - name: dom.arena_allocator.enabled
3830   type: bool
3831   value: true
3832   mirror: once
3834 - name: dom.serviceWorkers.enabled
3835   type: RelaxedAtomicBool
3836   value: true
3837   mirror: always
3839 - name: dom.serviceWorkers.navigationPreload.enabled
3840   type: RelaxedAtomicBool
3841   value: true
3842   mirror: always
3844 # Mitigates ServiceWorker navigation faults by bypassing the ServiceWorker on
3845 # navigation faults.  This is more extensive than just resetting interception
3846 # because we also mark the page as uncontrolled so that subresources will not
3847 # go to the ServiceWorker either.
3848 - name: dom.serviceWorkers.mitigations.bypass_on_fault
3849   type: bool
3850   value: true
3851   mirror: always
3853 # Additional ServiceWorker navigation mitigation control to unregister the
3854 # ServiceWorker after multiple faults are encountered. The mitigation is
3855 # disabled when this is set to zero, otherwise this is the number of faults that
3856 # need to occur for a specific ServiceWorker before it will be unregistered.
3857 - name: dom.serviceWorkers.mitigations.navigation_fault_threshold
3858   type: uint32_t
3859   value: 3
3860   mirror: always
3862 # This is the group usage head room for service workers.
3863 # The quota usage mitigation algorithm uses this preference to determine if the
3864 # origin or also group data should be cleared or not.
3865 # The default value is 400 MiB.
3866 - name: dom.serviceWorkers.mitigations.group_usage_headroom_kb
3867   type: uint32_t
3868   value: 400 * 1024
3869   mirror: always
3871 - name: dom.serviceWorkers.testing.enabled
3872   type: RelaxedAtomicBool
3873   value: false
3874   mirror: always
3876 # Whether ServiceWorkerManager should persist the service worker
3877 # registered by temporary installed extension (only meant to be used
3878 # for testing purpose, to make it easier to test some particular scenario
3879 # with a temporary installed addon, which doesn't need to be signed to be
3880 # installed on release channel builds).
3881 - name: dom.serviceWorkers.testing.persistTemporarilyInstalledAddons
3882   type: RelaxedAtomicBool
3883   value: false
3884   mirror: always
3886 - name: dom.storage.enabled
3887   type: RelaxedAtomicBool
3888   value: true
3889   mirror: always
3891 # ReadableStream.from(asyncIterable)
3892 - name: dom.streams.from.enabled
3893   type: RelaxedAtomicBool
3894   value: true
3895   mirror: always
3897 - name: dom.workers.pFetch.enabled
3898   type: RelaxedAtomicBool
3899   value: true
3900   mirror: always
3902 - name: dom.workers.importScripts.enforceStrictMimeType
3903   type: RelaxedAtomicBool
3904   value: true
3905   mirror: always
3907 # Is support for modules (new Worker(..., {type: "module"})) enabled for workers?
3908 - name: dom.workers.modules.enabled
3909   type: RelaxedAtomicBool
3910   value: true
3911   mirror: always
3913 - name: dom.workers.serialized-sab-access
3914   type: RelaxedAtomicBool
3915   value: false
3916   mirror: always
3918 # Enable stronger diagnostics on worker shutdown.
3919 # If this is true, we will potentially run an extra GCCC when a  worker should
3920 # exit its DoRunLoop but holds any WorkerRef and we will MOZ_DIAGNOSTIC_ASSERT
3921 # when during that extra GCCC such a WorkerRef is freed.
3922 - name: dom.workers.GCCC_on_potentially_last_event
3923   type: RelaxedAtomicBool
3924 #if defined(FUZZING) || defined(DEBUG)
3925   value: true
3926 #else
3927   value: false
3928 #endif
3929   mirror: always
3931 - name: dom.sitepermsaddon-provider.enabled
3932   type: bool
3933   value: @IS_NOT_ANDROID@
3934   mirror: always
3936 # Whether automatic storage access granting heuristics should be turned on.
3937 - name: dom.storage_access.auto_grants
3938   type: bool
3939   value: true
3940   mirror: always
3942 - name: dom.storage_access.auto_grants.delayed
3943   type: bool
3944   value: true
3945   mirror: always
3947 # Storage-access API.
3948 - name: dom.storage_access.enabled
3949   type: bool
3950   value: true
3951   mirror: always
3953 # Forward-Declared Storage-access API.
3954 - name: dom.storage_access.forward_declared.enabled
3955   type: bool
3956   value: false
3957   mirror: always
3959 # How long the Forward-Declared Storage-access API allows between pair requests
3960 # in seconds
3961 - name: dom.storage_access.forward_declared.lifetime
3962   type: uint32_t
3963   value: 15 * 60
3964   mirror: always
3966 # The maximum number of origins that a given third-party tracker is allowed
3967 # to have concurrent access to before the user is presented with a storage
3968 # access prompt.  Only effective when the auto_grants pref is turned on.
3969 - name: dom.storage_access.max_concurrent_auto_grants
3970   type: int32_t
3971   value: 5
3972   mirror: always
3974 - name: dom.storage_access.frame_only
3975   type: bool
3976   value: true
3977   mirror: always
3979 # Only grant storage access to secure contexts.
3980 - name: dom.storage_access.dont_grant_insecure_contexts
3981   type: RelaxedAtomicBool
3982   value: true
3983   mirror: always
3985 # Whether the File System API is enabled
3986 - name: dom.fs.enabled
3987   type: RelaxedAtomicBool
3988   value: true
3989   mirror: always
3991 # Whether the WritableFileStream is enabled or disabled.
3992 - name: dom.fs.writable_file_stream.enabled
3993   type: RelaxedAtomicBool
3994   value: true
3995   mirror: always
3997 # LocalStorage data limit as determined by summing up the lengths of all string
3998 # keys and values. This is consistent with the legacy implementation and other
3999 # browser engines. This value should really only ever change in unit testing
4000 # where being able to lower it makes it easier for us to test certain edge
4001 # cases. Measured in KiBs.
4002 - name: dom.storage.default_quota
4003   type: RelaxedAtomicUint32
4004   # Only allow relatively small amounts of data since performance of the
4005   # synchronous IO is very bad. We are enforcing simple per-origin quota only.
4006   value: 5 * 1024
4007   mirror: always
4009 # Per-site quota for legacy LocalStorage implementation.
4010 - name: dom.storage.default_site_quota
4011   type: RelaxedAtomicUint32
4012   value: 25 * 1024
4013   mirror: always
4015 # Whether or not the unsupported legacy implemenation should be enabled. Please
4016 # don't advertise this pref as a way for disabling LSNG. This pref is intended
4017 # for internal testing only and will be removed in near future. Accidental
4018 # disabling of LSNG can lead to a data loss in a combination with disabled
4019 # shadow writes. Disabling of shadow writes is the initial step towards
4020 # removing legacy implementation and will be done soon.
4021 - name: dom.storage.enable_unsupported_legacy_implementation
4022   type: RelaxedAtomicBool
4023   value: false
4024   mirror: always
4025   do_not_use_directly: true
4027 # The amount of snapshot peak usage which is attempted to be pre-incremented
4028 # during snapshot creation.
4029 - name: dom.storage.snapshot_peak_usage.initial_preincrement
4030   type: RelaxedAtomicUint32
4031   value: 16384
4032   mirror: always
4034 # The amount of snapshot peak usage which is attempted to be pre-incremented
4035 # during snapshot creation if the LocalStorage usage was already close to the
4036 # limit (a fallback for dom.storage.snapshot_peak_usage.initial_preincrement).
4037 - name: dom.storage.snapshot_peak_usage.reduced_initial_preincrement
4038   type: RelaxedAtomicUint32
4039   value: 4096
4040   mirror: always
4042 # The amount of snapshot peak usage which is attempted to be pre-incremented
4043 # beyond the specific values which are subsequently requested after snapshot
4044 # creation.
4045 - name: dom.storage.snapshot_peak_usage.gradual_preincrement
4046   type: RelaxedAtomicUint32
4047   value: 4096
4048   mirror: always
4050 # The amount of snapshot peak usage which is attempted to be pre-incremented
4051 # beyond the specific values which are subsequently requested after snapshot
4052 # creation if the LocalStorage total usage was already close to the limit
4053 # (a fallback for dom.storage.snapshot_peak_usage.gradual_preincrement).
4054 - name: dom.storage.snapshot_peak_usage.reduced_gradual_preincrement
4055   type: RelaxedAtomicUint32
4056   value: 1024
4057   mirror: always
4059 # How long between a snapshot becomes idle and when we actually finish the
4060 # snapshot. This preference is only used when "dom.storage.snapshot_reusing"
4061 # is true.
4062 - name: dom.storage.snapshot_idle_timeout_ms
4063   type: uint32_t
4064   value: 5000
4065   mirror: always
4067 # Is support for Storage test APIs enabled?
4068 - name: dom.storage.testing
4069   type: bool
4070   value: false
4071   mirror: always
4073 # For area and anchor elements with target=_blank and no rel set to
4074 # opener/noopener.
4075 - name: dom.targetBlankNoOpener.enabled
4076   type: bool
4077   value: true
4078   mirror: always
4080 # Is support for Selection.GetRangesForInterval enabled?
4081 - name: dom.testing.selection.GetRangesForInterval
4082   type: bool
4083   value: false
4084   mirror: always
4086 - name: dom.testing.structuredclonetester.enabled
4087   type: RelaxedAtomicBool
4088   value: false
4089   mirror: always
4091 - name: dom.testing.sync-content-blocking-notifications
4092   type: bool
4093   value: false
4094   mirror: always
4096 # To enable TestUtils interface on WPT
4097 - name: dom.testing.testutils.enabled
4098   type: RelaxedAtomicBool
4099   value: false
4100   mirror: always
4102 - name: dom.textMetrics.actualBoundingBox.enabled
4103   type: RelaxedAtomicBool
4104   value: true
4105   mirror: always
4107 - name: dom.textMetrics.baselines.enabled
4108   type: RelaxedAtomicBool
4109   value: true
4110   mirror: always
4112 - name: dom.textMetrics.emHeight.enabled
4113   type: RelaxedAtomicBool
4114   value: true
4115   mirror: always
4117 - name: dom.textMetrics.fontBoundingBox.enabled
4118   type: RelaxedAtomicBool
4119   value: true
4120   mirror: always
4122 # Time (in ms) that it takes to regenerate 1ms.
4123 - name: dom.timeout.background_budget_regeneration_rate
4124   type: int32_t
4125   value: 100
4126   mirror: always
4128 # Time (in ms) that it takes to regenerate 1ms.
4129 - name: dom.timeout.foreground_budget_regeneration_rate
4130   type: int32_t
4131   value: 1
4132   mirror: always
4134 # Maximum value (in ms) for the background budget. Only valid for
4135 # values greater than 0.
4136 - name: dom.timeout.background_throttling_max_budget
4137   type: int32_t
4138   value: 50
4139   mirror: always
4141 # Maximum value (in ms) for the foreground budget. Only valid for
4142 # values greater than 0.
4143 - name: dom.timeout.foreground_throttling_max_budget
4144   type: int32_t
4145   value: -1
4146   mirror: always
4148 # The maximum amount a timeout can be delayed by budget throttling.
4149 - name: dom.timeout.budget_throttling_max_delay
4150   type: int32_t
4151   value: 15000
4152   mirror: always
4154 # Turn on budget throttling by default.
4155 - name: dom.timeout.enable_budget_timer_throttling
4156   type: bool
4157   value: true
4158   mirror: always
4160 # Should we defer timeouts and intervals while loading a page.  Released
4161 # on Idle or when the page is loaded.
4162 - name: dom.timeout.defer_during_load
4163   type: bool
4164   value: true
4165   mirror: always
4167 # Maximum amount of time in milliseconds consecutive setTimeout()/setInterval()
4168 # callback are allowed to run before yielding the event loop.
4169 - name: dom.timeout.max_consecutive_callbacks_ms
4170   type: uint32_t
4171   value: 4
4172   mirror: always
4174 # Maximum deferral time for setTimeout/Interval in milliseconds
4175 - name: dom.timeout.max_idle_defer_ms
4176   type: uint32_t
4177   value: 10*1000
4178   mirror: always
4180 # Delay in ms from document load until we start throttling background timeouts.
4181 - name: dom.timeout.throttling_delay
4182   type: int32_t
4183   value: 30000
4184   mirror: always
4186 # UDPSocket API
4187 - name: dom.udpsocket.enabled
4188   type: bool
4189   value: false
4190   mirror: always
4192 # Whether to dump worker use counters
4193 - name: dom.use_counters.dump.worker
4194   type: RelaxedAtomicBool
4195   value: false
4196   mirror: always
4198 # Whether to dump document use counters
4199 - name: dom.use_counters.dump.document
4200   type: bool
4201   value: false
4202   mirror: always
4204 # Whether to dump page use counters
4205 - name: dom.use_counters.dump.page
4206   type: bool
4207   value: false
4208   mirror: always
4210 # Time limit, in milliseconds, for user gesture transient activation.
4211 - name: dom.user_activation.transient.timeout
4212   type: uint32_t
4213   value: 5000
4214   mirror: always
4216 # Whether to treat the clicks on scrollbars as user interaction with web content.
4217 - name: dom.user_activation.ignore_scrollbars
4218   type: bool
4219   value: true
4220   mirror: always
4222 # Whether to shim a Components object on untrusted windows.
4223 - name: dom.use_components_shim
4224   type: bool
4225   value: @IS_NOT_NIGHTLY_BUILD@
4226   mirror: always
4228 - name: dom.vibrator.enabled
4229   type: bool
4230   value: true
4231   mirror: always
4233 - name: dom.vibrator.max_vibrate_ms
4234   type: RelaxedAtomicUint32
4235   value: 10000
4236   mirror: always
4238 - name: dom.vibrator.max_vibrate_list_len
4239   type: RelaxedAtomicUint32
4240   value: 128
4241   mirror: always
4243 # Is support for WebVR APIs enabled?
4244 # Disabled everywhere, but not removed.
4245 - name: dom.vr.enabled
4246   type: RelaxedAtomicBool
4247   value: false
4248   mirror: always
4250 # Should VR sessions always be reported as supported, without first
4251 # checking for VR runtimes?  This will prevent permission prompts
4252 # from being suppressed on machines without VR runtimes and cause
4253 # navigator.xr.isSessionSupported to always report that immersive-vr
4254 # is supported.
4255 - name: dom.vr.always_support_vr
4256   type: RelaxedAtomicBool
4257   value: false
4258   mirror: always
4260 # Should AR sessions always be reported as supported, without first
4261 # checking for AR runtimes?  This will prevent permission prompts
4262 # from being suppressed on machines without AR runtimes and cause
4263 # navigator.xr.isSessionSupported to always report that immersive-ar
4264 # is supported.
4265 - name: dom.vr.always_support_ar
4266   type: RelaxedAtomicBool
4267   value: false
4268   mirror: always
4270 # It is often desirable to automatically start vr presentation when
4271 # a user puts on the VR headset.  This is done by emitting the
4272 # Window.vrdisplayactivate event when the headset's sensors detect it
4273 # being worn.  This can result in WebVR content taking over the headset
4274 # when the user is using it outside the browser or inadvertent start of
4275 # presentation due to the high sensitivity of the proximity sensor in some
4276 # headsets, so it is off by default.
4277 - name: dom.vr.autoactivate.enabled
4278   type: RelaxedAtomicBool
4279   value: false
4280   mirror: always
4282 # Minimum number of milliseconds that the browser will wait before
4283 # attempting to poll again for connected VR controllers.  The browser
4284 # will not attempt to poll for VR controllers until it needs to use them.
4285 - name: dom.vr.controller.enumerate.interval
4286   type: RelaxedAtomicInt32
4287   value: 1000
4288   mirror: always
4290 # The threshold value of trigger inputs for VR controllers.
4291 - name: dom.vr.controller_trigger_threshold
4292   type: AtomicFloat
4293   value: 0.1f
4294   mirror: always
4296 # Minimum number of milliseconds that the browser will wait before
4297 # attempting to poll again for connected VR displays.  The browser
4298 # will not attempt to poll for VR displays until it needs to use
4299 # them, such as when detecting a WebVR site.
4300 - name: dom.vr.display.enumerate.interval
4301   type: RelaxedAtomicInt32
4302   value: 5000
4303   mirror: always
4305 # The number of milliseconds since last frame start before triggering a new
4306 # frame. When content is failing to submit frames on time or the lower level
4307 # VR platform APIs are rejecting frames, it determines the rate at which RAF
4308 # callbacks will be called.
4309 - name: dom.vr.display.rafMaxDuration
4310   type: RelaxedAtomicUint32
4311   value: 50
4312   mirror: always
4314 # Minimum number of milliseconds the browser will wait before attempting
4315 # to re-start the VR service after an enumeration returned no devices.
4316 - name: dom.vr.external.notdetected.timeout
4317   type: RelaxedAtomicInt32
4318   value: 60000
4319   mirror: always
4321 # Minimum number of milliseconds the browser will wait before attempting
4322 # to re-start the VR service after a VR API (eg, OpenVR or Oculus)
4323 # requests that we shutdown and unload its libraries.
4324 # To ensure that we don't interfere with VR runtime software auto-updates,
4325 # we will not attempt to re-load the service until this timeout has elapsed.
4326 - name: dom.vr.external.quit.timeout
4327   type: RelaxedAtomicInt32
4328   value: 10000
4329   mirror: always
4331 # Minimum number of milliseconds that the VR session will be kept
4332 # alive after the browser and content no longer are using the
4333 # hardware.  If a VR multitasking environment, this should be set
4334 # very low or set to 0.
4335 - name: dom.vr.inactive.timeout
4336   type: RelaxedAtomicInt32
4337   value: 5000
4338   mirror: always
4340 # Maximum number of milliseconds the browser will wait for content to call
4341 # VRDisplay.requestPresent after emitting vrdisplayactivate during VR
4342 # link traversal.  This prevents a long running event handler for
4343 # vrdisplayactivate from later calling VRDisplay.requestPresent, which would
4344 # result in a non-responsive browser in the VR headset.
4345 - name: dom.vr.navigation.timeout
4346   type: RelaxedAtomicInt32
4347   value: 5000
4348   mirror: always
4350 # Oculus device
4351 - name: dom.vr.oculus.enabled
4352   type: RelaxedAtomicBool
4353 #if defined(HAVE_64BIT_BUILD) && !defined(ANDROID)
4354   # We are only enabling WebVR by default on 64-bit builds (Bug 1384459).
4355   value: true
4356 #else
4357   # On Android, this pref is irrelevant.
4358   value: false
4359 #endif
4360   mirror: always
4362 # When enabled, Oculus sessions may be created with the ovrInit_Invisible
4363 # flag if a page is using tracking but not presenting.  When a page
4364 # begins presenting VR frames, the session will be re-initialized without
4365 # the flag.  This eliminates the "Firefox not responding" warnings in
4366 # the headset, but might not be compatible with all versions of the Oculus
4367 # runtime.
4368 - name: dom.vr.oculus.invisible.enabled
4369   type: RelaxedAtomicBool
4370   value: true
4371   mirror: always
4373 # Minimum number of milliseconds after content has stopped VR presentation
4374 # before the Oculus session is re-initialized to an invisible / tracking
4375 # only mode.  If this value is too high, users will need to wait longer
4376 # after stopping WebVR presentation before automatically returning to the
4377 # Oculus home interface.  (They can immediately return to the Oculus Home
4378 # interface through the Oculus HUD without waiting this duration)
4379 # If this value is too low, the Oculus Home interface may be visible
4380 # momentarily during VR link navigation.
4381 - name: dom.vr.oculus.present.timeout
4382   type: RelaxedAtomicInt32
4383   value: 500
4384   mirror: always
4386 # OpenVR device
4387 - name: dom.vr.openvr.enabled
4388   type: RelaxedAtomicBool
4389 #if !defined(HAVE_64BIT_BUILD) && !defined(ANDROID)
4390   # We are only enabling WebVR by default on 64-bit builds (Bug 1384459).
4391   value: false
4392 #elif defined(XP_WIN) || defined(XP_MACOSX)
4393   # We enable OpenVR by default for Windows and macOS.
4394   value: true
4395 #else
4396   # See Bug 1310663 (Linux).  On Android, this pref is irrelevant.
4397   value: false
4398 #endif
4399   mirror: always
4401 # OSVR device
4402 - name: dom.vr.osvr.enabled
4403   type: RelaxedAtomicBool
4404   value: false
4405   mirror: always
4407 # Pose prediction reduces latency effects by returning future predicted HMD
4408 # poses to callers of the WebVR API.  This currently only has an effect for
4409 # Oculus Rift on SDK 0.8 or greater.
4410 - name: dom.vr.poseprediction.enabled
4411   type: RelaxedAtomicBool
4412   value: true
4413   mirror: always
4415 # Enable a separate process for VR module.
4416 - name: dom.vr.process.enabled
4417   type: bool
4418 #if defined(XP_WIN)
4419   value: true
4420 #else
4421   value: false
4422 #endif
4423   mirror: once
4425 - name: dom.vr.process.startup_timeout_ms
4426   type: int32_t
4427   value: 5000
4428   mirror: once
4430 # Puppet device, used for simulating VR hardware within tests and dev tools.
4431 - name: dom.vr.puppet.enabled
4432   type: RelaxedAtomicBool
4433   value: false
4434   mirror: always
4436 # Starting VR presentation is only allowed within a user gesture or event such
4437 # as VRDisplayActivate triggered by the system. dom.vr.require-gesture allows
4438 # this requirement to be disabled for special cases such as during automated
4439 # tests or in a headless kiosk system.
4440 - name: dom.vr.require-gesture
4441   type: RelaxedAtomicBool
4442   value: true
4443   mirror: always
4445 # Is support for WebXR APIs enabled?
4446 - name: dom.vr.webxr.enabled
4447   type: RelaxedAtomicBool
4448   value: false
4449   mirror: always
4451 # Points in the native bounds geometry are required to be quantized
4452 # sufficiently to prevent fingerprinting. The WebXR spec suggests
4453 # quantizing to the nearest 5 centimeters.
4454 - name: dom.vr.webxr.quantization
4455   type: AtomicFloat
4456   value: 0.05f
4457   mirror: always
4459 # Whether MouseEvent.region is exposed as a property.
4460 - name: dom.mouse_event.region.enabled
4461   type: bool
4462   value: false
4463   mirror: always
4465 #ifdef XP_WIN
4466   # Control firing WidgetMouseEvent by handling Windows pointer messages or
4467   # mouse messages.
4468 -   name: dom.w3c_pointer_events.dispatch_by_pointer_messages
4469     type: bool
4470     value: true
4471     mirror: always
4473 -   name: dom.w3c_pointer_events.scroll_by_pen.enabled
4474     type: bool
4475     value: true
4476     mirror: always
4477 #endif
4479 # If the value is >= 0, it will be used for max touch points in child processes.
4480 - name: dom.maxtouchpoints.testing.value
4481   type: int32_t
4482   value: -1
4483   mirror: always
4485 # Maximum value of navigator.hardwareConcurrency.
4486 - name: dom.maxHardwareConcurrency
4487   type: RelaxedAtomicUint32
4488 #ifdef NIGHTLY_BUILD
4489   value: 128
4490 #else
4491   value: 16
4492 #endif
4493   mirror: always
4495 # W3C pointer events draft.
4496 - name: dom.w3c_pointer_events.implicit_capture
4497   type: bool
4498   value: true
4499   mirror: always
4501 - name: dom.w3c_pointer_events.getcoalescedevents_only_in_securecontext
4502   type: bool
4503   value: @IS_NIGHTLY_BUILD@
4504   mirror: always
4506 # In case Touch API is enabled, this pref controls whether to support
4507 # ontouch* event handlers, document.createTouch, document.createTouchList and
4508 # document.createEvent("TouchEvent").
4509 - name: dom.w3c_touch_events.legacy_apis.enabled
4510   type: bool
4511   value: @IS_ANDROID@
4512   mirror: always
4514 # W3C touch events
4515 # 0 - disabled, 1 - enabled, 2 - autodetect
4516 # Autodetection is currently only supported on Windows and GTK3 (and assumed on
4517 # Android).
4518 - name: dom.w3c_touch_events.enabled
4519   type: int32_t
4520 #if defined(XP_MACOSX)
4521   value: 0
4522 #else
4523   value: 2
4524 #endif
4525   mirror: always
4527 # Is support for the Web Audio API enabled?
4528 - name: dom.webaudio.enabled
4529   type: bool
4530   value: true
4531   mirror: always
4533 - name: dom.webkitBlink.dirPicker.enabled
4534   type: RelaxedAtomicBool
4535   value: @IS_NOT_ANDROID@
4536   mirror: always
4538 # NOTE: This preference is used in unit tests. If it is removed or its default
4539 # value changes, please update test_sharedMap_static_prefs.js accordingly.
4540 - name: dom.webcomponents.shadowdom.report_usage
4541   type: bool
4542   value: false
4543   mirror: always
4545 # Is support for Declarative ShadowDOM enabled?
4546 - name: dom.webcomponents.shadowdom.declarative.enabled
4547   type: bool
4548   value: @IS_NIGHTLY_BUILD@
4549   mirror: always
4551 # Is support for the Web GPU API enabled?
4552 - name: dom.webgpu.enabled
4553   type: RelaxedAtomicBool
4554   value: @IS_NIGHTLY_BUILD@
4555   mirror: always
4557 # Is support for the Web GPU API enabled on DOM workers?
4558 - name: dom.webgpu.workers.enabled
4559   type: RelaxedAtomicBool
4560   value: false
4561   mirror: always
4563 # Are WebGPU indirect draws/dispatches enabled?
4564 - name: dom.webgpu.indirect-dispatch.enabled
4565   type: RelaxedAtomicBool
4566   value: false
4567   mirror: always
4569 # Comma-separated list of wgpu backend names to permit in WebGPU adapters.
4571 # If non-empty, this is parsed by `wgpu_core::instance::parse_backends_from_comma_list` to
4572 # produce a `wgpu_types::Backends` bitset used to create a `wgpu_core::hub::Global`. As of
4573 # 2023-3-22, recognized names are:
4575 #     "vulkan" | "vk" => Backends::VULKAN,
4576 #     "dx12" | "d3d12" => Backends::DX12,
4577 #     "dx11" | "d3d11" => Backends::DX11,
4578 #     "metal" | "mtl" => Backends::METAL,
4579 #     "opengl" | "gles" | "gl" => Backends::GL,
4580 #     "webgpu" => Backends::BROWSER_WEBGPU,
4581 - name: dom.webgpu.wgpu-backend
4582   type: DataMutexString
4583   value: ""
4584   mirror: always
4585   rust: true
4587 - name: dom.webgpu.swap-chain.external-texture-dx12
4588   type: RelaxedAtomicBool
4589   value: false
4590   mirror: always
4591   rust: true
4593 # For testing purposes, crash if we don't get a hardware adapter.
4594 - name: dom.webgpu.testing.assert-hardware-adapter
4595   type: RelaxedAtomicBool
4596   value: false
4597   mirror: always
4598   rust: true
4600 # Whether to pass labels to the hardware abstraction layer. This is only useful when
4601 # inspecting a WebGPU workload in a GPU debugging tool like renderdoc. Enabling it
4602 # exposes poorly tested driver API surfaces so it should not be enabled by default.
4603 - name: dom.webgpu.hal-labels
4604   type: bool
4605   value: false
4606   mirror: once
4607   rust: true
4609 # Is support for HTMLInputElement.webkitEntries enabled?
4610 - name: dom.webkitBlink.filesystem.enabled
4611   type: bool
4612   value: @IS_NOT_ANDROID@
4613   mirror: always
4615 # Whether the WebMIDI API is enabled
4616 - name: dom.webmidi.enabled
4617   type: bool
4618   value: @IS_NOT_ANDROID@
4619   mirror: always
4621 # midi permission is addon-gated
4622 - name: dom.webmidi.gated
4623   type: bool
4624   value: true
4625   mirror: always
4627 - name: dom.webnotifications.allowcrossoriginiframe
4628   type: RelaxedAtomicBool
4629   value: false
4630   mirror: always
4632 - name: dom.webnotifications.enabled
4633   type: RelaxedAtomicBool
4634   value: true
4635   mirror: always
4637 - name: dom.webnotifications.privateBrowsing.enableDespiteLimitations
4638   type: RelaxedAtomicBool
4639   value: false
4640   mirror: always
4642 - name: dom.webnotifications.requireuserinteraction
4643   type: RelaxedAtomicBool
4644   value: true
4645   mirror: always
4647 - name: dom.webnotifications.requireinteraction.enabled
4648   type: RelaxedAtomicBool
4649 #if defined(XP_WIN)
4650   value: true
4651 #else
4652   value: @IS_NIGHTLY_BUILD@
4653 #endif
4654   mirror: always
4656 - name: dom.webnotifications.silent.enabled
4657   type: RelaxedAtomicBool
4658   value: @IS_NIGHTLY_BUILD@
4659   mirror: always
4661 - name: dom.webnotifications.vibrate.enabled
4662   type: RelaxedAtomicBool
4663 #if defined(MOZ_WIDGET_ANDROID)
4664   value: @IS_NIGHTLY_BUILD@
4665 #else
4666   value: false
4667 #endif
4668   mirror: always
4670 # Is support for Window.event enabled?
4671 - name: dom.window.event.enabled
4672   type: bool
4673   value: true
4674   mirror: always
4676 - name: dom.window.clientinformation.enabled
4677   type: bool
4678   value: true
4679   mirror: always
4681 # Whether Window.sizeToContent() is enabled.
4682 - name: dom.window.sizeToContent.enabled
4683   type: bool
4684   value: false
4685   mirror: always
4687 - name: dom.worker.canceling.timeoutMilliseconds
4688   type: RelaxedAtomicUint32
4689   value: 30000    # 30 seconds
4690   mirror: always
4692 - name: dom.worker.use_medium_high_event_queue
4693   type: RelaxedAtomicBool
4694   value: true
4695   mirror: always
4697 # Enables the dispatching of console log events from worker threads to the
4698 # main-thread.
4699 - name: dom.worker.console.dispatch_events_to_main_thread
4700   type: RelaxedAtomicBool
4701   value: true
4702   mirror: always
4704 - name: dom.workers.testing.enabled
4705   type: RelaxedAtomicBool
4706   value: false
4707   mirror: always
4709 # When this pref is set, parent documents may consider child iframes have
4710 # loaded while they are still loading.
4711 - name: dom.cross_origin_iframes_loaded_in_background
4712   type: bool
4713   value: false
4714   mirror: always
4716 # WebIDL test prefs.
4717 - name: dom.webidl.test1
4718   type: bool
4719   value: true
4720   mirror: always
4721 - name: dom.webidl.test2
4722   type: bool
4723   value: true
4724   mirror: always
4726 - name: dom.webidl.crosscontext_hasinstance.enabled
4727   type: RelaxedAtomicBool
4728   value: false
4729   mirror: always
4731 # WebShare API - exposes navigator.share()
4732 - name: dom.webshare.enabled
4733   type: bool
4734 #ifdef XP_WIN
4735   value: @IS_EARLY_BETA_OR_EARLIER@
4736 #else
4737   value: false
4738 #endif
4739   mirror: always
4741 # WebShare API - allows WebShare without user interaction (for tests only).
4742 - name: dom.webshare.requireinteraction
4743   type: bool
4744   value: true
4745   mirror: always
4747 # Hide the confirm dialog when a POST request is reloaded.
4748 - name: dom.confirm_repost.testing.always_accept
4749   type: bool
4750   value: false
4751   mirror: always
4753 # Whether we should suspend inactive tabs or not
4754 - name: dom.suspend_inactive.enabled
4755   type: bool
4756   value: @IS_ANDROID@
4757   mirror: always
4759 # The following three prefs control the maximum script run time before slow
4760 # script warning.
4762 # Controls the time that a content script can run before showing a
4763 # notification.
4764 - name: dom.max_script_run_time
4765   type: int32_t
4766   value: 10
4767   mirror: always
4769 # Controls whether we want to wait for user input before surfacing notifying
4770 # the parent process about a long-running script.
4771 - name: dom.max_script_run_time.require_critical_input
4772   type: bool
4773 # On desktop, we don't want to annoy the user with a notification if they're
4774 # not interacting with the browser. On Android however, we automatically
4775 # terminate long-running scripts, so we want to make sure we don't get in the
4776 # way of that by waiting for input.
4777 #if defined(MOZ_WIDGET_ANDROID)
4778   value: false
4779 #else
4780   value: true
4781 #endif
4782   mirror: always
4784 # Controls if a content script will be aborted on child process shutdown.
4785 - name: dom.abort_script_on_child_shutdown
4786   type: bool
4787   value: true
4788   mirror: always
4790 - name: dom.max_chrome_script_run_time
4791   type: int32_t
4792   value: 0
4793   mirror: always
4795 - name: dom.max_ext_content_script_run_time
4796   type: int32_t
4797   value: 5
4798   mirror: always
4800 # Let Resize Observer report the size of all fragments, and not just the
4801 # first one, as per CSSWG resolution:
4802 # https://github.com/w3c/csswg-drafts/issues/3673#issuecomment-467221565
4803 - name: dom.resize_observer.support_fragments
4804   type: bool
4805   value: false
4806   mirror: always
4808 # <iframe loading="lazy">
4809 - name: dom.iframe_lazy_loading.enabled
4810   type: RelaxedAtomicBool
4811   value: true
4812   mirror: always
4814 #---------------------------------------------------------------------------
4815 # Prefs starting with "editor"
4816 #---------------------------------------------------------------------------
4818 # Default background color of HTML editor.  This is referred only when
4819 # "editor.use_custom_colors" is set to `true`.
4820 - name: editor.background_color
4821   type: String
4822   value: "#FFFFFF"
4823   mirror: never
4825 # Whether HTMLEditor consides block or inline element with computed style or
4826 # only with the default style of HTML definition.
4827 - name: editor.block_inline_check.use_computed_style
4828   type: bool
4829   value: @IS_EARLY_BETA_OR_EARLIER@
4830   mirror: always
4832 # Use compatible range computation when applying inline style.  This is used
4833 # for making it possible to backout with Normandy Pref Rollout.
4834 - name: editor.inline_style.range.compatible_with_the_other_browsers
4835   type: bool
4836   value: true
4837   mirror: always
4839 # Delay to mask last input character in password fields.
4840 # If negative value, to use platform's default behavior.
4841 # If 0, no delay to mask password.
4842 # Otherwise, password fields unmask last input character(s) during specified
4843 # time (in milliseconds).
4844 - name: editor.password.mask_delay
4845   type: int32_t
4846   value: -1
4847   mirror: always
4849 # Set to true when you test mask_delay of password editor.  If this is set
4850 # to true, "MozLastInputMasked" is fired when last input characters are
4851 # masked by timeout.
4852 - name: editor.password.testing.mask_delay
4853   type: bool
4854   value: false
4855   mirror: always
4857 # How line breakers are treated in single line editor:
4858 # * 0: Only remove the leading and trailing newlines.
4859 # * 1: Remove the first newline and all characters following it.
4860 # * 2: Replace newlines with spaces (default of Firefox).
4861 # * 3: Remove newlines from the string.
4862 # * 4: Replace newlines with commas (default of Thunderbird).
4863 # * 5: Collapse newlines and surrounding white space characters and
4864 #      remove them from the string.
4865 # Other values are treated as 1.
4866 - name: editor.singleLine.pasteNewlines
4867   type: int32_t
4868   value: 2
4869   mirror: always
4871 # Whether user pastes should be truncated.
4872 - name: editor.truncate_user_pastes
4873   type: bool
4874   value: true
4875   mirror: always
4877 # When this is set to `true`, "editor.background_color" must be set, then,
4878 # the value is treated as default background color of the HTML editor.
4879 # If `false` and "browser.display.use_system_colors" is set to `true`,
4880 # "browser.display.background_color" is used instead.
4881 # Otherwise, no color is used as default background color.
4882 # This pref is for Thunderbird and SeaMonkey.
4883 - name: editor.use_custom_colors
4884   type: bool
4885   value: false
4886   mirror: always
4888 # If this is set to `true`, CSS mode of style editor is enabled by default
4889 # unless it's a mail editor.
4890 # This pref is for Thunderbird and SeaMonkey.
4891 - name: editor.use_css
4892   type: bool
4893   value: false
4894   mirror: always
4896 # Whether enabling blink compatible white-space normalizer or keep using
4897 # Gecko's traditional white-space normalizer.
4898 - name: editor.white_space_normalization.blink_compatible
4899   type: bool
4900   value: false
4901   mirror: always
4903 # General prefs for editor, indicating whether Gecko-specific editing UI is
4904 # enabled by default. Those UIs are not implemented by any other browsers.  So,
4905 # only Firefox users can change some styles with them. This means that Firefox
4906 # users may get unexpected result of some web apps if they assume that users
4907 # cannot change such styles.
4908 - name: editor.resizing.enabled_by_default
4909   type: bool
4910   value: false
4911   mirror: always
4912 - name: editor.inline_table_editing.enabled_by_default
4913   type: bool
4914   value: false
4915   mirror: always
4916 - name: editor.positioning.enabled_by_default
4917   type: bool
4918   value: false
4919   mirror: always
4921 # Controls if a double click word selection also deletes one adjacent whitespace
4922 # (if feasible). This mimics native behaviour on MacOS.
4923 - name: editor.word_select.delete_space_after_doubleclick_selection
4924   type: bool
4925 #ifdef XP_MACOSX
4926   value: true
4927 #else
4928   value: false
4929 #endif
4930   mirror: always
4932 #---------------------------------------------------------------------------
4933 # Prefs starting with "extensions."
4934 #---------------------------------------------------------------------------
4936 # Pref that enforces the use of web_accessible_resources for content loads.
4937 # This behavior is default for MV3.  The pref controls this for MV2.
4938 - name: extensions.content_web_accessible.enabled
4939   type: bool
4940   value: false
4941   mirror: always
4943 # Whether the InstallTrigger implementation should be enabled (or hidden and
4944 # none of its methods available).
4945 - name: extensions.InstallTriggerImpl.enabled
4946   type: bool
4947   value: false
4948   mirror: always
4950 # Whether the InstallTrigger implementation should be enabled (or completely
4951 # hidden), separate from InstallTriggerImpl because InstallTrigger is improperly
4952 # used also for UA detection.
4953 - name: extensions.InstallTrigger.enabled
4954   type: bool
4955   value: @IS_NOT_EARLY_BETA_OR_EARLIER@
4956   mirror: always
4959 # Whether the background.service_worker in the extension manifest.json file
4960 # is enabled.
4961 # all.js locks the pref to false when MOZ_WEBEXT_WEBIDL_ENABLED is false.
4962 - name: extensions.backgroundServiceWorker.enabled
4963   type: bool
4964   value: false
4965   mirror: once
4967 # Maximum number of misspelled words in a text.
4968 - name: extensions.spellcheck.inline.max-misspellings
4969   type: int32_t
4970   value: 500
4971   mirror: always
4973 # Whether the extensions can register a service worker on its own.
4974 # NOTE: WebExtensions Framework ability to register a background service worker
4975 # is not controlled by this pref, only the extension code ability to use
4976 # navigator.serviceWorker.register is locked behind this pref.
4977 - name: extensions.serviceWorkerRegister.allowed
4978   type: bool
4979   value: false
4980   mirror: always
4982 # Temporary pref to allow reverting the fix to bug 1853409.
4983 # TODO bug 1856071: Remove this pref.
4984 # When true, extensions can run content scripts in about:blank documents that
4985 # have a null principal. When false, extensions require permissions to all URLs.
4986 - name: extensions.script_about_blank_without_permission
4987   type: bool
4988   value: false
4989   mirror: always
4991 # Legacy behavior on filterResponse calls on intercepted sw script requests.
4992 - name: extensions.filterResponseServiceWorkerScript.disabled
4993   type: bool
4994   value: false
4995   mirror: always
4997 # This pref governs whether we run webextensions in a separate process (true)
4998 # or the parent/main process (false)
4999 - name: extensions.webextensions.remote
5000   type: RelaxedAtomicBool
5001   value: false
5002   mirror: always
5004 # Whether to expose the MockExtensionAPI test interface in tests.
5005 # The interface MockExtensionAPI doesn't represent a real extension API,
5006 # it is only available in test and does include a series of cases useful
5007 # to test the API request handling without tying the unit test to a
5008 # specific WebExtensions API.
5009 - name: extensions.webidl-api.expose_mock_interface
5010   type: RelaxedAtomicBool
5011   value: false
5012   mirror: always
5014 # Whether to allow acccess to AddonManager to developer sites for testing
5015 # NOTE: We'd like this to be a "hidden" pref once StaticPrefs supports it.
5016 - name: extensions.webapi.testing
5017   type: RelaxedAtomicBool
5018   value: false
5019   mirror: always
5021 # Automation-only pref to allow AddonManager over insecure protocols.
5022 # NOTE: We'd like this to be a "hidden" pref once StaticPrefs supports it.
5023 - name: extensions.webapi.testing.http
5024   type: RelaxedAtomicBool
5025   value: false
5026   mirror: always
5028 # Whether to expose the AddonManager web API.
5029 - name: extensions.webapi.enabled
5030   type: RelaxedAtomicBool
5031   value: @IS_NOT_ANDROID@
5032   mirror: always
5034 #---------------------------------------------------------------------------
5035 # Prefs starting with "fission."
5036 #---------------------------------------------------------------------------
5038 # Whether to enable Fission in new windows by default.
5039 # IMPORTANT: This preference should *never* be checked directly, since any
5040 # session can contain a mix of Fission and non-Fission windows. Instead,
5041 # callers should check whether the relevant nsILoadContext has the
5042 # `useRemoteSubframes` flag set.
5043 # Callers which cannot use `useRemoteSubframes` must use
5044 # `Services.appinfo.fissionAutostart` or `mozilla::FissionAutostart()` to check
5045 # whether fission is enabled by default.
5046 - name: fission.autostart
5047   type: bool
5048   value: @IS_NOT_ANDROID@
5049   mirror: never
5051 # This pref has no effect within fission windows, it only controls the
5052 # behaviour within non-fission windows. If true, preserve browsing contexts
5053 # between process swaps.
5054 - name: fission.preserve_browsing_contexts
5055   type: bool
5056   value: true
5057   mirror: always
5059 # Disable storing the session history in the parent process, and accessing it
5060 # over IPC from the child processes.
5061 - name: fission.disableSessionHistoryInParent
5062   type: bool
5063   value: @IS_ANDROID@
5064   mirror: once
5065   do_not_use_directly: true
5067 # If session history is stored in the parent process, enable bfcache for it.
5068 - name: fission.bfcacheInParent
5069   type: bool
5070   value: true
5071   mirror: always
5072   do_not_use_directly: true
5074 # Allow renaming of processes from Private Windows to the eTLD+1 on nightly
5075 # Setting this pref creates a privacy leak, but helps greatly with
5076 # debugging.
5077 - name: fission.processPrivateWindowSiteNames
5078   type: bool
5079   value: false
5080   mirror: always
5082 # Allow renaming of process names to the eTLD+1 on all versions, NOT
5083 # including processes from Private Windows
5084 # Setting this pref creates a privacy leak, but helps greatly with
5085 # debugging
5086 - name: fission.processSiteNames
5087   type: bool
5088   value: false
5089   mirror: always
5091 # Allow showing of current profile along with process names, NOT
5092 # including processes from Private Windows
5093 # Setting this pref creates a privacy leak, but helps greatly with
5094 # debugging
5095 - name: fission.processProfileName
5096   type: bool
5097   value: false
5098   mirror: always
5100 # If true, allow process-switching documents loaded by <object> and <embed>
5101 # elements into a remote process.
5102 # NOTE: This pref has no impact outside of windows with the
5103 # `useRemoteSubframes` flag set.
5104 - name: fission.remoteObjectEmbed
5105   type: bool
5106   value: true
5107   mirror: always
5109 # The strategy used to control how sites are isolated into separate processes
5110 # when Fisison is enabled. This pref has no effect if Fission is disabled.
5111 # See the `WebContentIsolationStrategy` enum in `ProcessIsolation.cpp`.
5112 - name: fission.webContentIsolationStrategy
5113   type: uint32_t
5114   value: 1
5115   mirror: always
5117 # Time in seconds before a site loaded with the Cross-Origin-Opener-Policy
5118 # header is no longer considered high-value and isolated in the "highValueCOOP"
5119 # configuration.
5120 - name: fission.highValue.coop.expiration
5121   type: uint32_t
5122   value: 2592000   # 30 days (in seconds)
5123   mirror: always
5125 # Time in seconds before a site are considered high-value by the login detection
5126 # service is no longer considered high-value and isolated in the "highValueHasSavedLogin"
5127 # or "highValueIsLoggedIn" configuration.
5128 - name: fission.highValue.login.expiration
5129   type: uint32_t
5130   value: 2592000   # 30 days (in seconds)
5131   mirror: always
5133 # If true, capture login attemp, and add "highValueIsLoggedIn" permission to
5134 # the permission manager no matter whether fission is enabled and
5135 # WebContentIsolationStrateg is set to IsolateHighvalue.
5136 - name: fission.highValue.login.monitor
5137   type: bool
5138   value: @IS_ANDROID@
5139   mirror: always
5141 # If true, do not send blocklisted preference values to the subprocess
5142 - name: fission.omitBlocklistedPrefsInSubprocesses
5143   type: RelaxedAtomicBool
5144   value: true
5145   mirror: always
5147 # If true, crash when a blocklisted preference is accessed in a subprocess
5148 - name: fission.enforceBlocklistedPrefsInSubprocesses
5149   type: RelaxedAtomicBool
5150   value: @IS_EARLY_BETA_OR_EARLIER@
5151   mirror: always
5153 #---------------------------------------------------------------------------
5154 # Prefs starting with "font."
5155 #---------------------------------------------------------------------------
5157 # A value greater than zero enables font size inflation for
5158 # pan-and-zoom UIs, so that the fonts in a block are at least the size
5159 # that, if a block's width is scaled to match the device's width, the
5160 # fonts in the block are big enough that at most the pref value ems of
5161 # text fit in *the width of the device*.
5163 # When both this pref and the next are set, the larger inflation is used.
5164 - name: font.size.inflation.emPerLine
5165   type: uint32_t
5166   value: 0
5167   mirror: always
5169 # A value greater than zero enables font size inflation for
5170 # pan-and-zoom UIs, so that if a block's width is scaled to match the
5171 # device's width, the fonts in a block are at least the given font size.
5172 # The value given is in twips, i.e., 1/20 of a point, or 1/1440 of an inch.
5174 # When both this pref and the previous are set, the larger inflation is used.
5175 - name: font.size.inflation.minTwips
5176   type: uint32_t
5177   value: 0
5178   mirror: always
5180 # In products with multi-mode pan-and-zoom and non-pan-and-zoom UIs,
5181 # this pref forces font inflation to always be enabled in all modes.
5182 # That is, any heuristics used to detect pan-and-zoom
5183 # vs. non-pan-and-zoom modes are disabled and all content is treated
5184 # as pan-and-zoom mode wrt font inflation.
5186 # This pref has no effect if font inflation is not enabled through
5187 # either of the prefs above.  It has no meaning in single-mode UIs.
5188 - name: font.size.inflation.forceEnabled
5189   type: bool
5190   value: false
5191   mirror: always
5193 # In products with multi-mode pan-and-zoom and non-pan-and-zoom UIs,
5194 # this pref disables font inflation in master-process contexts where
5195 # existing heuristics can't be used determine enabled-ness.
5197 # This pref has no effect if font inflation is not enabled through
5198 # either of the prefs above.  The "forceEnabled" pref above overrides
5199 # this pref.
5200 - name: font.size.inflation.disabledInMasterProcess
5201   type: bool
5202   value: false
5203   mirror: always
5205 # Defines the font size inflation mapping intercept parameter.
5207 # Font size inflation computes a minimum font size, m, based on
5208 # other preferences (see font.size.inflation.minTwips and
5209 # font.size.inflation.emPerLine, above) and the width of the
5210 # frame in which the text resides. Using this minimum, a specified
5211 # font size, s, is mapped to an inflated font size, i, using an
5212 # equation that varies depending on the value of the font size
5213 # inflation mapping intercept parameter, P.
5215 # If the intercept parameter is negative, then the following mapping
5216 # function is used:
5218 # i = m + s
5220 # If the intercept parameter is non-negative, then the mapping function
5221 # is a function such that its graph meets the graph of i = s at the
5222 # point where both i and s are (1 + P/2) * m for values of s that are
5223 # large enough. This means that when s=0, i is always equal to m.
5224 - name: font.size.inflation.mappingIntercept
5225   type: int32_t
5226   value: 1
5227   mirror: always
5229 # Since the goal of font size inflation is to avoid having to
5230 # repeatedly scroll side to side to read a block of text, and there are
5231 # a number of page layouts where a relatively small chunk of text is
5232 # better off not being inflated according to the same algorithm we use
5233 # for larger chunks of text, we want a threshold for an amount of text
5234 # that triggers font size inflation.  This preference controls that
5235 # threshold.
5237 # It controls the threshold used within an *approximation* of the
5238 # number of lines of text we use.  In particular, if we assume that
5239 # each character (collapsing collapsible whitespace) has a width the
5240 # same as the em-size of the font (when, normally, it's actually quite
5241 # a bit smaller on average), this preference gives the percentage of a
5242 # number of lines of text we'd need to trigger inflation.  This means
5243 # that a percentage of 100 means that we'd need a number of characters
5244 # (we know the font size and the width) equivalent to one line of
5245 # square text (which is actually a lot less than a real line of text).
5247 # A value of 0 means there's no character length threshold.
5248 - name: font.size.inflation.lineThreshold
5249   type: uint32_t
5250   value: 400
5251   mirror: always
5253 # This controls the percentage that fonts will be inflated, if font
5254 # size inflation is enabled. Essentially, if we have a specified font
5255 # size, s, and an inflated font size, i, this specifies that the ratio
5256 # i/s * 100 should never exceed the value of this preference. In order
5257 # for this preference to have any effect, its value must be greater
5258 # than 100, since font inflation can never decrease the ratio i/s.
5259 - name: font.size.inflation.maxRatio
5260   type: uint32_t
5261   value: 0
5262   mirror: always
5264 #---------------------------------------------------------------------------
5265 # Prefs starting with "full-screen-api."
5266 #---------------------------------------------------------------------------
5268 - name: full-screen-api.enabled
5269   type: bool
5270   value: true
5271   mirror: always
5273 - name: full-screen-api.allow-trusted-requests-only
5274   type: bool
5275   value: true
5276   mirror: always
5278 - name: full-screen-api.mouse-event-allow-left-button-only
5279   type: bool
5280   value: true
5281   mirror: always
5283 - name: full-screen-api.exit-on.windowOpen
5284   type: bool
5285   value: true
5286   mirror: always
5288 - name: full-screen-api.exit-on.windowRaise
5289   type: bool
5290   value: true
5291   mirror: always
5293 - name: full-screen-api.pointer-lock.enabled
5294   type: bool
5295   value: true
5296   mirror: always
5298 # whether to prevent the top level widget from going fullscreen
5299 - name: full-screen-api.ignore-widgets
5300   type: bool
5301   value: false
5302   mirror: always
5304 #---------------------------------------------------------------------------
5305 # Prefs starting with "fuzzing.". It's important that these can only be
5306 # checked in fuzzing builds (when FUZZING is defined), otherwise you could
5307 # enable the fuzzing stuff on your regular build which would be bad :)
5308 #---------------------------------------------------------------------------
5310 #ifdef FUZZING
5311 -   name: fuzzing.enabled
5312     type: bool
5313 #ifdef FUZZING_SNAPSHOT
5314     value: true
5315 #else
5316     value: false
5317 #endif
5318     mirror: always
5320 -   name: fuzzing.necko.enabled
5321     type: RelaxedAtomicBool
5322     value: false
5323     mirror: always
5325 -   name: fuzzing.necko.http3
5326     type: RelaxedAtomicBool
5327     value: false
5328     mirror: always
5329     rust: true
5331 # This configures a virtual authenticator for WebAuthn. The value encodes the
5332 # arguments to the WebDriver "Add Virtual Authenticator" extension command.
5333 # Bits 0, 1, 2, and 3 encode "is_user_verified", "is_user_consenting",
5334 # "has_user_verification", and "has_resident_key" in that order. Bit 5 encodes
5335 # the transport, either "usb" (0) or "internal" (1). Bits 6 and 7 encode the
5336 # protocol, either "ctap1/u2f" (1), "ctap2" (2), or "ctap2_1" (3). Note that
5337 # the valid protocol values are non-zero---an authenticator will not be
5338 # configured if this pref is set to zero. Changing this pref requires
5339 # a restart.
5340 - name: fuzzing.webauthn.authenticator_config
5341   type: RelaxedAtomicUint32
5342   value: 0
5343   mirror: always
5344   rust: true
5345 #endif
5347 #---------------------------------------------------------------------------
5348 # Prefs starting with "general."
5349 #---------------------------------------------------------------------------
5351 - name: general.aboutConfig.enable
5352   type: bool
5353   value: true
5354   mirror: always
5356 # Limits the depth of recursive conversion of data when opening
5357 # a content to view.  This is mostly intended to prevent infinite
5358 # loops with faulty converters involved.
5359 - name: general.document_open_conversion_depth_limit
5360   type: uint32_t
5361   value: 20
5362   mirror: always
5364 - name: general.smoothScroll
5365   type: RelaxedAtomicBool
5366   value: true
5367   mirror: always
5369 # This pref and general.smoothScroll.stopDecelerationWeighting determine
5370 # the timing function.
5371 - name: general.smoothScroll.currentVelocityWeighting
5372   type: AtomicFloat
5373   value: 0.25
5374   mirror: always
5376 # To connect consecutive scroll events into a continuous flow, the animation's
5377 # duration should be longer than scroll events intervals (or else the scroll
5378 # will stop before the next event arrives - we're guessing the next interval
5379 # by averaging recent intervals).
5380 # This defines how much longer the duration is compared to the events
5381 # interval (percentage).
5382 - name: general.smoothScroll.durationToIntervalRatio
5383   type: RelaxedAtomicInt32
5384   value: 200
5385   mirror: always
5387 - name: general.smoothScroll.lines
5388   type: RelaxedAtomicBool
5389   value: true
5390   mirror: always
5392 - name: general.smoothScroll.lines.durationMaxMS
5393   type: RelaxedAtomicInt32
5394   value: 150
5395   mirror: always
5397 - name: general.smoothScroll.lines.durationMinMS
5398   type: RelaxedAtomicInt32
5399   value: 150
5400   mirror: always
5402 - name: general.smoothScroll.mouseWheel
5403   type: RelaxedAtomicBool
5404   value: true
5405   mirror: always
5407 - name: general.smoothScroll.mouseWheel.durationMaxMS
5408   type: RelaxedAtomicInt32
5409   value: 200
5410   mirror: always
5412 - name: general.smoothScroll.mouseWheel.durationMinMS
5413   type: RelaxedAtomicInt32
5414   value: 50
5415   mirror: always
5417 - name: general.smoothScroll.other
5418   type: RelaxedAtomicBool
5419   value: true
5420   mirror: always
5422 - name: general.smoothScroll.other.durationMaxMS
5423   type: RelaxedAtomicInt32
5424   value: 150
5425   mirror: always
5427 - name: general.smoothScroll.other.durationMinMS
5428   type: RelaxedAtomicInt32
5429   value: 150
5430   mirror: always
5432 - name: general.smoothScroll.pages
5433   type: RelaxedAtomicBool
5434   value: true
5435   mirror: always
5437 - name: general.smoothScroll.pages.durationMaxMS
5438   type: RelaxedAtomicInt32
5439   value: 150
5440   mirror: always
5442 - name: general.smoothScroll.pages.durationMinMS
5443   type: RelaxedAtomicInt32
5444   value: 150
5445   mirror: always
5447 - name: general.smoothScroll.scrollbars
5448   type: RelaxedAtomicBool
5449   value: true
5450   mirror: always
5452 - name: general.smoothScroll.scrollbars.durationMaxMS
5453   type: RelaxedAtomicInt32
5454   value: 150
5455   mirror: always
5457 - name: general.smoothScroll.scrollbars.durationMinMS
5458   type: RelaxedAtomicInt32
5459   value: 150
5460   mirror: always
5462 - name: general.smoothScroll.pixels
5463   type: RelaxedAtomicBool
5464   value: true
5465   mirror: always
5467 - name: general.smoothScroll.pixels.durationMaxMS
5468   type: RelaxedAtomicInt32
5469   value: 150
5470   mirror: always
5472 - name: general.smoothScroll.pixels.durationMinMS
5473   type: RelaxedAtomicInt32
5474   value: 150
5475   mirror: always
5477 # This pref and general.smoothScroll.currentVelocityWeighting determine
5478 # the timing function.
5479 - name: general.smoothScroll.stopDecelerationWeighting
5480   type: AtomicFloat
5481   value: 0.4f
5482   mirror: always
5484 # Alternative smooth scroll physics. ("MSD" = Mass-Spring-Damper)
5485 - name: general.smoothScroll.msdPhysics.enabled
5486   type: RelaxedAtomicBool
5487   value: @IS_NIGHTLY_BUILD@
5488   mirror: always
5490 - name: general.smoothScroll.msdPhysics.continuousMotionMaxDeltaMS
5491   type: RelaxedAtomicInt32
5492   value: 120
5493   mirror: always
5495 - name: general.smoothScroll.msdPhysics.motionBeginSpringConstant
5496   type: RelaxedAtomicInt32
5497   value: 1250
5498   mirror: always
5500 - name: general.smoothScroll.msdPhysics.slowdownMinDeltaMS
5501   type: RelaxedAtomicInt32
5502   value: 12
5503   mirror: always
5505 - name: general.smoothScroll.msdPhysics.slowdownMinDeltaRatio
5506   type: AtomicFloat
5507   value: 1.3f
5508   mirror: always
5510 - name: general.smoothScroll.msdPhysics.slowdownSpringConstant
5511   type: RelaxedAtomicInt32
5512   value: 2000
5513   mirror: always
5515 - name: general.smoothScroll.msdPhysics.regularSpringConstant
5516   type: RelaxedAtomicInt32
5517   value: 1000
5518   mirror: always
5520 #---------------------------------------------------------------------------
5521 # Prefs starting with "geo."
5522 #---------------------------------------------------------------------------
5524 # Is support for Navigator.geolocation enabled?
5525 - name: geo.enabled
5526   type: bool
5527   value: true
5528   mirror: always
5530 # Time, in milliseconds, to wait for the location provider to spin up.
5531 - name: geo.timeout
5532   type: int32_t
5533   value: 6000
5534   mirror: always
5536 #ifdef MOZ_ENABLE_DBUS
5537 # Whether to use Geoclue location provider (if available on the system).
5538 - name: geo.provider.use_geoclue
5539   type: bool
5540   value: true
5541   mirror: always
5543 # Whether to always provide high location accuracy, even if site
5544 # doesn't actually request this level of accuracy.
5545 # Almost no site correctly requests high accuracy so force it by default
5546 # for compatibility with other geolocation providers.
5547 - name: geo.provider.geoclue.always_high_accuracy
5548   type: bool
5549   value: true
5550   mirror: always
5551 #endif
5553 #---------------------------------------------------------------------------
5554 # Prefs starting with "gfx."
5555 #---------------------------------------------------------------------------
5557 # Allow 24-bit colour when the hardware supports it.
5558 - name: gfx.android.rgb16.force
5559   type: bool
5560   value: false
5561   mirror: once
5563 - name: gfx.apitrace.enabled
5564   type: bool
5565   value: false
5566   mirror: once
5568 - name: gfx.blithelper.precision
5569   type: RelaxedAtomicUint32
5570   value: 2 # { 0: lowp, 1: mediump, 2: highp }
5571   mirror: always
5573 - name: gfx.blithelper.lut-size.rgb.b
5574   type: RelaxedAtomicUint32
5575   value: 15
5576   mirror: always
5577 - name: gfx.blithelper.lut-size.rgb.g
5578   type: RelaxedAtomicUint32
5579   value: 31
5580   mirror: always
5581 - name: gfx.blithelper.lut-size.rgb.r
5582   type: RelaxedAtomicUint32
5583   value: 31
5584   mirror: always
5586 - name: gfx.blithelper.lut-size.ycbcr.cb
5587   type: RelaxedAtomicUint32
5588   value: 15
5589   mirror: always
5590 - name: gfx.blithelper.lut-size.ycbcr.cr
5591   type: RelaxedAtomicUint32
5592   value: 31
5593   mirror: always
5594 - name: gfx.blithelper.lut-size.ycbcr.y
5595   type: RelaxedAtomicUint32
5596   value: 31
5597   mirror: always
5599 # Nb: we ignore this pref on release and beta.
5600 - name: gfx.blocklist.all
5601   type: int32_t
5602   value: 0
5603   mirror: once
5605 #if defined(XP_MACOSX)
5606 - name: gfx.cairo_quartz_cg_layer.enabled
5607   type: bool
5608   value: true
5609   mirror: always
5610 #endif
5612 - name: gfx.canvas.accelerated
5613   type: bool
5614 #if defined(XP_MACOSX) || defined(XP_LINUX) && !defined(ANDROID)
5615   value: true
5616 #elif defined(MOZ_WIDGET_ANDROID)
5617   value: true
5618 #else
5619   value: false
5620 #endif
5621   mirror: always
5623 # Whether to attempt to enable Accelerated Canvas2D regardless of blocklisting.
5624 - name: gfx.canvas.accelerated.force-enabled
5625   type: bool
5626   value: false
5627   mirror: always
5629 - name: gfx.canvas.accelerated.async-present
5630   type: RelaxedAtomicBool
5631   value: true
5632   mirror: always
5634 - name: gfx.canvas.accelerated.cache-items
5635   type: RelaxedAtomicUint32
5636   value: 2048
5637   mirror: always
5639 - name: gfx.canvas.accelerated.cache-size
5640   type: RelaxedAtomicUint32
5641   value: 256
5642   mirror: always
5644 - name: gfx.canvas.accelerated.reserve-empty-cache
5645   type: RelaxedAtomicUint32
5646   value: 36
5647   mirror: always
5649 - name: gfx.canvas.accelerated.max-draw-target-count
5650   type: RelaxedAtomicInt32
5651   value: 200
5652   mirror: always
5654 - name: gfx.canvas.accelerated.max-size
5655   type: RelaxedAtomicInt32
5656   value: 0
5657   mirror: always
5659 - name: gfx.canvas.accelerated.min-size
5660   type: RelaxedAtomicInt32
5661   value: 128
5662   mirror: always
5664 - name: gfx.canvas.accelerated.max-surface-size
5665   type: RelaxedAtomicUint32
5666   value: 5280
5667   mirror: always
5669 - name: gfx.canvas.accelerated.shared-page-size
5670   type: RelaxedAtomicUint32
5671   value: 1024
5672   mirror: always
5674 # The minimum number of frames before acting on performance profile info
5675 - name: gfx.canvas.accelerated.profile-frames
5676   type: RelaxedAtomicUint32
5677   value: 10
5678   mirror: always
5680 # The ratio of failed frames to total frames when to fall back from acceleration
5681 - name: gfx.canvas.accelerated.profile-fallback-ratio
5682   type: AtomicFloat
5683   value: 0.3
5684   mirror: always
5686 # The ratio of cache misses at which to fail a profile frame
5687 - name: gfx.canvas.accelerated.profile-cache-miss-ratio
5688   type: AtomicFloat
5689   value: 0.66
5690   mirror: always
5692 # The maximum size of the GPU path cache in MB.
5693 - name: gfx.canvas.accelerated.gpu-path-size
5694   type: RelaxedAtomicUint32
5695   value: 4
5696   mirror: always
5698 # The maximum allowed complexity of a GPU path.
5699 - name: gfx.canvas.accelerated.gpu-path-complexity
5700   type: RelaxedAtomicUint32
5701   value: 4000
5702   mirror: always
5704 # Whether to accelerate stroked paths by converting them to fill paths.
5705 - name: gfx.canvas.accelerated.stroke-to-fill-path
5706   type: RelaxedAtomicBool
5707   value: false
5708   mirror: always
5710 # Whether to use aa-stroke to accelerate stroked paths.
5711 - name: gfx.canvas.accelerated.aa-stroke.enabled
5712   type: RelaxedAtomicBool
5713   value: true
5714   mirror: always
5716 # Draws an indicator if acceleration is used.
5717 - name: gfx.canvas.accelerated.debug
5718   type: RelaxedAtomicBool
5719   value: false
5720   mirror: always
5722 # 0x7fff is the maximum supported xlib surface size and is more than enough for canvases.
5723 - name: gfx.canvas.max-size
5724   type: RelaxedAtomicInt32
5725   value: 0x7fff
5726   mirror: always
5728 - name: gfx.canvas.remote
5729   type: bool
5730 #if defined(XP_WIN)
5731   value: true
5732 #else
5733   value: false
5734 #endif
5735   mirror: once
5737 - name: gfx.canvas.remote.allow-in-parent
5738   type: bool
5739   value: false
5740   mirror: once
5742 # How long to wait in milliseconds for a texture to be resolved
5743 - name: gfx.canvas.remote.texture-timeout-ms
5744   type: RelaxedAtomicUint32
5745   value: 10000
5746   mirror: always
5748 # How many worker threads spawned for remote canvas
5749 #  -1 - Calculate based on processor cores
5750 #   0 - No worker threads spawned, will do work on CanvasRenderThread
5751 #  >0 - Create worker thread pool with given size
5752 - name: gfx.canvas.remote.worker-threads
5753   type: int32_t
5754 #if defined(XP_WIN)
5755   value: -1
5756 #else
5757   value: 0
5758 #endif
5759   mirror: once
5761 # Default size of the shmem buffers used for recording
5762 - name: gfx.canvas.remote.default-buffer-size
5763   type: RelaxedAtomicUint32
5764   value: 32 * 1024
5765   mirror: always
5767 # How many times to spin before waiting in remote canvas
5768 - name: gfx.canvas.remote.max-spin-count
5769   type: RelaxedAtomicUint32
5770   value: 500
5771   mirror: always
5773 # How long to wait in milliseconds for the next event while in a transaction
5774 - name: gfx.canvas.remote.event-timeout-ms
5775   type: RelaxedAtomicUint32
5776   value: 2
5777   mirror: always
5779 # How many times we have a spare buffer before we drop one
5780 - name: gfx.canvas.remote.drop-buffer-limit
5781   type: RelaxedAtomicUint32
5782   value: 100
5783   mirror: always
5785 # Delay in milliseconds to drop buffers when there have been no non-empty transactions
5786 - name: gfx.canvas.remote.drop-buffer-milliseconds
5787   type: RelaxedAtomicUint32
5788   value: 10000
5789   mirror: always
5791 - name: gfx.canvas.willreadfrequently.enabled
5792   type: bool
5793 #if defined(XP_WIN)
5794   value: false
5795 #else
5796   value: true
5797 #endif
5798   mirror: once
5801 - name: gfx.color_management.display_profile
5802   type: DataMutexString
5803   value: ""
5804   mirror: always # But be warned: We cache the result.
5806 - name: gfx.color_management.force_srgb
5807   type: RelaxedAtomicBool
5808   value: false
5809   mirror: always
5811 - name: gfx.color_management.native_srgb
5812   type: RelaxedAtomicBool
5813 #if defined(XP_MACOSX)
5814   value: true
5815 #else
5816   value: false
5817 #endif
5818   mirror: always
5820 - name: gfx.color_management.enablev4
5821   type: RelaxedAtomicBool
5822   value: true
5823   mirror: always
5825 # 0 = Off, 1 = Full, 2 = Tagged Images Only.
5826 # See CMSMode in gfx/thebes/gfxPlatform.h.
5827 - name: gfx.color_management.mode
5828   type: RelaxedAtomicInt32
5829   value: 2
5830   mirror: always
5832 # The zero default here should match QCMS_INTENT_DEFAULT from qcms.h
5833 - name: gfx.color_management.rendering_intent
5834   type: RelaxedAtomicInt32
5835   value: 0
5836   mirror: always
5838 - name: gfx.color_management.rec709_gamma_as_srgb
5839   type: RelaxedAtomicBool
5840   value: true # Tragic backwards compat.
5841   mirror: always
5843 - name: gfx.color_management.rec2020_gamma_as_rec709
5844   type: RelaxedAtomicBool
5845   value: true # Match naive behavior, but hopefully we can stop soon!
5846   mirror: always
5848 # Whether GL contexts can be migrated to a different GPU (to match the one the
5849 # OS is using for composition).
5851 # 0 = force disable migration
5852 # 1 = use migration where in safe configurations (the default)
5853 # 2 = force enable migration (for testing)
5854 - name: gfx.compositor.gpu-migration
5855   type: RelaxedAtomicInt32
5856   value: 1
5857   mirror: always
5859 - name: gfx.core-animation.tint-opaque
5860   type: RelaxedAtomicBool
5861   value: false
5862   mirror: always
5864 #ifdef XP_MACOSX
5865   # Create specialized video-only layers for video content in
5866   # fullscreen windows. Consistently works well on Apple Silicon,
5867   # some issues remain on Intel hardware.
5868 -   name: gfx.core-animation.specialize-video
5869     type: RelaxedAtomicBool
5870 #if defined(MOZ_AARCH64)
5871     value: true
5872 #else
5873     value: false
5874 #endif
5875     mirror: always
5876 #endif
5878 #if defined(XP_MACOSX) && defined(NIGHTLY_BUILD)
5879   # Spoof the timing of the video sample instead of marking the untimed
5880   # sample to be displayed immediately.
5881 -   name: gfx.core-animation.specialize-video.spoof-timing
5882     type: RelaxedAtomicBool
5883     value: false
5884     mirror: always
5886   # Check that the sample has a color space and if it doesn't, log that
5887   # and supply the default color space from the main display.
5888 -   name: gfx.core-animation.specialize-video.check-color-space
5889     type: RelaxedAtomicBool
5890     value: false
5891     mirror: always
5893   # Log properties of the video surface, buffer, and format.
5894 -   name: gfx.core-animation.specialize-video.log
5895     type: RelaxedAtomicBool
5896     value: false
5897     mirror: always
5898 #endif
5900 #ifdef XP_MACOSX
5901 -   name: gfx.core-animation.low-power-telemetry-frames
5902     type: int32_t
5903     value: 600
5904     mirror: once
5905 #endif
5907 #if defined(MOZ_WIDGET_ANDROID)
5908   # Overrides the glClear color used when the surface origin is not (0, 0)
5909   # Used for drawing a border around the content.
5910 -   name: gfx.compositor.override.clear-color.r
5911     type: AtomicFloat
5912     value: 0.0f
5913     mirror: always
5915 -   name: gfx.compositor.override.clear-color.g
5916     type: AtomicFloat
5917     value: 0.0f
5918     mirror: always
5920 -   name: gfx.compositor.override.clear-color.b
5921     type: AtomicFloat
5922     value: 0.0f
5923     mirror: always
5925 -   name: gfx.compositor.override.clear-color.a
5926     type: AtomicFloat
5927     value: 0.0f
5928     mirror: always
5929 #endif  # defined(MOZ_WIDGET_ANDROID)
5931 - name: gfx.content.always-paint
5932   type: RelaxedAtomicBool
5933   value: false
5934   mirror: always
5936 # Size in megabytes
5937 - name: gfx.content.skia-font-cache-size
5938   type: int32_t
5939   value: 5
5940   mirror: once
5942 - name: gfx.device-reset.limit
5943   type: int32_t
5944   value: 10
5945   mirror: once
5947 - name: gfx.device-reset.threshold-ms
5948   type: int32_t
5949   value: -1
5950   mirror: once
5953 # Whether to disable the automatic detection and use of direct2d.
5954 - name: gfx.direct2d.disabled
5955   type: bool
5956   value: false
5957   mirror: once
5959 # Whether to attempt to enable Direct2D regardless of automatic detection or
5960 # blacklisting.
5961 - name: gfx.direct2d.force-enabled
5962   type: bool
5963   value: false
5964   mirror: once
5966 - name: gfx.direct2d.target-independent-rasterization.disabled
5967   type: bool
5968   value: false
5969   mirror: once
5971 - name: gfx.direct3d11.reuse-decoder-device
5972   type: bool
5973   value: true
5974   mirror: once
5975 # Enable reuse decoder device even when it is blocked.
5976 - name: gfx.direct3d11.reuse-decoder-device-force-enabled
5977   type: bool
5978   value: false
5979   mirror: once
5981 - name: gfx.direct3d11.allow-keyed-mutex
5982   type: RelaxedAtomicBool
5983   value: true
5984   mirror: always
5986 - name: gfx.direct3d11.use-double-buffering
5987   type: RelaxedAtomicBool
5988   value: false
5989   mirror: always
5991 - name: gfx.direct3d11.enable-debug-layer
5992   type: bool
5993   value: false
5994   mirror: once
5996 - name: gfx.direct3d11.break-on-error
5997   type: bool
5998   value: false
5999   mirror: once
6001 - name: gfx.direct3d11.sleep-on-create-device
6002   type: int32_t
6003   value: 0
6004   mirror: once
6006 # Rate by which the frame rate is divided. I.e. at a number higher than 1 we
6007 # will only refresh every <x> frames.
6008 - name: gfx.display.frame-rate-divisor
6009   type: RelaxedAtomicInt32
6010   value: 1
6011   mirror: always
6013 - name: gfx.display.max-frame-rate
6014   type: RelaxedAtomicInt32
6015   value: 0
6016   mirror: always
6018 # Whether to preserve color bitmap tables in fonts (bypassing OTS).
6019 # Currently these are supported only on platforms where we use Freetype
6020 # to render fonts (Linux/Gtk and Android).
6021 - name: gfx.downloadable_fonts.keep_color_bitmaps
6022   type: RelaxedAtomicBool
6023   value: false
6024   mirror: always
6026 # Whether to validate OpenType variation tables in fonts.
6027 - name: gfx.downloadable_fonts.validate_variation_tables
6028   type: RelaxedAtomicBool
6029   value: true
6030   mirror: always
6032 # Whether OTS validation should be applied to OpenType Layout (OTL) tables.
6033 - name: gfx.downloadable_fonts.otl_validation
6034   type: RelaxedAtomicBool
6035   value: @IS_NOT_RELEASE_OR_BETA@
6036   mirror: always
6038 - name: gfx.e10s.font-list.shared
6039   type: bool
6040   value: true
6041   mirror: once
6043 # Do we fire a notification about missing fonts, so the front-end can decide
6044 # whether to try and do something about it (e.g. download additional fonts)?
6045 - name: gfx.missing_fonts.notify
6046   type: RelaxedAtomicBool
6047   value: false
6048   mirror: always
6050 #if !defined(MOZ_WIDGET_ANDROID)
6051 - name: gfx.egl.prefer-gles.enabled
6052   type: bool
6053 #if defined(MOZ_WIDGET_GTK) && defined(MOZ_AARCH64)
6054   value: true
6055 #else
6056   value: false
6057 #endif
6058   mirror: once
6059 #endif
6061 # [Windows] Whether registry FontSubstitutes entries are used unconditionally,
6062 # or only if the original font is not available.
6063 #if defined(XP_WIN)
6064 - name: gfx.windows-font-substitutes.always
6065   type: bool
6066   value: false
6067   mirror: once
6068 #endif
6070 - name: gfx.font-list-omt.enabled
6071   type: bool
6072 #if defined(XP_MACOSX)
6073   value: true
6074 #else
6075   value: false
6076 #endif
6077   mirror: once
6079 # [Android] OPPO, realme and OnePlus device seem to crash when using Font
6080 # Match API. We turn off this feature on these devices. Set true if you want to
6081 # turn on it at force.
6082 #if defined(MOZ_WIDGET_ANDROID)
6083 - name: gfx.font-list.use_font_match_api.force-enabled
6084   type: bool
6085   value: false
6086   mirror: once
6087 #endif
6089 # Whether to load fonts (e.g. Twemoji Mozilla) bundled with the application:
6090 #  -1 - Auto behavior based on OS version (currently, disables loading on
6091 #       "low-memory" Android devices)
6092 #   0 - Skip loading any bundled fonts
6093 #   1 - Always load bundled fonts
6094 - name: gfx.bundled-fonts.activate
6095   type: int32_t
6096   value: -1
6097   mirror: once
6099 - name: gfx.font_loader.delay
6100   type: uint32_t
6101 #if defined(XP_WIN)
6102   value: 60000
6103 #else
6104   value: 8000
6105 #endif
6106   mirror: once
6108 # Disable antialiasing of Ahem, for use in tests.
6109 - name: gfx.font_rendering.ahem_antialias_none
6110   type: RelaxedAtomicBool
6111   value: false
6112   mirror: always
6114 #if defined(XP_MACOSX)
6115   # Set to true to revert from HarfBuzz AAT shaping to the old Core Text
6116   # backend.
6117 -   name: gfx.font_rendering.coretext.enabled
6118     type: RelaxedAtomicBool
6119     value: false
6120     mirror: always
6121 #endif
6123 - name: gfx.font_rendering.colr_v1.enabled
6124   type: RelaxedAtomicBool
6125   value: true
6126   mirror: always
6128 - name: gfx.font_rendering.opentype_svg.enabled
6129   type: RelaxedAtomicBool
6130   value: true
6131   mirror: always
6132   rust: true
6134 - name: gfx.font_rendering.fallback.async
6135   type: RelaxedAtomicBool
6136   value: true
6137   mirror: always
6139 # whether to always search all font cmaps during system font fallback
6140 - name: gfx.font_rendering.fallback.always_use_cmaps
6141   type: RelaxedAtomicBool
6142   value: false
6143   mirror: always
6145 # whether to do font fallback for codepoints with General Category = Unassigned
6146 - name: gfx.font_rendering.fallback.unassigned_chars
6147   type: RelaxedAtomicBool
6148   value: false
6149   mirror: always
6151 #ifdef MOZ_WIDGET_GTK
6152 -   name: gfx.font_rendering.fontconfig.max_generic_substitutions
6153     type: RelaxedAtomicUint32
6154     value: 3
6155     mirror: always
6156 #endif
6158 #if defined(XP_WIN)
6159 # Whether the DirectWrite bold simulation should be used when a bold font-weight
6160 # is requested but no bold face available in the family. This renders poorly with
6161 # some third-party fonts, so by default we disable it for webfonts and allow it
6162 # only with locally-installed fonts.
6163 # Values:
6164 #   0 - never use DWrite bold simulation; always multi-strike instead
6165 #   1 - use DWrite bold for installed fonts, multi-strike for webfont resources
6166 #   2 - use DWrite bold for all fonts
6167 - name: gfx.font_rendering.directwrite.bold_simulation
6168   type: RelaxedAtomicUint32
6169   value: 1
6170   mirror: always
6171 #endif
6173 - name: gfx.font_rendering.graphite.enabled
6174   type: RelaxedAtomicBool
6175   value: true
6176   mirror: always
6178 # Cache shaped word results
6179 - name: gfx.font_rendering.wordcache.charlimit
6180   type: RelaxedAtomicUint32
6181   value: 32
6182   mirror: always
6184 # Cache shaped word results
6185 - name: gfx.font_rendering.wordcache.maxentries
6186   type: RelaxedAtomicUint32
6187   value: 10000
6188   mirror: always
6190 # The level of logging:
6191 # - 0: no logging;
6192 # - 1: adds errors;
6193 # - 2: adds warnings;
6194 # - 3 or 4: adds debug logging.
6195 # If you set the value to 4, you will also need to set the environment
6196 # variable MOZ_LOG to gfx:4. See mozilla/Logging.h for details.
6197 - name: gfx.logging.level
6198   type: RelaxedAtomicInt32
6199   value: mozilla::gfx::LOG_DEFAULT
6200   mirror: always
6201   include: mozilla/gfx/LoggingConstants.h
6203 - name: gfx.logging.crash.length
6204   type: uint32_t
6205   value: 16
6206   mirror: once
6208 # The maximums here are quite conservative, we can tighten them if problems show up.
6209 - name: gfx.logging.texture-usage.enabled
6210   type: bool
6211   value: false
6212   mirror: once
6214 - name: gfx.logging.peak-texture-usage.enabled
6215   type: bool
6216   value: false
6217   mirror: once
6219 - name: gfx.logging.slow-frames.enabled
6220   type: bool
6221   value: false
6222   mirror: once
6224 # Use gfxPlatform::MaxAllocSize instead of the pref directly.
6225 - name: gfx.max-alloc-size
6226   type: int32_t
6227   value: (int32_t)0x7FFFFFFF
6228   mirror: once
6229   do_not_use_directly: true
6231 # Use gfxPlatform::MaxTextureSize instead of the pref directly.
6232 - name: gfx.max-texture-size
6233   type: int32_t
6234   value: (int32_t)32767
6235   mirror: once
6236   do_not_use_directly: true
6238 # Enable OffscreenCanvas everywhere.
6239 - name: gfx.offscreencanvas.enabled
6240   type: RelaxedAtomicBool
6241   value: true
6242   mirror: always
6244 - name: gfx.omta.background-color
6245   type: bool
6246   value: true
6247   mirror: always
6249 - name: gfx.partialpresent.force
6250   type: RelaxedAtomicInt32
6251   value: 0
6252   mirror: always
6254 # SwapInterval
6255 - name: gfx.swap-interval.glx
6256   type: RelaxedAtomicBool
6257   value: true
6258   mirror: always
6260 - name: gfx.swap-interval.egl
6261   type: RelaxedAtomicBool
6262   mirror: always
6263 #ifdef MOZ_WIDGET_ANDROID
6264   value: true
6265 #else
6266   value: false
6267 #endif
6270 # Log severe performance warnings to the error console and profiles.
6271 # This should be use to quickly find which slow paths are used by test cases.
6272 - name: gfx.perf-warnings.enabled
6273   type: RelaxedAtomicBool
6274   value: false
6275   mirror: always
6277 #ifdef MOZ_X11
6278 # Whether to force using GLX over EGL.
6279 - name: gfx.x11-egl.force-disabled
6280   type: bool
6281   value: false
6282   mirror: once
6284 # Whether to force using EGL over GLX.
6285 - name: gfx.x11-egl.force-enabled
6286   type: bool
6287   value: false
6288   mirror: once
6290 - name: gfx.x11.glx_sgi_video_sync
6291   type: bool
6292   value: false
6293   mirror: once
6294 #endif
6296 - name: gfx.testing.device-fail
6297   type: RelaxedAtomicBool
6298   value: false
6299   mirror: always
6301 - name: gfx.testing.device-reset
6302   type: RelaxedAtomicInt32
6303   value: 0
6304   mirror: always
6306 - name: gfx.text.disable-aa
6307   type: bool
6308   value: false
6309   mirror: once
6311 - name: gfx.text.subpixel-position.force-enabled
6312   type: bool
6313   value: false
6314   mirror: once
6316 - name: gfx.text.subpixel-position.force-disabled
6317   type: bool
6318   value: false
6319   mirror: once
6321 - name: gfx.use-iosurface-textures
6322   type: bool
6323   value: false
6324   mirror: once
6326 - name: gfx.use-mutex-on-present
6327   type: bool
6328   value: false
6329   mirror: once
6331 # Use SurfaceTextures as preferred backend for TextureClient/Host.
6332 - name: gfx.use-surfacetexture-textures
6333   type: bool
6334   value: false
6335   mirror: once
6337 - name: gfx.vsync.compositor.unobserve-count
6338   type: int32_t
6339   value: 10
6340   mirror: once
6342 - name: gfx.vsync.force-disable-waitforvblank
6343   type: RelaxedAtomicBool
6344   value: false
6345   mirror: always
6347 - name: gfx.will-change.ignore-opacity
6348   type: RelaxedAtomicBool
6349   value: true
6350   mirror: always
6352 # Should we override the blocklist to enable WebGPU?
6353 - name: gfx.webgpu.ignore-blocklist
6354   type: bool
6355   value: false
6356   mirror: once
6358 # Whether to use the WebRender hardware backend
6359 - name: gfx.webrender.all
6360   type: bool
6361   value: false
6362   mirror: once
6364 #ifdef XP_WIN
6365 - name: gfx.webrender.force-angle
6366   type: bool
6367   value: true
6368   mirror: once
6369 #endif
6371 # WebRender is not enabled when there is no GPU process on window when
6372 # WebRender uses ANGLE. It is for avoiding that WebGL and WebRender use ANGLE
6373 # at once. But there is a case that we want to enable WebRender for testing.
6374 #ifdef XP_WIN
6375 - name: gfx.webrender.enabled-no-gpu-process-with-angle-win
6376   type: bool
6377   value: true
6378   mirror: once
6379 #endif
6381 - name: gfx.webrender.svg-images
6382   type: RelaxedAtomicBool
6383   value: true
6384   mirror: always
6386 - name: gfx.webrender.svg-shapes
6387   type: RelaxedAtomicBool
6388   value: true
6389   mirror: always
6391 - name: gfx.webrender.debug.blob.paint-flashing
6392   type: RelaxedAtomicBool
6393   value: false
6394   mirror: always
6396 - name: gfx.webrender.debug.enable-capture
6397   type: bool
6398   value: false
6399   mirror: once
6401 - name: gfx.webrender.debug.dl.dump-parent
6402   type: RelaxedAtomicBool
6403   value: false
6404   mirror: always
6406 - name: gfx.webrender.debug.dl.dump-content
6407   type: RelaxedAtomicBool
6408   value: false
6409   mirror: always
6411 - name: gfx.webrender.debug.dl.dump-content-serialized
6412   type: RelaxedAtomicBool
6413   value: false
6414   mirror: always
6416 #ifdef MOZ_WIDGET_GTK
6417 - name: gfx.webrender.reject-software-driver
6418   type: bool
6419   value: true
6420   mirror: once
6421 #endif
6423 - name: gfx.webrender.debug.highlight-painted-layers
6424   type: RelaxedAtomicBool
6425   value: false
6426   mirror: always
6428 - name: gfx.webrender.late-scenebuild-threshold
6429   type: RelaxedAtomicInt32
6430   value: 4
6431   mirror: always
6433 - name: gfx.webrender.max-filter-ops-per-chain
6434   type: RelaxedAtomicUint32
6435   value: 64
6436   mirror: always
6438 - name: gfx.webrender.batching.lookback
6439   type: uint32_t
6440   value: 10
6441   mirror: always
6443 - name: gfx.webrender.blob-tile-size
6444   type: uint32_t
6445   value: 256
6446   mirror: always
6448 - name: gfx.webrender.batched-upload-threshold
6449   type: int32_t
6450 #if defined(MOZ_WIDGET_ANDROID)
6451   value: 262144
6452 #else
6453   value: 65536
6454 #endif
6455   mirror: always
6457 - name: gfx.webrender.compositor
6458   type: bool
6459 #if defined(XP_WIN) || defined(XP_MACOSX)
6460   value: true
6461 #else
6462   value: false
6463 #endif
6464   mirror: once
6466 - name: gfx.webrender.scissored-cache-clears.enabled
6467   type: bool
6468   value: true
6469   mirror: once
6471 - name: gfx.webrender.scissored-cache-clears.force-enabled
6472   type: bool
6473   value: false
6474   mirror: once
6476 - name: gfx.webrender.compositor.force-enabled
6477   type: bool
6478   value: false
6479   mirror: once
6481 - name: gfx.webrender.compositor.max_update_rects
6482   type: uint32_t
6483   value: 1
6484   mirror: once
6486 - name: gfx.webrender.compositor.surface-pool-size
6487   type: uint32_t
6488   value: 25
6489   mirror: once
6491 # Number of damage rects we can give to the compositor for a new frame with
6492 # partial present. This controls whether partial present is used or not.
6493 - name: gfx.webrender.max-partial-present-rects
6494   type: uint32_t
6495 #if defined(XP_WIN) || defined(MOZ_WIDGET_ANDROID) || defined(MOZ_WIDGET_GTK)
6496   value: 1
6497 #else
6498   value: 0
6499 #endif
6500   mirror: once
6502 # Whether or not we can reuse the buffer contents using the GL buffer age
6503 # extension, if supported by the platform. This requires partial present
6504 # to be used.
6505 - name: gfx.webrender.allow-partial-present-buffer-age
6506   type: bool
6507   value: true
6508   mirror: once
6510 # Whether or not we should force partial present on.
6511 - name: gfx.webrender.force-partial-present
6512   type: bool
6513   value: false
6514   mirror: once
6516 - name: gfx.webrender.enable-gpu-markers
6517   type: bool
6518 #ifdef DEBUG
6519   value: true
6520 #else
6521   value: false
6522 #endif
6523   mirror: once
6525 - name: gfx.webrender.enable-item-cache
6526   type: bool
6527   value: true
6528   mirror: once
6530 # Whether or not to fallback from WebRender to Software WebRender.
6531 - name: gfx.webrender.fallback.software
6532   type: bool
6533   value: true
6534   mirror: once
6536 #ifdef XP_WIN
6537   # Whether to use an overlay of hardware decoded video with DirectComposition
6538 -   name: gfx.webrender.dcomp-video-hw-overlay-win
6539     type: bool
6540     value: true
6541     mirror: once
6542   # Enable hardware decoded video overlay even when it is blocked.
6543 -   name: gfx.webrender.dcomp-video-hw-overlay-win-force-enabled
6544     type: bool
6545     value: false
6546     mirror: once
6547   # Whether to use a yuv video overlay layers with DirectComposition
6548 -   name: gfx.webrender.dcomp-video-yuv-overlay-win
6549     type: bool
6550     value: false
6551     mirror: once
6552 -   name: gfx.webrender.dcomp-video-vp-scaling-win
6553     type: bool
6554     value: true
6555     mirror: once
6556   # Whether to use virtual surfaces, as opposed to each tile owning a surface.
6557 -   name: gfx.webrender.dcomp-use-virtual-surfaces
6558     type: bool
6559     value: true
6560     mirror: once
6561   # Whether to use an overlay of software decoded video with DirectComposition
6562 -   name: gfx.webrender.dcomp-video-sw-overlay-win
6563     type: bool
6564     value: true
6565     mirror: once
6566   # Enable software decoded video overlay even when it is blocked.
6567 -   name: gfx.webrender.dcomp-video-sw-overlay-win-force-enabled
6568     type: bool
6569     value: false
6570     mirror: once
6571 -   name: gfx.webrender.dcomp-video-check-slow-present
6572     type: RelaxedAtomicBool
6573     value: true
6574     mirror: always
6575   # Force triple buffering in overlay's video swap chain
6576 -   name: gfx.webrender.dcomp-video-force-triple-buffering
6577     type: RelaxedAtomicBool
6578     value: false
6579     mirror: always
6580 -   name: gfx.webrender.dcomp-video-swap-chain-present-interval-0
6581     type: RelaxedAtomicBool
6582     value: false
6583     mirror: always
6584 -   name: gfx.video.convert-yuv-to-nv12.image-host-win
6585     type: RelaxedAtomicBool
6586     value: true
6587     mirror: always
6588 #endif
6590 # Whether or not fallback to Software WebRender requires the GPU process.
6591 - name: gfx.webrender.fallback.software.requires-gpu-process
6592   type: bool
6593   value: false
6594   mirror: once
6596 - name: gfx.webrender.program-binary-disk
6597   type: bool
6598 #if defined(XP_WIN) || defined(ANDROID)
6599   value: true
6600 #else
6601   value: false
6602 #endif
6603   mirror: once
6605 - name: gfx.webrender.use-optimized-shaders
6606   type: bool
6607   value: true
6608   mirror: once
6610 - name: gfx.webrender.precache-shaders
6611   type: bool
6612   value: false
6613   mirror: once
6615 # When gl debug message is a high severity message, forwward it to gfx critical
6616 # note.
6617 - name: gfx.webrender.gl-debug-message-critical-note
6618   type: bool
6619 #if defined(XP_WIN) && defined(NIGHTLY_BUILD)
6620   value: true
6621 #else
6622   value: false
6623 #endif
6624   mirror: once
6626 # Enable printing gl debug messages
6627 - name: gfx.webrender.gl-debug-message-print
6628   type: bool
6629   value: false
6630   mirror: once
6632 #ifdef NIGHTLY_BUILD
6633   # Keep this pref hidden on non-nightly builds to avoid people accidentally
6634   # turning it on.
6635 - name: gfx.webrender.panic-on-gl-error
6636   type: bool
6637   value: false
6638   mirror: once
6639 #endif
6641 #ifdef XP_WIN
6642   # Enables display of performance debugging counters when DirectComposition
6643   # is used.
6644   # Performance counters are displayed on the top-right corner of the screen.
6645 -   name: gfx.webrender.debug.dcomp-counter
6646     type: RelaxedAtomicBool
6647     value: false
6648     mirror: always
6649   # Enables highlighting redraw regions of DCompositionVisual
6650 -   name: gfx.webrender.debug.dcomp-redraw-regions
6651     type: RelaxedAtomicBool
6652     value: false
6653     mirror: always
6654 #endif
6656 #ifdef XP_MACOSX
6657   # Files show up in $HOME/Desktop/nativelayerdumps-PID/frame-123.html
6658 -   name: gfx.webrender.debug.dump-native-layer-tree-to-file
6659     type: RelaxedAtomicBool
6660     value: false
6661     mirror: always
6662 #endif
6664 - name: gfx.webrender.enable-low-priority-pool
6665   type: RelaxedAtomicBool
6666 #if defined(ANDROID)
6667   value: false
6668 #else
6669   value: true
6670 #endif
6671   mirror: always
6673   # Force subpixel anti-aliasing as much as possible, despite performance cost.
6674 - name: gfx.webrender.quality.force-subpixel-aa-where-possible
6675   type: bool
6676   value: false
6677   mirror: always
6679 - name: gfx.webrender.enable-subpixel-aa
6680   type: bool
6681   mirror: once
6682 #ifdef MOZ_WIDGET_ANDROID
6683   value: false
6684 #else
6685   value: true
6686 #endif
6688 #ifdef XP_MACOSX
6689 - name: gfx.webrender.enable-client-storage
6690   type: bool
6691   value: true
6692   mirror: once
6693 #endif
6695  # Width of WebRender tile size
6696 - name: gfx.webrender.picture-tile-width
6697   type: RelaxedAtomicInt32
6698   value: 1024
6699   mirror: always
6701  # Width of WebRender tile size
6702 - name: gfx.webrender.picture-tile-height
6703   type: RelaxedAtomicInt32
6704   value: 512
6705   mirror: always
6707 # WebRender upper bound for shared surface size
6708 # According to apitrace, textures larger than 2048 break fast clear
6709 # optimizations on some intel drivers. We sometimes need to go larger, but
6710 # we try to avoid it.
6711 - name: gfx.webrender.max-shared-surface-size
6712   type: int32_t
6713   value: 2048
6714   mirror: once
6716 # Whether to use EGL robustness or not.
6717 - name: gfx.webrender.prefer-robustness
6718   type: bool
6719 #if defined(XP_WIN) || defined(MOZ_WIDGET_GTK)
6720   value: true
6721 #else
6722   value: false
6723 #endif
6724   mirror: once
6726 # Whether to use the WebRender software backend
6727 - name: gfx.webrender.software
6728   type: bool
6729   value: false
6730   mirror: once
6732 # Whether to use the D3D11 RenderCompositor when using WebRender software backend
6733 - name: gfx.webrender.software.d3d11
6734   type: bool
6735   value: true
6736   mirror: once
6738 - name: gfx.webrender.software.opengl
6739   type: bool
6740 #if defined(MOZ_WIDGET_ANDROID)
6741   value: true
6742 #else
6743   value: false
6744 #endif
6745   mirror: once
6747 - name: gfx.webrender.software.d3d11.upload-mode
6748   type: RelaxedAtomicInt32
6749   value: 4
6750   mirror: always
6752 # Whether to force widgets to don't support acceleration to use WebRender
6753 # despite that
6754 - name: gfx.webrender.unaccelerated-widget.force
6755   type: RelaxedAtomicBool
6756   value: false
6757   mirror: always
6759 # Enable a lower quality, but higher performance pinch-zoom mode. Primarily
6760 # for devices with weak GPUs, or when running SWGL.
6761 - name: gfx.webrender.low-quality-pinch-zoom
6762   type: bool
6763 #if defined(MOZ_WIDGET_ANDROID) && defined(NIGHTLY_BUILD)
6764   value: true
6765 #else
6766   value: false
6767 #endif
6768   mirror: once
6770 # Disable wait of GPU execution completion
6771 - name: gfx.webrender.wait-gpu-finished.disabled
6772   type: bool
6773 #if defined(XP_WIN)
6774   value: true
6775 #else
6776   value: false
6777 #endif
6778   mirror: once
6780 # Enable NVIDIA RTX Video Super Resolution for video overlay on Windows
6781 # Note: This is also a setting in NVIDIA's driver settings, so once this is
6782 # stable, it should default to true
6783 - name: gfx.webrender.super-resolution.nvidia
6784   type: bool
6785   value: false
6786   mirror: once
6788 # Use vsync events generated by hardware
6789 - name: gfx.work-around-driver-bugs
6790   type: bool
6791   value: true
6792   mirror: once
6794 - name: gfx.ycbcr.accurate-conversion
6795   type: RelaxedAtomicBool
6796   value: false
6797   mirror: always
6799 #---------------------------------------------------------------------------
6800 # Prefs starting with "gl." (OpenGL)
6801 #---------------------------------------------------------------------------
6803 - name: gl.allow-high-power
6804   type: RelaxedAtomicBool
6805   value: true
6806   mirror: always
6808 - name: gl.ignore-dx-interop2-blacklist
6809   type: RelaxedAtomicBool
6810   value: false
6811   mirror: always
6813 - name: gl.use-tls-is-current
6814   type: RelaxedAtomicInt32
6815   value: 0
6816   mirror: always
6818 #---------------------------------------------------------------------------
6819 # Prefs starting with "html5."
6820 #---------------------------------------------------------------------------
6822 # Time in milliseconds between the time a network buffer is seen and the timer
6823 # firing when the timer hasn't fired previously in this parse in the
6824 # off-the-main-thread HTML5 parser.
6825 - name: html5.flushtimer.initialdelay
6826   type: RelaxedAtomicInt32
6827   value: 16
6828   mirror: always
6830 # Time in milliseconds between the time a network buffer is seen and the timer
6831 # firing when the timer has already fired previously in this parse.
6832 - name: html5.flushtimer.subsequentdelay
6833   type: RelaxedAtomicInt32
6834   value: 16
6835   mirror: always
6837 #---------------------------------------------------------------------------
6838 # Prefs starting with "idle_period."
6839 #---------------------------------------------------------------------------
6841 - name: idle_period.min
6842   type: uint32_t
6843   value: 3
6844   mirror: always
6846 - name: idle_period.during_page_load.min
6847   type: uint32_t
6848   value: 12
6849   mirror: always
6851 - name: idle_period.cross_process_scheduling
6852   type: RelaxedAtomicBool
6853   value: true
6854   mirror: always
6856 #---------------------------------------------------------------------------
6857 # Prefs starting with "image."
6858 #---------------------------------------------------------------------------
6860 # The maximum size (in kB) that the aggregate frames of an animation can use
6861 # before it starts to discard already displayed frames and redecode them as
6862 # necessary.
6863 - name: image.animated.decode-on-demand.threshold-kb
6864   type: RelaxedAtomicUint32
6865   value: 20*1024
6866   mirror: always
6868 # The minimum number of frames we want to have buffered ahead of an
6869 # animation's currently displayed frame.
6870 - name: image.animated.decode-on-demand.batch-size
6871   type: RelaxedAtomicUint32
6872   value: 6
6873   mirror: always
6875 # Whether we should recycle already displayed frames instead of discarding
6876 # them. This saves on the allocation itself, and may be able to reuse the
6877 # contents as well. Only applies if generating full frames.
6878 - name: image.animated.decode-on-demand.recycle
6879   type: bool
6880   value: true
6881   mirror: once
6883 # Resume an animated image from the last displayed frame rather than
6884 # advancing when out of view.
6885 - name: image.animated.resume-from-last-displayed
6886   type: RelaxedAtomicBool
6887   value: true
6888   mirror: always
6890 # Maximum number of surfaces for an image before entering "factor of 2" mode.
6891 # This in addition to the number of "native" sizes of an image. A native size
6892 # is a size for which we can decode a frame without up or downscaling. Most
6893 # images only have 1, but some (i.e. ICOs) may have multiple frames for the
6894 # same data at different sizes.
6895 - name: image.cache.factor2.threshold-surfaces
6896   type: RelaxedAtomicInt32
6897   value: 4
6898   mirror: always
6900 # Maximum size of a surface in KB we are willing to produce when rasterizing
6901 # an SVG.
6902 - name: image.cache.max-rasterized-svg-threshold-kb
6903   type: RelaxedAtomicInt32
6904   value: 200*1024
6905   mirror: always
6907 # The maximum size, in bytes, of the decoded images we cache.
6908 - name: image.cache.size
6909   type: int32_t
6910   value: 5*1024*1024
6911   mirror: once
6913 # A weight, from 0-1000, to place on time when comparing to size.
6914 # Size is given a weight of 1000 - timeweight.
6915 - name: image.cache.timeweight
6916   type: int32_t
6917   value: 500
6918   mirror: once
6920 # Decode all images automatically on load, ignoring our normal heuristics.
6921 - name: image.decode-immediately.enabled
6922   type: RelaxedAtomicBool
6923   value: false
6924   mirror: always
6926 # Decode all images synchronously
6927 - name: image.decode-sync.enabled
6928   type: bool
6929   value: false
6930   mirror: always
6932 # Whether we attempt to downscale images during decoding.
6933 - name: image.downscale-during-decode.enabled
6934   type: RelaxedAtomicBool
6935   value: true
6936   mirror: always
6938 # Whether we use EXIF metadata for image density.
6939 - name: image.exif-density-correction.enabled
6940   type: RelaxedAtomicBool
6941   value: true
6942   mirror: always
6944 # Whether EXIF density metadata is sanity checked against PixelXDimension and PixelYDimension
6945 - name: image.exif-density-correction.sanity-check.enabled
6946   type: RelaxedAtomicBool
6947   value: true
6948   mirror: always
6950 # The threshold for inferring that changes to an <img> element's |src|
6951 # attribute by JavaScript represent an animation, in milliseconds. If the |src|
6952 # attribute is changing more frequently than this value, then we enter a
6953 # special "animation mode" which is designed to eliminate flicker. Set to 0 to
6954 # disable.
6955 - name: image.infer-src-animation.threshold-ms
6956   type: RelaxedAtomicUint32
6957   value: 2000
6958   mirror: always
6960 # Whether the network request priority should be adjusted according
6961 # the layout and view frame position of each particular image.
6962 - name: image.layout_network_priority
6963   type: RelaxedAtomicBool
6964   value: true
6965   mirror: always
6967 # Chunk size for calls to the image decoders.
6968 - name: image.mem.decode_bytes_at_a_time
6969   type: uint32_t
6970   value: 16384
6971   mirror: once
6973 # Discards inactive image frames and re-decodes them on demand from
6974 # compressed data.
6975 - name: image.mem.discardable
6976   type: RelaxedAtomicBool
6977   value: true
6978   mirror: always
6980 # Discards inactive image frames of _animated_ images and re-decodes them on
6981 # demand from compressed data. Has no effect if image.mem.discardable is false.
6982 - name: image.mem.animated.discardable
6983   type: bool
6984   value: true
6985   mirror: once
6987 # Enable extra information for debugging in the image memory reports.
6988 - name: image.mem.debug-reporting
6989   type: RelaxedAtomicBool
6990   value: false
6991   mirror: always
6993 # Force unmapping of unused shared surfaces after a timeout period or when we
6994 # encounter virtual memory pressure. By default this is only enabled on 32-bit
6995 # Firefox.
6996 - name: image.mem.shared.unmap.force-enabled
6997   type: bool
6998   value: false
6999   mirror: once
7001 # Minimum timeout to unmap shared surfaces since they have been last used,
7002 # in milliseconds.
7003 - name: image.mem.shared.unmap.min_expiration_ms
7004   type: uint32_t
7005   value: 60*1000
7006   mirror: once
7008 # Mininum size for shared surfaces to consider unmapping, in kilobytes.
7009 - name: image.mem.shared.unmap.min_threshold_kb
7010   type: uint32_t
7011   value: 100
7012   mirror: once
7014 # How much of the data in the surface cache is discarded when we get a memory
7015 # pressure notification, as a fraction. The discard factor is interpreted as a
7016 # reciprocal, so a discard factor of 1 means to discard everything in the
7017 # surface cache on memory pressure, a discard factor of 2 means to discard half
7018 # of the data, and so forth. The default should be a good balance for desktop
7019 # and laptop systems, where we never discard visible images.
7020 - name: image.mem.surfacecache.discard_factor
7021   type: uint32_t
7022   value: 1
7023   mirror: once
7025 # Maximum size for the surface cache, in kilobytes.
7026 - name: image.mem.surfacecache.max_size_kb
7027   type: uint32_t
7028   value: 2024 * 1024
7029   mirror: once
7031 # Minimum timeout for expiring unused images from the surface cache, in
7032 # milliseconds. This controls how long we store cached temporary surfaces.
7033 - name: image.mem.surfacecache.min_expiration_ms
7034   type: uint32_t
7035   value: 60*1000
7036   mirror: once
7038 # The surface cache's size, within the constraints of the maximum size set
7039 # above, is determined as a fraction of main memory size. The size factor is
7040 # interpreted as a reciprocal, so a size factor of 4 means to use no more than
7041 # 1/4 of main memory.  The default should be a good balance for most systems.
7042 - name: image.mem.surfacecache.size_factor
7043   type: uint32_t
7044   value: 4
7045   mirror: once
7047 # Maximum size in kilobytes that we allow to allocate an imgFrame, meant for
7048 # testing/fuzzing purposes. -1 disables this limit (there are other limits in
7049 # place).
7050 - name: image.mem.max_legal_imgframe_size_kb
7051   type: int32_t
7052   value: -1
7053   mirror: once
7055 # Whether we record SVG images as blobs or not.
7056 - name: image.svg.blob-image
7057   type: RelaxedAtomicBool
7058   value: false
7059   mirror: always
7061 # Whether we attempt to decode AVIF images or not.
7062 - name: image.avif.enabled
7063   type: RelaxedAtomicBool
7064 #if defined(MOZ_AV1)
7065   value: true
7066 #else
7067   value: false
7068 #endif
7069   mirror: always
7071 # How strict we are in accepting/rejecting AVIF inputs according to whether they
7072 # conform to the specification
7073 # 0 = Permissive: accept whatever we can simply, unambiguously interpret
7074 # 1 = Normal: reject violations of "shall" specification directives
7075 # 2 = Strict: reject violations of "should" specification directives
7076 - name: image.avif.compliance_strictness
7077   type: RelaxedAtomicInt32
7078   value: 1
7079   mirror: always
7081 # Whether we apply container-level transforms like mirroring and rotation
7082 - name: image.avif.apply_transforms
7083   type: RelaxedAtomicBool
7084   value: true
7085   mirror: always
7087 # Whether we use dav1d (true) or libaom (false) to decode AVIF image
7088 - name: image.avif.use-dav1d
7089   type: RelaxedAtomicBool
7090   value: true
7091   mirror: always
7093 # Whether to allow decoding of animated AVIF sequences.
7094 - name: image.avif.sequence.enabled
7095   type: RelaxedAtomicBool
7096   value: true
7097   mirror: always
7099 # Whether AVIF files containing sequences should be animated even when the
7100 # major brand is set to 'avif'.
7101 - name: image.avif.sequence.animate_avif_major_branded_images
7102   type: RelaxedAtomicBool
7103   value: false
7104   mirror: always
7106 # Whether we attempt to decode JXL images or not.
7107 - name: image.jxl.enabled
7108   type: RelaxedAtomicBool
7109   value: false
7110   mirror: always
7112 #---------------------------------------------------------------------------
7113 # Prefs starting with "intl."
7114 #---------------------------------------------------------------------------
7116 #ifdef XP_WIN
7117   # Whether making Gecko TSF-aware or only working with IMM.  TSF is a modern
7118   # IME API set of Windows which replaces IMM APIs.  Unless you can avoid the
7119   # problem which you see with enabling TSF, you shouldn't change this pref
7120   # to false since IMM handler is now not maintained nor tested with latest
7121   # Windows.  If you need to change this pref to false, please file a bug to
7122   # <https://bugzilla.mozilla.org>.
7123   # Restart required to apply this pref change.
7124 -   name: intl.tsf.enabled
7125     type: bool
7126     value: true
7127     mirror: once
7129   # Whether Gecko creates or does not create native caret for legacy ATOK
7130   # (2011 - 2015).
7131 -   name: intl.tsf.hack.atok.create_native_caret
7132     type: bool
7133     value: true
7134     mirror: always
7136   # Whether Gecko returns available composition string rect or TS_E_NOLAYOUT
7137   # from ITextStoreACP::GetTextExt() when the specified range is same as the
7138   # range of composition string but some character rects in it are still
7139   # dirty if and only if ATOK is active TIP.
7140   # Note that this is ignored if active ATOK is or older than 2016 and
7141   # create_native_caret is true.
7142 -   name: intl.tsf.hack.atok.do_not_return_no_layout_error_of_composition_string
7143     type: bool
7144     value: true
7145     mirror: always
7147   # Whether Gecko sets input scope of ATOK to "search" or never does it.
7148   # When "search" is set to the input scope, ATOK may stop their suggestions.
7149   # To avoid it, turn this pref on, or changing the settings in ATOK.
7150   # Note that if you enable this pref and you use the touch keyboard for touch
7151   # screens, you cannot access some specific features for a "search" input
7152   # field.
7153 -   name: intl.tsf.hack.atok.search_input_scope_disabled
7154     type: bool
7155     value: false
7156     mirror: always
7158   # Whether Gecko returns caret rect before composition string or TS_E_NOLAYOUT
7159   # from ITextStoreACP::GetTextExt() when the specified range is larger than
7160   # composition start offset if and only if Free ChangJie is active TIP.
7161 -   name: intl.tsf.hack.free_chang_jie.do_not_return_no_layout_error
7162     type: bool
7163     value: true
7164     mirror: always
7166   # Whether Gecko returns available composition string rect or TS_E_NOLAYOUT
7167   # from ITextStoreACP::GetTextExt() when the specified range is same as the
7168   # range of composition string but some character rects in it are still
7169   # dirty if and only if Japanist 10 is active TIP.
7170 -   name: intl.tsf.hack.japanist10.do_not_return_no_layout_error_of_composition_string
7171     type: bool
7172     value: true
7173     mirror: always
7175   # Whether Gecko returns previous character rect or TS_E_NOLAYOUT from
7176   # ITfContextView::GetTextExt() when the specified range is the first
7177   # character of selected clause of composition string if and only if Japanese TIP
7178   # of Microsoft is active.
7179 -   name: intl.tsf.hack.ms_japanese_ime.do_not_return_no_layout_error_at_first_char
7180     type: bool
7181     value: true
7182     mirror: always
7184   # Whether Gecko returns previous character rect or TS_E_NOLAYOUT from
7185   # ITfContextView::GetTextExt() when the specified range is the caret of
7186   # composition string if and only if Japanese TIP of Microsoft is active.
7187 -   name: intl.tsf.hack.ms_japanese_ime.do_not_return_no_layout_error_at_caret
7188     type: bool
7189     value: true
7190     mirror: always
7192   # Whether Gecko returns caret rect before composition string or TS_E_NOLAYOUT
7193   # from ITfContextView::GetTextExt() when the specified range is larger than
7194   # composition start offset if and only Simplified Chinese TIP of Microsoft
7195   # is active.
7196 -   name: intl.tsf.hack.ms_simplified_chinese.do_not_return_no_layout_error
7197     type: bool
7198     value: true
7199     mirror: always
7201   # Whether Geckos hacks ITextStoreACP::QueryInsert() or not.  The method should
7202   # return new selection after specified length text is inserted at specified
7203   # range.  However, Microsoft Pinyin and Microsoft Wubi expect that the result
7204   # is same as specified range.  If following prefs are true,
7205   # ITextStoreACP::QueryInsert() returns specified range only when one of the
7206   # TIPs is active.
7207 -   name: intl.tsf.hack.ms_simplified_chinese.query_insert_result
7208     type: bool
7209     value: true
7210     mirror: always
7212   # Whether Gecko returns caret rect before composition string or TS_E_NOLAYOUT
7213   # from ITfContextView::GetTextExt() when the specified range is larger than
7214   # composition start offset if and only Traditional Chinese TIP of Microsoft
7215   # is active.
7216 -   name: intl.tsf.hack.ms_traditional_chinese.do_not_return_no_layout_error
7217     type: bool
7218     value: true
7219     mirror: always
7221   # Whether Geckos hacks ITextStoreACP::QueryInsert() or not.  The method should
7222   # return new selection after specified length text is inserted at specified
7223   # range.  However, Microsoft ChangJie and Microsoft Quick expect that the
7224   # result is same as specified range.  If following prefs are true,
7225   # ITextStoreACP::QueryInsert() returns specified range only when one of the
7226   # TIPs is active.
7227 -   name: intl.tsf.hack.ms_traditional_chinese.query_insert_result
7228     type: bool
7229     value: true
7230     mirror: always
7232   # Whether Gecko sets input scope of the URL bar to IS_DEFAULT when black
7233   # listed IMEs are active or does not.  If you use tablet mode mainly and you
7234   # want to use touch keyboard for URL when you set focus to the URL bar, you
7235   # can set this to false.  Then, you'll see, e.g., ".com" key on the keyboard.
7236   # However, if you set this to false, such IMEs set its open state to "closed"
7237   # when you set focus to the URL bar.  I.e., input mode is automatically
7238   # changed to English input mode.
7239   # Known buggy IME list:
7240   #   - Microsoft IME for Japanese
7241   #   - Google Japanese Input
7242   #   - Microsoft Bopomofo
7243   #   - Microsoft ChangJie
7244   #   - Microsoft Phonetic
7245   #   - Microsoft Quick
7246   #   - Microsoft New ChangJie
7247   #   - Microsoft New Phonetic
7248   #   - Microsoft New Quick
7249   #   - Microsoft Pinyin
7250   #   - Microsoft Pinyin New Experience Input Style
7251   #   - Microsoft Wubi
7252   #   - Microsoft IME for Korean (except on Win7)
7253   #   - Microsoft Old Hangul
7254 -   name: intl.ime.hack.set_input_scope_of_url_bar_to_default
7255     type: bool
7256     value: true
7257     mirror: always
7259   # On Windows 10 Build 17643 (an Insider Preview build of RS5), Microsoft
7260   # have fixed the caller of ITextACPStore::GetTextExt() to return
7261   # TS_E_NOLAYOUT to TIP as-is, rather than converting to E_FAIL.
7262   # Therefore, if TIP supports asynchronous layout computation perfectly, we
7263   # can return TS_E_NOLAYOUT and TIP waits next OnLayoutChange()
7264   # notification.  However, some TIPs still have some bugs of asynchronous
7265   # layout support.  We keep hacking the result of GetTextExt() like running
7266   # on Windows 10, however, there could be unknown TIP bugs if we stop
7267   # hacking the result.  So, user can stop checking build ID to make Gecko
7268   # hack the result forcibly.
7269 -   name: intl.tsf.hack.allow_to_stop_hacking_on_build_17643_or_later
7270     type: bool
7271     value: @IS_EARLY_BETA_OR_EARLIER@
7272     mirror: always
7274   # If true, automatically extend selection to cluster boundaries when
7275   # TSF/TIP requests to select from/by middle of a cluster.
7276 -   name: intl.tsf.hack.extend_setting_selection_range_to_cluster_boundaries
7277     type: bool
7278     value: @IS_NOT_EARLY_BETA_OR_EARLIER@
7279     mirror: always
7281   # Whether Gecko supports IMM even if TSF is enabled.  This pref exists
7282   # only for check TSF behavior of new versions.  Therefore, users should
7283   # not set this to false for daily use.
7284 -   name: intl.tsf.support_imm
7285     type: bool
7286     value: true
7287     mirror: once
7289   # If true, TSF and TIP (IME) can retrieve URL of the document containing
7290   # the focused element.  When this is set to true, Gecko exposes the spec
7291   # of the URL.
7292   # And Gecko exposes only "http" and "https" URLs.  E.g., "data", "blob",
7293   # "file" URLs are never exposed.
7294 -  name: intl.tsf.expose_url.allowed
7295    type: bool
7296    value: true
7297    mirror: always
7299   # If true, TSF and TIP (IME) can retrieve URL of the document containing
7300   # the focused element in the private browsing mode too.
7301 -  name: intl.tsf.expose_url_in_private_browsing.allowed
7302    type: bool
7303    value: false
7304    mirror: always
7306 #if defined(ENABLE_TESTS)
7307   # If true, NS_GetComplexLineBreaks compares the line breaks produced in the
7308   # content process using the Uniscribe line breaker, with those from a
7309   # brokered call to the parent.
7310 -   name: intl.compare_against_brokered_complex_line_breaks
7311     type: bool
7312     value: false
7313     mirror: always
7314 #endif
7315 #endif
7317 # If you use legacy Chinese IME which puts an ideographic space to composition
7318 # string as placeholder, this pref might be useful.  If this is true and when
7319 # web contents forcibly commits composition (e.g., moving focus), the
7320 # ideographic space will be ignored (i.e., commits with empty string).
7321 - name: intl.ime.remove_placeholder_character_at_commit
7322   type: bool
7323   value: false
7324   mirror: always
7327 #if defined(XP_MACOSX) || defined(MOZ_WIDGET_GTK)
7328 # Whether text input without keyboard press nor IME composition should cause a
7329 # set of composition events or not.  E.g., when you use Emoji picker on macOS,
7330 # it inserts an Emoji character directly.  If set to true, `compositionstart`,
7331 # `compositionupdate` and `compositionend` events will be fired, and the
7332 # correspnding `beforeinput` events are not cancelable.  Otherwise, if set to
7333 # false, any user input events are not exposed to web apps but only
7334 # `beforeinput` event is fired as "insert text" as a cancelable event.
7335 - name: intl.ime.use_composition_events_for_insert_text
7336   type: bool
7337   value: false
7338   mirror: always
7339 #endif
7341 # If true, we use UAX14/29 compatible segmenter rules using ICU4X
7342 - name: intl.icu4x.segmenter.enabled
7343   type: RelaxedAtomicBool
7344   value: true
7345   mirror: always
7347 #---------------------------------------------------------------------------
7348 # Prefs starting with "javascript."
7350 # NOTE: SpiderMonkey starts up before `mirror: once` preferences are sealed and
7351 #       we cannot use them (Bug 1698311). Instead, we use `mirror: always`
7352 #       prefs but mark as `do_not_use_directly` and `LoadStartupJSPrefs` will
7353 #       mirror them into SpiderMonkey.
7354 #---------------------------------------------------------------------------
7356 # The JavaScript JIT compilers. These are read once on startup so a browser may
7357 # need to be restarted if toggling them. In general each subsequent JIT depends
7358 # on the ones before it being enabled.
7359 - name: javascript.options.blinterp
7360   type: bool
7361   value: true
7362   mirror: always  # LoadStartupJSPrefs
7363   do_not_use_directly: true
7365 - name: javascript.options.baselinejit
7366   type: bool
7367   value: true
7368   mirror: always  # LoadStartupJSPrefs
7369   do_not_use_directly: true
7371 - name: javascript.options.ion
7372   type: bool
7373   value: true
7374   mirror: always  # LoadStartupJSPrefs
7375   do_not_use_directly: true
7377 # The irregexp JIT for regex evaluation.
7378 - name: javascript.options.native_regexp
7379   type: bool
7380   value: true
7381   mirror: always  # LoadStartupJSPrefs
7382   do_not_use_directly: true
7384 # Jit Hints Cache - An in-process cache for the
7385 # content process to accelerate repeated baseline
7386 # compilations
7387 - name: javascript.options.jithints
7388   type: bool
7389   value: true
7390   mirror: always  # LoadStartupJSPrefs
7391   do_not_use_directly: true
7393 # "Warm-up" thresholds at which we attempt to compile a script/function with
7394 # the next JIT tier.
7396 # NOTE: These must match JitOptions defaults.
7397 - name: javascript.options.blinterp.threshold
7398   type: int32_t
7399   value: 10
7400   mirror: always  # LoadStartupJSPrefs
7401   do_not_use_directly: true
7403 - name: javascript.options.baselinejit.threshold
7404   type: int32_t
7405   value: 100
7406   mirror: always  # LoadStartupJSPrefs
7407   do_not_use_directly: true
7409 - name: javascript.options.ion.threshold
7410   type: int32_t
7411   value: 1500
7412   mirror: always  # LoadStartupJSPrefs
7413   do_not_use_directly: true
7415 # Enable off-main-thread Warp compilation.
7416 - name: javascript.options.ion.offthread_compilation
7417   type: bool
7418   value: true
7419   mirror: always  # LoadStartupJSPrefs
7420   do_not_use_directly: true
7422 #ifdef DEBUG
7423   # Enable extra correctness checks in the JITs that are slow and only available
7424   # in debug builds.
7425 -   name: javascript.options.jit.full_debug_checks
7426     type: bool
7427     value: false
7428     mirror: always  # LoadStartupJSPrefs
7429     do_not_use_directly: true
7430 #endif
7432 # Heuristic threshold for Warp/Ion to decide that too many bailouts are
7433 # happening and an IonScript should be discarded.
7435 # NOTE: This must match JitOptions defaults.
7436 - name: javascript.options.ion.frequent_bailout_threshold
7437   type: int32_t
7438   value: 10
7439   mirror: always  # LoadStartupJSPrefs
7440   do_not_use_directly: true
7442 # A threshold for Warp to decide whether a function can be inlined.
7443 # If the size of a function is smaller than this threshold, then it
7444 # may be inlined.
7446 # NOTE: These must match JitOptions defaults.
7447 - name: javascript.options.inlining_bytecode_max_length
7448   type: uint32_t
7449   value: 130
7450   mirror: always
7451   do_not_use_directly: true
7453 # Whether the megamorphic property lookup cache is enabled.
7455 # NOTE: This must match JitOptions defaults.
7456 - name: javascript.options.watchtower.megamorphic
7457   type: bool
7458   value: true
7459   mirror: always  # LoadStartupJSPrefs
7460   do_not_use_directly: true
7462 - name: javascript.options.compact_on_user_inactive
7463   type: bool
7464   value: true
7465   mirror: always
7467 # The default amount of time to wait from the user being idle to starting a
7468 # shrinking GC. Measured in milliseconds.
7469 - name: javascript.options.compact_on_user_inactive_delay
7470   type: uint32_t
7471 #ifdef NIGHTLY_BUILD
7472   value: 15000
7473 #else
7474   value: 300000
7475 #endif
7476   mirror: always
7478 # Use better error message when accessing property of null or undefined.
7479 - name: javascript.options.property_error_message_fix
7480   type: bool
7481   value: @IS_NIGHTLY_OR_DEV_EDITION@
7482   mirror: always
7484 # Support for weak references in JavaScript (WeakRef and FinalizationRegistry).
7485 - name: javascript.options.weakrefs
7486   type: bool
7487   value: true
7488   mirror: always
7490 # Whether to expose the FinalizationRegistry.prototype.cleanupSome method.
7491 - name: javascript.options.experimental.weakrefs.expose_cleanupSome
7492   type: bool
7493   value: false
7494   mirror: always
7496 # ShadowRealms: https://github.com/tc39/proposal-shadowrealm
7497 - name: javascript.options.experimental.shadow_realms
7498   # Atomic, as we assert the preference, and that assertion may happen
7499   # in a worker.
7500   type: RelaxedAtomicBool
7501   value: false
7502   mirror: always
7504 # Support for String.prototype.{is,to}WellFormed in JavaScript.
7505 - name: javascript.options.well_formed_unicode_strings
7506   type: bool
7507   value: true
7508   mirror: always
7510 # Support for Object.groupBy/Map.groupBy in JavaScript.
7511 -  name: javascript.options.array_grouping
7512    type: bool
7513    value: true
7514    mirror: always
7516 #ifdef NIGHTLY_BUILD
7517   # Experimental support for Iterator Helpers in JavaScript.
7518 -   name: javascript.options.experimental.iterator_helpers
7519     type: bool
7520     value: false
7521     mirror: always
7523   # Experimental support for New Set methods
7524 -   name: javascript.options.experimental.new_set_methods
7525     type: bool
7526     value: false
7527     mirror: always
7529       # Experimental support for Symbols as WeakMap keys in JavaScript.
7530 -   name: javascript.options.experimental.symbols_as_weakmap_keys
7531     type: bool
7532     value: false
7533     mirror: always
7534 #endif  // NIGHTLY_BUILD
7536 # Experimental support for ArrayBuffer.prototype.transfer{,ToFixedLength}() in JavaScript.
7537 -   name: javascript.options.arraybuffer_transfer
7538     type: bool
7539     value: true
7540     mirror: always
7542 #ifdef NIGHTLY_BUILD
7543   # Experimental support for Import Assertions in JavaScript.
7544 -   name: javascript.options.experimental.import_assertions
7545     type: bool
7546     value: false
7547     mirror: always
7548 #endif  // NIGHTLY_BUILD
7550 - name: javascript.options.wasm_caching
7551   type: bool
7552   value: true
7553   mirror: always
7555 # The amount of time we wait between a request to GC (due to leaving a page) and doing the actual GC, in ms.
7556 - name: javascript.options.gc_delay
7557   type: uint32_t
7558   value: 4000
7559   mirror: always
7561 # The amount of time we wait from the first request to GC to actually doing the first GC, in ms.
7562 - name: javascript.options.gc_delay.first
7563   type: uint32_t
7564   value: 10000
7565   mirror: always
7567 # After doing a zonal GC, wait this much time (in ms) and then do a full GC,
7568 # unless one is already pending.
7569 - name: javascript.options.gc_delay.full
7570   type: uint32_t
7571   value: 60000
7572   mirror: always
7574 # Maximum amount of time that should elapse between incremental GC slices, in ms.
7575 - name: javascript.options.gc_delay.interslice
7576   type: uint32_t
7577   value: 250
7578   mirror: always
7580 # nsJSEnvironmentObserver observes the memory-pressure notifications and
7581 # forces a garbage collection and cycle collection when it happens, if the
7582 # appropriate pref is set.
7583 - name: javascript.options.gc_on_memory_pressure
7584   type: bool
7585   # Disable the JS engine's GC on memory pressure, since we do one in the
7586   # mobile browser (bug 669346).
7587   # XXX: this value possibly should be changed, or the pref removed entirely.
7588   #      See bug 1450787.
7589   value: @IS_NOT_ANDROID@
7590   mirror: always
7592 # We allow at most MIN(max, MAX(NUM_CPUS / cpu_divisor, 1)) concurrent GCs
7593 # between processes
7594 - name: javascript.options.concurrent_multiprocess_gcs.cpu_divisor
7595   type: RelaxedAtomicUint32
7596   value: 4
7597   mirror: always
7599 # See 'cpu_divisor' above, 0 means UINT_32_MAX.
7600 - name: javascript.options.concurrent_multiprocess_gcs.max
7601   type: RelaxedAtomicUint32
7602   value: 0
7603   mirror: always
7605 - name: javascript.options.mem.log
7606   type: bool
7607   value: false
7608   mirror: always
7610 - name: javascript.options.mem.notify
7611   type: bool
7612   value: false
7613   mirror: always
7615 # Whether the Parent process allocates and shares memory with all content
7616 # processes. This is mirrored once, as the parent process will do this
7617 # allocation early on.
7618 - name: javascript.options.self_hosted.use_shared_memory
7619   type: bool
7620   value: true
7621   mirror: always  # LoadStartupJSPrefs
7622   do_not_use_directly: true
7624 - name: javascript.options.main_thread_stack_quota_cap
7625   type: uint32_t
7626 #if defined(MOZ_ASAN)
7627   value: 6 * 1024 * 1024
7628 #else
7629   value: 2 * 1024 * 1024
7630 #endif
7631   mirror: always
7633 - name: javascript.options.wasm_optimizingjit
7634   type: bool
7635   value: true
7636   mirror: always
7638 #if defined(ENABLE_WASM_RELAXED_SIMD)
7639 -   name: javascript.options.wasm_relaxed_simd
7640     type: bool
7641     value: @IS_NIGHTLY_BUILD@
7642     mirror: always
7643 #endif  // defined(ENABLE_WASM_RELAXED_SIMD)
7645 #if defined(ENABLE_WASM_MOZ_INTGEMM)
7646 -   name: javascript.options.wasm_moz_intgemm
7647     type: bool
7648     value: @IS_NIGHTLY_BUILD@
7649     mirror: always
7650 #endif  // defined(ENABLE_WASM_MOZ_INTGEMM)
7652 #if defined(ENABLE_WASM_EXTENDED_CONST)
7653 -   name: javascript.options.wasm_extended_const
7654     type: bool
7655     value: true
7656     mirror: always
7657 #endif  // defined(ENABLE_WASM_EXTENDED_CONST)
7659 -   name: javascript.options.wasm_exceptions
7660     type: bool
7661     value: true
7662     mirror: always
7664 #if defined(ENABLE_WASM_FUNCTION_REFERENCES)
7665 -   name: javascript.options.wasm_function_references
7666     type: bool
7667     value: true
7668     mirror: always
7669 #endif // defined(ENABLE_WASM_FUNCTION_REFERENCES)
7671 #if defined(ENABLE_WASM_GC)
7672 -   name: javascript.options.wasm_gc
7673     type: bool
7674     value: true
7675     mirror: always
7676 #endif // defined(ENABLE_WASM_GC)
7678 #if defined(ENABLE_WASM_MEMORY_CONTROL)
7679 -   name: javascript.options.wasm_memory_control
7680     type: bool
7681     value: false
7682     mirror: always
7683 #endif // defined(ENABLE_WASM_MEMORY_CONTROL)
7685 #if defined(ENABLE_WASM_SIMD)
7686 #if defined(JS_CODEGEN_X64) || defined(JS_CODEGEN_X86)
7687   # Enables AVX instructions support on X86/X64 platforms.
7688   # Changing these prefs requires a restart.
7689 -   name: javascript.options.wasm_simd_avx
7690     type: bool
7691     value: true
7692     mirror: always
7693 #endif
7694 #endif
7696 #if defined(ENABLE_WASM_MEMORY64)
7697 -   name: javascript.options.wasm_memory64
7698     type: bool
7699     value: @IS_NIGHTLY_BUILD@
7700     mirror: always
7701 #endif  // defined(ENABLE_WASM_MEMORY64)
7703 #if defined(ENABLE_WASM_TAIL_CALLS)
7704 -   name: javascript.options.wasm_tail_calls
7705     type: bool
7706     value: true
7707     mirror: always
7708 #endif  // defined(ENABLE_WASM_TAIL_CALLS)
7710 # Support for pretenuring allocations based on their allocation site.
7711 - name: javascript.options.site_based_pretenuring
7712   type: bool
7713   value: true
7714   mirror: always  # LoadStartupJSPrefs
7715   do_not_use_directly: true
7717 #if !defined(JS_CODEGEN_MIPS32) && !defined(JS_CODEGEN_MIPS64) && !defined(JS_CODEGEN_LOONG64)
7718   # Spectre security vulnerability mitigations for the JS JITs.
7719   #
7720   # NOTE: The MIPS and LoongArch backends do not support these mitigations (and generally
7721   #       do not need them). In that case, leave the pref unlisted with its
7722   #       default value of false.
7723 -   name: javascript.options.spectre.index_masking
7724     type: bool
7725     value: true
7726     mirror: always  # LoadStartupJSPrefs
7727     do_not_use_directly: true
7729 -   name: javascript.options.spectre.object_mitigations
7730     type: bool
7731     value: true
7732     mirror: always  # LoadStartupJSPrefs
7733     do_not_use_directly: true
7735 -   name: javascript.options.spectre.string_mitigations
7736     type: bool
7737     value: true
7738     mirror: always  # LoadStartupJSPrefs
7739     do_not_use_directly: true
7741 -   name: javascript.options.spectre.value_masking
7742     type: bool
7743     value: true
7744     mirror: always  # LoadStartupJSPrefs
7745     do_not_use_directly: true
7747 -   name: javascript.options.spectre.jit_to_cxx_calls
7748     type: bool
7749     value: true
7750     mirror: always  # LoadStartupJSPrefs
7751     do_not_use_directly: true
7752 #endif  // !defined(JS_CODEGEN_MIPSXX) && !defined(JS_CODEGEN_LOONG64)
7754 # Separate pref to override the values of the Spectre-related prefs above for
7755 # isolated web content processes, where we don't need these mitigations.
7756 - name: javascript.options.spectre.disable_for_isolated_content
7757   type: bool
7758   value: true
7759   mirror: always
7761 # Whether the W^X policy is enforced to mark JIT code pages as either writable
7762 # or executable but never both at the same time. OpenBSD defaults to W^X.
7763 - name: javascript.options.content_process_write_protect_code
7764   type: bool
7765 #if defined(XP_OPENBSD)
7766   value: true
7767 #else
7768   value: false
7769 #endif
7770   mirror: always
7772 # Whether to use the XPCOM thread pool for JS helper tasks.
7773 - name: javascript.options.external_thread_pool
7774   type: bool
7775   value: true
7776   mirror: always
7777   do_not_use_directly: true
7779 # Whether to use the off-thread script compilation and decoding.
7780 - name: javascript.options.parallel_parsing
7781   type: bool
7782   value: true
7783   mirror: always
7785 # Whether to use fdlibm for Math.sin, Math.cos, and Math.tan. When
7786 # privacy.resistFingerprinting is true, this pref is ignored and fdlibm is used
7787 # anyway.
7788 - name: javascript.options.use_fdlibm_for_sin_cos_tan
7789   type: bool
7790   value: @IS_EARLY_BETA_OR_EARLIER@
7791   mirror: always
7793 # Whether to support parsing '//(#@) source(Mapping)?URL=' pragmas.
7794 - name: javascript.options.source_pragmas
7795   type: bool
7796   value: true
7797   mirror: always
7799 # asm.js
7800 - name: javascript.options.asmjs
7801   type: bool
7802   value: true
7803   mirror: always
7805 # Whether to throw a TypeError if asm.js code hits validation failure.
7806 - name: javascript.options.throw_on_asmjs_validation_failure
7807   type: bool
7808   value: false
7809   mirror: always
7811 #---------------------------------------------------------------------------
7812 # Prefs starting with "layers."
7813 #---------------------------------------------------------------------------
7815 # Whether to disable acceleration for all widgets.
7816 - name: layers.acceleration.disabled
7817   type: bool
7818   value: false
7819   mirror: once
7820   do_not_use_directly: true
7821 # Instead, use gfxConfig::IsEnabled(Feature::HW_COMPOSITING).
7823 # Whether to force acceleration on, ignoring blacklists.
7825 # bug 838603 -- on Android, accidentally blacklisting OpenGL layers
7826 # means a startup crash for everyone.
7827 # Temporarily force-enable GL compositing.  This is default-disabled
7828 # deep within the bowels of the widgetry system.  Remove me when GL
7829 # compositing isn't default disabled in widget/android.
7830 - name: layers.acceleration.force-enabled
7831   type: bool
7832   value: @IS_ANDROID@
7833   mirror: once
7834   do_not_use_directly: true
7836 # Whether we allow AMD switchable graphics.
7837 - name: layers.amd-switchable-gfx.enabled
7838   type: bool
7839   value: true
7840   mirror: once
7842 # Whether to use async panning and zooming.
7843 - name: layers.async-pan-zoom.enabled
7844   type: bool
7845   value: true
7846   mirror: once
7847   do_not_use_directly: true
7849 - name: layers.child-process-shutdown
7850   type: RelaxedAtomicBool
7851   value: true
7852   mirror: always
7854 - name: layers.d3d11.force-warp
7855   type: bool
7856   value: false
7857   mirror: once
7859 - name: layers.d3d11.enable-blacklist
7860   type: bool
7861   value: true
7862   mirror: once
7864 # Enable DEAA antialiasing for transformed layers in the compositor.
7865 - name: layers.deaa.enabled
7866   type: RelaxedAtomicBool
7867 #if defined(MOZ_WIDGET_ANDROID)
7868   value: false
7869 #else
7870   value: true
7871 #endif
7872   mirror: always
7874 # Force all possible layers to be always active layers.
7875 - name: layers.force-active
7876   type: bool
7877   value: false
7878   mirror: always
7880 - name: layers.force-shmem-tiles
7881   type: bool
7882   value: false
7883   mirror: once
7885 - name: layers.draw-mask-debug
7886   type: RelaxedAtomicBool
7887   value: false
7888   mirror: always
7890 - name: layers.force-synchronous-resize
7891   type: RelaxedAtomicBool
7892 #ifdef MOZ_WAYLAND
7893   # We want to control it by nsWindow::SynchronouslyRepaintOnResize() on Linux/Wayland.
7894   value: false
7895 #else
7896   value: true
7897 #endif
7898   mirror: always
7900 - name: layers.gpu-process.allow-software
7901   type: bool
7902 #if defined(XP_WIN)
7903   value: true
7904 #else
7905   value: false
7906 #endif
7907   mirror: once
7909 - name: layers.gpu-process.enabled
7910   type: bool
7911 #if defined(XP_WIN) || defined(MOZ_WIDGET_ANDROID)
7912   value: true
7913 #else
7914   value: false
7915 #endif
7916   mirror: once
7918 - name: layers.gpu-process.force-enabled
7919   type: bool
7920   value: false
7921   mirror: once
7923 - name: layers.gpu-process.ipc_reply_timeout_ms
7924   type: int32_t
7925   value: 10000
7926   mirror: once
7928 # How many unstable GPU process restarts we allow for a given configuration.
7929 - name: layers.gpu-process.max_restarts
7930   type: RelaxedAtomicInt32
7931 #if defined(XP_WIN) || defined(MOZ_WIDGET_GTK) || defined(MOZ_WIDGET_ANDROID)
7932   value: 6
7933 #else
7934   value: 1
7935 #endif
7936   mirror: always
7938 # How many frames we must render before declaring the GPU process stable, and
7939 # allow restarts without it counting against our maximum restarts.
7940 - name: layers.gpu-process.stable.frame-threshold
7941   type: RelaxedAtomicUint32
7942   value: 10
7943   mirror: always
7945 # How many milliseconds the GPU process must have lived before we accept that
7946 # it is stable, and allow restarts without it counting against our maximum
7947 # restarts.
7948 - name: layers.gpu-process.stable.min-uptime-ms
7949   type: RelaxedAtomicInt32
7950   value: 4 * 60000
7951   mirror: always
7953 # Note: This pref will only be used if it is less than layers.gpu-process.max_restarts.
7954 - name: layers.gpu-process.max_restarts_with_decoder
7955   type: RelaxedAtomicInt32
7956   value: 0
7957   mirror: always
7959 - name: layers.gpu-process.startup_timeout_ms
7960   type: int32_t
7961   value: 5000
7962   mirror: once
7964 - name: layers.gpu-process.crash-also-crashes-browser
7965   type: bool
7966   value: false
7967   mirror: always
7969 # Whether to animate simple opacity and transforms on the compositor.
7970 - name: layers.offmainthreadcomposition.async-animations
7971   type: bool
7972   value: true
7973   mirror: always
7975 # Whether to log information about off main thread animations to stderr.
7976 - name: layers.offmainthreadcomposition.log-animations
7977   type: bool
7978   value: false
7979   mirror: always
7981 - name: layers.offmainthreadcomposition.force-disabled
7982   type: bool
7983   value: false
7984   mirror: once
7986 # Compositor target frame rate. NOTE: If vsync is enabled the compositor
7987 # frame rate will still be capped.
7988 # -1 -> default (match layout.frame_rate or 60 FPS)
7989 # 0  -> full-tilt mode: Recomposite even if not transaction occured.
7990 - name: layers.offmainthreadcomposition.frame-rate
7991   type: RelaxedAtomicInt32
7992   value: -1
7993   mirror: always
7995 #ifdef XP_WIN
7996 -   name: layers.prefer-opengl
7997     type: bool
7998     value: false
7999     mirror: once
8000 #endif
8002 # Copy-on-write canvas.
8003 - name: layers.shared-buffer-provider.enabled
8004   type: RelaxedAtomicBool
8005   value: true
8006   mirror: always
8008 - name: layers.recycle-allocator-rdd
8009   type: bool
8010   value: true
8011   mirror: once
8013 - name: layers.iosurfaceimage.recycle-limit
8014   type: RelaxedAtomicUint32
8015   value: 15
8016   mirror: always
8018 - name: layers.iosurfaceimage.use-nv12
8019   type: bool
8020   value: true
8021   mirror: once
8023 #---------------------------------------------------------------------------
8024 # Prefs starting with "layout."
8025 #---------------------------------------------------------------------------
8027 # Debug-only pref to force enable the AccessibleCaret. If you want to
8028 # control AccessibleCaret by mouse, you'll need to set
8029 # "layout.accessiblecaret.hide_carets_for_mouse_input" to false.
8030 - name: layout.accessiblecaret.enabled
8031   type: bool
8032   value: false
8033   mirror: always
8035 # Enable the accessible caret on platforms/devices
8036 # that we detect have touch support. Note that this pref is an
8037 # additional way to enable the accessible carets, rather than
8038 # overriding the layout.accessiblecaret.enabled pref.
8039 - name: layout.accessiblecaret.enabled_on_touch
8040   type: bool
8041   value: true
8042   mirror: always
8044 # By default, carets become tilt only when they are overlapping.
8045 - name: layout.accessiblecaret.always_tilt
8046   type: bool
8047   value: false
8048   mirror: always
8050 # Show caret in cursor mode when long tapping on an empty content. This
8051 # also changes the default update behavior in cursor mode, which is based
8052 # on the emptiness of the content, into something more heuristic. See
8053 # AccessibleCaretManager::UpdateCaretsForCursorMode() for the details.
8054 - name: layout.accessiblecaret.caret_shown_when_long_tapping_on_empty_content
8055   type: bool
8056   value: false
8057   mirror: always
8059 # 0 = by default, always hide carets for selection changes due to JS calls.
8060 # 1 = update any visible carets for selection changes due to JS calls,
8061 #     but don't show carets if carets are hidden.
8062 # 2 = always show carets for selection changes due to JS calls.
8063 - name: layout.accessiblecaret.script_change_update_mode
8064   type: int32_t
8065   value: 0
8066   mirror: always
8068 # Allow one caret to be dragged across the other caret without any limitation.
8069 # This matches the built-in convention for all desktop platforms.
8070 - name: layout.accessiblecaret.allow_dragging_across_other_caret
8071   type: bool
8072   value: true
8073   mirror: always
8075 # Optionally provide haptic feedback on long-press selection events.
8076 - name: layout.accessiblecaret.hapticfeedback
8077   type: bool
8078   value: false
8079   mirror: always
8081 # Smart phone-number selection on long-press is not enabled by default.
8082 - name: layout.accessiblecaret.extend_selection_for_phone_number
8083   type: bool
8084   value: false
8085   mirror: always
8087 # Keep the accessible carets hidden when the user is using mouse input (as
8088 # opposed to touch/pen/etc.).
8089 - name: layout.accessiblecaret.hide_carets_for_mouse_input
8090   type: bool
8091   value: true
8092   mirror: always
8094 # CSS attributes (width, height, margin-left) of the AccessibleCaret in CSS
8095 # pixels.
8096 - name: layout.accessiblecaret.width
8097   type: float
8098   value: 34.0f
8099   mirror: always
8101 - name: layout.accessiblecaret.height
8102   type: float
8103   value: 36.0f
8104   mirror: always
8106 - name: layout.accessiblecaret.margin-left
8107   type: float
8108   value: -18.5f
8109   mirror: always
8111 - name: layout.accessiblecaret.transition-duration
8112   type: float
8113   value: 250.0f
8114   mirror: always
8116 # Simulate long tap events to select words. Mainly used in manual testing
8117 # with mouse.
8118 - name: layout.accessiblecaret.use_long_tap_injector
8119   type: bool
8120   value: false
8121   mirror: always
8123 # To support magnify glass, whether we dispatch additional chrome event such as
8124 # dragcaret.
8125 - name: layout.accessiblecaret.magnifier.enabled
8126   type: bool
8127   value: @IS_ANDROID@
8128   mirror: always
8130 # One of several prefs affecting the maximum area to pre-render when animating
8131 # a large element on the compositor.
8132 # This pref enables transform (and transform like properties) animations on a
8133 # large element run on the compositor with rendering partial area of the
8134 # element on the main thread instead of rendering the whole area.  Once the
8135 # animation tried to composite out of the partial rendered area, the animation
8136 # is rendered again with the latest visible partial area.
8137 - name: layout.animation.prerender.partial
8138   type: RelaxedAtomicBool
8139   value: false
8140   mirror: always
8142 # One of several prefs affecting the maximum area to pre-render when animating
8143 # a large element on the compositor.
8144 # This value is applied to both x and y axes and a perfect square contructed
8145 # by the greater axis value which will be capped by the absolute limits is used
8146 # for the partial pre-render area.
8147 - name: layout.animation.prerender.viewport-ratio-limit
8148   type: AtomicFloat
8149   value: 1.125f
8150   mirror: always
8152 # One of several prefs affecting the maximum area to pre-render when animating
8153 # a large element on the compositor.
8154 - name: layout.animation.prerender.absolute-limit-x
8155   type: RelaxedAtomicUint32
8156   value: 4096
8157   mirror: always
8159 # One of several prefs affecting the maximum area to pre-render when animating
8160 # a large element on the compositor.
8161 - name: layout.animation.prerender.absolute-limit-y
8162   type: RelaxedAtomicUint32
8163   value: 4096
8164   mirror: always
8166 # Test-only pref, if this is true, partial pre-rendered transform animations
8167 # get stuck when it reaches to the pre-rendered boundaries and the pre-render
8168 # region is never updated.
8169 - name: layout.animation.prerender.partial.jank
8170   type: RelaxedAtomicBool
8171   value: false
8172   mirror: always
8174 # Override DPI. A value of -1 means use the maximum of 96 and the system DPI.
8175 # A value of 0 means use the system DPI. A positive value is used as the DPI.
8176 # This sets the physical size of a device pixel and thus controls the
8177 # interpretation of physical units such as "pt".
8178 - name: layout.css.dpi
8179   type: int32_t
8180   value: -1
8181   mirror: always
8183 # Whether to always underline links.
8184 - name: layout.css.always_underline_links
8185   type: RelaxedAtomicBool
8186   value: false
8187   mirror: always
8188   rust: true
8190 # Whether Container Queries are enabled
8191 - name: layout.css.container-queries.enabled
8192   type: RelaxedAtomicBool
8193   value: true
8194   mirror: always
8195   rust: true
8197 # Whether content-box and stroke-box are enabled for transform-box.
8198 - name: layout.css.transform-box-content-stroke.enabled
8199   type: RelaxedAtomicBool
8200   value: @IS_NIGHTLY_BUILD@
8201   mirror: always
8202   rust: true
8204 # Whether trigonometric constants and functions are enabled in calc().
8205 - name: layout.css.trig.enabled
8206   type: RelaxedAtomicBool
8207   value: true
8208   mirror: always
8209   rust: true
8211 # Whether the round() function is enabled in calc().
8212 - name: layout.css.round.enabled
8213   type: RelaxedAtomicBool
8214   value: true
8215   mirror: always
8216   rust: true
8218 # Whether the mod() / rem() functions are enabled in calc().
8219 - name: layout.css.mod-rem.enabled
8220   type: RelaxedAtomicBool
8221   value: true
8222   mirror: always
8223   rust: true
8225 # Whether exponential functions are enabled in calc().
8226 - name: layout.css.exp.enabled
8227   type: RelaxedAtomicBool
8228   value: true
8229   mirror: always
8230   rust: true
8232 # Whether sign/abs functions are enabled in calc().
8233 - name: layout.css.abs-sign.enabled
8234   type: RelaxedAtomicBool
8235   value: true
8236   mirror: always
8237   rust: true
8239 # Whether infinity / nan constants are enabled in calc().
8240 - name: layout.css.nan-inf.enabled
8241   type: RelaxedAtomicBool
8242   value: true
8243   mirror: always
8244   rust: true
8246 # Should we look for counter ancestor scopes first?
8247 - name: layout.css.counter-ancestor-scope.enabled
8248   type: bool
8249   value: true
8250   mirror: always
8252 # Whether the `-moz-control-character-visibility` property is exposed to
8253 # content.
8255 # Only for testing purposes.
8256 - name: layout.css.moz-control-character-visibility.enabled
8257   type: RelaxedAtomicBool
8258   value: false
8259   mirror: always
8260   rust: true
8262 # This pref controls whether the `prefers-color-scheme` value of iframes images
8263 # reacts to the embedder `color-scheme` in content.
8264 - name: layout.css.iframe-embedder-prefers-color-scheme.content.enabled
8265   type: RelaxedAtomicBool
8266   value: true
8267   mirror: always
8269 # Controls the transparency of the initial about:blank document. Generally you
8270 # don't ever want a white flash in dark mode, but due to backwards compat we
8271 # have some extra control over this, for now at least.
8273 # See https://github.com/w3c/csswg-drafts/issues/9624 for iframes.
8275 # Values:
8276 #  1: content-inaccessible top-level only.
8277 #  2: frames and content-inaccessible top-level only.
8278 #  3: always
8279 #  Others: don't treat this document specially.
8280 - name: layout.css.initial-document-transparency
8281   type: RelaxedAtomicInt32
8282   value: 3
8283   mirror: always
8285 # The minimum contrast ratio between the accent color foreground and background
8286 # colors.
8288 # We don't use this for text, so we need a contrast of at least AA (for user
8289 # interface components and graphical objects), which per WCAG is 3:1
8290 - name: layout.css.accent-color.min-contrast-ratio
8291   type: AtomicFloat
8292   value: 3.0
8293   mirror: always
8295 # The target contrast ratio between the accent color foreground and background
8296 # colors when darkening.
8298 # We aim a bit further than the minimum contrast ratio, which seems to provide
8299 # nice results in practice.
8300 - name: layout.css.accent-color.darkening-target-contrast-ratio
8301   type: AtomicFloat
8302   value: 6.0
8303   mirror: always
8305 # Whether the `animation-composition` in css-animations-2 is enabled.
8306 - name: layout.css.animation-composition.enabled
8307   type: bool
8308   value: true
8309   mirror: always
8311 # Is the codepath for using cached scrollbar styles enabled?
8312 - name: layout.css.cached-scrollbar-styles.enabled
8313   type: bool
8314   value: true
8315   mirror: always
8317 # Whether we cache inline styles in a document unconditionally or not.
8318 - name: layout.css.inline-style-caching.always-enabled
8319   type: bool
8320   value: true
8321   mirror: always
8323 # Whether computed local-fragment-only image urls serialize using the same
8324 # rules as filter/mask/etc (not resolving the URL for local refs).
8326 # See https://github.com/w3c/csswg-drafts/issues/3195
8327 - name: layout.css.computed-style.dont-resolve-image-local-refs
8328   type: RelaxedAtomicBool
8329   value: true
8330   mirror: always
8331   rust: true
8333 # Whether we should expose all shorthands in getComputedStyle().
8334 - name: layout.css.computed-style.shorthands
8335   type: bool
8336   value: true
8337   mirror: always
8339 # Are implicit tracks in computed grid templates serialized?
8340 - name: layout.css.serialize-grid-implicit-tracks
8341   type: RelaxedAtomicBool
8342   value: true
8343   mirror: always
8345 # Whether the system-ui generic family is enabled.
8346 - name: layout.css.system-ui.enabled
8347   type: RelaxedAtomicBool
8348   value: true
8349   mirror: always
8350   rust: true
8352 # Set the number of device pixels per CSS pixel. A value <= 0 means choose
8353 # automatically based on user settings for the platform (e.g., "UI scale factor"
8354 # on Mac). If browser.display.os-zoom-behavior == 1, then a positive value
8355 # will be multiplied by the text scale factor; otherwise a positive value is
8356 # used as-is. This controls the size of a CSS "px" at 100% full-zoom.
8357 # The size of system fonts is also changed in proportion with the change in
8358 # "px" sizes. Use "ui.textScaleFactor" instead to only change the size of "px".
8359 # This is only used for windows on the screen, not for printing.
8360 - name: layout.css.devPixelsPerPx
8361   type: AtomicFloat
8362   value: -1.0f
8363   mirror: always
8365 # Is support for CSS backdrop-filter enabled?
8366 - name: layout.css.backdrop-filter.enabled
8367   type: bool
8368   value: true
8369   mirror: always
8371 # Do we override the blocklist for CSS backdrop-filter?
8372 - name: layout.css.backdrop-filter.force-enabled
8373   type: bool
8374   value: false
8375   mirror: always
8377 # Is support for rect() enabled?
8378 - name: layout.css.basic-shape-rect.enabled
8379   type: RelaxedAtomicBool
8380   value: true
8381   mirror: always
8382   rust: true
8384 # Is support for xywh() enabled?
8385 - name: layout.css.basic-shape-xywh.enabled
8386   type: RelaxedAtomicBool
8387   value: true
8388   mirror: always
8389   rust: true
8391 # Should stray control characters be rendered visibly?
8392 - name: layout.css.control-characters.visible
8393   type: RelaxedAtomicBool
8394   value: @IS_NOT_RELEASE_OR_BETA@
8395   mirror: always
8396   rust: true
8398 # Whether the `content-visibility` CSS property is enabled
8399 - name: layout.css.content-visibility.enabled
8400   type: RelaxedAtomicBool
8401   value: @IS_NIGHTLY_BUILD@
8402   mirror: always
8403   rust: true
8405 # Whether the `contain-intrinsic-size` CSS property is enabled
8406 - name: layout.css.contain-intrinsic-size.enabled
8407   type: RelaxedAtomicBool
8408   value: true
8409   mirror: always
8410   rust: true
8412 # Is support for GeometryUtils.convert*FromNode enabled?
8413 - name: layout.css.convertFromNode.enabled
8414   type: bool
8415   value: @IS_NOT_RELEASE_OR_BETA@
8416   mirror: always
8418 - name: layout.css.cross-fade.enabled
8419   type: RelaxedAtomicBool
8420   value: false
8421   mirror: always
8422   rust: true
8424 # Is support for color-mix on content enabled?
8425 - name: layout.css.color-mix.enabled
8426   type: RelaxedAtomicBool
8427   value: true
8428   mirror: always
8429   rust: true
8431 # Is support for light-dark() on content enabled?
8432 - name: layout.css.light-dark.enabled
8433   type: RelaxedAtomicBool
8434   value: true
8435   mirror: always
8436   rust: true
8438 # Is support for color-mix with non-SRGB color spaces on content enabled?
8439 - name: layout.css.color-mix.color-spaces.enabled
8440   type: RelaxedAtomicBool
8441   value: true
8442   mirror: always
8443   rust: true
8445 # Is support for fit-content() enabled?
8446 - name: layout.css.fit-content-function.enabled
8447   type: RelaxedAtomicBool
8448   value: false
8449   mirror: always
8450   rust: true
8452 # Whether to use tight bounds for floating ::first-letter (legacy Gecko behavior)
8453 # or loose bounds based on overall font metrics (WebKit/Blink-like behavior)?
8454 # Values mean:
8455 #     1   legacy Gecko behavior (tight bounds)
8456 #     0   loose typographic bounds (similar to webkit/blink)
8457 #    -1   auto behavior: use loose bounds if reduced line-height (<1em) or negative
8458 #         block-start margin is present; otherwise use tight bounds.
8459 - name: layout.css.floating-first-letter.tight-glyph-bounds
8460   type: int32_t
8461 #ifdef NIGHTLY_BUILD
8462   value: -1
8463 #else
8464   value: 1
8465 #endif
8466   mirror: always
8468 # Is support for the font-display @font-face descriptor enabled?
8469 - name: layout.css.font-display.enabled
8470   type: RelaxedAtomicBool
8471   value: true
8472   mirror: always
8473   rust: true
8475 # Is support for the @font-palette-values rule and font-palette property enabled?
8476 - name: layout.css.font-palette.enabled
8477   type: RelaxedAtomicBool
8478   value: true
8479   mirror: always
8480   rust: true
8482 # Is support for variation fonts enabled?
8483 - name: layout.css.font-variations.enabled
8484   type: RelaxedAtomicBool
8485   value: true
8486   mirror: always
8487   rust: true
8489 # Is support for the size-adjust @font-face descriptor enabled?
8490 - name: layout.css.size-adjust.enabled
8491   type: RelaxedAtomicBool
8492   value: true
8493   mirror: always
8494   rust: true
8496 # Is support for the tech() function in the @font-face src descriptor enabled?
8497 - name: layout.css.font-tech.enabled
8498   type: RelaxedAtomicBool
8499   value: true
8500   mirror: always
8501   rust: true
8503 # Is support for font-variant-emoji enabled?
8504 - name: layout.css.font-variant-emoji.enabled
8505   type: RelaxedAtomicBool
8506   value: @IS_NIGHTLY_BUILD@
8507   mirror: always
8508   rust: true
8510 # Visibility level of font families available to CSS font-matching:
8511 #   1 - only base system fonts
8512 #   2 - also fonts from optional language packs
8513 #   3 - also user-installed fonts
8514 - name: layout.css.font-visibility
8515   type: int32_t
8516   value: 3
8517   mirror: always
8519 # Is support for GeometryUtils.getBoxQuads enabled?
8520 - name: layout.css.getBoxQuads.enabled
8521   type: bool
8522   value: @IS_NOT_RELEASE_OR_BETA@
8523   mirror: always
8525 # Is support for (linear|radial|conic)-gradient color interpolation methods enabled?
8526 - name: layout.css.gradient-color-interpolation-method.enabled
8527   type: RelaxedAtomicBool
8528   value: @IS_NIGHTLY_BUILD@
8529   mirror: always
8530   rust: true
8532 # Is support for CSS masonry layout enabled?
8533 - name: layout.css.grid-template-masonry-value.enabled
8534   type: RelaxedAtomicBool
8535   value: @IS_NIGHTLY_BUILD@
8536   mirror: always
8537   rust: true
8539 # Is support for :has() enabled?
8540 - name: layout.css.has-selector.enabled
8541   type: RelaxedAtomicBool
8542   value: true
8543   mirror: always
8544   rust: true
8546 # Is support for CSS individual transform enabled?
8547 - name: layout.css.individual-transform.enabled
8548   type: bool
8549   value: true
8550   mirror: always
8552 # Is support for CSS initial-letter property enabled?
8553 - name: layout.css.initial-letter.enabled
8554   type: bool
8555   value: false
8556   mirror: always
8558 # Is support for motion-path <basic-shape> other than path() enabled?
8559 # https://drafts.fxtf.org/motion-1/#valdef-offset-path-basic-shape
8560 - name: layout.css.motion-path-basic-shapes.enabled
8561   type: RelaxedAtomicBool
8562   value: true
8563   mirror: always
8564   rust: true
8566 # Is support for motion-path <coord-box> enabled?
8567 # https://drafts.fxtf.org/motion-1/#valdef-offset-path-coord-box
8568 - name: layout.css.motion-path-coord-box.enabled
8569   type: RelaxedAtomicBool
8570   value: true
8571   mirror: always
8572   rust: true
8574 # Is support for motion-path ray() enabled?
8575 - name: layout.css.motion-path-ray.enabled
8576   type: RelaxedAtomicBool
8577   value: true
8578   mirror: always
8579   rust: true
8581 # Is support for motion-path offset-position enabled?
8582 - name: layout.css.motion-path-offset-position.enabled
8583   type: RelaxedAtomicBool
8584   value: true
8585   mirror: always
8586   rust: true
8588 # Is support for motion-path url enabled?
8589 - name: layout.css.motion-path-url.enabled
8590   type: RelaxedAtomicBool
8591   value: true
8592   mirror: always
8593   rust: true
8595 # Pref to control whether the ::marker property restrictions defined in [1]
8596 # apply.
8598 # [1]: https://drafts.csswg.org/css-pseudo-4/#selectordef-marker
8599 - name: layout.css.marker.restricted
8600   type: RelaxedAtomicBool
8601   value: true
8602   mirror: always
8603   rust: true
8605 # Is support for math-style enabled?
8606 - name: layout.css.math-style.enabled
8607   type: RelaxedAtomicBool
8608   value: true
8609   mirror: always
8610   rust: true
8612 # Is support for math-depth enabled?
8613 - name: layout.css.math-depth.enabled
8614   type: RelaxedAtomicBool
8615   value: true
8616   mirror: always
8617   rust: true
8619 # Is -moz-osx-font-smoothing enabled? (Only supported in OSX builds)
8620 - name: layout.css.osx-font-smoothing.enabled
8621   type: bool
8622 #if defined(XP_MACOSX)
8623   value: true
8624 #else
8625   value: false
8626 #endif
8627   mirror: always
8629 # Is support for CSS overflow-clip-box enabled for non-UA sheets?
8630 - name: layout.css.overflow-clip-box.enabled
8631   type: bool
8632   value: false
8633   mirror: always
8635 # Is support for CSS overflow: -moz-hidden-unscrollable enabled
8636 - name: layout.css.overflow-moz-hidden-unscrollable.enabled
8637   type: RelaxedAtomicBool
8638   value: @IS_NOT_NIGHTLY_BUILD@
8639   mirror: always
8640   rust: true
8642 # Is support for CSS overflow: overlay enabled
8643 - name: layout.css.overflow-overlay.enabled
8644   type: RelaxedAtomicBool
8645   value: true
8646   mirror: always
8647   rust: true
8649 # Is support for overscroll-behavior enabled?
8650 - name: layout.css.overscroll-behavior.enabled
8651   type: bool
8652   value: true
8653   mirror: always
8655 # Enables support for the page-orientation  property inside of CSS @page rules.
8656 - name: layout.css.page-orientation.enabled
8657   type: RelaxedAtomicBool
8658   value: true
8659   mirror: always
8660   rust: true
8662 # Enables support for different CSS page sizes on each page when printing.
8663 - name: layout.css.allow-mixed-page-sizes
8664   type: RelaxedAtomicBool
8665   value: true
8666   mirror: always
8668 # Enables support for @margin rules.
8669 - name: layout.css.margin-rules.enabled
8670   type: RelaxedAtomicBool
8671   value: false
8672   mirror: always
8673   rust: true
8675 # Whether Properties and Values is enabled
8676 - name: layout.css.properties-and-values.enabled
8677   type: RelaxedAtomicBool
8678   value: @IS_NIGHTLY_BUILD@
8679   mirror: always
8680   rust: true
8682 # Dictates whether or not the prefers contrast media query will be
8683 # usable.
8684 #   true: prefers-contrast will toggle based on OS and browser settings.
8685 #   false: prefers-contrast will only parse and toggle in the browser
8686 #   chrome and ua.
8687 - name: layout.css.prefers-contrast.enabled
8688   type: RelaxedAtomicBool
8689   value: true
8690   mirror: always
8691   rust: true
8693 # An override for prefers-color-scheme for content documents.
8694 #   0: Dark
8695 #   1: Light
8696 #   2: Auto (system color scheme unless overridden by browser theme)
8697 - name: layout.css.prefers-color-scheme.content-override
8698   type: RelaxedAtomicInt32
8699   value: 2
8700   mirror: always
8702 # Dictates whether or not the forced-colors media query is enabled.
8703 - name: layout.css.forced-colors.enabled
8704   type: RelaxedAtomicBool
8705   value: true
8706   mirror: always
8707   rust: true
8709 # Dictates whether or not the prefers-reduced-transparency media query is enabled.
8710 - name: layout.css.prefers-reduced-transparency.enabled
8711   type: RelaxedAtomicBool
8712   value: false
8713   mirror: always
8714   rust: true
8716 # Dictates whether or not the inverted-colors media query is enabled.
8717 - name: layout.css.inverted-colors.enabled
8718   type: RelaxedAtomicBool
8719   value: false
8720   mirror: always
8721   rust: true
8723 # Is support for forced-color-adjust properties enabled?
8724 - name: layout.css.forced-color-adjust.enabled
8725   type: RelaxedAtomicBool
8726   value: true
8727   mirror: always
8728   rust: true
8730 # Is support for -moz-prefixed animation properties enabled?
8731 - name: layout.css.prefixes.animations
8732   type: bool
8733   value: true
8734   mirror: always
8736 # Is support for -moz-border-image enabled?
8737 - name: layout.css.prefixes.border-image
8738   type: bool
8739   value: true
8740   mirror: always
8742 # Is support for -moz-box-sizing enabled?
8743 - name: layout.css.prefixes.box-sizing
8744   type: bool
8745   value: true
8746   mirror: always
8748 # Is support for -moz-prefixed font feature properties enabled?
8749 - name: layout.css.prefixes.font-features
8750   type: bool
8751   value: true
8752   mirror: always
8754 # Is support for -moz-prefixed transform properties enabled?
8755 - name: layout.css.prefixes.transforms
8756   type: bool
8757   value: @IS_NOT_NIGHTLY_BUILD@
8758   mirror: always
8760 # Is support for -moz-prefixed transition properties enabled?
8761 - name: layout.css.prefixes.transitions
8762   type: bool
8763   value: @IS_NOT_NIGHTLY_BUILD@
8764   mirror: always
8766 # Is CSS error reporting enabled?
8767 - name: layout.css.report_errors
8768   type: bool
8769   value: true
8770   mirror: always
8772 # Are inter-character ruby annotations enabled?
8773 - name: layout.css.ruby.intercharacter.enabled
8774   type: bool
8775   value: false
8776   mirror: always
8778 - name: layout.css.scroll-behavior.damping-ratio
8779   type: AtomicFloat
8780   value: 1.0f
8781   mirror: always
8783 # Tuning of the smooth scroll motion used by CSSOM-View scroll-behavior.
8784 # Spring-constant controls the strength of the simulated MSD
8785 # (Mass-Spring-Damper).
8786 - name: layout.css.scroll-behavior.spring-constant
8787   type: AtomicFloat
8788   value: 250.0f
8789   mirror: always
8791 # Whether the scroll-driven animations generated by CSS is enabled. This
8792 # also include animation-timelime property.
8793 - name: layout.css.scroll-driven-animations.enabled
8794   type: RelaxedAtomicBool
8795   value: false
8796   mirror: always
8797   rust: true
8799 # When selecting the snap point for CSS scroll snapping, the velocity of the
8800 # scroll frame is clamped to this speed, in CSS pixels / s.
8801 - name: layout.css.scroll-snap.prediction-max-velocity
8802   type: RelaxedAtomicInt32
8803   value: 2000
8804   mirror: always
8806 #  When selecting the snap point for CSS scroll snapping, the velocity of the
8807 # scroll frame is integrated over this duration, in seconds.  The snap point
8808 # best suited for this position is selected, enabling the user to perform fling
8809 # gestures.
8810 - name: layout.css.scroll-snap.prediction-sensitivity
8811   type: AtomicFloat
8812   value: 0.750f
8813   mirror: always
8815 # Stylo thread-pool size.
8816 # Negative means auto, 0 disables the thread-pool (main-thread styling), other
8817 # numbers override as specified.
8818 # Note that 1 still creates a thread-pool of one thread!
8819 - name: layout.css.stylo-threads
8820   type: int32_t
8821   value: -1
8822   mirror: once
8823   rust: true
8825 # Stylo work unit size. This is the amount of nodes we'll process in a single
8826 # unit of work of the thread-pool.
8828 # Larger values will increase style sharing cache hits and general DOM locality
8829 # at the expense of decreased opportunities for parallelism.  There are some
8830 # measurements in bug 1385982 comments 11, 12, 13 that investigate some
8831 # slightly different values for the work unit size.
8833 # If the size is significantly increased, make sure to also review
8834 # stylo-local-work-queue prefs, since we might end up doing too much work
8835 # sequentially.
8837 # A value of 0 disables parallelism altogether.
8838 - name: layout.css.stylo-work-unit-size
8839   type: RelaxedAtomicUint32
8840   value: 16
8841   mirror: always
8842   rust: true
8844 # The minimum amount of work that a thread doing styling will try to keep
8845 # locally before sending work to other threads, in a worker.
8846 - name: layout.css.stylo-local-work-queue.in-worker
8847   type: RelaxedAtomicUint32
8848   value: 0
8849   mirror: always
8850   rust: true
8852 # As above but for the main thread. The main thread can't really steal from
8853 # other threads so it might want a bigger min queue size before giving work to
8854 # other threads.
8855 - name: layout.css.stylo-local-work-queue.in-main-thread
8856   type: RelaxedAtomicUint32
8857   value: 32
8858   mirror: always
8859   rust: true
8861 # Are counters for implemented CSS properties enabled?
8862 - name: layout.css.use-counters.enabled
8863   type: bool
8864   value: true
8865   mirror: always
8867 # Are counters for unimplemented CSS properties enabled?
8868 - name: layout.css.use-counters-unimplemented.enabled
8869   type: RelaxedAtomicBool
8870   value: true
8871   mirror: always
8872   rust: true
8874 # Should the :visited selector ever match (otherwise :link matches instead)?
8875 - name: layout.css.visited_links_enabled
8876   type: bool
8877   value: true
8878   mirror: always
8880 # Enable experimental enhanced color CSS color spaces. (lab(), lch(), oklab(), oklch(), color())
8881 - name: layout.css.more_color_4.enabled
8882   type: RelaxedAtomicBool
8883   value: true
8884   mirror: always
8885   rust: true
8887 # The margin used for detecting relevancy for `content-visibility: auto`.
8888 - name: layout.css.content-visibility-relevant-content-margin
8889   type: float
8890   value: 50 # 50%
8891   mirror: always
8893 # Whether the `hanging` and `each-line` keywords are supported by `text-indent`
8894 - name: layout.css.text-indent-keywords.enabled
8895   type: RelaxedAtomicBool
8896   value: true
8897   mirror: always
8898   rust: true
8900 # Whether the "modern" uppercase mapping of ÃŸ to áºž (rather than SS) is used.
8901 - name: layout.css.text-transform.uppercase-eszett.enabled
8902   type: bool
8903   value: false
8904   mirror: always
8906 - name: layout.css.text-wrap-balance.enabled
8907   type: bool
8908   value: true
8909   mirror: always
8911 # Maximum number of lines to try balancing.
8912 - name: layout.css.text-wrap-balance.limit
8913   type: int32_t
8914   value: 10
8915   mirror: always
8917 - name: layout.css.text-wrap-balance-after-clamp.enabled
8918   type: bool
8919   value: true
8920   mirror: always
8922 - name: layout.css.text-align.justify-only-after-last-tab
8923   type: bool
8924   value: true
8925   mirror: always
8927 # Support for the css Zoom property.
8928 - name: layout.css.zoom.enabled
8929   type: RelaxedAtomicBool
8930   value: @IS_NIGHTLY_BUILD@
8931   mirror: always
8932   rust: true
8934 # Whether to block large cursors intersecting UI.
8935 - name: layout.cursor.block.enabled
8936   type: bool
8937   value: true
8938   mirror: always
8940 # The maximum width or height of the cursor we should allow when intersecting
8941 # the UI, in CSS pixels.
8942 - name: layout.cursor.block.max-size
8943   type: uint32_t
8944   value: 32
8945   mirror: always
8947 - name: layout.display-list.build-twice
8948   type: RelaxedAtomicBool
8949   value: false
8950   mirror: always
8952 # Toggle retaining display lists between paints.
8953 - name: layout.display-list.retain
8954   type: RelaxedAtomicBool
8955   value: true
8956   mirror: always
8958 # Toggle retaining display lists between paints.
8959 - name: layout.display-list.retain.chrome
8960   type: RelaxedAtomicBool
8961   value: true
8962   mirror: always
8964 - name: layout.display-list.retain.sc
8965   type: RelaxedAtomicBool
8966   value: false
8967   mirror: always
8969 # Set the maximum number of modified frames allowed before doing a full
8970 # display list rebuild.
8971 - name: layout.display-list.rebuild-frame-limit
8972   type: RelaxedAtomicUint32
8973   value: 500
8974   mirror: always
8976 # Pref to dump the display list to the log. Useful for debugging drawing.
8977 - name: layout.display-list.dump
8978   type: RelaxedAtomicBool
8979   value: false
8980   mirror: always
8982 # Pref to dump the display list to the log. Useful for debugging drawing.
8983 - name: layout.display-list.dump-content
8984   type: RelaxedAtomicBool
8985   value: false
8986   mirror: always
8988 # Pref to dump the display list to the log. Useful for debugging drawing.
8989 - name: layout.display-list.dump-parent
8990   type: RelaxedAtomicBool
8991   value: false
8992   mirror: always
8994 - name: layout.display-list.show-rebuild-area
8995   type: RelaxedAtomicBool
8996   value: false
8997   mirror: always
8999 - name: layout.display-list.improve-fragmentation
9000   type: RelaxedAtomicBool
9001   value: true
9002   mirror: always
9004 # Are dynamic reflow roots enabled?
9005 - name: layout.dynamic-reflow-roots.enabled
9006   type: bool
9007   value: @IS_EARLY_BETA_OR_EARLIER@
9008   mirror: always
9010 # Enables the mechanism to optimize away flex item's final reflow.
9011 # Warning: Disabling the pref will impact the performance. This is useful only for
9012 # debugging flexbox issues.
9013 - name: layout.flexbox.item-final-reflow-optimization.enabled
9014   type: bool
9015   value: true
9016   mirror: always
9018 # Enables the <input type=search> custom layout frame with a clear icon.
9019 # Still needs tests and a web-exposed way to remove that icon, see bug 1654288.
9020 - name: layout.forms.input-type-search.enabled
9021   type: bool
9022   value: false
9023   mirror: always
9025 # Enables the Reveal Password button inside a <input type=password>.
9026 - name: layout.forms.reveal-password-button.enabled
9027   type: bool
9028   value: false
9029   mirror: always
9031 # Enables the Reveal Password context-menu entry.
9032 - name: layout.forms.reveal-password-context-menu.enabled
9033   type: bool
9034   value: true
9035   mirror: always
9037 # Pref to control browser frame rate, in Hz. A value <= 0 means choose
9038 # automatically based on knowledge of the platform (or 60Hz if no platform-
9039 # specific information is available).
9040 - name: layout.frame_rate
9041   type: RelaxedAtomicInt32
9042   value: -1
9043   mirror: always
9045 # If it has been this many frame periods since a refresh, assume that painting
9046 # is quiescent (will not happen again soon).
9047 - name: layout.idle_period.required_quiescent_frames
9048   type: uint32_t
9049   value: 2
9050   mirror: always
9052 # The amount of time (milliseconds) needed between an idle period's
9053 # end and the start of the next tick to avoid jank.
9054 - name: layout.idle_period.time_limit
9055   type: uint32_t
9056   value: 1
9057   mirror: always
9059 # The minimum amount of time (milliseconds) required to be remaining
9060 # in the current vsync interval for us to attempt an extra tick, or
9061 # <0 to disable extra ticks entirely.
9062 - name: layout.extra-tick.minimum-ms
9063   type: int32_t
9064   value: 4
9065   mirror: always
9067 # Whether to load the broken image icon eagerly. This is mostly needed for
9068 # reftests, since the broken image icon doesn't block the load event and thus
9069 # there's no easy way to guarantee it's loaded.
9070 - name: layout.image.eager_broken_image_icon
9071   type: bool
9072   value: false
9073   mirror: always
9075 # Enable/disable interruptible reflow, which allows reflows to stop
9076 # before completion (and display the partial results) when user events
9077 # are pending.
9078 - name: layout.interruptible-reflow.enabled
9079   type: bool
9080   value: true
9081   mirror: always
9083 # On Android, don't synth mouse move events after scrolling, as they cause
9084 # unexpected user-visible behaviour. Can remove this after bug 1633450 is
9085 # satisfactorily resolved.
9086 - name: layout.reflow.synthMouseMove
9087   type: bool
9088   value: @IS_NOT_ANDROID@
9089   mirror: always
9091 # This pref is to be set by test code only.
9092 - name: layout.scrollbars.always-layerize-track
9093   type: RelaxedAtomicBool
9094   value: false
9095   mirror: always
9097 - name: layout.scrollbars.click_and_hold_track.continue_to_end
9098   type: bool
9099 # On Linux, click-and-hold on the scrollbar track should continue scrolling
9100 # until the mouse is released. On the other platforms we want to stop
9101 # scrolling as soon as the scrollbar thumb has reached the current mouse
9102 # position.
9103 #ifdef MOZ_WIDGET_GTK
9104   value: true
9105 #else
9106   value: false
9107 #endif
9108   mirror: always
9110 # Whether anchor is kept selected.
9111 - name: layout.selectanchor
9112   type: bool
9113   value: false
9114   mirror: always
9116 # Controls caret style and word-delete during text selection.
9117 # 0: Use platform default
9118 # 1: Caret moves and blinks as when there is no selection; word
9119 #    delete deselects the selection and then deletes word.
9120 # 2: Caret moves to selection edge and is not visible during selection;
9121 #    word delete deletes the selection (Mac and Linux default).
9122 # 3: Caret moves and blinks as when there is no selection; word delete
9123 #    deletes the selection.
9124 # Windows default is 1 for word delete behavior, the rest as for 2.
9125 - name: layout.selection.caret_style
9126   type: int32_t
9127   value: 0
9128   mirror: always
9130 # If layout.show_previous_page is true then during loading of a new page we
9131 # will draw the previous page if the new page has painting suppressed.
9132 - name: layout.show_previous_page
9133   type: bool
9134   value: true
9135   mirror: always
9137 # Pref to stop overlay scrollbars from fading out, for testing purposes.
9138 - name: layout.testing.overlay-scrollbars.always-visible
9139   type: bool
9140   value: false
9141   mirror: always
9143 # Throttled frame rate, in frames per second.
9144 - name: layout.throttled_frame_rate
9145   type: uint32_t
9146   value: 1
9147   mirror: always
9149 # Whether we should throttle in-process iframes in the active tab.
9150 - name: layout.throttle_in_process_iframes
9151   type: bool
9152   value: true
9153   mirror: always
9155 - name: layout.lower_priority_refresh_driver_during_load
9156   type: bool
9157   value: true
9158   mirror: always
9160 # If > 0, nsRefreshDriver will keep ticking this amount of milliseconds after
9161 # top level page load.
9162 - name: layout.keep_ticking_after_load_ms
9163   type: uint32_t
9164   value: 1000
9165   mirror: always
9167 # Pref to control enabling scroll anchoring.
9168 - name: layout.css.scroll-anchoring.enabled
9169   type: bool
9170   value: true
9171   mirror: always
9173 # Pref to control whether to suspend also RefreshDriver::Tick when the page
9174 # itself is suspended because of some synchronous operation, like sync XHR.
9175 - name: layout.skip_ticks_while_page_suspended
9176   type: bool
9177   value: true
9178   mirror: always
9180 # Pref to control how many consecutive scroll-anchoring adjustments (since the
9181 # most recent user scroll or timeout) we'll average, before we consider whether
9182 # to automatically turn off scroll anchoring. When we hit this threshold, the
9183 # actual decision to disable also depends on the
9184 # min-average-adjustment-threshold pref, see below for more details.
9186 # Zero disables the heuristic.
9187 - name: layout.css.scroll-anchoring.max-consecutive-adjustments
9188   type: uint32_t
9189   value: 10
9190   mirror: always
9192 # Whether to reset counting the consecutive scroll-anchoring adjustments during
9193 # running async scrolling by APZ.
9194 - name: layout.css.scroll-anchoring.reset-heuristic-during-animation
9195   type: bool
9196   value: false
9197   mirror: always
9199 # The time after which we reset the max-consecutive-adjustments period, in
9200 # milliseconds.
9202 # This prevents sporadic back-and-forth scroll anchoring to trigger the
9203 # max-consecutive-adjustments heuristic.
9204 - name: layout.css.scroll-anchoring.max-consecutive-adjustments-timeout-ms
9205   type: uint32_t
9206   value: 500
9207   mirror: always
9209 # Pref to control whether we should disable scroll anchoring on a scroller
9210 # where at least max-consecutive-adjustments have happened, and which the
9211 # average adjustment ends up being less than this number, in CSS pixels.
9213 # So, for example, given max-consecutive-adjustments=10 and
9214 # min-average-adjustment-treshold=3, we'll block scroll anchoring if there have
9215 # been 10 consecutive adjustments without a user scroll or more, and the
9216 # average offset difference between them amount to less than 3 CSS pixels.
9217 - name: layout.css.scroll-anchoring.min-average-adjustment-threshold
9218   type: uint32_t
9219   value: 2
9220   mirror: always
9222 # Pref to control disabling scroll anchoring suppression triggers, see
9224 # https://drafts.csswg.org/css-scroll-anchoring/#suppression-triggers
9226 # Those triggers should be unnecessary after bug 1561450.
9227 - name: layout.css.scroll-anchoring.suppressions.enabled
9228   type: bool
9229   value: true
9230   mirror: always
9232 - name: layout.css.scroll-anchoring.highlight
9233   type: bool
9234   value: false
9235   mirror: always
9237 # Pref to control whether we reselect scroll anchors if sub-optimal
9239 # See https://github.com/w3c/csswg-drafts/issues/6787
9240 - name: layout.css.scroll-anchoring.reselect-if-suboptimal
9241   type: bool
9242   value: true
9243   mirror: always
9245 # Handle scroll-anchoring adjustments as absolute scroll position updates.
9246 - name: layout.css.scroll-anchoring.absolute-update
9247   type: bool
9248   value: true
9249   mirror: always
9251 # Are shared memory User Agent style sheets enabled?
9252 - name: layout.css.shared-memory-ua-sheets.enabled
9253   type: bool
9254   value: true
9255   mirror: always
9257 # Is support for -webkit-line-clamp on regular blocks enabled?
9258 - name: layout.css.webkit-line-clamp.block.enabled
9259   type: bool
9260   value: false
9261   mirror: always
9263 # Is 'content:none' supported on (non-pseudo) elements?
9264 - name: layout.css.element-content-none.enabled
9265   type: RelaxedAtomicBool
9266   value: false
9267   mirror: always
9268   rust: true
9270 # Whether we want scrollbar-width: thin to behave as scrollbar-width: auto.
9271 - name: layout.css.scrollbar-width-thin.disabled
9272   type: RelaxedAtomicBool
9273   value: false
9274   mirror: always
9276 # Whether supports() conditions in @import is enabled
9277 - name: layout.css.import-supports.enabled
9278   type: RelaxedAtomicBool
9279   value: true
9280   mirror: always
9281   rust: true
9283 # Whether :-moz-broken is supported in content.
9284 - name: layout.css.moz-broken.content.enabled
9285   type: RelaxedAtomicBool
9286   value: false
9287   mirror: always
9288   rust: true
9290 # Whether the modern ::slider-* pseudos are enabled.
9291 - name: layout.css.modern-range-pseudos.enabled
9292   type: RelaxedAtomicBool
9293   value: false
9294   mirror: always
9295   rust: true
9297 # Whether frame visibility tracking is enabled globally.
9298 - name: layout.framevisibility.enabled
9299   type: bool
9300   value: true
9301   mirror: always
9303 # The fraction of the scrollport we allow to horizontally scroll by before we
9304 # schedule an update of frame visibility.
9305 - name: layout.framevisibility.amountscrollbeforeupdatehorizontal
9306   type: int32_t
9307   value: 2
9308   mirror: always
9310 # The fraction of the scrollport we allow to vertically scroll by before we
9311 # schedule an update of frame visibility.
9312 - name: layout.framevisibility.amountscrollbeforeupdatevertical
9313   type: int32_t
9314   value: 2
9315   mirror: always
9317 # The number of scrollports wide to expand when tracking frame visibility.
9318 - name: layout.framevisibility.numscrollportwidths
9319   type: uint32_t
9320 #ifdef ANDROID
9321   value: 1
9322 #else
9323   value: 0
9324 #endif
9325   mirror: always
9327 # The number of scrollports high to expand when tracking frame visibility.
9328 - name: layout.framevisibility.numscrollportheights
9329   type: uint32_t
9330   value: 1
9331   mirror: always
9333 # Test only.
9334 - name: layout.dynamic-toolbar-max-height
9335   type: RelaxedAtomicInt32
9336   value: 0
9337   mirror: always
9339 # Whether outlines should include all overflowing descendants, or just the
9340 # border-box of a given element.
9342 # Historically we have included descendants but other browsers have not.
9343 - name: layout.outline.include-overflow
9344   type: bool
9345   value: false
9346   mirror: always
9348 - name: layout.visibility.min-recompute-interval-ms
9349   type: uint32_t
9350   value: 1000
9351   mirror: always
9353 # Controls double click and Alt+Arrow word selection behavior.
9354 - name: layout.word_select.eat_space_to_next_word
9355   type: bool
9356 #ifdef XP_WIN
9357   value: true
9358 #else
9359   value: false
9360 #endif
9361   mirror: always
9363 - name: layout.word_select.stop_at_punctuation
9364   type: RelaxedAtomicBool
9365   value: true
9366   mirror: always
9368 # Whether underscore should be treated as a word-breaking character for
9369 # word selection/arrow-key movement purposes.
9370 - name: layout.word_select.stop_at_underscore
9371   type: bool
9372   value: false
9373   mirror: always
9375 # Should deprecated plugin behavior fallback to normal behavior or use
9376 # the experimental design.
9377 - name: layout.use-plugin-fallback
9378   type: bool
9379   value: false
9380   mirror: always
9382 # Whether to draw images in CSS backgrounds if we only have a partial frame.
9383 - name: layout.display_partial_background_images
9384   type: bool
9385   value: true
9386   mirror: always
9388 # Controls whether nsRefreshDriver::IsInHighRateMode() may ever return true.
9389 - name: layout.expose_high_rate_mode_from_refreshdriver
9390   type: bool
9391   value: true
9392   mirror: always
9394 # Whether <details> is forced to be a block, see bug 1856374
9395 - name: layout.details.force-block-layout
9396   type: bool
9397   value: true
9398   mirror: always
9400 # Whether to disable layer pixel alignment in scroll related stuff.
9401 - name: layout.scroll.disable-pixel-alignment
9402   type: bool
9403   value: false
9404   mirror: always
9406 #---------------------------------------------------------------------------
9407 # Prefs starting with "mathml."
9408 #---------------------------------------------------------------------------
9410 # Whether to disable legacy names "thickmathspace", "mediummathspace",
9411 # "thickmathspace" etc for length attributes.
9412 - name: mathml.mathspace_names.disabled
9413   type: bool
9414   value: @IS_NIGHTLY_BUILD@
9415   mirror: always
9417 # Whether to disable support for stretching operators with STIXGeneral fonts.
9418 # macos still has the deprecated STIXGeneral font pre-installed.
9419 - name: mathml.stixgeneral_operator_stretching.disabled
9420   type: bool
9421 #if defined(XP_MACOSX)
9422   value: @IS_NIGHTLY_BUILD@
9423 #else
9424   value: true
9425 #endif
9426   mirror: always
9428 # Whether to disable fallback for mathvariant=italic/bold/bold-italic via
9429 # styling when lacking proper fonts for Mathematical Alphanumeric Symbols.
9430 # We expect all OSes to have relevant fonts, except Android, see bug 1789083.
9431 - name: mathml.mathvariant_styling_fallback.disabled
9432   type: bool
9433 #if defined(ANDROID)
9434   value: false
9435 #else
9436   value: true
9437 #endif
9438   mirror: always
9440 # Whether to disable the MathML3 support for the mathvariant attribute. For
9441 # MathML Core, support is restricted to the <mi> element and to value "normal".
9442 # Corresponding automatic italicization on single-char <mi> element is also
9443 # implemented via text-transform: auto when that flag is enabled.
9444 - name: mathml.legacy_mathvariant_attribute.disabled
9445   type: bool
9446   value: @IS_NIGHTLY_BUILD@
9447   mirror: always
9448   rust: true
9450 #---------------------------------------------------------------------------
9451 # Prefs starting with "media."
9452 #---------------------------------------------------------------------------
9455 # This pref defines what the blocking policy would be used in blocking autoplay.
9456 # 0 : use sticky activation (default)
9457 # https://html.spec.whatwg.org/multipage/interaction.html#sticky-activation
9458 # 1 : use transient activation (the transient activation duration can be
9459 #     adjusted by the pref `dom.user_activation.transient.timeout`)
9460 # https://html.spec.whatwg.org/multipage/interaction.html#transient-activation
9461 # 2 : user input depth (allow autoplay when the play is trigged by user input
9462 #     which is determined by the user input depth)
9463 - name: media.autoplay.blocking_policy
9464   type: uint32_t
9465   value: 0
9466   mirror: always
9468 # Whether to allow autoplay on extension background pages.
9469 - name: media.autoplay.allow-extension-background-pages
9470   type: bool
9471   value: true
9472   mirror: always
9474 # Block autoplay, asking for permission by default.
9475 # 0=Allowed, 1=Blocked, 5=All Blocked
9476 - name: media.autoplay.default
9477   type: int32_t
9478   value: 1
9479   mirror: always
9481 # File-backed MediaCache size.
9482 - name: media.cache_size
9483   type: RelaxedAtomicUint32
9484   value: 512000   # Measured in KiB
9485   mirror: always
9487 # Size of file backed MediaCache while on a connection which is cellular (3G,
9488 # etc), and thus assumed to be "expensive".
9489 - name: media.cache_size.cellular
9490   type: RelaxedAtomicUint32
9491   value: 32768   # Measured in KiB
9492   mirror: always
9494 # Whether cubeb is sandboxed (AudioIPC)
9495 - name: media.cubeb.sandbox
9496   type: bool
9497   mirror: always
9498 #if defined(XP_LINUX) || defined(XP_WIN) || defined(XP_MACOSX)
9499   value: true
9500 #else
9501   value: false
9502 #endif
9504 # Whether or not to pass AUDCLNT_STREAMOPTIONS_RAW when initializing audio
9505 # streams when using WASAPI.
9506 # 0 - don't use RAW streams
9507 # 1 - use RAW streams for input streams only
9508 # 2 - use RAW streams for output streams only
9509 # 3 - use RAW streams for input and output streams
9510 #if defined (XP_WIN)
9511 - name: media.cubeb.wasapi-raw
9512   type: RelaxedAtomicUint32
9513   mirror: always
9514   value: 0
9515 #endif // XP_WIN
9517 # Whether to make the start of cubeb stream slower, and by how many
9518 # milliseconds.
9519 - name: media.cubeb.slow_stream_init_ms
9520   type: RelaxedAtomicUint32
9521   mirror: always
9522   value: 0
9524 # If a resource is known to be smaller than this size (in kilobytes), a
9525 # memory-backed MediaCache may be used; otherwise the (single shared global)
9526 # file-backed MediaCache is used.
9527 - name: media.memory_cache_max_size
9528   type: uint32_t
9529   value: 8192        # Measured in KiB
9530   mirror: always
9532 # Don't create more memory-backed MediaCaches if their combined size would go
9533 # above this absolute size limit.
9534 - name: media.memory_caches_combined_limit_kb
9535   type: uint32_t
9536   value: 524288
9537   mirror: always
9539 # Don't create more memory-backed MediaCaches if their combined size would go
9540 # above this relative size limit (a percentage of physical memory).
9541 - name: media.memory_caches_combined_limit_pc_sysmem
9542   type: uint32_t
9543   value: 5           # A percentage
9544   mirror: always
9546 # When a network connection is suspended, don't resume it until the amount of
9547 # buffered data falls below this threshold (in seconds).
9548 - name: media.cache_resume_threshold
9549   type: RelaxedAtomicUint32
9550   value: 30
9551   mirror: always
9552 - name: media.cache_resume_threshold.cellular
9553   type: RelaxedAtomicUint32
9554   value: 10
9555   mirror: always
9557 # Stop reading ahead when our buffered data is this many seconds ahead of the
9558 # current playback position. This limit can stop us from using arbitrary
9559 # amounts of network bandwidth prefetching huge videos.
9560 - name: media.cache_readahead_limit
9561   type: RelaxedAtomicUint32
9562   value: 60
9563   mirror: always
9564 - name: media.cache_readahead_limit.cellular
9565   type: RelaxedAtomicUint32
9566   value: 30
9567   mirror: always
9569 # MediaCapabilities
9570 - name: media.mediacapabilities.drop-threshold
9571   type: RelaxedAtomicInt32
9572   value: 95
9573   mirror: always
9575 - name: media.mediacapabilities.from-database
9576   type: RelaxedAtomicBool
9577   value: @IS_NIGHTLY_BUILD@
9578   mirror: always
9580 # AudioSink
9581 - name: media.resampling.enabled
9582   type: RelaxedAtomicBool
9583   value: false
9584   mirror: always
9586 # libcubeb backend implements .get_preferred_channel_layout
9587 - name: media.forcestereo.enabled
9588   type: RelaxedAtomicBool
9589 #if defined(XP_WIN) || defined(XP_DARWIN) || defined(MOZ_PULSEAUDIO)
9590   value: false
9591 #else
9592   value: true
9593 #endif
9594   mirror: always
9596 # MediaSource
9598 # Whether to enable MediaSource support.
9599 - name: media.mediasource.enabled
9600   type: RelaxedAtomicBool
9601   value: true
9602   mirror: always
9604 - name: media.mediasource.mp4.enabled
9605   type: RelaxedAtomicBool
9606   value: true
9607   mirror: always
9609 - name: media.mediasource.webm.enabled
9610   type: RelaxedAtomicBool
9611   value: true
9612   mirror: always
9614 # Check if vp9 is enabled by default in mediasource. False on Android.
9615 # If disabled, vp9 will only be enabled under some conditions:
9616 # - h264 HW decoding is not supported
9617 # - mp4 is not enabled
9618 # - Device was deemed fast enough to decode VP9 via the VP9Benchmark utility
9619 # - A VP9 HW decoder is present.
9620 - name: media.mediasource.vp9.enabled
9621   type: RelaxedAtomicBool
9622   value: @IS_NOT_ANDROID@
9623   mirror: always
9625 - name: media.mediasource.webm.audio.enabled
9626   type: RelaxedAtomicBool
9627   value: true
9628   mirror: always
9630 # Whether to enable MediaSource v2 support.
9631 - name: media.mediasource.experimental.enabled
9632   type: RelaxedAtomicBool
9633   value: false
9634   mirror: always
9636 # VideoSink
9637 - name: media.ruin-av-sync.enabled
9638   type: RelaxedAtomicBool
9639   value: false
9640   mirror: always
9642 # Encrypted Media Extensions
9643 - name: media.eme.enabled
9644   type: bool
9645 #if defined(XP_LINUX) && !defined(MOZ_WIDGET_ANDROID)
9646   # On Linux EME is visible but disabled by default. This is so that the "Play
9647   # DRM content" checkbox in the Firefox UI is unchecked by default. DRM
9648   # requires downloading and installing proprietary binaries, which users on an
9649   # open source operating systems didn't opt into. The first time a site using
9650   # EME is encountered, the user will be prompted to enable DRM, whereupon the
9651   # EME plugin binaries will be downloaded if permission is granted.
9652   value: false
9653 #else
9654   value: true
9655 #endif
9656   mirror: always
9658 # Whether we expose the functionality proposed in
9659 # https://github.com/WICG/encrypted-media-encryption-scheme/blob/master/explainer.md
9660 # I.e. if true, apps calling navigator.requestMediaKeySystemAccess() can pass
9661 # an optional encryption scheme as part of MediaKeySystemMediaCapability
9662 # objects. If a scheme is present when we check for support, we must ensure we
9663 # support that scheme in order to provide key system access.
9664 - name: media.eme.encrypted-media-encryption-scheme.enabled
9665   type: bool
9666   value: false
9667   mirror: always
9669 # Do we need explicit approval from the application to allow access to EME?
9670 # If true, Gecko will ask for permission before allowing MediaKeySystemAccess.
9671 # At time of writing this is aimed at GeckoView, and setting this to true
9672 # outside of GeckoView or test environments will likely break EME.
9673 - name: media.eme.require-app-approval
9674   type: bool
9675   value: false
9676   mirror: always
9678 - name: media.eme.audio.blank
9679   type: RelaxedAtomicBool
9680   value: false
9681   mirror: always
9683 - name: media.eme.video.blank
9684   type: RelaxedAtomicBool
9685   value: false
9686   mirror: always
9688 - name: media.eme.chromium-api.video-shmems
9689   type: RelaxedAtomicUint32
9690   value: 6
9691   mirror: always
9693 # Is support for MediaKeys.getStatusForPolicy enabled?
9694 - name: media.eme.hdcp-policy-check.enabled
9695   type: bool
9696   value: false
9697   mirror: always
9699 - name: media.eme.max-throughput-ms
9700   type: RelaxedAtomicUint32
9701   value: 500
9702   mirror: always
9704 - name: media.clearkey.persistent-license.enabled
9705   type: bool
9706   value: false
9707   mirror: always
9709 # Are test specific clearkey key systems enabled and exposed?
9710 - name: media.clearkey.test-key-systems.enabled
9711   type: bool
9712   value: false
9713   mirror: always
9715 - name: media.cloneElementVisually.testing
9716   type: bool
9717   value: false
9718   mirror: always
9720 # Does the GMPlugin process initialize minimal XPCOM
9721 - name: media.gmp.use-minimal-xpcom
9722   type: RelaxedAtomicBool
9723   value: true
9724   mirror: always
9726 # Does the GMPlugin process use native event processing
9727 - name: media.gmp.use-native-event-processing
9728   type: RelaxedAtomicBool
9729   value: @IS_NOT_XP_MACOSX@
9730   mirror: always
9732 #if defined(XP_LINUX) && defined(MOZ_SANDBOX)
9733   # Whether to allow, on a Linux system that doesn't support the necessary
9734   # sandboxing features, loading Gecko Media Plugins unsandboxed.  However, EME
9735   # CDMs will not be loaded without sandboxing even if this pref is changed.
9736 -   name: media.gmp.insecure.allow
9737     type: RelaxedAtomicBool
9738     value: false
9739     mirror: always
9740 #endif
9742 # (When reading the next line, know that preprocessor.py doesn't
9743 # understand parentheses, but && is higher precedence than ||.)
9744 #if defined(XP_WIN) && defined(_ARM64_) || defined(XP_MACOSX)
9745   # These prefs control whether or not we will allow x86/x64 plugins
9746   # to run on Windows ARM or Apple Silicon machines. This requires
9747   # launching the GMP child process executable in x86/x64 mode. We
9748   # expect to allow this for Widevine until an arm64 version of
9749   # Widevine and Clearkey is made available. We don't expect to need
9750   # to allow this for OpenH264.
9751   #
9752   # For Apple Silicon and OSX, it will be for universal builds and
9753   # whether or not it can use the x64 Widevine plugin.
9754   #
9755   # For Windows ARM, it will be for ARM builds and whether or not it
9756   # can use x86 Widevine or Clearkey plugins.
9758   # May a Widevine GMP x64 process be executed on ARM builds.
9759 - name: media.gmp-widevinecdm.allow-x64-plugin-on-arm64
9760   type: RelaxedAtomicBool
9761   value: true
9762   mirror: always
9764   # May an OpenH264 GMP x64 process be executed on ARM builds.
9765 - name: media.gmp-gmpopenh264.allow-x64-plugin-on-arm64
9766   type: RelaxedAtomicBool
9767   value: false
9768   mirror: always
9770   # May a Clearkey GMP x64 process be executed on ARM builds.
9771 - name: media.gmp-gmpclearkey.allow-x64-plugin-on-arm64
9772   type: RelaxedAtomicBool
9773   value: false
9774   mirror: always
9775 #endif
9777 # Specifies whether the PDMFactory can create a test decoder that just outputs
9778 # blank frames/audio instead of actually decoding. The blank decoder works on
9779 # all platforms.
9780 - name: media.use-blank-decoder
9781   type: RelaxedAtomicBool
9782   value: false
9783   mirror: always
9785 - name: media.gpu-process-decoder
9786   type: RelaxedAtomicBool
9787 #if defined(XP_WIN)
9788   value: true
9789 #else
9790   value: false
9791 #endif
9792   mirror: always
9794 - name: media.rdd-process.enabled
9795   type: RelaxedAtomicBool
9796 #if defined(XP_WIN)
9797   value: true
9798 #elif defined(XP_MACOSX)
9799   value: true
9800 #elif defined(XP_LINUX) && !defined(ANDROID)
9801   value: true
9802 #elif defined(XP_FREEBSD)
9803   value: true
9804 #elif defined(XP_OPENBSD)
9805   value: true
9806 #else
9807   value: false
9808 #endif
9809   mirror: always
9811 - name: media.rdd-retryonfailure.enabled
9812   type: RelaxedAtomicBool
9813   value: true
9814   mirror: always
9816 - name: media.rdd-process.startup_timeout_ms
9817   type: RelaxedAtomicInt32
9818   value: 5000
9819   mirror: always
9821 # Specifies how many times we restart RDD process after crash till we give up.
9822 # After first RDD restart we disable HW acceleration on Linux.
9823 - name: media.rdd-process.max-crashes
9824   type: RelaxedAtomicInt32
9825   value: 2
9826   mirror: always
9828 #ifdef MOZ_FFMPEG
9829 - name: media.rdd-ffmpeg.enabled
9830   type: RelaxedAtomicBool
9831   value: true
9832   mirror: always
9833 #endif
9835 #ifdef MOZ_FFVPX
9836 - name: media.rdd-ffvpx.enabled
9837   type: RelaxedAtomicBool
9838 #if defined(XP_WIN)
9839   value: true
9840 #elif defined(XP_MACOSX)
9841   value: true
9842 #elif defined(XP_LINUX) && !defined(ANDROID)
9843   value: true
9844 #elif defined(XP_FREEBSD)
9845   value: true
9846 #elif defined(XP_OPENBSD)
9847   value: true
9848 #else
9849   value: false
9850 #endif
9851   mirror: always
9852 #endif
9854 #ifdef MOZ_WMF
9855 - name: media.rdd-wmf.enabled
9856   type: RelaxedAtomicBool
9857   value: true
9858   mirror: always
9859 #endif
9861 #ifdef MOZ_APPLEMEDIA
9862 - name: media.rdd-applemedia.enabled
9863   type: RelaxedAtomicBool
9864   value: true
9865   mirror: always
9866 #endif
9868 - name: media.rdd-theora.enabled
9869   type: RelaxedAtomicBool
9870 #if defined(XP_WIN)
9871   value: true
9872 #elif defined(XP_MACOSX)
9873   value: true
9874 #elif defined(XP_LINUX) && !defined(ANDROID)
9875   value: true
9876 #elif defined(XP_FREEBSD)
9877   value: true
9878 #elif defined(XP_OPENBSD)
9879   value: true
9880 #else
9881   value: false
9882 #endif
9883   mirror: always
9885 - name: media.rdd-vorbis.enabled
9886   type: RelaxedAtomicBool
9887 #if defined(XP_WIN)
9888   value: true
9889 #elif defined(XP_MACOSX)
9890   value: true
9891 #elif defined(XP_LINUX) && !defined(ANDROID)
9892   value: true
9893 #elif defined(XP_FREEBSD)
9894   value: true
9895 #elif defined(XP_OPENBSD)
9896   value: true
9897 #else
9898   value: false
9899 #endif
9900   mirror: always
9902 - name: media.rdd-vpx.enabled
9903   type: RelaxedAtomicBool
9904 #if defined(XP_WIN)
9905   value: true
9906 #elif defined(XP_MACOSX)
9907   value: true
9908 #elif defined(XP_LINUX) && !defined(ANDROID)
9909   value: true
9910 #elif defined(XP_FREEBSD)
9911   value: true
9912 #elif defined(XP_OPENBSD)
9913   value: true
9914 #else
9915   value: false
9916 #endif
9917   mirror: always
9919 - name: media.rdd-wav.enabled
9920   type: RelaxedAtomicBool
9921 #if defined(XP_WIN)
9922   value: true
9923 #elif defined(XP_MACOSX)
9924   value: true
9925 #elif defined(XP_LINUX) && !defined(ANDROID)
9926   value: true
9927 #elif defined(XP_FREEBSD)
9928   value: true
9929 #elif defined(XP_OPENBSD)
9930   value: true
9931 #else
9932   value: false
9933 #endif
9934   mirror: always
9936 - name: media.rdd-opus.enabled
9937   type: RelaxedAtomicBool
9938 #if defined(XP_WIN)
9939   value: true
9940 #elif defined(XP_MACOSX)
9941   value: true
9942 #elif defined(XP_LINUX) && !defined(ANDROID)
9943   value: true
9944 #elif defined(XP_FREEBSD)
9945   value: true
9946 #elif defined(XP_OPENBSD)
9947   value: true
9948 #else
9949   value: false
9950 #endif
9951   mirror: always
9953 - name: media.rdd-webaudio.batch.size
9954   type: RelaxedAtomicInt32
9955   value: 100
9956   mirror: always
9958 # This pref is here to control whether we want to perform audio decoding by
9959 # using the IPC actor within the Utility process rather than the RDD process.
9960 # When it is set to true, then the utility process will take precedence over RDD
9961 # to perform audio decoding.
9962 # TODO: Enabling for Isolated Processes builds on Android
9963 - name: media.utility-process.enabled
9964   type: RelaxedAtomicBool
9965 #if defined(XP_WIN)
9966   value: true
9967 #elif defined(XP_MACOSX)
9968   value: true
9969 #elif defined(XP_LINUX) && !defined(ANDROID)
9970   value: true
9971 #elif defined(ANDROID) && !defined(MOZ_ANDROID_CONTENT_SERVICE_ISOLATED_PROCESS)
9972   value: true
9973 #elif defined(XP_OPENBSD)
9974   value: true
9975 #else
9976   value: false
9977 #endif
9978   mirror: always
9980 # Specifies how many times we restart Utility process after crash till we give
9981 # up.
9982 - name: media.utility-process.max-crashes
9983   type: RelaxedAtomicInt32
9984   value: 2
9985   mirror: always
9987 #ifdef MOZ_FFMPEG
9988 - name: media.utility-ffmpeg.enabled
9989   type: RelaxedAtomicBool
9990   value: true
9991   mirror: always
9992 #endif
9994 #ifdef MOZ_FFVPX
9995 - name: media.utility-ffvpx.enabled
9996   type: RelaxedAtomicBool
9997   value: true
9998   mirror: always
9999 #endif
10001 #ifdef MOZ_WMF
10002 - name: media.utility-wmf.enabled
10003   type: RelaxedAtomicBool
10004   value: true
10005   mirror: always
10006 #endif
10008 #ifdef MOZ_APPLEMEDIA
10009 - name: media.utility-applemedia.enabled
10010   type: RelaxedAtomicBool
10011   value: true
10012   mirror: always
10013 #endif
10015 - name: media.utility-vorbis.enabled
10016   type: RelaxedAtomicBool
10017   value: true
10018   mirror: always
10020 - name: media.utility-wav.enabled
10021   type: RelaxedAtomicBool
10022   value: true
10023   mirror: always
10025 - name: media.utility-opus.enabled
10026   type: RelaxedAtomicBool
10027   value: true
10028   mirror: always
10030 #ifdef ANDROID
10031   # Enable the MediaCodec PlatformDecoderModule by default.
10032 -   name: media.android-media-codec.enabled
10033     type: RelaxedAtomicBool
10034     value: true
10035     mirror: always
10037   # Bug 1771196
10038   # Dont yet enable AndroidDecoderModule on Utility
10039 -   name: media.utility-android-media-codec.enabled
10040     type: RelaxedAtomicBool
10041     value: false
10042     mirror: always
10044 -   name: media.android-media-codec.preferred
10045     type: RelaxedAtomicBool
10046     value: true
10047     mirror: always
10048 #endif  # ANDROID
10050 # Now we will completely disable the ability to perform audio decoding outside
10051 # of Utility.
10052 # We do that only on nightly builds for now.
10053 -   name: media.allow-audio-non-utility
10054     type: RelaxedAtomicBool
10055 #if defined(NIGHTLY_BUILD) || defined(EARLY_BETA_OR_EARLIER)
10056     value: false
10057 #else
10058     value: true
10059 #endif // defined(NIGHTLY_BUILD) || defined(EARLY_BETA_OR_EARLIER)
10060     mirror: always
10062 #ifdef MOZ_OMX
10063 -   name: media.omx.enabled
10064     type: bool
10065     value: false
10066     mirror: always
10067 #endif
10069 # Allow ffmpeg decoder to decode directly onto shmem buffer
10070 - name: media.ffmpeg.customized-buffer-allocation
10071   type: RelaxedAtomicBool
10072   value: true
10073   mirror: always
10075 #ifdef MOZ_FFMPEG
10076 -   name: media.ffmpeg.enabled
10077     type: RelaxedAtomicBool
10078   #if defined(XP_MACOSX)
10079     value: false
10080   #else
10081     value: true
10082   #endif
10083     mirror: always
10085 -   name: media.libavcodec.allow-obsolete
10086     type: bool
10087     value: false
10088     mirror: always
10089 #endif  # MOZ_FFMPEG
10091 # Allow using ffmpeg encoder
10092 -   name: media.ffmpeg.encoder.enabled
10093     type: RelaxedAtomicBool
10094 #if defined(MOZ_WIDGET_GTK)
10095     value: @IS_NIGHTLY_BUILD@
10096 #else
10097     value: false
10098 #endif
10099     mirror: always
10101 #if defined(MOZ_FFMPEG) || defined(MOZ_FFVPX)
10102 # Allow using openh264 decoding with ffmpeg
10103 -   name: media.ffmpeg.allow-openh264
10104     type: RelaxedAtomicBool
10105     value: @IS_NOT_NIGHTLY_BUILD@
10106     mirror: always
10107 #endif  # MOZ_FFMPEG || MOZ_FFVPX
10109 #ifdef MOZ_WIDGET_GTK
10110 # Use VA-API for ffmpeg video playback on Linux
10111 - name: media.ffmpeg.vaapi.enabled
10112   type: bool
10113   value: false
10114   mirror: once
10116 # Force to copy dmabuf video frames
10117 # Used for debugging/troubleshooting only
10118 # 0 - force disable
10119 # 1 - force enable
10120 # 2 - default
10121 - name: media.ffmpeg.vaapi.force-surface-zero-copy
10122   type: uint32_t
10123   value: 2
10124   mirror: once
10125 #endif # MOZ_WIDGET_GTK
10127 -   name: media.ffvpx.enabled
10128     type: RelaxedAtomicBool
10129 #ifdef MOZ_FFVPX
10130     value: true
10131 #else
10132     value: false
10133 #endif
10134     mirror: always
10136 -   name: media.ffvpx.mp3.enabled
10137     type: RelaxedAtomicBool
10138 #ifdef MOZ_FFVPX
10139     value: true
10140 #else
10141     value: false
10142 #endif
10143     mirror: always
10145 -   name: media.ffvpx.vorbis.enabled
10146     type: RelaxedAtomicBool
10147 #ifdef MOZ_FFVPX
10148     value: true
10149 #else
10150     value: false
10151 #endif
10152     mirror: always
10154 -   name: media.ffvpx.opus.enabled
10155     type: RelaxedAtomicBool
10156 #ifdef MOZ_FFVPX
10157     value: true
10158 #else
10159     value: false
10160 #endif
10161     mirror: always
10163 -   name: media.ffvpx.wav.enabled
10164     type: RelaxedAtomicBool
10165 #ifdef MOZ_FFVPX
10166     value: true
10167 #else
10168     value: false
10169 #endif
10170     mirror: always
10172 # Set to true in marionette tests to disable the sanity test
10173 # which would lead to unnecessary start of the RDD process.
10174 -   name: media.sanity-test.disabled
10175     type: RelaxedAtomicBool
10176     value: false
10177     mirror: always
10179 #ifdef MOZ_WMF
10181 -   name: media.wmf.enabled
10182     type: RelaxedAtomicBool
10183     value: true
10184     mirror: always
10186   # Whether DD should consider WMF-disabled a WMF failure, useful for testing.
10187 -   name: media.decoder-doctor.wmf-disabled-is-failure
10188     type: RelaxedAtomicBool
10189     value: false
10190     mirror: always
10192 -   name: media.wmf.dxva.d3d11.enabled
10193     type: RelaxedAtomicBool
10194     value: true
10195     mirror: always
10197 -   name: media.wmf.dxva.max-videos
10198     type: RelaxedAtomicUint32
10199     value: 8
10200     mirror: always
10202 -   name: media.wmf.use-nv12-format
10203     type: RelaxedAtomicBool
10204     value: true
10205     mirror: always
10207 -   name: media.wmf.zero-copy-nv12-textures
10208     type: bool
10209     value: true
10210     mirror: once
10211 # Enable hardware decoded video no copy even when it is blocked.
10212 -   name: media.wmf.zero-copy-nv12-textures-force-enabled
10213     type: bool
10214     value: false
10215     mirror: once
10217 -   name: media.wmf.force.allow-p010-format
10218     type: RelaxedAtomicBool
10219     value: false
10220     mirror: always
10222 -   name: media.wmf.use-sync-texture
10223     type: bool
10224     value: true
10225     mirror: once
10227 -   name: media.wmf.low-latency.enabled
10228     type: RelaxedAtomicBool
10229     value: true
10230     mirror: always
10232 -   name: media.wmf.skip-blacklist
10233     type: RelaxedAtomicBool
10234     value: false
10235     mirror: always
10237 -   name: media.wmf.amd.highres.enabled
10238     type: RelaxedAtomicBool
10239     value: true
10240     mirror: always
10242 -   name: media.wmf.allow-unsupported-resolutions
10243     type: RelaxedAtomicBool
10244     value: false
10245     mirror: always
10247 -   name: media.wmf.vp9.enabled
10248     type: RelaxedAtomicBool
10249     value: true
10250     mirror: always
10252 -   name: media.wmf.av1.enabled
10253     type: RelaxedAtomicBool
10254     value: true
10255     mirror: always
10257 # Using Windows Media Foundation Media Engine for encrypted playback
10258 # 0 : disable, 1 : enable for encrypted and clear,
10259 # 2 : enable for encrypted only, 3 : enable for clear only
10260 -   name: media.wmf.media-engine.enabled
10261     type: RelaxedAtomicUint32
10262     value: 0
10263     mirror: always
10265 # Testing purpose, enable media engine on channel decoder as well.
10266 -   name: media.wmf.media-engine.channel-decoder.enabled
10267     type: RelaxedAtomicBool
10268     value: false
10269     mirror: always
10271 # The amount of video raw data the engine stream will queue
10272 -   name: media.wmf.media-engine.raw-data-threshold.video
10273     type: RelaxedAtomicInt32
10274     value: 500000
10275     mirror: always
10277 # The amount of audio raw data the engine stream will queue
10278 -   name: media.wmf.media-engine.raw-data-threshold.audio
10279     type: RelaxedAtomicInt32
10280     value: 2000000
10281     mirror: always
10283 # Specifies how many times we restart MFCDM process after crash till we give up.
10284 -   name: media.wmf.media-engine.max-crashes
10285     type: RelaxedAtomicInt32
10286     value: 2
10287     mirror: always
10289 # Enable PlayReady DRM for EME
10290 -   name: media.eme.playready.enabled
10291     type: RelaxedAtomicBool
10292 #if defined(MOZ_WMF_CDM) && defined(NIGHTLY_BUILD)
10293     value: false # TODO: enable this when ready to play.
10294 #else
10295     value: false
10296 #endif
10297     mirror: always
10299 # Use IsTypeSupportedEx for PlayReady
10300 -   name: media.eme.playready.istypesupportedex
10301     type: RelaxedAtomicBool
10302     value: false
10303     mirror: always
10305 # Enable HEVC support via the windows media foundation
10306 # 0 : disable, 1 : enable for media engine and MFT,
10307 # 2 : enable for media engine only
10308 -   name: media.wmf.hevc.enabled
10309     type: RelaxedAtomicUint32
10310 #if defined(NIGHTLY_BUILD)
10311     value: 1
10312 #else
10313     value: 0
10314 #endif
10315     mirror: always
10317 # Enable Widevine experiment DRM for EME
10318 -   name: media.eme.widevine.experiment.enabled
10319     type: RelaxedAtomicBool
10320     value: false
10321     mirror: always
10323 #endif  # MOZ_WMF
10325 - name: media.decoder-doctor.testing
10326   type: bool
10327   value: false
10328   mirror: always
10330 - name: media.hardware-video-decoding.enabled
10331   type: bool
10332   value: true
10333   mirror: once
10335 - name: media.hardware-video-decoding.force-enabled
10336   type: bool
10337   value: false
10338   mirror: once
10340 # Whether to check the decoder supports recycling.
10341 - name: media.decoder.recycle.enabled
10342   type: RelaxedAtomicBool
10343   value: @IS_ANDROID@
10344   mirror: always
10346 # Should MFR try to skip to the next key frame?
10347 - name: media.decoder.skip-to-next-key-frame.enabled
10348   type: RelaxedAtomicBool
10349   value: true
10350   mirror: always
10352 # When video continues later than the current media time for this period of
10353 # time, then it will trigger skip-to-next-keyframe mechanism. As this aims to
10354 # solve the drop frames issue where video decoding too slow for high
10355 # resolution videos. eg. 4k+. Therefore, the value is is determined by the
10356 # telemetry probe `video_inter_keyframe_max_ms` in the key of `AV,h>2160` which
10357 # shows that 95% video's key frame interval are less than ~5000. We use its
10358 # half value as a threashold to decide whether we should keep decoding in the
10359 # current video position or jump to the next keyframe in order to decode future
10360 # frames in advance.
10361 - name: media.decoder.skip_when_video_too_slow_ms
10362   type: RelaxedAtomicInt32
10363   value: 2500
10364   mirror: always
10366 # True if we want to decode in batches.
10367 - name: media.gmp.decoder.decode_batch
10368   type: RelaxedAtomicBool
10369   value: false
10370   mirror: always
10372 # True if we allow use of any decoders found in GMP plugins.
10373 - name: media.gmp.decoder.enabled
10374   type: RelaxedAtomicBool
10375   value: true
10376   mirror: always
10378 # True if we want to request the multithreaded GMP decoder.
10379 - name: media.gmp.decoder.multithreaded
10380   type: RelaxedAtomicBool
10381   value: false
10382   mirror: always
10384 # True if we want to try using the GMP plugin decoders first.
10385 - name: media.gmp.decoder.preferred
10386   type: RelaxedAtomicBool
10387   value: false
10388   mirror: always
10390 # True if we want to reorder frames from the decoder based on the timestamp.
10391 - name: media.gmp.decoder.reorder_frames
10392   type: RelaxedAtomicBool
10393   value: true
10394   mirror: always
10396 # Whether to suspend decoding of videos in background tabs.
10397 - name: media.suspend-background-video.enabled
10398   type: RelaxedAtomicBool
10399   value: true
10400   mirror: always
10402 # Delay, in ms, from time window goes to background to suspending
10403 # video decoders. Defaults to 10 seconds.
10404 - name: media.suspend-background-video.delay-ms
10405   type: RelaxedAtomicUint32
10406   value: 10000
10407   mirror: always
10409 - name: media.dormant-on-pause-timeout-ms
10410   type: RelaxedAtomicInt32
10411   value: 5000
10412   mirror: always
10414 # AudioTrack and VideoTrack support
10415 - name: media.track.enabled
10416   type: bool
10417   value: false
10418   mirror: always
10420 # This pref disables the reception of RTCP. It is used for testing.
10421 - name: media.webrtc.net.force_disable_rtcp_reception
10422   type: ReleaseAcquireAtomicBool
10423   value: false
10424   mirror: always
10426 # This pref controls whether dispatch testing-only events.
10427 - name: media.webvtt.testing.events
10428   type: bool
10429   value: true
10430   mirror: always
10432 - name: media.webspeech.synth.force_global_queue
10433   type: bool
10434   value: false
10435   mirror: always
10437 - name: media.webspeech.test.enable
10438   type: bool
10439   value: false
10440   mirror: always
10442 - name: media.webspeech.test.fake_fsm_events
10443   type: bool
10444   value: false
10445   mirror: always
10447 - name: media.webspeech.test.fake_recognition_service
10448   type: bool
10449   value: false
10450   mirror: always
10452 #ifdef MOZ_WEBSPEECH
10453 -   name: media.webspeech.recognition.enable
10454     type: bool
10455     value: false
10456     mirror: always
10457 #endif
10459 - name: media.webspeech.recognition.force_enable
10460   type: bool
10461   value: false
10462   mirror: always
10464 #ifdef MOZ_WEBSPEECH
10465 -   name: media.webspeech.synth.enabled
10466     type: bool
10467     value: true
10468     mirror: always
10469 #endif  # MOZ_WEBSPEECH
10471 - name: media.encoder.webm.enabled
10472   type: RelaxedAtomicBool
10473   value: true
10474   mirror: always
10476 - name: media.audio-max-decode-error
10477   type: uint32_t
10478 #if defined(RELEASE_OR_BETA)
10479   value: 3
10480 #else
10481   # Zero tolerance in pre-release builds to detect any decoder regression.
10482   value: 0
10483 #endif
10484   mirror: always
10486 - name: media.video-max-decode-error
10487   type: uint32_t
10488 #if defined(RELEASE_OR_BETA)
10489   value: 2
10490 #else
10491   # Zero tolerance in pre-release builds to detect any decoder regression.
10492   value: 0
10493 #endif
10494   mirror: always
10496 # Are video stats enabled? (Disabling can help prevent fingerprinting.)
10497 - name: media.video_stats.enabled
10498   type: bool
10499   value: true
10500   mirror: always
10502 # forces the number of dropped frames to 0
10503 - name: media.video.dropped_frame_stats.enabled
10504   type: bool
10505   value: true
10506   mirror: always
10508 # Opus
10509 - name: media.opus.enabled
10510   type: RelaxedAtomicBool
10511   value: true
10512   mirror: always
10514 # Wave
10515 - name: media.wave.enabled
10516   type: RelaxedAtomicBool
10517   value: true
10518   mirror: always
10520 # Ogg
10521 - name: media.ogg.enabled
10522   type: RelaxedAtomicBool
10523   value: true
10524   mirror: always
10526 # WebM
10527 - name: media.webm.enabled
10528   type: RelaxedAtomicBool
10529   value: true
10530   mirror: always
10532 # AV1
10533 - name: media.av1.enabled
10534   type: RelaxedAtomicBool
10535 #if defined(XP_WIN) && !defined(_ARM64_)
10536   value: true
10537 #elif defined(XP_MACOSX)
10538   value: true
10539 #elif defined(MOZ_WIDGET_ANDROID)
10540   value: true
10541 #elif defined(XP_UNIX)
10542   value: true
10543 #else
10544   value: false
10545 #endif
10546   mirror: always
10548 - name: media.av1.use-dav1d
10549   type: RelaxedAtomicBool
10550 #if defined(XP_WIN) && !defined(_ARM64_)
10551   value: true
10552 #elif defined(XP_MACOSX)
10553   value: true
10554 #elif defined(XP_UNIX)
10555   value: true
10556 #else
10557   value: false
10558 #endif
10559   mirror: always
10561 - name: media.av1.new-thread-count-strategy
10562   type: RelaxedAtomicBool
10563   value: false
10564   mirror: always
10566 - name: media.av1.force-thread-count
10567   type: RelaxedAtomicInt32
10568   value: 0
10569   mirror: always
10571 - name: media.flac.enabled
10572   type: RelaxedAtomicBool
10573   value: true
10574   mirror: always
10576 # Hls
10577 - name: media.hls.enabled
10578   type: RelaxedAtomicBool
10579   value: @IS_ANDROID@
10580   mirror: always
10582 # Max number of HLS players that can be created concurrently. Used only on
10583 # Android and when "media.hls.enabled" is true.
10584 #ifdef ANDROID
10585 -   name: media.hls.max-allocations
10586     type: uint32_t
10587     value: 20
10588     mirror: always
10589 #endif
10591 - name: media.mp4.enabled
10592   type: RelaxedAtomicBool
10593   value: true
10594   mirror: always
10596 - name: media.mp4.sniff_iso_brand
10597   type: RelaxedAtomicBool
10598   value: true
10599   mirror: always
10601 # Error/warning handling, Decoder Doctor.
10603 # Set to true to force demux/decode warnings to be treated as errors.
10604 - name: media.playback.warnings-as-errors
10605   type: RelaxedAtomicBool
10606   value: false
10607   mirror: always
10609 # Resume video decoding when the cursor is hovering on a background tab to
10610 # reduce the resume latency and improve the user experience.
10611 - name: media.resume-background-video-on-tabhover
10612   type: bool
10613   value: true
10614   mirror: always
10616 # Media Seamless Looping
10617 - name: media.seamless-looping
10618   type: RelaxedAtomicBool
10619   value: true
10620   mirror: always
10622 - name: media.seamless-looping-video
10623   type: RelaxedAtomicBool
10624   value: true
10625   mirror: always
10627 - name: media.autoplay.block-event.enabled
10628   type: bool
10629   value: false
10630   mirror: always
10632 - name: media.media-capabilities.enabled
10633   type: RelaxedAtomicBool
10634   value: true
10635   mirror: always
10637 - name: media.media-capabilities.screen.enabled
10638   type: RelaxedAtomicBool
10639   value: false
10640   mirror: always
10642 - name: media.benchmark.vp9.fps
10643   type: RelaxedAtomicUint32
10644   value: 0
10645   mirror: always
10647 - name: media.benchmark.vp9.threshold
10648   type: RelaxedAtomicUint32
10649   value: 150
10650   mirror: always
10652 - name: media.benchmark.vp9.versioncheck
10653   type: RelaxedAtomicUint32
10654   value: 0
10655   mirror: always
10657 - name: media.benchmark.frames
10658   type: RelaxedAtomicUint32
10659   value: 300
10660   mirror: always
10662 - name: media.benchmark.timeout
10663   type: RelaxedAtomicUint32
10664   value: 1000
10665   mirror: always
10667 - name: media.test.video-suspend
10668   type: RelaxedAtomicBool
10669   value: false
10670   mirror: always
10672 # MediaCapture prefs follow
10674 # Enables navigator.mediaDevices and getUserMedia() support. See also
10675 # media.peerconnection.enabled
10676 - name: media.navigator.enabled
10677   type: bool
10678   value: true
10679   mirror: always
10681 # This pref turns off window-focus checks on the navigator.mediaDevices methods,
10682 # for partner testing frameworks.
10683 # Prefer "focusmanager.testmode", which is already set by default for
10684 # web-platform tests.
10685 - name: media.devices.unfocused.enabled
10686   type: bool
10687   value: false
10688   mirror: always
10690 # This pref turns off [SecureContext] on the navigator.mediaDevices object, for
10691 # more compatible legacy behavior.
10692 - name: media.devices.insecure.enabled
10693   type: bool
10694   value: false
10695   mirror: always
10697 # If the above pref is also enabled, this pref enabled getUserMedia() support
10698 # in http, bypassing the instant NotAllowedError you get otherwise.
10699 - name: media.getusermedia.insecure.enabled
10700   type: bool
10701   value: false
10702   mirror: always
10704 # Enable tab sharing
10705 - name: media.getusermedia.browser.enabled
10706   type: RelaxedAtomicBool
10707   value: false
10708   mirror: always
10710 # The getDisplayMedia method is always SecureContext regardless of the above two
10711 # prefs. But it is not implemented on android, and can be turned off elsewhere.
10712 - name: media.getdisplaymedia.enabled
10713   type: bool
10714   value: @IS_NOT_ANDROID@
10715   mirror: always
10717 # The getDisplayMedia prompt uses getDisplayMedia under the hood to show previews.
10718 # This can be turned off if, e.g. on systems with known issues like X11, or if
10719 # previews are not desired.
10720 - name: media.getdisplaymedia.previews.enabled
10721   type: bool
10722   value: @IS_NOT_ANDROID@
10723   mirror: always
10725 # Turn off any cameras (but not mics) while in the background. This is desirable
10726 # on mobile.
10727 - name: media.getusermedia.camera.background.mute.enabled
10728   type: bool
10729   value: @IS_ANDROID@
10730   mirror: always
10732 # Use the libwebrtc AVFoundation camera backend on Mac by default. When
10733 # disabled, an older forked capture module is used.
10734 - name: media.getusermedia.camera.macavf.enabled
10735   type: bool
10736   value: true
10737   mirror: once
10739 # This pref turns on legacy (non-spec) exposure of camera and microphone
10740 # information from enumerateDevices and devicechange ahead of successful
10741 # getUserMedia calls. Should only be turned on to resolve web compat issues,
10742 # since doing so reveals more user fingerprinting information to trackers.
10744 # In this mode, camera and microphone device labels are exposed if the site has a
10745 # persisted permission to either kind, as well as while actively capturing either
10746 # kind (temporary and tab-specific grace-period permissions do not count).
10748 # Planned next steps: true â†’ @IS_NOT_NIGHTLY_BUILD@ â†’ false
10749 - name: media.devices.enumerate.legacy.enabled
10750   type: bool
10751   value: true
10752   mirror: always
10754 # WebRTC prefs follow
10756 # Enables auto refresh of peerconnection stats by default
10757 - name: media.aboutwebrtc.auto_refresh.peerconnection_section
10758   type: bool
10759   value: @IS_NOT_NIGHTLY_BUILD@
10760   mirror: always
10762 # Enables auto refresh of the transport connection log by default
10763 - name: media.aboutwebrtc.auto_refresh.connection_log_section
10764   type: bool
10765   value: false
10766   mirror: always
10768 # Enables auto refresh of user config by default
10769 - name: media.aboutwebrtc.auto_refresh.user_modified_config_section
10770   type: bool
10771   value: true
10772   mirror: always
10774 # Enables auto refresh of media context by default
10775 - name: media.aboutwebrtc.auto_refresh.media_ctx_section
10776   type: bool
10777   value: false
10778   mirror: always
10780 # Enables RTCPeerConnection support. Note that, when true, this pref enables
10781 # navigator.mediaDevices and getUserMedia() support as well.
10782 # See also media.navigator.enabled
10783 - name: media.peerconnection.enabled
10784   type: RelaxedAtomicBool
10785   value: true
10786   mirror: always
10788 - name: media.peerconnection.scripttransform.enabled
10789   type: RelaxedAtomicBool
10790   value: true
10791   mirror: always
10793 #ifdef MOZ_WEBRTC
10794   # Use MediaDataDecoder API for VP8/VP9 in WebRTC. This includes hardware
10795   # acceleration for decoding.
10796 -   name: media.navigator.mediadatadecoder_vpx_enabled
10797     type: RelaxedAtomicBool
10798 #if defined(NIGHTLY_BUILD) || defined(MOZ_WIDGET_GTK)
10799     value: true
10800 #else
10801     value: false
10802 #endif
10803     mirror: always
10805   # Use MediaDataDecoder API for H264 in WebRTC. This includes hardware
10806   # acceleration for decoding.
10807 -   name: media.navigator.mediadatadecoder_h264_enabled
10808     type: RelaxedAtomicBool
10809   #if defined(_ARM64_) && defined(XP_WIN)
10810     value: false
10811   #else
10812     value: true
10813   #endif
10814     mirror: always
10816 #if defined(MOZ_WIDGET_GTK)
10817   # Use hardware acceleration for VP8 decoding on Linux.
10818 -   name: media.navigator.mediadatadecoder_vp8_hardware_enabled
10819     type: RelaxedAtomicBool
10820     value: false
10821     mirror: always
10822 #endif
10824   # Interval in milliseconds at which to gather WebRTC stats for use in about:webrtc.
10825 -   name: media.aboutwebrtc.hist.poll_interval_ms
10826     type: RelaxedAtomicUint32
10827     value: 250
10828     mirror: always
10830   # History time depth in seconds to keep for webrtc:stats for use in about:webrtc.
10831 -   name: media.aboutwebrtc.hist.storage_window_s
10832     type: RelaxedAtomicUint32
10833     value: 60
10834     mirror: always
10836   # Time in minutes to retain peer connection stats after closing.
10837 -   name: media.aboutwebrtc.hist.prune_after_m
10838     type: RelaxedAtomicUint32
10839     value: 60 * 24 * 2
10840     mirror: always
10842   # Max number of closed PC stats histories to retain
10843 -   name: media.aboutwebrtc.hist.closed_stats_to_retain
10844     type: RelaxedAtomicUint32
10845     value: 8
10846     mirror: always
10848   # Gather PeerConnection stats history for display in about:webrtc. If
10849   # disabled history will only gather when about:webrtc is open. Additionally,
10850   # if disabled and when about:webrtc is not in the foreground history data
10851   # will become sparse.
10852 -   name: media.aboutwebrtc.hist.enabled
10853     type: RelaxedAtomicBool
10854 #if defined(MOZ_WIDGET_ANDROID)
10855     value: false
10856 #else
10857     value: @IS_NIGHTLY_BUILD@
10858 #endif
10859     mirror: always
10861 #endif  # MOZ_WEBRTC
10863 # HTMLMediaElement.allowedToPlay should be exposed to web content when
10864 # block autoplay rides the trains to release. Until then, Nightly only.
10865 - name: media.allowed-to-play.enabled
10866   type: bool
10867   value: @IS_NIGHTLY_BUILD@
10868   mirror: always
10870 # Is support for MediaDevices.ondevicechange enabled?
10871 - name: media.ondevicechange.enabled
10872   type: bool
10873   value: true
10874   mirror: always
10876 # Is support for HTMLMediaElement.seekToNextFrame enabled?
10877 - name: media.seekToNextFrame.enabled
10878   type: bool
10879   value: true
10880   mirror: always
10882 # Is the Audio Output Devices API enabled?
10883 - name: media.setsinkid.enabled
10884   type: bool
10885 #if defined(MOZ_WIDGET_ANDROID)
10886   value: false # bug 1473346
10887 #else
10888   value: true
10889 #endif
10890   mirror: always
10892 # Turn on this pref can enable test-only events for media element.
10893 - name: media.testing-only-events
10894   type: bool
10895   value: false
10896   mirror: always
10898 - name: media.useAudioChannelService.testing
10899   type: bool
10900   value: false
10901   mirror: always
10903 - name: media.audioFocus.management
10904   type: bool
10905 #if defined(MOZ_WIDGET_ANDROID)
10906   value: true
10907 #else
10908   value: false
10909 #endif
10910   mirror: always
10912 - name: media.hardwaremediakeys.enabled
10913   type: bool
10914   value: true
10915   mirror: always
10917 # If this pref is on, then `media.mediacontrol.stopcontrol.timer.ms` would take
10918 # effect and determine the timing to stop controlling media.
10919 - name: media.mediacontrol.stopcontrol.timer
10920   type: bool
10921   value: true
10922   mirror: always
10924 # If media is being paused after a certain period, then we would think that
10925 # media doesn't need to be controlled anymore. Therefore, that media would stop
10926 # listening to the media control key events. The value of this pref is how long
10927 # media would stop listening to the event after it's paused. The default value
10928 # is set to 24 hrs (24*60*60*1000)
10929 - name: media.mediacontrol.stopcontrol.timer.ms
10930   type: RelaxedAtomicUint32
10931   value: 86400000
10932   mirror: always
10934 # If this pref is on, we would stop controlling media after it reaches to the
10935 # end.
10936 - name: media.mediacontrol.stopcontrol.aftermediaends
10937   type: bool
10938   value: true
10939   mirror: always
10941 # We would only use media control to control media which duration is longer
10942 # than this value.
10943 - name: media.mediacontrol.eligible.media.duration.s
10944   type: AtomicFloat
10945   value: 3.0f
10946   mirror: always
10948 - name: media.webrtc.platformencoder
10949   type: RelaxedAtomicBool
10950 #if defined(MOZ_WIDGET_ANDROID)
10951   value: true
10952 #elif defined(MOZ_WIDGET_GTK)
10953   value: false
10954 #else
10955   value: @IS_EARLY_BETA_OR_EARLIER@
10956 #endif
10957   mirror: always
10959 - name: media.webrtc.platformencoder.sw_only
10960   type: RelaxedAtomicBool
10961 #if defined(MOZ_WIDGET_ANDROID)
10962   value: false
10963 #else
10964   value: true
10965 #endif
10966   mirror: always
10968 - name: media.webrtc.software_encoder.fallback
10969   type: RelaxedAtomicBool
10970 #if !defined(MOZ_WIDGET_GTK)
10971   value: true
10972 #else
10973   value: false
10974 #endif
10975   mirror: always
10977 #if defined(XP_MACOSX)
10978 - name: media.webrtc.capture.allow-iosurface
10979   type: RelaxedAtomicBool
10980   value: true
10981   mirror: always
10982 #endif
10984 #if defined(XP_WIN)
10985 - name: media.webrtc.capture.allow-directx
10986   type: RelaxedAtomicBool
10987   value: true
10988   mirror: always
10990 - name: media.webrtc.capture.screen.allow-wgc
10991   type: RelaxedAtomicBool
10992   value: false
10993   mirror: always
10995 - name: media.webrtc.capture.window.allow-wgc
10996   type: RelaxedAtomicBool
10997   value: false
10998   mirror: always
11000 - name: media.webrtc.capture.wgc.allow-zero-hertz
11001   type: RelaxedAtomicBool
11002   value: false
11003   mirror: always
11004 #endif
11006 #if defined(MOZ_WIDGET_GTK)
11007 - name: media.webrtc.capture.allow-pipewire
11008   type: RelaxedAtomicBool
11009   value: true
11010   mirror: always
11012 - name: media.webrtc.camera.allow-pipewire
11013   type: bool
11014   value: false
11015   mirror: once
11016 #endif
11018 - name: media.block-autoplay-until-in-foreground
11019   type: bool
11020 #if !defined(MOZ_WIDGET_ANDROID)
11021   value: true
11022 #else
11023   value: false
11024 #endif
11025   mirror: always
11027 - name: media.webrtc.hw.h264.enabled
11028   type: bool
11029 #if defined(MOZ_WIDGET_ANDROID)
11030   value: true
11031 #else
11032   value: false
11033 #endif
11034   mirror: always
11036  # If true, then we require explicit approval from the embedding app (ex. Fenix)
11037  # on GeckoView to know if we can allow audible, inaudible media or both kinds
11038  # of media to autoplay.
11039 - name: media.geckoview.autoplay.request
11040   type: bool
11041   value: false
11042   mirror: always
11044  # This is used in testing only, in order to skip the prompting process. This
11045  # pref works only when enabling the pref `media.geckoview.autoplay.request`.
11046  # 0=prompt as normal, 1=allow all, 2=deny all, 3=allow audible request,
11047  # 4=deny audible request, 5=allow inaudible request, 6=deny inaudible request.
11048  # 7=leave all requests pending.
11049 - name: media.geckoview.autoplay.request.testing
11050   type: uint32_t
11051   value: 0
11052   mirror: always
11054 - name: media.mediacontrol.testingevents.enabled
11055   type: bool
11056   value: false
11057   mirror: always
11059 #if defined(XP_MACOSX)
11060 - name: media.macos.screenrecording.oscheck.enabled
11061   type: bool
11062   value: true
11063   mirror: always
11064 #endif
11066 # When the playback rate of an HTMLMediaElement is greater than this value, or
11067 # lower than the inverse of this value, the audio is muted.
11068 - name: media.audio.playbackrate.muting_threshold
11069   type: uint32_t
11070   value: 8
11071   mirror: always
11073 # The interval of time in milliseconds between attempts to reopen any
11074 # previously unavailable audio device.
11075 - name: media.audio.device.retry.ms
11076   type: RelaxedAtomicInt32
11077   value: 1000
11078   mirror: always
11080 # Time-stretch algorithm single processing sequence length in milliseconds.
11081 # This determines to how long sequences the original sound is chopped in the
11082 # time-stretch algorithm.
11083 - name: media.audio.playbackrate.soundtouch_sequence_ms
11084   type: RelaxedAtomicInt32
11085   value: 10
11086   mirror: always
11088 # Time-stretch algorithm seeking window length in milliseconds for algorithm
11089 # that finds the best possible overlapping location. This determines from how
11090 # wide window the algorithm may look for an optimal joining location when mixing
11091 # the sound sequences back together.
11092 - name: media.audio.playbackrate.soundtouch_seekwindow_ms
11093   type: RelaxedAtomicInt32
11094   value: 15
11095   mirror: always
11097 # Time-stretch algorithm overlap length in milliseconds. When the chopped sound
11098 # sequences are mixed back together, to form a continuous sound stream, this
11099 # parameter defines over how long period the two consecutive sequences are let
11100 # to overlap each other.
11101 - name: media.audio.playbackrate.soundtouch_overlap_ms
11102   type: RelaxedAtomicInt32
11103   value: 8
11104   mirror: always
11106 # The duration, in milliseconds, of decoded audio to keep around in the
11107 # AudioSink ring-buffer. New decoding operations are started when this limit is
11108 # reached. The total size of the ring-buffer is slightly bigger than this.
11109 - name: media.audio.audiosink.threshold_ms
11110   type: AtomicFloat
11111 #if defined(XP_MACOSX) && defined(MOZ_AARCH64)
11112   value: 1000.0
11113 #else
11114   value: 200.0
11115 #endif
11116   mirror: always
11118 - name: media.video-wakelock
11119   type: RelaxedAtomicBool
11120   value: true
11121   mirror: always
11123 # On Mac, enables using the `<Brand> Media Plugin Helper` executable as the
11124 # GMP child process instead of the plugin-container executable.
11125 #if defined(XP_MACOSX)
11126 -   name: media.plugin_helper_process.enabled
11127     type: RelaxedAtomicBool
11128     value: true
11129     mirror: always
11130 #endif
11132 #---------------------------------------------------------------------------
11133 # Prefs starting with "memory."
11134 #---------------------------------------------------------------------------
11136 - name: memory.phc.enabled
11137   type: bool
11138   value: @IS_EARLY_BETA_OR_EARLIER@
11139   mirror: always
11141 - name: memory.phc.min_ram_mb
11142   type: uint32_t
11143   value: 8000
11144   mirror: always
11146 #---------------------------------------------------------------------------
11147 # Prefs starting with "midi."
11148 #---------------------------------------------------------------------------
11150 - name: midi.testing
11151   type: RelaxedAtomicBool
11152   value: false
11153   mirror: always
11155 #---------------------------------------------------------------------------
11156 # Prefs starting with "mousewheel."
11157 #---------------------------------------------------------------------------
11159 # This affects how line scrolls from wheel events will be accelerated.
11160 # Factor to be multiplied for constant acceleration.
11161 - name: mousewheel.acceleration.factor
11162   type: RelaxedAtomicInt32
11163   value: 10
11164   mirror: always
11166 # This affects how line scrolls from wheel events will be accelerated.
11167 # Number of mousewheel clicks when acceleration starts.
11168 # Acceleration can be turned off if pref is set to -1.
11169 - name: mousewheel.acceleration.start
11170   type: RelaxedAtomicInt32
11171   value: -1
11172   mirror: always
11174 # Auto-dir is a feature which treats any single-wheel scroll as a scroll in the
11175 # only one scrollable direction if the target has only one scrollable
11176 # direction. For example, if the user scrolls a vertical wheel inside a target
11177 # which is horizontally scrollable but vertical unscrollable, then the vertical
11178 # scroll is converted to a horizontal scroll for that target.
11179 # Note that auto-dir only takes effect for |mousewheel.*.action|s and
11180 # |mousewheel.*.action.override_x|s whose values are 1.
11181 - name: mousewheel.autodir.enabled
11182   type: bool
11183   value: false
11184   mirror: always
11186 # When a wheel scroll is converted due to auto-dir, which side the converted
11187 # scroll goes towards is decided by one thing called "honoured target". If the
11188 # content of the honoured target horizontally starts from right to left, then
11189 # an upward scroll maps to a rightward scroll and a downward scroll maps to a
11190 # leftward scroll; otherwise, an upward scroll maps to a leftward scroll and a
11191 # downward scroll maps to a rightward scroll.
11192 # If this pref is set to false, then consider the scrolling target as the
11193 # honoured target.
11194 # If set to true, then consider the root element in the document where the
11195 # scrolling target is as the honoured target. But note that there's one
11196 # exception: for targets in an HTML document, the real root element(I.e. the
11197 # <html> element) is typically not considered as a root element, but the <body>
11198 # element is typically considered as a root element. If there is no <body>
11199 # element, then consider the <html> element instead.
11200 - name: mousewheel.autodir.honourroot
11201   type: bool
11202   value: false
11203   mirror: always
11205 - name: mousewheel.system_scroll_override.enabled
11206   type: RelaxedAtomicBool
11207 #if defined(XP_WIN) || defined(MOZ_WIDGET_GTK)
11208   value: true
11209 #else
11210   value: false
11211 #endif
11212   mirror: always
11214 # Prefs for overriding the system mouse wheel scrolling speed on
11215 # content of the web pages.  When
11216 # "mousewheel.system_scroll_override.enabled" is true and the
11217 # system scrolling speed isn't customized by the user, the content scrolling
11218 # speed is multiplied by the following factors.  The value will be used as
11219 # 1/100.  E.g., 200 means 2.00.
11220 # NOTE: Even if "mousewheel.system_scroll_override.enabled" is
11221 # true, when Gecko detects the user customized the system scrolling speed
11222 # settings, the override isn't executed.
11223 - name: mousewheel.system_scroll_override.horizontal.factor
11224   type: RelaxedAtomicInt32
11225   value: 200
11226   mirror: always
11227 - name: mousewheel.system_scroll_override.vertical.factor
11228   type: RelaxedAtomicInt32
11229   value: 200
11230   mirror: always
11232 # Mouse wheel scroll transaction is held even if the mouse cursor is moved.
11233 - name: mousewheel.transaction.ignoremovedelay
11234   type: RelaxedAtomicInt32
11235   value: 100
11236   mirror: always
11238 # Mouse wheel scroll transaction period of time (in milliseconds).
11239 - name: mousewheel.transaction.timeout
11240   type: RelaxedAtomicInt32
11241   value: 1500
11242   mirror: always
11244 # Mouse wheel scroll position is determined by GetMessagePos rather than
11245 # LPARAM msg value
11246 - name: mousewheel.ignore_cursor_position_in_lparam
11247   type: RelaxedAtomicBool
11248   value: false
11249   mirror: always
11251 # If line-height is lower than this value (in device pixels), 1 line scroll
11252 # scrolls this height.
11253 - name: mousewheel.min_line_scroll_amount
11254   type: int32_t
11255   value: 5
11256   mirror: always
11258 # Timeout period (in milliseconds) when the mouse wheel event is no longer
11259 # handled as the same series.
11260 - name: mousewheel.scroll_series_timeout
11261   type: RelaxedAtomicInt32
11262   value: 80
11263   mirror: always
11265 #---------------------------------------------------------------------------
11266 # Prefs starting with "mozilla."
11267 #---------------------------------------------------------------------------
11269 - name: mozilla.widget.raise-on-setfocus
11270   type: bool
11271   value: true
11272   mirror: once
11274 #---------------------------------------------------------------------------
11275 # Prefs starting with "network."
11276 #---------------------------------------------------------------------------
11278 # Force less-secure NTLMv1 when needed (NTLMv2 is the default).
11279 - name: network.auth.force-generic-ntlm-v1
11280   type: RelaxedAtomicBool
11281   value: false
11282   mirror: always
11284 # Sub-resources HTTP-authentication:
11285 #   0 - don't allow sub-resources to open HTTP authentication credentials
11286 #       dialogs
11287 #   1 - allow sub-resources to open HTTP authentication credentials dialogs,
11288 #       but don't allow it for cross-origin sub-resources
11289 #   2 - allow the cross-origin authentication as well.
11290 - name: network.auth.subresource-http-auth-allow
11291   type: uint32_t
11292   value: 2
11293   mirror: always
11295 # Sub-resources HTTP-authentication for cross-origin images:
11296 # - true: It is allowed to present http auth. dialog for cross-origin images.
11297 # - false: It is not allowed.
11298 # If network.auth.subresource-http-auth-allow has values 0 or 1 this pref does
11299 # not have any effect.
11300 - name: network.auth.subresource-img-cross-origin-http-auth-allow
11301   type: bool
11302   value: false
11303   mirror: always
11305 # Resources that are triggered by some non-web-content:
11306 # - true: They are allow to present http auth. dialog
11307 # - false: They are not allow to present http auth. dialog.
11308 - name: network.auth.non-web-content-triggered-resources-http-auth-allow
11309   type: bool
11310   value: false
11311   mirror: always
11313 # Whether to show anti-spoof confirmation prompts when navigating to a url
11314 # with userinfo
11315 - name: network.auth.confirmAuth.enabled
11316   type: bool
11317   value: true
11318   mirror: always
11320 # Whether to display auth prompts if X-Frame-Options header will block loading
11321 # page
11322 - name: network.auth.supress_auth_prompt_for_XFO_failures
11323   type: bool
11324   value: true
11325   mirror: always
11327 # Whether to use challenges in the most secure order. See bug 650091.
11328 - name: network.auth.choose_most_secure_challenge
11329   type: RelaxedAtomicBool
11330   value: true
11331   mirror: always
11333 # whether to redirect the channel for auth redirects. See Bug 1820807
11334 - name: network.auth.use_redirect_for_retries
11335   type: RelaxedAtomicBool
11336   value: @IS_EARLY_BETA_OR_EARLIER@
11337   mirror: always
11339 # Whether to allow truncated brotli with empty output. This also fixes
11340 # throwing an erroring when receiving highly compressed brotli files when
11341 # no content type is specified (Bug 1715401). This pref can be removed after
11342 # some time (Bug 1841061)
11343 - name: network.compress.allow_truncated_empty_brotli
11344   type: RelaxedAtomicBool
11345   value: true
11346   mirror: always
11348 # See the full list of values in nsICookieService.idl.
11349 - name: network.cookie.cookieBehavior
11350   type: RelaxedAtomicInt32
11351   value: 0 # accept all cookies
11352   mirror: always
11354 # The cookieBehavior to be used in Private Browsing mode.
11355 - name: network.cookie.cookieBehavior.pbmode
11356   type: RelaxedAtomicInt32
11357   value: 0 # accept all cookies
11358   mirror: always
11360 # Changes cookieBehavior=5 to block third-party cookies by default
11361 - name: network.cookie.cookieBehavior.optInPartitioning
11362   type: bool
11363   value: false
11364   mirror: always
11366 # Stale threshold for cookies in seconds.
11367 - name: network.cookie.staleThreshold
11368   type: uint32_t
11369   value: 60
11370   mirror: always
11372 - name: network.cookie.sameSite.laxByDefault
11373   type: RelaxedAtomicBool
11374   value: false
11375   mirror: always
11377 # lax-by-default 2 minutes tollerance for unsafe methods. The value is in seconds.
11378 - name: network.cookie.sameSite.laxPlusPOST.timeout
11379   type: uint32_t
11380   value: 120
11381   mirror: always
11383 # For lax-by-default cookies ignore cross-site redirects when the final
11384 # redirect is same-site again.
11385 # https://github.com/httpwg/http-extensions/issues/2104
11386 - name: network.cookie.sameSite.laxByDefault.allowBoomerangRedirect
11387   type: bool
11388   value: true
11389   mirror: always
11391 - name: network.cookie.sameSite.noneRequiresSecure
11392   type: bool
11393   value: @IS_EARLY_BETA_OR_EARLIER@
11394   mirror: always
11396 - name: network.cookie.sameSite.schemeful
11397   type: bool
11398   value: false
11399   mirror: always
11401 - name: network.cookie.thirdparty.sessionOnly
11402   type: bool
11403   value: false
11404   mirror: always
11406 - name: network.cookie.thirdparty.nonsecureSessionOnly
11407   type: bool
11408   value: false
11409   mirror: always
11411 # If we should not store "persistent" cookies at all, i.e., make the
11412 # "persistent" storage be like "private" storage.  This value is only read when
11413 # instantiating persistent storage for the cookie service, which usually only
11414 # happens when the cookie service singleton is created.
11415 - name: network.cookie.noPersistentStorage
11416   type: bool
11417   value: false
11418   mirror: always
11420 # If true then any cookies containing unicode will be rejected
11421 - name: network.cookie.blockUnicode
11422   type: RelaxedAtomicBool
11423   value: false
11424   mirror: always
11426 # If true cookies loaded from the sqlite DB that have a creation or
11427 # last accessed time that is in the future will be fixed and the
11428 # timestamps will be set to the current time.
11429 - name: network.cookie.fixup_on_db_load
11430   type: RelaxedAtomicBool
11431   value: true
11432   mirror: always
11434 # If we should attempt to race the cache and network.
11435 - name: network.http.rcwn.enabled
11436   type: bool
11437   value: true
11438   mirror: always
11440 - name: network.http.rcwn.cache_queue_normal_threshold
11441   type: uint32_t
11442   value: 8
11443   mirror: always
11445 - name: network.http.rcwn.cache_queue_priority_threshold
11446   type: uint32_t
11447   value: 2
11448   mirror: always
11450 # We might attempt to race the cache with the network only if a resource
11451 # is smaller than this size.
11452 - name: network.http.rcwn.small_resource_size_kb
11453   type: uint32_t
11454   value: 256
11455   mirror: always
11457 - name: network.http.rcwn.min_wait_before_racing_ms
11458   type: uint32_t
11459   value: 0
11460   mirror: always
11462 - name: network.http.rcwn.max_wait_before_racing_ms
11463   type: uint32_t
11464   value: 500
11465   mirror: always
11467 # false=real referer, true=spoof referer (use target URI as referer).
11468 - name: network.http.referer.spoofSource
11469   type: bool
11470   value: false
11471   mirror: always
11473 # Check whether we need to hide referrer when leaving a .onion domain.
11474 # false=allow onion referer, true=hide onion referer (use empty referer).
11475 - name: network.http.referer.hideOnionSource
11476   type: bool
11477   value: false
11478   mirror: always
11480 # Include an origin header on non-GET and non-HEAD requests regardless of CORS.
11481 # 0=never send, 1=send when same-origin only, 2=always send.
11482 - name: network.http.sendOriginHeader
11483   type: uint32_t
11484   value: 2
11485   mirror: always
11487 # Whether to respect the redirected-tainted origin flag
11488 # https://fetch.spec.whatwg.org/#concept-request-tainted-origin
11489 - name: network.http.origin.redirectTainted
11490   type: bool
11491   value: true
11492   mirror: always
11494 # Whether to strip auth headers for redirected fetch/xhr channels
11495 # https://fetch.spec.whatwg.org/#http-redirect-fetch
11496 - name: network.fetch.redirect.stripAuthHeader
11497   type: RelaxedAtomicBool
11498   value: true
11499   mirror: always
11501 # Whether to strip auth headers for redirected http channels
11502 # https://fetch.spec.whatwg.org/#http-redirect-fetch
11503 - name: network.http.redirect.stripAuthHeader
11504   type: RelaxedAtomicBool
11505   value: true
11506   mirror: always
11508 # Prefs allowing granular control of referers.
11509 # 0=don't send any, 1=send only on clicks, 2=send on image requests as well
11510 - name: network.http.sendRefererHeader
11511   type: uint32_t
11512   value: 2
11513   mirror: always
11514   do_not_use_directly: true
11516 # The maximum allowed length for a referrer header - 4096 default.
11517 # 0 means no limit.
11518 - name: network.http.referer.referrerLengthLimit
11519   type: uint32_t
11520   value: 4096
11521   mirror: always
11523 #  0=always send, 1=send iff base domains match, 2=send iff hosts match.
11524 - name: network.http.referer.XOriginPolicy
11525   type: uint32_t
11526   value: 0
11527   mirror: always
11528   do_not_use_directly: true
11530 # 0=full URI, 1=scheme+host+port+path, 2=scheme+host+port.
11531 - name: network.http.referer.trimmingPolicy
11532   type: uint32_t
11533   value: 0
11534   mirror: always
11535   do_not_use_directly: true
11537 # 0=full URI, 1=scheme+host+port+path, 2=scheme+host+port.
11538 - name: network.http.referer.XOriginTrimmingPolicy
11539   type: uint32_t
11540   value: 0
11541   mirror: always
11542   do_not_use_directly: true
11544 # Set the default Referrer Policy; to be used unless overriden by the site.
11545 # 0=no-referrer, 1=same-origin, 2=strict-origin-when-cross-origin,
11546 # 3=no-referrer-when-downgrade.
11547 - name: network.http.referer.defaultPolicy
11548   type: uint32_t
11549   value: 2
11550   mirror: always
11552 # Set the default Referrer Policy applied to third-party trackers when the
11553 # default cookie policy is set to reject third-party trackers, to be used
11554 # unless overriden by the site.
11555 # 0=no-referrer, 1=same-origin, 2=strict-origin-when-cross-origin,
11556 # 3=no-referrer-when-downgrade.
11557 # Trim referrers from trackers to origins by default.
11558 - name: network.http.referer.defaultPolicy.trackers
11559   type: uint32_t
11560   value: 2
11561   mirror: always
11563 # Set the Private Browsing Default Referrer Policy, to be used
11564 # unless overriden by the site.
11565 # 0=no-referrer, 1=same-origin, 2=strict-origin-when-cross-origin,
11566 # 3=no-referrer-when-downgrade.
11567 - name: network.http.referer.defaultPolicy.pbmode
11568   type: uint32_t
11569   value: 2
11570   mirror: always
11572 # Set to ignore referrer policies which is less restricted than the default for
11573 # cross-site requests, including 'unsafe-url', 'no-referrer-when-downgrade' and
11574 # 'origin-when-cross-origin'.
11575 - name: network.http.referer.disallowCrossSiteRelaxingDefault
11576   type: bool
11577   value: true
11578   mirror: always
11580 # Whether we ignore less restricted referrer policies for top navigations.
11581 - name: network.http.referer.disallowCrossSiteRelaxingDefault.top_navigation
11582   type: bool
11583   value: false
11584   mirror: always
11587 # Set to ignore referrer policies which is less restricted than the default for
11588 # cross-site requests in the private browsing mode, including 'unsafe-url',
11589 # 'no-referrer-when-downgrade' and 'origin-when-cross-origin'.
11590 - name: network.http.referer.disallowCrossSiteRelaxingDefault.pbmode
11591   type: bool
11592   value: true
11593   mirror: always
11595 # Whether we ignore less restricted referrer policies for top navigations in the
11596 # private browsing mode.
11597 - name: network.http.referer.disallowCrossSiteRelaxingDefault.pbmode.top_navigation
11598   type: bool
11599   value: true
11600   mirror: always
11602 # Set the Private Browsing Default Referrer Policy applied to third-party
11603 # trackers when the default cookie policy is set to reject third-party
11604 # trackers, to be used unless overriden by the site.
11605 # 0=no-referrer, 1=same-origin, 2=strict-origin-when-cross-origin,
11606 # 3=no-referrer-when-downgrade.
11607 # No need to change this pref for trimming referrers from trackers since in
11608 # private windows we already trim all referrers to origin only.
11609 - name: network.http.referer.defaultPolicy.trackers.pbmode
11610   type: uint32_t
11611   value: 2
11612   mirror: always
11614 # Whether certain http header values should be censored out in logs.
11615 # Specifically filters out "authorization" and "proxy-authorization".
11616 - name: network.http.sanitize-headers-in-logs
11617   type: RelaxedAtomicBool
11618   value: true
11619   mirror: always
11621 # Whether or not we use Windows for SSO to Microsoft sites.
11622 - name: network.http.windows-sso.enabled
11623   type: RelaxedAtomicBool
11624   value: false
11625   mirror: always
11627 # Whether windows-sso is enabled for the default (0) container.
11628 # To enable SSO for additional containers, add a new pref like
11629 # `network.http.windows-sso.container-enabled.${containerId}` = true
11630 - name: network.http.windows-sso.container-enabled.0
11631   type: bool
11632   value: true
11633   mirror: never
11635 # The factor by which to increase the keepalive timeout when the
11636 # NS_HTTP_LARGE_KEEPALIVE flag is used for a connection
11637 - name: network.http.largeKeepaliveFactor
11638   type: RelaxedAtomicUint32
11639   value: 10
11640   mirror: always
11642 # This preference, if true, causes all UTF-8 domain names to be normalized to
11643 # punycode.  The intention is to allow UTF-8 domain names as input, but never
11644 # generate them from punycode.
11645 - name: network.IDN_show_punycode
11646   type: RelaxedAtomicBool
11647   value: false
11648   mirror: always
11650 # If set to true, IOService.offline depends on IOService.connectivity.
11651 - name: network.offline-mirrors-connectivity
11652   type: RelaxedAtomicBool
11653   value: false
11654   mirror: always
11656 # If set to true, disallow localhost connections when offline.
11657 - name: network.disable-localhost-when-offline
11658   type: RelaxedAtomicBool
11659   value: false
11660   mirror: always
11662 # Enables the predictive service.
11663 - name: network.predictor.enabled
11664   type: bool
11665   value: true
11666   mirror: always
11668 # Set true to allow resolving proxy for localhost
11669 - name: network.proxy.allow_hijacking_localhost
11670   type: RelaxedAtomicBool
11671   value: false
11672   mirror: always
11674 # This pref will still treat localhost URLs as secure even when hijacked
11675 # during testing. This is necessary for automated testing to check that we
11676 # actually treat localhost as a secure origin.
11677 - name: network.proxy.testing_localhost_is_secure_when_hijacked
11678   type: RelaxedAtomicBool
11679   value: false
11680   mirror: always
11682 # Allow CookieJarSettings to be unblocked for channels without a document.
11683 # This is for testing only.
11684 - name: network.cookieJarSettings.unblocked_for_testing
11685   type: bool
11686   value: false
11687   mirror: always
11689 - name: network.predictor.enable-hover-on-ssl
11690   type: bool
11691   value: false
11692   mirror: always
11694 - name: network.predictor.enable-prefetch
11695   type: bool
11696   value: @IS_EARLY_BETA_OR_EARLIER@
11697   mirror: always
11699 - name: network.predictor.page-degradation.day
11700   type: int32_t
11701   value: 0
11702   mirror: always
11703 - name: network.predictor.page-degradation.week
11704   type: int32_t
11705   value: 5
11706   mirror: always
11707 - name: network.predictor.page-degradation.month
11708   type: int32_t
11709   value: 10
11710   mirror: always
11711 - name: network.predictor.page-degradation.year
11712   type: int32_t
11713   value: 25
11714   mirror: always
11715 - name: network.predictor.page-degradation.max
11716   type: int32_t
11717   value: 50
11718   mirror: always
11720 - name: network.predictor.subresource-degradation.day
11721   type: int32_t
11722   value: 1
11723   mirror: always
11724 - name: network.predictor.subresource-degradation.week
11725   type: int32_t
11726   value: 10
11727   mirror: always
11728 - name: network.predictor.subresource-degradation.month
11729   type: int32_t
11730   value: 25
11731   mirror: always
11732 - name: network.predictor.subresource-degradation.year
11733   type: int32_t
11734   value: 50
11735   mirror: always
11736 - name: network.predictor.subresource-degradation.max
11737   type: int32_t
11738   value: 100
11739   mirror: always
11741 - name: network.predictor.prefetch-rolling-load-count
11742   type: int32_t
11743   value: 10
11744   mirror: always
11746 - name: network.predictor.prefetch-min-confidence
11747   type: int32_t
11748   value: 100
11749   mirror: always
11750 - name: network.predictor.preconnect-min-confidence
11751   type: int32_t
11752   value: 90
11753   mirror: always
11754 - name: network.predictor.preresolve-min-confidence
11755   type: int32_t
11756   value: 60
11757   mirror: always
11759 - name: network.predictor.prefetch-force-valid-for
11760   type: int32_t
11761   value: 10
11762   mirror: always
11764 - name: network.predictor.max-resources-per-entry
11765   type: int32_t
11766   value: 100
11767   mirror: always
11769 # This is selected in concert with max-resources-per-entry to keep memory
11770 # usage low-ish. The default of the combo of the two is ~50k.
11771 - name: network.predictor.max-uri-length
11772   type: uint32_t
11773   value: 500
11774   mirror: always
11776 # A testing flag.
11777 - name: network.predictor.doing-tests
11778   type: bool
11779   value: false
11780   mirror: always
11782 # Indicates whether the `fetchpriority` attribute for elements which support it
11783 # (e.g. `<script>`) is enabled.
11784 - name: network.fetchpriority.enabled
11785   type: bool
11786   value: false
11787   mirror: always
11789 # Enables `<link rel="preconnect">` tag and `Link: rel=preconnect` response header
11790 # handling.
11791 - name: network.preconnect
11792   type: RelaxedAtomicBool
11793   value: true
11794   mirror: always
11796 # Enables `<link rel="modulepreload">` tag and `Link: rel=modulepreload`
11797 # response header handling.
11798 - name: network.modulepreload
11799   type: RelaxedAtomicBool
11800   value: true
11801   mirror: always
11803 # Enable 103 Early Hint status code (RFC 8297)
11804 - name: network.early-hints.enabled
11805   type: RelaxedAtomicBool
11806   value: @IS_EARLY_BETA_OR_EARLIER@
11807   mirror: always
11809 # Enable `Link: rel=preconnect` in 103 Early Hint response.
11810 - name: network.early-hints.preconnect.enabled
11811   type: RelaxedAtomicBool
11812   value: true
11813   mirror: always
11815 # The max number of speculative connections we allow for `Link: rel=preconnect`.
11816 # When 0, the speculative connection created due to `Link: rel=preconnect` will
11817 # be limited by "network.http.speculative-parallel-limit".
11818 - name: network.early-hints.preconnect.max_connections
11819   type: uint32_t
11820   value: 10
11821   mirror: always
11823 # How long we should wait for EarlyHintPreloader to be used.
11824 # Under normal circumstances it should be used immidiately.
11825 - name: network.early-hints.parent-connect-timeout
11826   type: uint32_t
11827   value: 10000
11828   mirror: always
11830 # Whether to use the network process or not
11831 # Start a separate socket process. Performing networking on the socket process
11832 # is control by a sepparate pref
11833 # ("network.http.network_access_on_socket_process.enabled").
11834 # Changing these prefs requires a restart.
11835 - name: network.process.enabled
11836   type: RelaxedAtomicBool
11837   mirror: always
11838 #if defined(ANDROID) || defined(MOZ_THUNDERBIRD)
11839   value: false # see bug 1641427
11840 #else
11841   value: true
11842 #endif
11844 # Whether we can send OnDataAvailable to content process directly.
11845 - name: network.send_ODA_to_content_directly
11846   type: RelaxedAtomicBool
11847   value: true
11848   mirror: always
11850 # Whether we can send OnDataFinished to html5parser in content process directly
11851 - name: network.send_OnDataFinished.html5parser
11852   type: RelaxedAtomicBool
11853   value: true
11854   mirror: always
11856 # Whether we can send OnDataFinished in the content process
11857 - name: network.send_OnDataFinished
11858   type: RelaxedAtomicBool
11859   value: true
11860   mirror: always
11862 # Whether we can send OnDataAvailable to content process directly.
11863 - name: network.send_OnDataFinished.nsInputStreamPump
11864   type: RelaxedAtomicBool
11865   value: true
11866   mirror: always
11868 # Whether we can send send OnDataFinished only after dispatching
11869 # all the progress events on the main thread
11870 - name: network.send_OnDataFinished_after_progress_updates
11871   type: RelaxedAtomicBool
11872   value: false
11873   mirror: always
11875 # Perform all network access on the socket process.
11876 # The pref requires "network.process.enabled" to be true.
11877 # Changing these prefs requires a restart.
11878 - name: network.http.network_access_on_socket_process.enabled
11879   type: RelaxedAtomicBool
11880   mirror: always
11881   value: false
11883 # Telemetry of traffic categories. Whether or not to enable HttpTrafficAnalyzer.
11884 - name: network.traffic_analyzer.enabled
11885   type: RelaxedAtomicBool
11886   value: true
11887   mirror: always
11889 # Whether DNS resolution is limited to literals and cached entries.
11890 - name: network.dns.disabled
11891   type: RelaxedAtomicBool
11892   value: false
11893   mirror: always
11895 - name: network.dns.disablePrefetchFromHTTPS
11896   type: bool
11897   value: true
11898   mirror: always
11900 # Max time to shutdown the resolver threads
11901 - name: network.dns.resolver_shutdown_timeout_ms
11902   type: uint32_t
11903   value: 2000
11904   mirror: always
11906 # When true on Windows DNS resolutions for single label domains
11907 # (domains that don't contain a dot) will be resolved using the DnsQuery
11908 # API instead of PR_GetAddrInfoByName
11909 - name: network.dns.dns_query_single_label
11910   type: RelaxedAtomicBool
11911   value: false
11912   mirror: always
11914 # When this pref is true, we copy the host name to a fresh string before
11915 # calling into getaddrinfo.
11916 - name: network.dns.copy_string_before_call
11917   type: RelaxedAtomicBool
11918   value: true
11919   mirror: always
11921 - name: network.dns.max_high_priority_threads
11922   type: RelaxedAtomicUint32
11923   value: 40
11924   mirror: always
11926 - name: network.dns.max_any_priority_threads
11927   type: RelaxedAtomicUint32
11928   value: 24
11929   mirror: always
11931 # The proxy type. See nsIProtocolProxyService.idl
11932 #     PROXYCONFIG_DIRECT   = 0
11933 #     PROXYCONFIG_MANUAL   = 1
11934 #     PROXYCONFIG_PAC      = 2
11935 #     PROXYCONFIG_WPAD     = 4
11936 #     PROXYCONFIG_SYSTEM   = 5
11937 - name: network.proxy.type
11938   type: RelaxedAtomicUint32
11939   value: 5
11940   mirror: always
11942 # Whether the SOCKS proxy should be in charge of DNS resolution.
11943 - name: network.proxy.socks_remote_dns
11944   type: RelaxedAtomicBool
11945   value: false
11946   mirror: always
11948 # When receiving a network change event, the time (in ms) we wait to reload the
11949 # PAC url.
11950 - name: network.proxy.reload_pac_delay
11951   type: RelaxedAtomicUint32
11952   value: 2000
11953   mirror: always
11955 # When parsing "SOCKS" in PAC string, the default version of SOCKS that will be
11956 # used.
11957 - name: network.proxy.default_pac_script_socks_version
11958   type: RelaxedAtomicUint32
11959   value: 4
11960   mirror: always
11962 # Whether to force failover to direct for system requests.
11963 #ifdef MOZ_PROXY_DIRECT_FAILOVER
11964 - name: network.proxy.failover_direct
11965   type: bool
11966   value: true
11967   mirror: always
11968 #endif
11970 # Whether to allow a bypass flag to be set on httpChannel that will
11971 # prevent proxies from being used for that specific request.
11972 - name: network.proxy.allow_bypass
11973   type: bool
11974 #ifdef MOZ_PROXY_BYPASS_PROTECTION
11975   value: false
11976 #else
11977   value: true
11978 #endif
11979   mirror: always
11981 - name: network.proxy.parse_pac_on_socket_process
11982   type: RelaxedAtomicBool
11983   value: false
11984   mirror: always
11986 - name: network.proxy.detect_system_proxy_changes
11987   type: RelaxedAtomicBool
11988   value: false
11989   mirror: always
11991 # If all non-direct proxies have failed, we retry all of them in case they
11992 # are online now.
11993 - name: network.proxy.retry_failed_proxies
11994   type: RelaxedAtomicBool
11995   value: true
11996   mirror: always
11998 # Some requests during a page load are marked as "tail", mainly trackers, but not only.
11999 # This pref controls whether such requests are put to the tail, behind other requests
12000 # emerging during page loading process.
12001 - name: network.http.tailing.enabled
12002   type: bool
12003   value: true
12004   mirror: always
12006 # Whether to run proxy checks when processing Alt-Svc headers.
12007 - name: network.http.altsvc.proxy_checks
12008   type: bool
12009   value: true
12010   mirror: always
12012 - name: network.http.stale_while_revalidate.enabled
12013   type: RelaxedAtomicBool
12014   value: true
12015   mirror: always
12017 # Capacity of the above cache, in kilobytes.
12018 - name: network.ssl_tokens_cache_capacity
12019   type: RelaxedAtomicUint32
12020   value: 2048
12021   mirror: always
12023 # How many records we store per entry
12024 - name: network.ssl_tokens_cache_records_per_entry
12025   type: RelaxedAtomicUint32
12026   value: 2
12027   mirror: always
12029 # The maximum allowed length for a URL - 1MB default.
12030 - name: network.standard-url.max-length
12031   type: RelaxedAtomicUint32
12032   value: 1048576
12033   mirror: always
12035 # DNS Trusted Recursive Resolver
12036 # 0 - default off, 1 - reserved/off, 2 - TRR first, 3 - TRR only,
12037 # 4 - reserved/off, 5 off by choice
12038 - name: network.trr.mode
12039   type: RelaxedAtomicUint32
12040   value: 0
12041   mirror: always
12043 # Default global TRR provider
12044 - name: network.trr.default_provider_uri
12045   type: String
12046   value: "https://mozilla.cloudflare-dns.com/dns-query"
12047   mirror: never
12049 # If true, retry TRR for recoverable errors once.
12050 - name: network.trr.retry_on_recoverable_errors
12051   type: RelaxedAtomicBool
12052   value: true
12053   mirror: always
12055 # If true, don't fallback to native DNS upon network errors.
12056 - name: network.trr.strict_native_fallback
12057   type: RelaxedAtomicBool
12058   value: false
12059   mirror: always
12061 # If true, we'll fallback to native if the retry also times out.
12062 - name: network.trr.strict_native_fallback_allow_timeouts
12063   type: RelaxedAtomicBool
12064   value: true
12065   mirror: always
12067 # Single TRR request timeout (ms) when strict native fallback is enabled.
12068 - name: network.trr.strict_fallback_request_timeout_ms
12069   type: RelaxedAtomicUint32
12070   value: 6000
12071   mirror: always
12073 # If false, the temporary blocklisting feature is disabled.
12074 # This is useful for tests to prevent bleeding extra reqs
12075 # between tasks, since we may attempt to look up the
12076 # parent domain in the background when blocklisting a host.
12077 - name: network.trr.temp_blocklist
12078   type: RelaxedAtomicBool
12079   value: true
12080   mirror: always
12082 # TRR blocklist entry expire time (in seconds). Default is one minute.
12083 # Meant to survive basically a page load.
12084 - name: network.trr.temp_blocklist_duration_sec
12085   type: RelaxedAtomicUint32
12086   value: 60
12087   mirror: always
12089 # Single TRR request timeout, in milliseconds
12090 - name: network.trr.request_timeout_ms
12091   type: RelaxedAtomicUint32
12092   value: 1500
12093   mirror: always
12095 # Single TRR request timeout, in milliseconds for mode 3
12096 - name: network.trr.request_timeout_mode_trronly_ms
12097   type: RelaxedAtomicUint32
12098   value: 30000
12099   mirror: always
12101 # Similar to network.http.http2.ping-timeout, but this is used when the
12102 # Http/2 connection is connected to the TRR server.
12103 - name: network.trr.ping_timeout
12104   type: RelaxedAtomicUint32
12105   value: 3000
12106   mirror: always
12108 # The timeout of the TRR confirmation request
12109 - name: network.trr.confirmation_timeout_ms
12110   type: RelaxedAtomicUint32
12111   value: 6000
12112   mirror: always
12114 # The timeout of the TRR confirmation request
12115 - name: network.trr.confirmation_telemetry_enabled
12116   type: RelaxedAtomicBool
12117   value: true
12118   mirror: always
12120 # Whether to send the Accept-Language header for TRR requests
12121 - name: network.trr.send_accept-language_headers
12122   type: RelaxedAtomicBool
12123   value: false
12124   mirror: always
12126 # Whether to send an empty Accept-Encoding header for TRR requests
12127 - name: network.trr.send_empty_accept-encoding_headers
12128   type: RelaxedAtomicBool
12129   value: true
12130   mirror: always
12132 # Whether to send the User-Agent header for TRR requests
12133 - name: network.trr.send_user-agent_headers
12134   type: RelaxedAtomicBool
12135   value: false
12136   mirror: always
12138 # This pref controls whether to use TRRServiceChannel off main thread.
12139 - name: network.trr.fetch_off_main_thread
12140   type: RelaxedAtomicBool
12141   value: true
12142   mirror: always
12144 # If we should wait for captive portal confirmation before enabling TRR
12145 - name: network.trr.wait-for-portal
12146   type: RelaxedAtomicBool
12147   value: false
12148   mirror: always
12150 # If we should wait for TRR service confirmation to complete before enabling
12151 # TRR for lookups when fallback is enabled. Confirmation is always skipped when
12152 # global mode is TRR-only (no fallback).
12153 - name: network.trr.wait-for-confirmation
12154   type: RelaxedAtomicBool
12155   value: false
12156   mirror: always
12158 # Normally when confirmation fails we wait for the confirmation to succeed
12159 # before attempting to do TRR. When this pref is true, we optimistically
12160 # assume the confirmation will succeed and might attempt TRR anyway.
12161 # If network.trr.wait-for-confirmation is true, this pref is ignored.
12162 - name: network.trr.attempt-when-retrying-confirmation
12163   type: RelaxedAtomicBool
12164   value: false
12165   mirror: always
12167 # Use GET (rather than POST)
12168 - name: network.trr.useGET
12169   type: RelaxedAtomicBool
12170   value: false
12171   mirror: always
12173 # Allow RFC1918 address in responses?
12174 - name: network.trr.allow-rfc1918
12175   type: RelaxedAtomicBool
12176   value: false
12177   mirror: always
12179 # When true, it only sends AAAA when the system has IPv6 connectivity
12180 - name: network.trr.skip-AAAA-when-not-supported
12181   type: RelaxedAtomicBool
12182   value: true
12183   mirror: always
12185 # Whether to apply split horizon mitigations when using TRR.
12186 # These include adding the DNS suffix to the excluded domains
12187 - name: network.trr.split_horizon_mitigations
12188   type: RelaxedAtomicBool
12189   value: true
12190   mirror: always
12192 # Explicitly disable ECS (EDNS Client Subnet, RFC 7871)
12193 - name: network.trr.disable-ECS
12194   type: RelaxedAtomicBool
12195   value: true
12196   mirror: always
12198 # When true, the DNS+TRR cache will be cleared when a relevant TRR pref
12199 # changes. (uri, bootstrapAddress, excluded-domains)
12200 - name: network.trr.clear-cache-on-pref-change
12201   type: RelaxedAtomicBool
12202   value: true
12203   mirror: always
12205 # After this many failed TRR requests in a row, consider TRR borked
12206 - name: network.trr.max-fails
12207   type: RelaxedAtomicUint32
12208   value: 15
12209   mirror: always
12211 # When the TRR confirmation is set to CONFIRM_FAILED due to many failures in
12212 # a row, we set a timer to retry. This has an exponential backoff up to
12213 # 64 seconds.
12214 - name: network.trr.retry-timeout-ms
12215   type: RelaxedAtomicUint32
12216   value: 125
12217   mirror: always
12219 # Retry with no TRR when the response contained only 0.0.0.0 or ::
12220 - name: network.trr.fallback-on-zero-response
12221   type: RelaxedAtomicBool
12222   value: false
12223   mirror: always
12225 # If true we parse the /etc/hosts file and exclude any host names from TRR.
12226 # Reading the file is only done once, when TRR is first enabled - this could be
12227 # soon after startup or when the pref is flipped.
12228 - name: network.trr.exclude-etc-hosts
12229   type: RelaxedAtomicBool
12230   value: true
12231   mirror: always
12233 # Whether to add padding in the doh dns queries (rfc 7830)
12234 - name: network.trr.padding
12235   type: RelaxedAtomicBool
12236   value: true
12237   mirror: always
12239 # The block size to pad to. Capped at 1024 bytes.
12240 # Setting it to 0 doesn't add additional padding, but allows the server to
12241 # respond with padding (RFC7930 Sec 4)
12242 - name: network.trr.padding.length
12243   type: RelaxedAtomicUint32
12244   value: 128
12245   mirror: always
12247 # Whether to skip the NS check for the blocked host.
12248 # Note this is used for test only.
12249 - name: network.trr.skip-check-for-blocked-host
12250   type: RelaxedAtomicBool
12251   value: false
12252   mirror: always
12254 # Whether to use the connection info that is generated asynchronously.
12255 - name: network.trr.async_connInfo
12256   type: RelaxedAtomicBool
12257   value: false
12258   mirror: always
12260 # If true, a failed TRR request that contains an extended DNS error
12261 # matching the hardFail condition in DNSPacket.cpp will not be
12262 # retried with native DNS
12263 - name: network.trr.hard_fail_on_extended_error
12264   type: RelaxedAtomicBool
12265   value: true
12266   mirror: always
12268 # The base URL of the `Learn more` button for skip reasons
12269 - name: network.trr_ui.skip_reason_learn_more_url
12270   type: String
12271   value: "https://firefox-source-docs.mozilla.org/networking/dns/trr-skip-reasons.html#"
12272   mirror: never
12274 # If true, display a warning before fallback to native
12275 - name: network.trr.display_fallback_warning
12276   type: RelaxedAtomicBool
12277   value: false
12278   mirror: always
12280 # Heuristics in this list will trigger the fallback to native warning
12281 - name: network.trr.fallback_warning_heuristic_list
12282   type: String
12283   value: "canary"
12284   mirror: never
12286 # Use Oblivious HTTP when making TRR requests.
12287 - name: network.trr.use_ohttp
12288   type: RelaxedAtomicBool
12289   value: false
12290   mirror: always
12292 # Oblivious HTTP relay URI for TRR requests.
12293 - name: network.trr.ohttp.relay_uri
12294   type: String
12295   value: ""
12296   mirror: never
12298 # URI from which to fetch the configuration for the Oblivious HTTP gateway for TRR requests.
12299 - name: network.trr.ohttp.config_uri
12300   type: String
12301   value: ""
12302   mirror: never
12304 # The URI used for the target DoH server when network.trr.use_ohttp is true
12305 - name: network.trr.ohttp.uri
12306   type: String
12307   value: ""
12308   mirror: never
12310 # Allow the network changed event to get sent when a network topology or setup
12311 # change is noticed while running.
12312 - name: network.notify.changed
12313   type: RelaxedAtomicBool
12314   value: true
12315   mirror: always
12317 # Allow network detection of IPv6 related changes (bug 1245059)
12318 - name: network.notify.IPv6
12319   type: RelaxedAtomicBool
12320 #ifdef XP_WIN
12321   value: false
12322 #else
12323   value: true
12324 #endif
12325   mirror: always
12327 # Whether to check the dnsSuffix on network changes
12328 - name: network.notify.dnsSuffixList
12329   type: RelaxedAtomicBool
12330   value: true
12331   mirror: always
12333 # Whether to check the registry for proxies on network changes that indicate
12334 # that TRR should not be used.
12335 - name: network.notify.checkForProxies
12336   type: RelaxedAtomicBool
12337   value: true
12338   mirror: always
12340 # Whether to check the registry for NRPT rules on network changes that
12341 # indicate that TRR should not be used.
12342 - name: network.notify.checkForNRPT
12343   type: RelaxedAtomicBool
12344   value: true
12345   mirror: always
12347 # Whether NotifyIpInterfaceChange should be called immediately after
12348 # registration in order to record the initial state of the network adapters.
12349 - name: network.notify.initial_call
12350   type: RelaxedAtomicBool
12351   value: true
12352   mirror: always
12354 # Whether to check for DNS resolvers
12355 - name: network.notify.resolvers
12356   type: RelaxedAtomicBool
12357   value: true
12358   mirror: always
12360 # Whether to use the rust implemented DefaultURI for unknown scheme types
12361 - name: network.url.useDefaultURI
12362   type: RelaxedAtomicBool
12363   value: true
12364   mirror: always
12366 # The maximum allowed length for a URL - 32MB default.
12367 # If 0 that means no limit.
12368 - name: network.url.max-length
12369   type: RelaxedAtomicUint32
12370   value: 32 * 1024 * 1024
12371   mirror: always
12373 # Should be removed if no breakage occurs. See bug 1797846
12374 - name: network.url.strip-data-url-whitespace
12375   type: RelaxedAtomicBool
12376   value: false
12377   mirror: always
12379   # If true, will be more strict with status code parsing
12380 - name: network.url.strict_data_url_base64_placement
12381   type: RelaxedAtomicBool
12382   value: true
12383   mirror: always
12385 - name: network.url.strict_protocol_setter
12386   type: RelaxedAtomicBool
12387   value: true
12388   mirror: always
12390 # Force remapping of remote port numbers to allow reaching local testing
12391 # servers or port forwarders listening on non-standard ports.  Note that
12392 # this is not changing the origin URL in the addressbar, only internally
12393 # the port number used.  This is intended to be used along with the
12394 # `network.dns.forceResolve` preference.
12396 # The form is:
12397 #   "80,443,808-888=8080; 563=8081"
12398 # this will remap ports for HTTP, HTTPS and the range of 808-888 included
12399 # to use port 8080, and port 563 to go to 8081.
12400 - name: network.socket.forcePort
12401   type: String
12402   value: ""
12403   mirror: never
12405 # Try and use HTTP2 when using SSL
12406 - name: network.http.http2.enabled
12407   type: RelaxedAtomicBool
12408   value: true
12409   mirror: always
12411 - name: network.http.http2.enabled.deps
12412   type: RelaxedAtomicBool
12413   value: true
12414   mirror: always
12416 - name: network.http.http2.enforce-tls-profile
12417   type: RelaxedAtomicBool
12418   value: true
12419   mirror: always
12421 - name: network.http.http2.chunk-size
12422   type: RelaxedAtomicInt32
12423   value: 16000
12424   mirror: always
12426 - name: network.http.http2.timeout
12427   type: RelaxedAtomicInt32
12428   value: 170
12429   mirror: always
12431 - name: network.http.http2.coalesce-hostnames
12432   type: RelaxedAtomicBool
12433   value: true
12434   mirror: always
12436 - name: network.http.http2.ping-threshold
12437   type: RelaxedAtomicInt32
12438   value: 58
12439   mirror: always
12441 - name: network.http.http2.ping-timeout
12442   type: RelaxedAtomicInt32
12443   value: 8
12444   mirror: always
12446 - name: network.http.http2.send-buffer-size
12447   type: RelaxedAtomicInt32
12448   value: 0
12449   mirror: always
12451 - name: network.http.http2.allow-push
12452   type: RelaxedAtomicBool
12453   value: true
12454   mirror: always
12456 - name: network.http.http2.push-allowance
12457   type: RelaxedAtomicInt32
12458   value: 131072  # 128KB
12459   mirror: always
12461 - name: network.http.http2.pull-allowance
12462   type: RelaxedAtomicInt32
12463   value: 12582912  # 12MB
12464   mirror: always
12466 - name: network.http.http2.default-concurrent
12467   type: RelaxedAtomicInt32
12468   value: 100
12469   mirror: always
12471 - name: network.http.http2.default-hpack-buffer
12472   type: RelaxedAtomicInt32
12473   value: 65536 # 64K
12474   mirror: always
12476 - name: network.http.http2.websockets
12477   type: RelaxedAtomicBool
12478   value: true
12479   mirror: always
12481 - name: network.http.http2.enable-hpack-dump
12482   type: RelaxedAtomicBool
12483   value: false
12484   mirror: always
12486 - name: network.http.http2.move_to_pending_list_after_network_change
12487   type: RelaxedAtomicBool
12488   value: @IS_EARLY_BETA_OR_EARLIER@
12489   mirror: always
12491 # Enable HTTP/3
12492 - name: network.http.http3.enable
12493   type: RelaxedAtomicBool
12494   value: true
12495   mirror: always
12497 # Receive buffer size of QUIC socket
12498 - name: network.http.http3.recvBufferSize
12499   type: RelaxedAtomicInt32
12500   value: 1048576
12501   mirror: always
12503 - name: network.http.http3.enable_qlog
12504   type: RelaxedAtomicBool
12505   value: false
12506   mirror: always
12508 - name: network.http.http3.enable_0rtt
12509   type: RelaxedAtomicBool
12510   value: true
12511   mirror: always
12513 # When a h3 transaction is inserted in the pending queue, the time (ms) we wait
12514 # to create a TCP backup connection.
12515 - name: network.http.http3.backup_timer_delay
12516   type: RelaxedAtomicUint32
12517   value: 100
12518   mirror: always
12520 # The global half open sockets allowed for creating a backup connection.
12521 - name: network.http.http3.parallel_fallback_conn_limit
12522   type: RelaxedAtomicUint32
12523   value: 32
12524   mirror: always
12526 # Receive buffer size of QUIC socket
12527 - name: network.http.http3.max_data
12528   type: RelaxedAtomicUint32
12529   value: 25165824
12530   mirror: always
12532 # Receive buffer size of QUIC socket
12533 - name: network.http.http3.max_stream_data
12534   type: RelaxedAtomicUint32
12535   value: 12582912
12536   mirror: always
12538 # Enable http3 network priority as described in
12539 # <https://www.rfc-editor.org/rfc/rfc9218.html>.
12540 - name: network.http.http3.priority
12541   type: RelaxedAtomicBool
12542   value: true
12543   mirror: always
12545 # Depriorizing background tabs notifies websites when switching to or from the
12546 # tab while still loading resources for the website. On one hand it might
12547 # improve performance when switching to an tab with a website using the same
12548 # QUIC connection. On the other hand it sends more data to the website and
12549 # might be a privacy concern.
12550 - name: network.http.http3.send_background_tabs_deprioritization
12551   type: RelaxedAtomicBool
12552   value: false
12553   mirror: always
12555 - name: network.http.http3.version_negotiation.enabled
12556   type: RelaxedAtomicBool
12557   value: false
12558   mirror: always
12560 # When a Http/3 connection failed, whether to retry with a different IP address.
12561 - name: network.http.http3.retry_different_ip_family
12562   type: RelaxedAtomicBool
12563   value: @IS_EARLY_BETA_OR_EARLIER@
12564   mirror: always
12566 # This is for testing purpose. When true, nsUDPSocket::SendWithAddress will
12567 # return NS_ERROR_CONNECTION_REFUSED for address "::1".
12568 - name: network.http.http3.block_loopback_ipv6_addr
12569   type: RelaxedAtomicBool
12570   value: false
12571   mirror: always
12573 # The congestion control algorithm with which to configure neqo.
12574 # 0 => NewReno
12575 # 1 => Cubic
12576 - name: network.http.http3.cc_algorithm
12577   type: RelaxedAtomicUint32
12578   value: 1
12579   mirror: always
12580   rust: true
12582 # It represents the maximum duration that we used to accumulate
12583 # callback timeouts before we set a timer and break out of the loop.
12584 - name: network.http.http3.max_accumlated_time_ms
12585   type: RelaxedAtomicUint32
12586   value: 1
12587   mirror: always
12588   rust: true
12590 # When true, a http request will be upgraded to https when HTTPS RR is
12591 # available.
12592 - name: network.dns.upgrade_with_https_rr
12593   type: RelaxedAtomicBool
12594   value: true
12595   mirror: always
12597 # Whether to use HTTPS RR as AltSvc
12598 - name: network.dns.use_https_rr_as_altsvc
12599   type: RelaxedAtomicBool
12600   value: true
12601   mirror: always
12603 # Whether to check for NAT64 using the system resolver
12604 - name: network.connectivity-service.nat64-check
12605   type: bool
12606   value: true
12607   mirror: always
12609 # Manually enter the NAT64 prefix that will be used if IPv4 is unavailable.
12610 # The value is formatted as IPv6 with the least significant bits to be dropped.
12611 # For example, 64:ff9b:: is a common prefix. This will not disable
12612 # the NAT64 check, although the value of this pref will be prioritized.
12613 - name: network.connectivity-service.nat64-prefix
12614   type: String
12615   value: ""
12616   mirror: never
12618 # Whether to enable echconfig.
12619 - name: network.dns.echconfig.enabled
12620   type: RelaxedAtomicBool
12621   value: true
12622   mirror: always
12624 # Whether to enable echconfig for http3.
12625 - name: network.dns.http3_echconfig.enabled
12626   type: RelaxedAtomicBool
12627   value: true
12628   mirror: always
12630 # This pref needs to be worked together with network.dns.echconfig.enabled
12631 # being true and there is no record without ECHConfig.
12632 # When we try all records with ECHConfig in HTTPS RRs and still can't connect,
12633 # this pref indicate whether we can fallback to the origin server.
12634 - name: network.dns.echconfig.fallback_to_origin_when_all_failed
12635   type: RelaxedAtomicBool
12636   value: false
12637   mirror: always
12639 # When true, reset the exclusion list when all records are excluded.
12640 - name: network.dns.httpssvc.reset_exclustion_list
12641   type: RelaxedAtomicBool
12642   value: true
12643   mirror: always
12645 # If the http3 connection cannot be ready after the timeout value here, the
12646 # transaction will start another non-http3 conneciton.
12647 # Setting this value to 0 indicates this feature is disabled.
12648 - name: network.dns.httpssvc.http3_fast_fallback_timeout
12649   type: RelaxedAtomicUint32
12650   value: 50
12651   mirror: always
12653 # Whether to force a transaction to wait https rr.
12654 - name: network.dns.force_waiting_https_rr
12655   type: RelaxedAtomicBool
12656   value: true
12657   mirror: always
12659 # The TTL for negative responses of TXT and HTTPS records.
12660 - name: network.dns.negative_ttl_for_type_record
12661   type: RelaxedAtomicUint32
12662   value: 300   # 5 minutes (in seconds)
12663   mirror: always
12665 # Whether to use port prefixed QNAME for HTTPS RR
12666 - name: network.dns.port_prefixed_qname_https_rr
12667   type: RelaxedAtomicBool
12668   value: false
12669   mirror: always
12671 # Whether to use HTTPS RR and ignore NS_HTTP_DISALLOW_HTTPS_RR
12672 # This pref is only set when running tests
12673 - name: network.dns.force_use_https_rr
12674   type: RelaxedAtomicBool
12675   value: false
12676   mirror: always
12678 # This preference can be used to turn off IPv6 name lookups. See bug 68796.
12679 - name: network.dns.disableIPv6
12680   type: RelaxedAtomicBool
12681   value: false
12682   mirror: always
12684 # Whether to add additional record IPs to the cache
12685 - name: network.trr.add_additional_records
12686   type: RelaxedAtomicBool
12687   value: true
12688   mirror: always
12690 # When this pref is true, AddStorageEntry will return an error if the
12691 # OPEN_READONLY & OPEN_SECRETLY flags are passed and no entry exists.
12692 # If no regressions occur this pref should be removed.
12693 - name: network.cache.bug1708673
12694   type: RelaxedAtomicBool
12695   value: false
12696   mirror: always
12698 # When true we will dispatch a background task (separate process) to
12699 # delete the cache folder at shutdown in order to avoid shutdown hangs.
12700 - name: network.cache.shutdown_purge_in_background_task
12701   type: RelaxedAtomicBool
12702 #if defined(XP_WIN)
12703   value: true
12704 #else
12705   value: false
12706 #endif
12707   mirror: always
12709 # Number of seconds to wait for the cache folder to be renamed before
12710 # the background task forcefully exists.
12711 - name: network.cache.shutdown_purge_folder_wait_seconds
12712   type: RelaxedAtomicUint32
12713   value: 10
12714   mirror: always
12716 # This is used for a temporary workaround for a web-compat issue. If pref is
12717 # true CORS preflight requests are allowed to send client certificates.
12718 - name: network.cors_preflight.allow_client_cert
12719   type: RelaxedAtomicBool
12720   value: false
12721   mirror: always
12723 # If true nsCORSListenerProxy will reject any URL that contains user & password
12724 # regardless if it's a redirect or not. When false nsCORSListenerProxy will
12725 # only reject URLs with a username and password when they happen on a redirected
12726 # channel.
12727 - name: network.cors_preflight.block_userpass_uri
12728   type: RelaxedAtomicBool
12729   value: false
12730   mirror: always
12732 # Whether to record the telemetry event when a JAR channel is failed to load.
12733 - name: network.jar.record_failure_reason
12734   type: RelaxedAtomicBool
12735   value: @IS_EARLY_BETA_OR_EARLIER@
12736   mirror: always
12738 # nsJARInputStream::Available returns the size indicated by the archived entry
12739 # so we need a limit so we don't OOM if the archive is corrupted.
12740 - name: network.jar.max_available_size
12741   type: RelaxedAtomicUint32
12742   value: 256*1024*1024 # 256 Mb
12743   mirror: always
12745 # Whether JAR entries that defate to a different size than RealSize/orglen
12746 # are considered corrupted or not
12747 - name: network.jar.require_size_match
12748   type: RelaxedAtomicBool
12749   value: true
12750   mirror: always
12752 # When this pref is true, we will use the HTTPS acceptable content encoding
12753 # list for trustworthy domains such as http://localhost
12754 - name: network.http.encoding.trustworthy_is_https
12755   type: RelaxedAtomicBool
12756   value: true
12757   mirror: always
12759 # Support http3 version1
12760 - name: network.http.http3.support_version1
12761   type: RelaxedAtomicBool
12762   value: true
12763   mirror: always
12765 # Disable early data on an origin if SSL_ERROR_PROTOCOL_VERSION_ALERT is received
12766 - name: network.http.early_data_disable_on_error
12767   type: RelaxedAtomicBool
12768   value: true
12769   mirror: always
12771 # Disable early data if it fails for more than this number of origins
12772 - name: network.http.early_data_max_error
12773   type: RelaxedAtomicUint32
12774   value: 5
12775   mirror: always
12777   # If true, requests will be canceled if any of the response headers values has a NUL character
12778 - name: network.http.reject_NULs_in_response_header_values
12779   type: RelaxedAtomicBool
12780   value: true
12781   mirror: always
12783   # If true, will be more strict with status code parsing
12784 - name: network.http.strict_response_status_line_parsing
12785   type: RelaxedAtomicBool
12786   value: true
12787   mirror: always
12789   # If true, remove the resumption token when 0RTT failed.
12790 - name: network.http.remove_resumption_token_when_early_data_failed
12791   type: RelaxedAtomicBool
12792   value: true
12793   mirror: always
12795 # The maximum count that we allow socket prrocess to crash. If this count is
12796 # reached, we won't use networking over socket process.
12797 - name: network.max_socket_process_failed_count
12798   type: RelaxedAtomicUint32
12799   value: 1
12800   mirror: always
12802 - name: network.allow_redirect_to_data
12803   type: RelaxedAtomicBool
12804   value: false
12805   mirror: always
12807 - name: network.allow_raw_sockets_in_content_processes
12808   type: bool
12809   value: false
12810   mirror: once
12812 - name: network.allow_large_stack_size_for_socket_thread
12813   type: RelaxedAtomicBool
12814   value: true
12815   mirror: always
12817 # WebTransport
12818 - name: network.webtransport.enabled
12819   type: RelaxedAtomicBool
12820   value: true
12821   mirror: always
12823 # WebTransport Datagram support
12824 - name: network.webtransport.datagrams.enabled
12825   type: RelaxedAtomicBool
12826   value: true
12827   mirror: always
12829 # WebTransport Datagram size
12830 - name: network.webtransport.datagram_size
12831   type: RelaxedAtomicUint32
12832   value: 1200
12833   mirror: always
12835 # WebTransport Redirect support
12836 - name: network.webtransport.redirect.enabled
12837   type: RelaxedAtomicBool
12838   value: false
12839   mirror: always
12841 # Wifi-scan polling period, in ms, when on a mobile network.
12842 # A value of 0 indicates that no polling should be done.
12843 - name: network.wifi.scanning_period
12844   type: RelaxedAtomicUint32
12845   value: 60000
12846   mirror: always
12848 # When the Access-Control-Allow-Headers is wildcard (*), whether to allow
12849 # CORS-protected requests with the Authorization request header.
12850 - name: network.cors_preflight.authorization_covered_by_wildcard
12851   type: bool
12852   value: true
12853   mirror: always
12855 #---------------------------------------------------------------------------
12856 # Prefs starting with "nglayout."
12857 #---------------------------------------------------------------------------
12859 # Enable/disable display list invalidation logging --- useful for debugging.
12860 - name: nglayout.debug.invalidation
12861   type: bool
12862   value: false
12863   mirror: always
12865 - name: nglayout.debug.disable_xul_cache
12866   type: bool
12867   value: false
12868   mirror: always
12870 - name: nglayout.initialpaint.delay
12871   type: int32_t
12872   value: 5
12873   mirror: always
12875 - name: nglayout.initialpaint.delay_in_oopif
12876   type: int32_t
12877   value: 5
12878   mirror: always
12880 #---------------------------------------------------------------------------
12881 # Prefs starting with "page_load."
12882 #---------------------------------------------------------------------------
12884 # Time in milliseconds during which certain tasks are deprioritized during
12885 # page load.
12886 - name: page_load.deprioritization_period
12887   type: RelaxedAtomicUint32
12888   value: 5000
12889   mirror: always
12891 #---------------------------------------------------------------------------
12892 # Prefs starting with "pdfjs."
12893 #---------------------------------------------------------------------------
12895 - name: pdfjs.disabled
12896   type: bool
12897   value: false
12898   mirror: always
12900 #---------------------------------------------------------------------------
12901 # Prefs starting with "permissions."
12902 #---------------------------------------------------------------------------
12904 # 1-Accept, 2-Deny, Any other value: Accept
12905 - name: permissions.default.image
12906   type: RelaxedAtomicUint32
12907   value: 1
12908   mirror: always
12910 - name: permissions.default.screen-wake-lock
12911   type: RelaxedAtomicUint32
12912   value: 1
12913   mirror: always
12915 - name: permissions.isolateBy.userContext
12916   type: RelaxedAtomicBool
12917   value: false
12918   mirror: always
12920 - name: permissions.isolateBy.privateBrowsing
12921   type: RelaxedAtomicBool
12922   value: true
12923   mirror: always
12925 #---------------------------------------------------------------------------
12926 # Prefs starting with "places."
12927 #---------------------------------------------------------------------------
12929 # Whether pages alternative frecency is enabled. This and the following related
12930 # prefs only apply at restart.
12931 - name: places.frecency.pages.alternative.featureGate
12932   type: bool
12933   value: false
12934   mirror: once
12936 - name: places.frecency.pages.alternative.highWeight
12937   type: uint32_t
12938   value: 100
12939   mirror: once
12941 - name: places.frecency.pages.alternative.mediumWeight
12942   type: uint32_t
12943   value: 50
12944   mirror: once
12946 - name: places.frecency.pages.alternative.lowWeight
12947   type: uint32_t
12948   value: 20
12949   mirror: once
12951 - name: places.frecency.pages.alternative.halfLifeDays
12952   type: uint32_t
12953   value: 30
12954   mirror: once
12956 - name: places.frecency.pages.alternative.numSampledVisits
12957   type: uint32_t
12958   value: 10
12959   mirror: once
12961 #---------------------------------------------------------------------------
12962 # Prefs starting with "plain_text."
12963 #---------------------------------------------------------------------------
12965 # When false, text in plaintext documents does not wrap long lines.
12966 - name: plain_text.wrap_long_lines
12967   type: bool
12968   value: true
12969   mirror: always
12971 #---------------------------------------------------------------------------
12972 # Prefs starting with "preferences."
12973 #---------------------------------------------------------------------------
12975 - name: preferences.allow.omt-write
12976   type: bool
12977   value: true
12978   mirror: never
12980 #ifdef DEBUG
12981   # If set to true, setting a Preference matched to a `Once` StaticPref will
12982   # assert that the value matches. Such assertion being broken is a clear flag
12983   # that the Once policy shouldn't be used.
12984 -   name: preferences.check.once.policy
12985     type: bool
12986     value: false
12987     mirror: always
12989   # If set to true, StaticPrefs Once policy check will be skipped during
12990   # automation regression test. Use with care. This pref must be set back to
12991   # false as soon as specific test has completed.
12992 -   name: preferences.force-disable.check.once.policy
12993     type: bool
12994     value: false
12995     mirror: always
12996 #endif
12998 #---------------------------------------------------------------------------
12999 # Prefs starting with "print."
13000 #---------------------------------------------------------------------------
13002 # Variation fonts can't always be embedded in certain output formats
13003 # such as PDF. To work around this, draw the variation fonts using
13004 # paths instead of using font embedding.
13005 - name: print.font-variations-as-paths
13006   type: RelaxedAtomicBool
13007   value: true
13008   mirror: always
13010 # Whether we always print silently (without a print dialog).
13011 - name: print.always_print_silent
13012   type: RelaxedAtomicBool
13013   value: false
13014   mirror: always
13016 # Whether we attempt to generate links in Save As PDF output.
13017 - name: print.save_as_pdf.links.enabled
13018   type: RelaxedAtomicBool
13019   value: true
13020   mirror: always
13022 # Whether we attempt to generate and use document-internal PDF destinations.
13023 # This currently sometimes results in an internal cairo error, see bug 1725743;
13024 # disabled by default until that is resolved.
13025 - name: print.save_as_pdf.internal_destinations.enabled
13026   type: RelaxedAtomicBool
13027   value: false
13028   mirror: always
13030 # Whether we use the CSS @page size as the paper size in PDF output.
13031 - name: print.save_as_pdf.use_page_rule_size_as_paper_size.enabled
13032   type: RelaxedAtomicBool
13033   value: @IS_NOT_ANDROID@
13034   mirror: always
13036 # The default DPI for printing.
13038 # For PDF-based output, DPI should ideally be irrelevant, but in fact it is not
13039 # for multiple reasons:
13041 #  * Layout code that tries to respect device pixels (e.g. for snapping glyph
13042 #    positions and baselines, and especially for the "GDI Classic"
13043 #    rendering-mode threshold for certain fonts).
13045 #  * The limitations of the PDF format mean that we can't natively represent
13046 #    certain effects, such as filters, in PDF output, so we need to rasterize
13047 #    the parts of the document with these applied.
13049 #  * Other rasterized things like images and such are also affected by DPI
13050 #    (both in the output, and the images we select via srcset, for example).
13052 # Therefore, using a high DPI is preferable. For now, we use 144dpi to match
13053 # physical printer output on Windows, but higher (e.g. 300dpi) might be better,
13054 # but only if it does not lead to issues such as excessive memory use.
13055 - name: print.default_dpi
13056   type: float
13057   value: 144.0f
13058   mirror: always
13060 # Whether support for monochrome printing is enabled for CUPS.
13061 - name: print.cups.monochrome.enabled
13062   type: RelaxedAtomicBool
13063   value: true
13064   mirror: always
13066 # Disabling this will no-op window.print()
13067 - name: print.enabled
13068   type: RelaxedAtomicBool
13069   value: true
13070   mirror: always
13072 #---------------------------------------------------------------------------
13073 # Prefs starting with "privacy."
13074 #---------------------------------------------------------------------------
13076 # Annotate trackers using the strict list. If set to false, the basic list will
13077 # be used instead.
13078 - name: privacy.annotate_channels.strict_list.enabled
13079   type: bool
13080   value: @IS_EARLY_BETA_OR_EARLIER@
13081   mirror: always
13083 # Annotate trackers using the strict list in the private browsing mode. If set
13084 # to false, the basic list will be used instead.
13085 - name: privacy.annotate_channels.strict_list.pbmode.enabled
13086   type: bool
13087   value: true
13088   mirror: always
13090 # First Party Isolation (double keying), disabled by default.
13091 - name: privacy.firstparty.isolate
13092   type: RelaxedAtomicBool
13093   value: false
13094   mirror: always
13096 # If false, two windows in the same domain with different first party domains
13097 # (top level URLs) can access resources through window.opener. This pref is
13098 # effective only when "privacy.firstparty.isolate" is true.
13099 - name: privacy.firstparty.isolate.restrict_opener_access
13100   type: RelaxedAtomicBool
13101   value: true
13102   mirror: always
13104 - name: privacy.firstparty.isolate.block_post_message
13105   type: RelaxedAtomicBool
13106   value: false
13107   mirror: always
13109 - name: privacy.firstparty.isolate.use_site
13110   type: RelaxedAtomicBool
13111   value: false
13112   mirror: always
13114 # Enforce tracking protection in all modes.
13115 - name: privacy.trackingprotection.enabled
13116   type: bool
13117   value: false
13118   mirror: always
13120 # Enforce tracking protection in Private Browsing mode.
13121 - name: privacy.trackingprotection.pbmode.enabled
13122   type: bool
13123   value: true
13124   mirror: always
13126 # Annotate channels based on the tracking protection list in all modes
13127 - name: privacy.trackingprotection.annotate_channels
13128   type: bool
13129   value: true
13130   mirror: always
13132 # Block 3rd party fingerprinting resources.
13133 - name: privacy.trackingprotection.fingerprinting.enabled
13134   type: bool
13135   value: false
13136   mirror: always
13138 # Block 3rd party cryptomining resources.
13139 - name: privacy.trackingprotection.cryptomining.enabled
13140   type: bool
13141   value: false
13142   mirror: always
13144 # Block 3rd party socialtracking resources.
13145 - name: privacy.trackingprotection.socialtracking.enabled
13146   type: bool
13147   value: false
13148   mirror: always
13150 # Consider socialtracking annotation as trackers (see ETP).
13151 - name: privacy.socialtracking.block_cookies.enabled
13152   type: bool
13153   value: true
13154   mirror: always
13156 # Block 3rd party emailtracking resources in all mode.
13157 - name: privacy.trackingprotection.emailtracking.enabled
13158   type: bool
13159   value: false
13160   mirror: always
13162 # Block 3rd party emailtracking resources in Private Browsing mode.
13163 - name: privacy.trackingprotection.emailtracking.pbmode.enabled
13164   type: bool
13165   value: true
13166   mirror: always
13168 # Collecting 3rd party emailtracking telemetry.
13169 - name: privacy.trackingprotection.emailtracking.data_collection.enabled
13170   type: bool
13171   value: true
13172   mirror: always
13174 - name: privacy.trackingprotection.testing.report_blocked_node
13175   type: RelaxedAtomicBool
13176   value: false
13177   mirror: always
13179 # Whether to spoof user locale to English (used as part of Resist
13180 # Fingerprinting).
13181 # 0 - will prompt
13182 # 1 - don't spoof
13183 # 2 - spoof
13184 - name: privacy.spoof_english
13185   type: RelaxedAtomicUint32
13186   value: 0
13187   mirror: always
13189 # Send "do not track" HTTP header, disabled by default.
13190 - name: privacy.donottrackheader.enabled
13191   type: bool
13192   value: false
13193   mirror: always
13195 # Potentially send "global privacy control" HTTP header and set navigator
13196 # property accordingly. Communicates user's desire to opt-out/in of
13197 # websites or services selling or sharing the user's information, false by
13198 # default.
13199 # true - Send the header with a value of 1 to indicate opting-out
13200 # false - Do not send header to indicate opting-in
13201 - name: privacy.globalprivacycontrol.enabled
13202   type: RelaxedAtomicBool
13203   value: false
13204   mirror: always
13206 # Controls whether or not GPC signals are sent in private browsing mode.
13207 # This can be overridden by `privacy.globalprivacycontrol.enabled` as true.
13208 - name: privacy.globalprivacycontrol.pbmode.enabled
13209   type: RelaxedAtomicBool
13210   value: false
13211   mirror: always
13213 # Controls whether or not GPC signals are sent. Meant to act as a third option
13214 # of 'undecided' by leaving the navigator property undefined and not attaching
13215 # the Sec-GPC HTTP header.
13216 - name: privacy.globalprivacycontrol.functionality.enabled
13217   type: RelaxedAtomicBool
13218   value: false
13219   mirror: always
13221 # Lower the priority of network loads for resources on the tracking protection
13222 # list.  Note that this requires the
13223 # privacy.trackingprotection.annotate_channels pref to be on in order to have
13224 # any effect.
13225 - name: privacy.trackingprotection.lower_network_priority
13226   type: bool
13227   value: @IS_NIGHTLY_BUILD@
13228   mirror: always
13230 # A subset of Resist Fingerprinting protections focused specifically on timers.
13231 # This affects the Animation API, the performance APIs, Date.getTime,
13232 # Event.timestamp, File.lastModified, audioContext.currentTime,
13233 # canvas.captureStream.currentTime.
13234 - name: privacy.reduceTimerPrecision
13235   type: RelaxedAtomicBool
13236   value: true
13237   mirror: always
13239 # If privacy.reduceTimerPrecision is false, this pref controls whether or not
13240 # to clamp all timers at a fixed 20 microsconds. It should always be enabled,
13241 # and is only specified as a pref to enable an emergency disabling in the event
13242 # of catastrophic failure.
13243 - name: privacy.reduceTimerPrecision.unconditional
13244   type: RelaxedAtomicBool
13245   value: true
13246   mirror: always
13248 # The resistFingerprinting variables are marked with 'Relaxed' memory ordering.
13249 # We don't particurally care that threads have a percently consistent view of
13250 # the values of these prefs. They are not expected to change often, and having
13251 # an outdated view is not particurally harmful. They will eventually become
13252 # consistent.
13254 # The variables will, however, be read often (specifically .microseconds on
13255 # each timer rounding) so performance is important.
13256 - name: privacy.resistFingerprinting
13257   type: RelaxedAtomicBool
13258   value: false
13259   mirror: always
13260   do_not_use_directly: true
13262 # When the .pbmode pref is on, RFP or FPP will be enabled in PBM
13263 # When the non-pbm pref is on, they will be enabled in PBM and non-PBM
13264 - name: privacy.resistFingerprinting.pbmode
13265   type: RelaxedAtomicBool
13266   value: false
13267   mirror: always
13268   do_not_use_directly: true
13270 # privacy.fingerprintingProtection enables a set of fingerprinting protections
13271 # designed to minimize breakage while maximizing protection.
13272 - name: privacy.fingerprintingProtection
13273   type: RelaxedAtomicBool
13274   value: false
13275   mirror: always
13276   do_not_use_directly: true
13278 - name: privacy.fingerprintingProtection.pbmode
13279   type: RelaxedAtomicBool
13280   value: false
13281   mirror: always
13282   do_not_use_directly: true
13284 # We automatically decline canvas permission requests if they are not initiated
13285 # from user input. Just in case that breaks something, we allow the user to
13286 # revert this behavior with this obscure pref. We do not intend to support this
13287 # long term. If you do set it, to work around some broken website, please file
13288 # a bug with information so we can understand why it is needed.
13289 - name: privacy.resistFingerprinting.autoDeclineNoUserInputCanvasPrompts
13290   type: bool
13291   value: true
13292   mirror: always
13294 # This pref can be used to disable mozAddonManager entirely for fingerprinting
13295 # reasons. Someone like Tor browser will use this pref.
13296 # NOTE: We'd like this to be a "hidden" pref once StaticPrefs supports it.
13297 - name: privacy.resistFingerprinting.block_mozAddonManager
13298   type: RelaxedAtomicBool
13299   value: false
13300   mirror: always
13302 # Whether canvas extraction should result in random data. If false, canvas
13303 # extraction results in all-white, opaque pixel data.
13304 - name: privacy.resistFingerprinting.randomDataOnCanvasExtract
13305   type: RelaxedAtomicBool
13306   value: true
13307   mirror: always
13309 # The log level for browser console messages logged in RFPHelper.sys.mjs. Change to
13310 # 'All' and restart to see the messages.
13311 - name: privacy.resistFingerprinting.jsmloglevel
13312   type: String
13313   value: "Warn"
13314   mirror: never
13316 # Enable jittering the clock one precision value forward.
13317 - name: privacy.resistFingerprinting.reduceTimerPrecision.jitter
13318   type: RelaxedAtomicBool
13319   value: true
13320   mirror: always
13322 # Dynamically tune the resolution of the timer reduction for
13323 # `privacy.reduceTimerPrecision` and `privacy.resistFingerprinting`.
13324 - name: privacy.resistFingerprinting.reduceTimerPrecision.microseconds
13325   type: RelaxedAtomicUint32
13326   value: 1000
13327   mirror: always
13329 - name: privacy.resistFingerprinting.target_video_res
13330   type: uint32_t
13331   value: 480
13332   mirror: always
13334 # Enable resetting the fingerprinting randomization key daily for normal windwos.
13335 - name: privacy.resistFingerprinting.randomization.daily_reset.enabled
13336   type: RelaxedAtomicBool
13337   value: false
13338   mirror: always
13340 # Enable resetting the fingerprinting randomization key daily for private windwos.
13341 - name: privacy.resistFingerprinting.randomization.daily_reset.private.enabled
13342   type: RelaxedAtomicBool
13343   value: false
13344   mirror: always
13347 # Anti-tracking permission expiration.
13348 - name: privacy.restrict3rdpartystorage.expiration
13349   type: uint32_t
13350   value: 2592000   # 30 days (in seconds)
13351   mirror: always
13353 # Report Anti-tracking warnings to console lazily
13354 - name: privacy.restrict3rdpartystorage.console.lazy
13355   type: bool
13356   value: true
13357   mirror: always
13359 # Enable the heuristic to allow storage access for windows opened using window.open() after user interaction
13360 - name: privacy.restrict3rdpartystorage.heuristic.opened_window_after_interaction
13361   type: bool
13362   value: true
13363   mirror: always
13365 # Enable the heuristic to allow storage access for windows opened using window.open()
13366 - name: privacy.restrict3rdpartystorage.heuristic.window_open
13367   type: bool
13368   value: true
13369   mirror: always
13371 # Enable the heuristic to allow storage access for windows opened using window.open()
13372 - name: privacy.restrict3rdpartystorage.heuristic.redirect
13373   type: bool
13374   value: true
13375   mirror: always
13377 # Anti-tracking permission expiration.
13378 - name: privacy.restrict3rdpartystorage.expiration_redirect
13379   type: uint32_t
13380   value: 2592000   # 30 days (in seconds)
13381   mirror: always
13383 # Anti-tracking user-interaction expiration.
13384 - name: privacy.userInteraction.expiration
13385   type: uint32_t
13386   value: 3888000   # 45 days (in seconds)
13387   mirror: always
13389 # Anti-tracking user-interaction document interval.
13390 - name: privacy.userInteraction.document.interval
13391   type: uint32_t
13392   value: 1800   # 30 minutes (in seconds)
13393   mirror: always
13395 # Enable Anti-tracking testing. When it enables, it will notify the observers
13396 # when user-interaction permission or storage access permission is added. This
13397 # is for testing only.
13398 - name: privacy.antitracking.testing
13399   type: bool
13400   value: false
13401   mirror: always
13403 # Controls the anti-tracking webcompat features. This includes:
13404 # - All URL-Classifier and state partitioning skip lists (prefs and remote
13405 #   settings)
13406 # - Storage access heuristics (opener, redirect, etc.)
13407 # - StorageAccessAPI automatic grants (skips the prompt)
13408 # - Allowing specific tracking channels on user opt-in (e.g. facebook login
13409 #   shim).
13410 - name: privacy.antitracking.enableWebcompat
13411   type: RelaxedAtomicBool
13412   value: true
13413   mirror: always
13415 # Enable the heuristic to allow storage access for recent visited pages
13416 - name: privacy.restrict3rdpartystorage.heuristic.recently_visited
13417   type: bool
13418   value: true
13419   mirror: always
13421 # Valid time gap since last visit
13422 - name: privacy.restrict3rdpartystorage.heuristic.recently_visited_time
13423   type: uint32_t
13424   value: 600    # 10 minutes
13425   mirror: always
13427 # Recent visited pages redirection permission expiration.
13428 - name: privacy.restrict3rdpartystorage.expiration_visited
13429   type: uint32_t
13430   value: 2592000   # 30 days (in seconds)
13431   mirror: always
13433 # Maximum client-side cookie life-time cap. Measured in seconds, set to 0 to
13434 # disable.
13435 - name: privacy.documentCookies.maxage
13436   type: uint32_t
13437   value: 0
13438   mirror: always
13440 - name: privacy.window.maxInnerWidth
13441   type: int32_t
13442   value: 1000
13443   mirror: always
13445 - name: privacy.window.maxInnerHeight
13446   type: int32_t
13447   value: 1000
13448   mirror: always
13450 - name: privacy.sanitize.sanitizeOnShutdown
13451   type: RelaxedAtomicBool
13452   value: false
13453   mirror: always
13455 - name: privacy.clearOnShutdown.cache
13456   type: RelaxedAtomicBool
13457   value: false
13458   mirror: always
13460 - name: privacy.dynamic_firstparty.limitForeign
13461   type: RelaxedAtomicBool
13462   value: false
13463   mirror: always
13465 - name: privacy.dynamic_firstparty.use_site
13466   type: RelaxedAtomicBool
13467   value: true
13468   mirror: always
13470 - name: privacy.partition.network_state
13471   type: RelaxedAtomicBool
13472   value: true
13473   mirror: always
13475 # Partition the OCSP cache by the partitionKey.
13476 - name: privacy.partition.network_state.ocsp_cache
13477   type: RelaxedAtomicBool
13478   value: @IS_NIGHTLY_BUILD@
13479   mirror: always
13481 # Partition the OCSP cache by the partitionKey for private browsing mode.
13482 - name: privacy.partition.network_state.ocsp_cache.pbmode
13483   type: RelaxedAtomicBool
13484   value: true
13485   mirror: always
13487 # Always partition web storage APIs except cookies.
13488 - name: privacy.partition.always_partition_third_party_non_cookie_storage
13489   type: RelaxedAtomicBool
13490   value: true
13491   mirror: always
13493 # Exclude session storage from the above preference.
13494 - name: privacy.partition.always_partition_third_party_non_cookie_storage.exempt_sessionstorage
13495   type: RelaxedAtomicBool
13496   value: false
13497   mirror: always
13499 - name: privacy.partition.bloburl_per_partition_key
13500   type: bool
13501   value: true
13502   mirror: always
13504 - name: privacy.window.name.update.enabled
13505   type: bool
13506   value: true
13507   mirror: always
13509 # By default, the network state isolation is not active when there is a proxy
13510 # setting. This pref forces the network isolation even in these scenarios.
13511 - name: privacy.partition.network_state.connection_with_proxy
13512   type: bool
13513   value: false
13514   mirror: always
13516 # Partition the service workers unconditionally when dFPI is enabled.
13517 - name: privacy.partition.serviceWorkers
13518   type: RelaxedAtomicBool
13519   value: true
13520   mirror: always
13522 # Enables / disables the strip on share feature which strips query parameters
13523 # when copying/sharing in-content links or from the url bar.
13524 - name: privacy.query_stripping.strip_on_share.enabled
13525   type: RelaxedAtomicBool
13526   value: false
13527   mirror: always
13529 # Enables / disables the URL query string stripping in normal browsing mode
13530 # which strips query parameters from loading URIs to prevent bounce (redirect)
13531 # tracking.
13532 - name: privacy.query_stripping.enabled
13533   type: RelaxedAtomicBool
13534   value: false
13535   mirror: always
13537 # Same as the pref above, but controls query stripping for private browsing
13538 # mode.
13539 - name: privacy.query_stripping.enabled.pbmode
13540   type: RelaxedAtomicBool
13541   value: false
13542   mirror: always
13544 # The list which contains query parameters that are needed to be stripped from
13545 # URIs. The query parameters are separated by a space.
13546 - name: privacy.query_stripping.strip_list
13547   type: String
13548   value: ""
13549   mirror: never
13551 # This controls if we will do the query string stripping for redirects.
13552 - name: privacy.query_stripping.redirect
13553   type: bool
13554   value: true
13555   mirror: always
13557 # the list which contains sites where should exempt from query stripping
13558 - name: privacy.query_stripping.allow_list
13559   type: String
13560   value: ""
13561   mirror: never
13563 # Main pref to enable / disable the feature.
13564 - name: privacy.bounceTrackingProtection.enabled
13565   type: bool
13566   value: false
13567   mirror: once
13569 # How long to wait for a client redirect after a navigation ends.
13570 - name: privacy.bounceTrackingProtection.clientBounceDetectionTimerPeriodMS
13571   type: uint32_t
13572   value: 10000
13573   mirror: always
13575 # How long user activations will protect a site host from storage deletion.
13576 - name: privacy.bounceTrackingProtection.bounceTrackingActivationLifetimeSec
13577   type: uint32_t
13578   value: 3888000
13579   mirror: always
13581 # How long to wait for interaction after a possible bounce tracking event before
13582 # deleting a site host's storage.
13583 - name: privacy.bounceTrackingProtection.bounceTrackingGracePeriodSec
13584   type: uint32_t
13585   value: 3600
13586   mirror: always
13588 # How often to run the bounce tracking timer algorithm  which purges bounce
13589 # tracker state periodically. Set to 0 to disable purging.
13590 - name: privacy.bounceTrackingProtection.bounceTrackingPurgeTimerPeriodSec
13591   type: uint32_t
13592   value: 3600
13593   mirror: always
13595 # Whether only bounces that access storage should be considered trackers.
13596 - name: privacy.bounceTrackingProtection.requireStatefulBounces
13597   type: bool
13598   value: false
13599   mirror: always
13601 # To be used in test environments to enable observer messages.
13602 - name: privacy.bounceTrackingProtection.enableTestMode
13603   type: bool
13604   value: false
13605   mirror: always
13607 #---------------------------------------------------------------------------
13608 # Prefs starting with "prompts."
13609 #---------------------------------------------------------------------------
13611 # Prompt modal type prefs
13612 # See nsIPromptService::MODAL_TYPE fields for possible values.
13614 # Insecure form submit warning.
13615 - name: prompts.modalType.insecureFormSubmit
13616   type: int32_t
13617   value: 2
13618   mirror: always
13620 # nsHttpChannelAuthProvider#ConfirmAuth anti-phishing prompts.
13621 - name: prompts.modalType.confirmAuth
13622   type: int32_t
13623   value: 2
13624   mirror: always
13626 #---------------------------------------------------------------------------
13627 # Prefs starting with "security."
13628 #---------------------------------------------------------------------------
13630 # Mochitests that need to load resource:// URIs not declared content-accessible
13631 # in manifests should set this pref.
13632 - name: security.all_resource_uri_content_accessible
13633   type: bool
13634   value: false
13635   mirror: always
13637 - name: security.bad_cert_domain_error.url_fix_enabled
13638   type: bool
13639   value: true
13640   mirror: always
13642 - name: security.csp.reporting.script-sample.max-length
13643   type: int32_t
13644   value: 40
13645   mirror: always
13647 - name: security.csp.truncate_blocked_uri_for_frame_navigations
13648   type: bool
13649   value: true
13650   mirror: always
13652 # Limit the number of CSP reports that are send in a specific timespan.
13653 - name: security.csp.reporting.limit.count
13654   type: uint32_t
13655   value: 100
13656   mirror: always
13658 # Time span in seconds for reporting limit.
13659 - name: security.csp.reporting.limit.timespan
13660   type: uint32_t
13661   value: 2
13662   mirror: always
13664 # If true, all toplevel data: URI navigations will be blocked.
13665 # Please note that manually entering a data: URI in the
13666 # URL-Bar will not be blocked when flipping this pref.
13667 - name: security.data_uri.block_toplevel_data_uri_navigations
13668   type: bool
13669   value: true
13670   mirror: always
13672 # Whether window A is allowed to navigate cross-origin window B (that is not
13673 # a descendant frame of A) to a URI that loads externally.
13674 - name: security.allow_disjointed_external_uri_loads
13675   type: bool
13676   value: false
13677   mirror: always
13679 # Allowed by default so it doesn't affect Thunderbird/SeaMonkey, but
13680 # not allowed for Firefox Desktop in firefox.js
13681 - name: security.allow_parent_unrestricted_js_loads
13682   type: RelaxedAtomicBool
13683   value: true
13684   mirror: always
13686 # Allowed by default so it doesn't affect Thunderbird/SeaMonkey, but
13687 # not allowed for Firefox Desktop in firefox.js
13688 - name: security.allow_eval_with_system_principal
13689   type: RelaxedAtomicBool
13690   value: true
13691   mirror: always
13693 # Allowed by default so it doesn't affect Thunderbird/SeaMonkey, but
13694 # not allowed for Firefox Desktop in firefox.js
13695 - name: security.allow_eval_in_parent_process
13696   type: RelaxedAtomicBool
13697   value: true
13698   mirror: always
13700 # Disallowed by default, ensure not disallowed content is loaded in the parent
13701 # process.
13702 - name: security.allow_unsafe_parent_loads
13703   type: bool
13704   value: false
13705   mirror: always
13707 # Pref to block mixed scripts (fonts, plugin content, scripts, stylesheets,
13708 # iframes, websockets, XHR).
13709 - name: security.mixed_content.block_active_content
13710   type: bool
13711   value: @IS_ANDROID@
13712   mirror: always
13714 # Pref to block sub requests that happen within an object.
13715 - name: security.mixed_content.block_object_subrequest
13716   type: bool
13717   value: false
13718   mirror: always
13720 # Pref for mixed display content blocking (images, audio, video).
13721 - name: security.mixed_content.block_display_content
13722   type: bool
13723   value: false
13724   mirror: always
13726 # Prerequisite pref for mixed display content upgrading (images, audio, video).
13727 - name: security.mixed_content.upgrade_display_content
13728   type: bool
13729   value: @IS_NIGHTLY_BUILD@
13730   mirror: always
13732 # Upgrade images when the upgrading is enabled.
13733 - name: security.mixed_content.upgrade_display_content.image
13734   type: bool
13735   value: @IS_NIGHTLY_BUILD@
13736   mirror: always
13738 # Upgrade audio when the upgrading is enabled.
13739 - name: security.mixed_content.upgrade_display_content.audio
13740   type: bool
13741   value: true
13742   mirror: always
13744 # Upgrade videos when the upgrading is enabled.
13745 - name: security.mixed_content.upgrade_display_content.video
13746   type: bool
13747   value: true
13748   mirror: always
13750 # Whether strict file origin policy is in effect. "False" is traditional.
13751 - name: security.fileuri.strict_origin_policy
13752   type: RelaxedAtomicBool
13753   value: true
13754   mirror: always
13756 # The level to which we sandbox the content process. firefox.js sets the
13757 # default to different values on a per-OS basis, and has documentation
13758 # on what the defaults are and what the numbers mean.
13759 - name: security.sandbox.content.level
13760   type: int32_t
13761   value: 0
13762   mirror: always
13763   do_not_use_directly: true # Consumers should use SandboxSettings to ask.
13765 - name: security.sandbox.socket.process.level
13766   type: int32_t
13767   value: 0
13768   mirror: always
13769   do_not_use_directly: true # Consumers should use SandboxSettings to ask.
13771 # This controls the strength of the Windows GPU process sandbox.  Changes
13772 # will require restart.
13773 # For information on what the level number means, see
13774 # SetSecurityLevelForGPUProcess() in
13775 # security/sandbox/win/src/sandboxbroker/sandboxBroker.cpp
13776 - name: security.sandbox.gpu.level
13777   type: int32_t
13778 #if defined(XP_WIN)
13779   value: 1
13780 #else
13781   value: 0
13782 #endif
13783   mirror: always
13785 # Enrollment preferences for the win32k experiment, set and managed by Normandy
13786 - name: security.sandbox.content.win32k-experiment.enrollmentStatus
13787   type: uint32_t
13788   value: 0
13789   mirror: never
13791 - name: security.sandbox.content.win32k-experiment.startupEnrollmentStatus
13792   type: uint32_t
13793   value: 0
13794   mirror: never
13796 #if defined(XP_WIN) && defined(MOZ_SANDBOX)
13798   # Whether win32k is disabled for content processes.
13799   # true means win32k system calls are not permitted.
13800 -   name: security.sandbox.content.win32k-disable
13801     type: RelaxedAtomicBool
13802     value: true
13803     mirror: always
13805   # Note: win32k is currently _not_ disabled for GMP due to intermittent test
13806   # failures, where the GMP process fails very early. See bug 1449348.
13807 -   name: security.sandbox.gmp.win32k-disable
13808     type: RelaxedAtomicBool
13809     value: false
13810     mirror: always
13812   # Whether win32k is disabled for socket processes.
13813   # true means win32k system calls are not permitted.
13814 -   name: security.sandbox.socket.win32k-disable
13815     type: RelaxedAtomicBool
13816     value: true
13817     mirror: always
13819   # Whether CET User Shadow Stack compatible modules only is enabled for the
13820   # relevant process type.
13821 -   name: security.sandbox.content.shadow-stack.enabled
13822     type: RelaxedAtomicBool
13823     value: false
13824     mirror: always
13826 -   name: security.sandbox.rdd.shadow-stack.enabled
13827     type: RelaxedAtomicBool
13828     value: true
13829     mirror: always
13831 -   name: security.sandbox.socket.shadow-stack.enabled
13832     type: RelaxedAtomicBool
13833     value: true
13834     mirror: always
13836 -   name: security.sandbox.gpu.shadow-stack.enabled
13837     type: RelaxedAtomicBool
13838     value: true
13839     mirror: always
13841 -   name: security.sandbox.gmp.shadow-stack.enabled
13842     type: RelaxedAtomicBool
13843     value: true
13844     mirror: always
13846   # Whether a Low Privilege AppContainer (LPAC) is enabled for the relevant
13847   # process type.
13849 #if defined(MOZ_WMF_MEDIA_ENGINE)
13850 -   name: security.sandbox.utility-wmf-cdm.lpac.enabled
13851     type: RelaxedAtomicBool
13852     value: true
13853     mirror: always
13854 #endif
13856   # Whether Arbitrary Code Guard is enabled for the RDD process.
13857 -   name: security.sandbox.rdd.acg.enabled
13858     type: RelaxedAtomicBool
13859     value: true
13860     mirror: always
13862 #ifdef MOZ_WMF
13863   # Whether Arbitrary Code Guard is enabled for the utility WMF audio decoder
13864   # process.
13866 -   name: security.sandbox.utility-wmf.acg.enabled
13867     type: RelaxedAtomicBool
13868     value: true
13869     mirror: always
13870 #endif  // MOZ_WMF
13872   # This controls the depth of stack trace that is logged when Windows sandbox
13873   # logging is turned on. This is only currently available for the content
13874   # process because the only other sandbox (for GMP) has too strict a policy to
13875   # allow stack tracing. This does not require a restart to take effect.
13876 -   name: security.sandbox.windows.log.stackTraceDepth
13877     type: RelaxedAtomicUint32
13878     value: 0
13879     mirror: always
13880 #endif
13882 #if defined(XP_LINUX) && defined(MOZ_SANDBOX)
13883   # Run content processes in headless mode and disallow
13884   # connections to the X server.  Requires:
13885   # * `webgl.out-of-process` (or else WebGL breaks)
13886   # * `widget.non-native-theme.enabled` (scrollbars & form controls)
13887   # Changing it requires a restart because sandbox policy information
13888   # dependent on it is cached.  See bug 1640345 for details.
13889 - name: security.sandbox.content.headless
13890   type: bool
13891   value: true
13892   mirror: once
13893 #endif
13895 # Pref to show warning when submitting from secure to insecure.
13896 - name: security.warn_submit_secure_to_insecure
13897   type: bool
13898   value: true
13899   mirror: always
13901 # Hardware Origin-bound Second Factor Support
13902 - name: security.webauth.webauthn
13903   type: bool
13904   value: true
13905   mirror: always
13907 # Navigate-to CSP 3 directive
13908 - name: security.csp.enableNavigateTo
13909   type: bool
13910   value: false
13911   mirror: always
13913 # WebAuthn CTAP2 support
13914 - name: security.webauthn.ctap2
13915   type: RelaxedAtomicBool
13916   value: true
13917   mirror: always
13918   rust: true
13920 # WebAuthn JSON serialization methods
13921 - name: security.webauthn.enable_json_serialization_methods
13922   type: RelaxedAtomicBool
13923   value: true
13924   mirror: always
13926 # WebAuthn conditional mediation
13927 - name: security.webauthn.enable_conditional_mediation
13928   type: RelaxedAtomicBool
13929   value: true
13930   mirror: always
13932 # Dispatch WebAuthn requests to virtual authenticators (mutually exclusive
13933 # with and webauthn_enable_usbtoken)
13934 - name: security.webauth.webauthn_enable_softtoken
13935   type: RelaxedAtomicBool
13936   value: false
13937   mirror: always
13938   rust: true
13940 # residentKey support when using Android platform API
13941 - name: security.webauthn.webauthn_enable_android_fido2.residentkey
13942   type: RelaxedAtomicBool
13943   value: false
13944   mirror: always
13946 # Dispatch WebAuthn requests to the macOS platform API
13947 - name: security.webauthn.enable_macos_passkeys
13948   type: RelaxedAtomicBool
13949   value: true
13950   mirror: always
13952 # Dispatch WebAuthn requests to authenticator-rs
13953 - name: security.webauth.webauthn_enable_usbtoken
13954   type: RelaxedAtomicBool
13955   value: @IS_NOT_ANDROID@
13956   mirror: always
13957   rust: true
13959 # Skip direct attestation consent prompts (for tests).
13960 - name: security.webauth.webauthn_testing_allow_direct_attestation
13961   type: RelaxedAtomicBool
13962   value: false
13963   mirror: always
13964   rust: true
13966 # Show the Windows Passkey settings link in about:preferences. This is
13967 # set to true if we find that webauthn.dll is sufficiently recent.
13968 - name: security.webauthn.show_ms_settings_link
13969   type: RelaxedAtomicBool
13970   value: false
13971   mirror: always
13973 # Block Worker/SharedWorker scripts with wrong MIME type.
13974 - name: security.block_Worker_with_wrong_mime
13975   type: bool
13976   value: true
13977   mirror: always
13979 # Block the execution of scripts using a wrong type as defined by the file extension
13980 # (OS) mapping when loaded via the file:// protocol.
13981 - name: security.block_fileuri_script_with_wrong_mime
13982   type: bool
13983   value: false
13984   mirror: always
13986 # Cancel outgoing requests from SystemPrincipal:
13987 # but only with scheme http(s) and contentpolicytype subdocument
13988 - name: security.disallow_privileged_https_subdocuments_loads
13989   type: bool
13990   value: true
13991   mirror: always
13993 # but only with scheme data and contentpolicytype subdocument
13994 - name: security.disallow_privileged_data_subdocuments_loads
13995   type: bool
13996   value: true
13997   mirror: always
13999 # Cancel outgoing requests from SystemPrincipal:
14000 # but only with scheme http(s) and contentpolicytype stylesheet
14001 - name: security.disallow_privileged_https_stylesheet_loads
14002   type: bool
14003   value: true
14004   mirror: always
14006 # Cancel outgoing requests from SystemPrincipal:
14007 # but only with scheme http(s) and contentpolicytype script
14008 - name: security.disallow_privileged_https_script_loads
14009   type: bool
14010   value: true
14011   mirror: always
14013 # Cancel outgoing requests from SystemPrincipal:
14014 # where there is no finalURI.
14015 - name: security.disallow_privileged_no_finaluri_loads
14016   type: bool
14017   value: true
14018   mirror: always
14020 # Cancel outgoing requests from privileged about pages:
14021 # but only with scheme http(s) and contentpolicytype script
14022 - name: security.disallow_privilegedabout_remote_script_loads
14023   type: bool
14024   value: true
14025   mirror: always
14027 # Enable preloaded static key pins by default.
14028 - name: security.cert_pinning.enforcement_level
14029   type: RelaxedAtomicUint32
14030   value: 1
14031   mirror: always
14032   do_not_use_directly: true
14034 # OCSP fetching behavior:
14035 # 0: do not fetch OCSP
14036 # 1: fetch OCSP for DV and EV certificates
14037 # 2: fetch OCSP only for EV certificates
14038 - name: security.OCSP.enabled
14039   type: RelaxedAtomicUint32
14040 #ifdef ANDROID
14041   value: 2
14042 #else
14043   value: 1
14044 #endif
14045   mirror: always
14048 # Whether or not OCSP is required.
14049 # true => hard-fail (if an OCSP request times out, stop the connection)
14050 # false => soft-fail (if an OCSP request times out, continue the connection)
14051 - name: security.OCSP.require
14052   type: RelaxedAtomicBool
14053   value: false
14054   mirror: always
14056 # How many milliseconds to wait for an OCSP response before assuming it failed
14057 # (when fetching for soft-fail).
14058 - name: security.OCSP.timeoutMilliseconds.soft
14059   type: RelaxedAtomicUint32
14060 #ifdef RELEASE_OR_BETA
14061   value: 2000
14062 #else
14063   value: 1000
14064 #endif
14065   mirror: always
14067 # How many milliseconds to wait for an OCSP response before assuming it failed
14068 # (when fetching for hard-fail).
14069 - name: security.OCSP.timeoutMilliseconds.hard
14070   type: RelaxedAtomicUint32
14071   value: 10000
14072   mirror: always
14074 # Whether or not to enable OCSP must-staple (in other words, TLS-feature with
14075 # status request).
14076 - name: security.ssl.enable_ocsp_must_staple
14077   type: RelaxedAtomicBool
14078   value: true
14079   mirror: always
14081 # Whether or not to enable OCSP stapling.
14082 - name: security.ssl.enable_ocsp_stapling
14083   type: RelaxedAtomicBool
14084   value: true
14085   mirror: always
14087 # This is checked at startup to see if NSS should be initialized without the
14088 # user's certificate and key databases.
14089 - name: security.nocertdb
14090   type: bool
14091   value: false
14092   mirror: once
14094 # Whether or not to import and trust third party root certificates from the OS.
14095 - name: security.enterprise_roots.enabled
14096   type: RelaxedAtomicBool
14097   value: true
14098   mirror: always
14100 - name: security.intermediate_preloading_healer.enabled
14101   type: RelaxedAtomicBool
14102   value: @IS_NOT_ANDROID@
14103   mirror: always
14105 - name: security.intermediate_preloading_healer.timer_interval_ms
14106   type: RelaxedAtomicUint32
14107   value: 300000
14108   mirror: always
14110 # If true, attempt to load the osclientcerts PKCS#11 module at startup on a
14111 # background thread. This module allows Firefox to use client certificates
14112 # stored in OS certificate storage. Currently only available for Windows and
14113 # macOS.
14114 - name: security.osclientcerts.autoload
14115   type: RelaxedAtomicBool
14116   value: true
14117   mirror: always
14119 # If true, assume tokens accessed via osclientcerts implement RSA-PSS. If a
14120 # given token does not support RSA-PSS, users may see the error
14121 # 'SEC_ERROR_PKCS11_GENERAL_ERROR' if a server indicates it will accept an
14122 # RSA-PSS signature in the client's certificate verify message.
14123 # Setting this to false may allow such connections to succeed, if the server
14124 # also accepts RSA-PKCS1 signatures.
14125 - name: security.osclientcerts.assume_rsa_pss_support
14126   type: RelaxedAtomicBool
14127   value: true
14128   mirror: always
14130 - name: security.pki.cert_short_lifetime_in_days
14131   type: RelaxedAtomicUint32
14132   value: 10
14133   mirror: always
14135 # security.pki.netscape_step_up_policy controls how the platform handles the
14136 # id-Netscape-stepUp OID in extended key usage extensions of CA certificates.
14137 # 0: id-Netscape-stepUp is always considered equivalent to id-kp-serverAuth
14138 # 1: it is considered equivalent when the notBefore is before 23 August 2016
14139 # 2: similarly, but for 23 August 2015
14140 # 3: it is never considered equivalent
14141 - name: security.pki.netscape_step_up_policy
14142   type: RelaxedAtomicUint32
14143 #ifdef RELEASE_OR_BETA
14144   value: 1
14145 #else
14146   value: 2
14147 #endif
14148   mirror: always
14150 # Configures Certificate Transparency support mode:
14151 # 0: Fully disabled.
14152 # 1: Only collect telemetry. CT qualification checks are not performed.
14153 - name: security.pki.certificate_transparency.mode
14154   type: RelaxedAtomicUint32
14155   value: 0
14156   mirror: always
14158 # 0: Disable CRLite entirely.
14159 # 1: Consult CRLite but only collect telemetry.
14160 # 2: Consult CRLite and enforce both "Revoked" and "Not Revoked" results.
14161 # 3: Consult CRLite and enforce "Not Revoked" results, but defer to OCSP for "Revoked".
14162 - name: security.pki.crlite_mode
14163   type: RelaxedAtomicUint32
14164   value: 3
14165   mirror: always
14167 - name: security.tls.version.min
14168   type: RelaxedAtomicUint32
14169   value: 3
14170   mirror: always
14172 - name: security.tls.version.max
14173   type: RelaxedAtomicUint32
14174   value: 4
14175   mirror: always
14177 - name: security.tls.version.enable-deprecated
14178   type: RelaxedAtomicBool
14179   value: false
14180   mirror: always
14182 - name: security.tls.version.fallback-limit
14183   type: RelaxedAtomicUint32
14184   value: 4
14185   mirror: always
14187 # Turn off post-handshake authentication for TLS 1.3 by default,
14188 # until the incompatibility with HTTP/2 is resolved:
14189 # https://tools.ietf.org/html/draft-davidben-http2-tls13-00
14190 - name: security.tls.enable_post_handshake_auth
14191   type: RelaxedAtomicBool
14192   value: false
14193   mirror: always
14195 # Probability of GREASEing a TLS connection with ECH (0-100)
14196 # 0 means never GREASE, 100 means always GREASE
14197 - name: security.tls.ech.grease_probability
14198   type: RelaxedAtomicUint32
14199   value: 100
14200   mirror: always
14202 # Whether to apply ECH GREASE settings to HTTP3/QUIC connections
14203 - name: security.tls.ech.grease_http3
14204   type: RelaxedAtomicBool
14205   value: true
14206   mirror: always
14208 # Whether to retry connections without ECH Grease
14209 - name: security.tls.ech.disable_grease_on_fallback
14210   type: RelaxedAtomicBool
14211   value: false
14212   mirror: always
14214 # ECH GREASE Padding target (1-255)
14215 - name: security.tls.ech.grease_size
14216   type: RelaxedAtomicUint32
14217   value: 100
14218   mirror: always
14220 # Whether to apply GREASE settings to HTTP3/QUIC connections
14221 - name: security.tls.grease_http3_enable
14222   type: RelaxedAtomicBool
14223   value: false
14224   mirror: always
14225   rust: true
14227 - name: security.tls.hello_downgrade_check
14228   type: RelaxedAtomicBool
14229   value: true
14230   mirror: always
14232 - name: security.tls.enable_delegated_credentials
14233   type: RelaxedAtomicBool
14234   value: true
14235   mirror: always
14237 - name: security.tls.enable_0rtt_data
14238   type: RelaxedAtomicBool
14239   value: true
14240   mirror: always
14242 - name: security.ssl.treat_unsafe_negotiation_as_broken
14243   type: RelaxedAtomicBool
14244   value: false
14245   mirror: always
14247 - name: security.ssl.require_safe_negotiation
14248   type: RelaxedAtomicBool
14249   value: false
14250   mirror: always
14252 - name: security.ssl.enable_false_start
14253   type: RelaxedAtomicBool
14254   value: true
14255   mirror: always
14257 - name: security.ssl.enable_alpn
14258   type: RelaxedAtomicBool
14259   value: true
14260   mirror: always
14262 - name: security.ssl.disable_session_identifiers
14263   type: RelaxedAtomicBool
14264   value: false
14265   mirror: always
14267 - name: security.ssl3.ecdhe_rsa_aes_128_gcm_sha256
14268   type: RelaxedAtomicBool
14269   value: true
14270   mirror: always
14272 - name: security.ssl3.ecdhe_ecdsa_aes_128_gcm_sha256
14273   type: RelaxedAtomicBool
14274   value: true
14275   mirror: always
14277 - name: security.ssl3.ecdhe_ecdsa_chacha20_poly1305_sha256
14278   type: RelaxedAtomicBool
14279   value: true
14280   mirror: always
14282 - name: security.ssl3.ecdhe_rsa_chacha20_poly1305_sha256
14283   type: RelaxedAtomicBool
14284   value: true
14285   mirror: always
14287 - name: security.ssl3.ecdhe_ecdsa_aes_256_gcm_sha384
14288   type: RelaxedAtomicBool
14289   value: true
14290   mirror: always
14292 - name: security.ssl3.ecdhe_rsa_aes_256_gcm_sha384
14293   type: RelaxedAtomicBool
14294   value: true
14295   mirror: always
14297 - name: security.ssl3.ecdhe_rsa_aes_128_sha
14298   type: RelaxedAtomicBool
14299   value: true
14300   mirror: always
14302 - name: security.ssl3.ecdhe_ecdsa_aes_128_sha
14303   type: RelaxedAtomicBool
14304   value: @IS_NOT_EARLY_BETA_OR_EARLIER@
14305   mirror: always
14307 - name: security.ssl3.ecdhe_rsa_aes_256_sha
14308   type: RelaxedAtomicBool
14309   value: true
14310   mirror: always
14312 - name: security.ssl3.ecdhe_ecdsa_aes_256_sha
14313   type: RelaxedAtomicBool
14314   value: @IS_NOT_EARLY_BETA_OR_EARLIER@
14315   mirror: always
14317 - name: security.ssl3.dhe_rsa_aes_128_sha
14318   type: RelaxedAtomicBool
14319   value: false
14320   mirror: always
14322 - name: security.ssl3.dhe_rsa_aes_256_sha
14323   type: RelaxedAtomicBool
14324   value: false
14325   mirror: always
14327 - name: security.ssl3.rsa_aes_128_sha
14328   type: RelaxedAtomicBool
14329   value: true
14330   mirror: always
14332 - name: security.ssl3.rsa_aes_256_sha
14333   type: RelaxedAtomicBool
14334   value: true
14335   mirror: always
14337 - name: security.ssl3.rsa_aes_128_gcm_sha256
14338   type: RelaxedAtomicBool
14339   value: true
14340   mirror: always
14342 - name: security.ssl3.rsa_aes_256_gcm_sha384
14343   type: RelaxedAtomicBool
14344   value: true
14345   mirror: always
14347 - name: security.ssl3.deprecated.rsa_des_ede3_sha
14348   type: RelaxedAtomicBool
14349   value: true
14350   mirror: always
14352 - name: security.tls13.aes_128_gcm_sha256
14353   type: RelaxedAtomicBool
14354   value: true
14355   mirror: always
14357 - name: security.tls13.chacha20_poly1305_sha256
14358   type: RelaxedAtomicBool
14359   value: true
14360   mirror: always
14362 - name: security.tls13.aes_256_gcm_sha384
14363   type: RelaxedAtomicBool
14364   value: true
14365   mirror: always
14367 #---------------------------------------------------------------------------
14368 # Prefs starting with "signon."
14369 #---------------------------------------------------------------------------
14370 - name: signon.usernameOnlyForm.enabled
14371   type: bool
14372   value: true
14373   mirror: always
14375 #---------------------------------------------------------------------------
14376 # Prefs starting with "slider."
14377 #---------------------------------------------------------------------------
14379 # Scrollbar snapping region.
14380 # - 0: off
14381 # - 1 and higher: slider thickness multiple
14382 - name: slider.snapMultiplier
14383   type: int32_t
14384 #ifdef XP_WIN
14385   value: 6
14386 #else
14387   value: 0
14388 #endif
14389   mirror: always
14391 #---------------------------------------------------------------------------
14392 # Prefs starting with "storage."
14393 #---------------------------------------------------------------------------
14395 # Whether to use a non-exclusive VFS.
14396 # By default we use the unix-excl VFS, for the following reasons:
14397 # 1. It improves compatibility with NFS shares, whose implementation
14398 #    is incompatible with SQLite's locking requirements (reliable fcntl), and
14399 #    in particular with WAL journaling.
14400 #    Bug 433129 attempted to automatically identify such file-systems,
14401 #    but a reliable way was not found and the fallback locking is slower than
14402 #    POSIX locking, so we do not want to do it by default.
14403 # 2. It allows wal mode to avoid the memory mapped -shm file, reducing the
14404 #    likelihood of SIGBUS failures when disk space is exhausted.
14405 # 3. It provides some protection from third party database tampering while a
14406 #    connection is open.
14407 # Note there's no win32-excl VFS, so this has no effect on Windows.
14408 - name: storage.sqlite.exclusiveLock.enabled
14409   type: RelaxedAtomicBool
14410   value: @IS_NOT_ANDROID@
14411   mirror: always
14413 #---------------------------------------------------------------------------
14414 # Prefs starting with "svg."
14415 #---------------------------------------------------------------------------
14417 # This pref controls whether the 'context-fill' and 'context-stroke' keywords
14418 # can be used in SVG-as-an-image in the content processes to use the fill/
14419 # stroke specified on the element that embeds the image. (These keywords are
14420 # always enabled in the chrome process, regardless of this pref.) Also, these
14421 # keywords are currently not part of any spec, which is partly why we disable
14422 # them for web content.
14423 - name: svg.context-properties.content.enabled
14424   type: RelaxedAtomicBool
14425   value: false
14426   mirror: always
14428 # This pref controls whether the `prefers-color-scheme` value of SVG images
14429 # reacts to the embedder `color-scheme` in content.
14430 - name: svg.embedder-prefers-color-scheme.content.enabled
14431   type: RelaxedAtomicBool
14432   value: true
14433   mirror: always
14435 # Enables the 'context-fill' and 'context-stroke' keywords for particular
14436 # domains. We expect this list to be Mozilla-controlled properties, since the
14437 # 'context-*' keywords are not part of any spec. We expect to remove this
14438 # preference and the 'context-` keyword support entirely in the
14439 # not-too-distant future when a standardized alternative ships. This preference
14440 # is _not_ for allowing web content to use these keywords. For performance
14441 # reasons, the list of domains in this preference should remain short in
14442 # length.
14443 - name: svg.context-properties.content.allowed-domains
14444   type: String
14445   value: ""
14446   mirror: never
14448 # Is support for the new getBBox method from SVG 2 enabled?
14449 # See https://svgwg.org/svg2-draft/single-page.html#types-SVGBoundingBoxOptions
14450 - name: svg.new-getBBox.enabled
14451   type: bool
14452   value: false
14453   mirror: always
14455 # Whether SVGGraphicsElement.nearestViewportElement and SVGGraphicsElement.farthestViewportElement are enabled.
14456 - name: svg.nearestAndFarthestViewportElement.enabled
14457   type: bool
14458   value: @IS_NOT_EARLY_BETA_OR_EARLIER@
14459   mirror: always
14461 # Tweak which elements are allowed in <svg:use> subtrees, and in which
14462 # circumstances. See RemoveForbiddenNodes in SVGUseElement.cpp for the spec
14463 # text.
14465 # - 0: Don't restrict ever.
14466 # - 1: Restrict only cross-document.
14467 # - 2/other: restrict always.
14469 # We allow the behavior to be configurable via this pref. Our chosen default
14470 # value forbids non-graphical content in <svg:use> clones of cross-document
14471 # elements. This is a compromise between our more-permissive pre-existing
14472 # behavior (which SVG 2 seems to call for, and maps to pref value 0) and the
14473 # behavior of other UAs (which SVG 1.1 seems to call for, and maps to pref
14474 # value 2).
14475 - name: svg.use-element.graphics-element-restrictions
14476   type: int32_t
14477   value: 1
14478   mirror: always
14480 # Whether to restrict <svg:use> element recursion levels.
14482 # - 0: Don't restrict ever.
14483 # - 1: Restrict everywhere
14484 # - 2/other: Restrict only in the parent process.
14486 - name: svg.use-element.recursive-clone-limit.enabled
14487   type: int32_t
14488   value: 2
14489   mirror: always
14491 # What is the recursion limit for svg use element cloning if enabled.
14492 - name: svg.use-element.recursive-clone-limit
14493   type: uint32_t
14494   value: 8
14495   mirror: always
14497 # Whether <svg:use> with a data: URL as href is allowed
14498 - name: svg.use-element.data-url-href.allowed
14499   type: bool
14500   value: false
14501   mirror: always
14503 #---------------------------------------------------------------------------
14504 # Prefs starting with "telemetry."
14505 #---------------------------------------------------------------------------
14507 - name: telemetry.number_of_site_origin.min_interval
14508   type: uint32_t
14509   value: 300000
14510   mirror: always
14512 - name: telemetry.fog.test.localhost_port
14513   type: RelaxedAtomicInt32
14514   value: 0
14515   mirror: always
14516   rust: true
14518 - name: telemetry.fog.test.activity_limit
14519   type: RelaxedAtomicUint32
14520   value: 120
14521   mirror: always
14522   rust: true
14524 - name: telemetry.fog.test.inactivity_limit
14525   type: RelaxedAtomicUint32
14526   value: 1200
14527   mirror: always
14528   rust: true
14530 - name: telemetry.fog.artifact_build
14531   type: RelaxedAtomicBool
14532   value: false
14533   mirror: always
14535 #---------------------------------------------------------------------------
14536 # Prefs starting with "test."
14537 #---------------------------------------------------------------------------
14539 - name: test.events.async.enabled
14540   type: RelaxedAtomicBool
14541   value: false
14542   mirror: always
14544 - name: test.mousescroll
14545   type: RelaxedAtomicBool
14546   value: false
14547   mirror: always
14549 #---------------------------------------------------------------------------
14550 # Prefs starting with "thread."
14551 #---------------------------------------------------------------------------
14553 # If control tasks aren't enabled, they get medium high priority.
14554 - name: threads.control_event_queue.enabled
14555   type: RelaxedAtomicBool
14556   value: true
14557   mirror: always
14559 # If the service is available, set threads to low-power mode when in the background.
14560 - name: threads.use_low_power.enabled
14561   type: RelaxedAtomicBool
14562   value: @IS_NIGHTLY_BUILD@
14563   mirror: always
14566 # If the process priority is set to background, put the main thread in the background.
14567 # Currently off by default.
14568 - name: threads.lower_mainthread_priority_in_background.enabled
14569   type: bool
14570   value: @IS_NIGHTLY_BUILD@
14571   mirror: always
14573 #---------------------------------------------------------------------------
14574 # Prefs starting with "timer."
14575 #---------------------------------------------------------------------------
14577 # Since our timestamp on macOS does not increment while the system is asleep, we
14578 # should ignore sleep/wake notifications to make timer thread process timers.
14579 - name: timer.ignore_sleep_wake_notifications
14580   type: RelaxedAtomicBool
14581 #ifdef XP_MACOSX
14582   value: true
14583 #else
14584   value: false
14585 #endif
14586   mirror: always
14588 # Amount of time by which it is always acceptable to delay the firing of a timer.
14589 # Any timer may be delayed by up to this amount in order to enable timers to be
14590 # bundled together for efficiency.
14591 - name: timer.minimum_firing_delay_tolerance_ms
14592   type: AtomicFloat
14593   value: 1.0
14594   mirror: always
14596 # Maximum amount of time by which it is ever acceptable to delay the firing of a timer.
14597 # Setting this to zero will effectively disable timer coalescing.
14598 - name: timer.maximum_firing_delay_tolerance_ms
14599   type: AtomicFloat
14600   value: 10000.0
14601   mirror: always
14603 #ifdef XP_WIN
14604   # Controls whether or not TimerThread will automatically increase the Windows timer
14605   # resolution when appropriate conditions are met.
14606 -   name: timer.auto_increase_timer_resolution
14607     type: RelaxedAtomicBool
14608 #ifdef NIGHTLY_BUILD
14609     value: true
14610 #else
14611     value: false
14612 #endif
14613     mirror: always
14614 #endif
14616 #---------------------------------------------------------------------------
14617 # Prefs starting with "toolkit."
14618 #---------------------------------------------------------------------------
14620 # Makes removeDirectory background task wait for the given milliseconds before removal.
14621 - name: toolkit.background_tasks.remove_directory.testing.sleep_ms
14622   type: RelaxedAtomicUint32
14623   value: 0
14624   mirror: always
14626 # Returns true if BHR is disabled.
14627 - name: toolkit.content-background-hang-monitor.disabled
14628   type: bool
14629   value: false
14630   mirror: always
14632 - name: toolkit.scrollbox.smoothScroll
14633   type: RelaxedAtomicBool
14634   value: true
14635   mirror: always
14637 - name: toolkit.scrollbox.horizontalScrollDistance
14638   type: RelaxedAtomicInt32
14639   value: 5
14640   mirror: always
14642 - name: toolkit.scrollbox.verticalScrollDistance
14643   type: RelaxedAtomicInt32
14644   value: 3
14645   mirror: always
14647 # The lateWriteChecksStage and fastShutdownStage below represent the stage
14648 # of shutdown after which we (for lateWriteChecksStage) crash / gather
14649 # telemetry data on file writes, or (for fastShutdownStage) we call _exit(0).
14650 # Higher values are earlier during shutdown, and the full enumeration can
14651 # be found in AppShutdown.h in the AppShutdownPhase enum.
14652 - name: toolkit.shutdown.lateWriteChecksStage
14653   type: int32_t
14654 #ifdef MOZ_CODE_COVERAGE
14655   value: 0
14656 #else
14657   value: 2
14658 #endif
14659   mirror: always
14661 # See the comment above toolkit.shutdown.lateWriteChecksStage. A higher value
14662 # for this pref means we call _exit(0) earlier during shutdown.
14663 - name: toolkit.shutdown.fastShutdownStage
14664   type: int32_t
14665 #if !defined(DEBUG) && !defined(MOZ_ASAN) && !defined(MOZ_TSAN) && !defined(MOZ_CODE_COVERAGE) && !defined(MOZ_VALGRIND) && !defined(MOZ_PROFILE_GENERATE) && !defined(JS_STRUCTURED_SPEW)
14666   value: 1
14667 #else
14668   value: 0
14669 #endif
14670   mirror: always
14672 # Sending each remote accumulation immediately places undue strain on the IPC
14673 # subsystem. Batch the remote accumulations for a period of time before sending
14674 # them all at once. This value was chosen as a balance between data timeliness
14675 # and performance (see bug 1218576).
14676 - name: toolkit.telemetry.ipcBatchTimeout
14677   type: uint32_t
14678   value: 2000
14679   mirror: always
14681 - name: toolkit.telemetry.geckoview.batchDurationMS
14682   type: RelaxedAtomicUint32
14683   value: 5000
14684   mirror: always
14686 - name: toolkit.telemetry.geckoview.maxBatchStalenessMS
14687   type: RelaxedAtomicUint32
14688   value: 60000
14689   mirror: always
14691 - name: toolkit.telemetry.geckoview.streaming
14692   type: RelaxedAtomicBool
14693   value: false
14694   mirror: always
14696 - name: toolkit.telemetry.testing.overrideProductsCheck
14697   type: RelaxedAtomicBool
14698   value: false
14699   mirror: always
14701 #---------------------------------------------------------------------------
14702 # Prefs starting with "ui."
14703 #---------------------------------------------------------------------------
14705 - name: ui.key.generalAccessKey
14706   type: int32_t
14707   value: -1
14708   mirror: always
14710 # Use 17 for Ctrl, 18 for Alt, 91 or 224 for Meta, 0 for none.
14711 - name: ui.key.accelKey
14712   type: uint32_t
14713 #ifdef XP_MACOSX
14714   value: 224
14715 #else
14716   value: 17
14717 #endif
14718   mirror: always
14720 # See above for the key codes to use.
14721 - name: ui.key.menuAccessKey
14722   type: uint32_t
14723 #ifdef XP_MACOSX
14724   value: 0
14725 #else
14726   value: 18
14727 #endif
14728   mirror: always
14730 # Only used if generalAccessKey is -1.
14731 - name: ui.key.chromeAccess
14732   type: int32_t
14733 #ifdef XP_MACOSX
14734   # 0 = disabled, 1 = Shift, 2 = Ctrl, 4 = Alt, 3 =  ctrl+shift, 8 = Meta
14735   value: 2
14736 #else
14737   # 0 = disabled, 1 = Shift, 2 = Ctrl, 4 = Alt, 5 =  Alt+Shift, 8 = Win
14738   value: 4
14739 #endif
14740   mirror: always
14742 # Only used if generalAccessKey is -1.
14743 - name: ui.key.contentAccess
14744   type: int32_t
14745 #ifdef XP_MACOSX
14746   # 0 = disabled, 1 = Shift, 2 = Ctrl, 4 = Alt, 3 = ctrl+shift, 8 = Meta
14747   value: 6
14748 #else
14749   # 0 = disabled, 1 = Shift, 2 = Ctrl, 4 = Alt, 5 =  Alt+Shift, 8 = Win
14750   value: 5
14751 #endif
14752   mirror: always
14754 # Does the access key by itself focus the menu bar?
14755 - name: ui.key.menuAccessKeyFocuses
14756   type: bool
14757 #if defined(XP_WIN) || defined(MOZ_WIDGET_GTK)
14758   # On Windows and Linux, we now default to showing the menu bar only when alt
14759   # is pressed.
14760   value: true
14761 #else
14762   value: false
14763 #endif
14764   mirror: always
14766 # Whether native key bindings in the environment or builtin shortcut key
14767 # definitions in Gecko are used first in <input> and <textarea>
14768 - name: ui.key.textcontrol.prefer_native_key_bindings_over_builtin_shortcut_key_definitions
14769   type: bool
14770   value: true
14771   mirror: always
14773 #ifdef MOZ_WIDGET_GTK
14774 # Only GtkTextView (native multiline text viewer/editor) supports "select-all"
14775 # signal so that we cannot know "select-all" key bindings only with GtkEntry.
14776 # When this pref is set to true, if a key combination does not cause any
14777 # signals in GtkEntry, try to check the key combination is mapped to
14778 # "select-all" in GtkTextView or not.  If it's mapped to other commands, they
14779 # are just ignored.
14780 - name: ui.key.use_select_all_in_single_line_editor
14781   type: bool
14782   value: true
14783   mirror: always
14784 #endif
14786 # Duration of timeout of incremental search in menus (ms).  0 means infinite.
14787 - name: ui.menu.incremental_search.timeout
14788   type: uint32_t
14789   value: 1000
14790   mirror: always
14792 # If true, all popups won't hide automatically on blur
14793 - name: ui.popup.disable_autohide
14794   type: RelaxedAtomicBool
14795   value: false
14796   mirror: always
14798 # Negate scroll, true will make the mouse scroll wheel move the screen the
14799 # same direction as with most desktops or laptops.
14800 - name: ui.scrolling.negate_wheel_scroll
14801   type: RelaxedAtomicBool
14802   value: @IS_ANDROID@
14803   mirror: always
14805 # If the user puts a finger down on an element and we think the user might be
14806 # executing a pan gesture, how long do we wait before tentatively deciding the
14807 # gesture is actually a tap and activating the target element?
14808 - name: ui.touch_activation.delay_ms
14809   type: int32_t
14810   value: 100
14811   mirror: always
14813 # If the user has clicked an element, how long do we keep the :active state
14814 # before it is cleared by the mouse sequences fired after a
14815 # touchstart/touchend.
14816 - name: ui.touch_activation.duration_ms
14817   type: int32_t
14818   value: 10
14819   mirror: always
14821 # Prevent system colors from being exposed to CSS or canvas.
14822 - name: ui.use_standins_for_native_colors
14823   type: RelaxedAtomicBool
14824   value: false
14825   mirror: always
14827 # Whether context menus should only appear on mouseup instead of mousedown,
14828 # on OSes where they normally appear on mousedown (macOS, *nix).
14829 # Note: ignored on Windows (context menus always use mouseup).
14830 - name: ui.context_menus.after_mouseup
14831   type: bool
14832   value: false
14833   mirror: always
14835 # Whether click-hold context menus are enabled.
14836 - name: ui.click_hold_context_menus
14837   type: RelaxedAtomicBool
14838   value: false
14839   mirror: always
14841 # How long to wait for a drag gesture before displaying click-hold context menu,
14842 # in milliseconds.
14843 - name: ui.click_hold_context_menus.delay
14844   type: RelaxedAtomicInt32
14845   value: 500
14846   mirror: always
14848 # When enabled, the touch.radius and mouse.radius prefs allow events to be
14849 # dispatched to nearby elements that are sensitive to the event. See
14850 # PositionedEventTargeting.cpp. The 'mm' prefs define a rectangle around the
14851 # nominal event target point within which we will search for suitable elements.
14852 # 'visitedWeight' is a percentage weight; a value > 100 makes a visited link be
14853 # treated as further away from the event target than it really is, while a
14854 # value < 100 makes a visited link be treated as closer to the event target
14855 # than it really is.
14857 - name: ui.touch.radius.enabled
14858   type: bool
14859   value: @IS_ANDROID@
14860   mirror: always
14862 - name: ui.touch.radius.topmm
14863   type: uint32_t
14864 #ifdef ANDROID
14865   value: 2
14866 #else
14867   value: 12
14868 #endif
14869   mirror: always
14871 - name: ui.touch.radius.rightmm
14872   type: uint32_t
14873 #ifdef ANDROID
14874   value: 3
14875 #else
14876   value: 8
14877 #endif
14878   mirror: always
14880 - name: ui.touch.radius.bottommm
14881   type: uint32_t
14882 #ifdef ANDROID
14883   value: 2
14884 #else
14885   value: 4
14886 #endif
14887   mirror: always
14889 - name: ui.touch.radius.leftmm
14890   type: uint32_t
14891 #ifdef ANDROID
14892   value: 3
14893 #else
14894   value: 8
14895 #endif
14896   mirror: always
14898 - name: ui.touch.radius.visitedWeight
14899   type: uint32_t
14900   value: 120
14901   mirror: always
14903 - name: ui.mouse.radius.enabled
14904   type: bool
14905   value: @IS_ANDROID@
14906   mirror: always
14908 - name: ui.mouse.radius.topmm
14909   type: uint32_t
14910 #ifdef ANDROID
14911   value: 2
14912 #else
14913   value: 12
14914 #endif
14915   mirror: always
14917 - name: ui.mouse.radius.rightmm
14918   type: uint32_t
14919 #ifdef ANDROID
14920   value: 3
14921 #else
14922   value: 8
14923 #endif
14924   mirror: always
14926 - name: ui.mouse.radius.bottommm
14927   type: uint32_t
14928 #ifdef ANDROID
14929   value: 2
14930 #else
14931   value: 4
14932 #endif
14933   mirror: always
14935 - name: ui.mouse.radius.leftmm
14936   type: uint32_t
14937 #ifdef ANDROID
14938   value: 3
14939 #else
14940   value: 8
14941 #endif
14942   mirror: always
14944 - name: ui.mouse.radius.visitedWeight
14945   type: uint32_t
14946   value: 120
14947   mirror: always
14949 - name: ui.mouse.radius.reposition
14950   type: bool
14951   value: @IS_ANDROID@
14952   mirror: always
14954 # When true, the ui.mouse.radius.* prefs will only affect simulated mouse
14955 # events generated by touch input. When false, the prefs will be used for all
14956 # mouse events.
14957 - name: ui.mouse.radius.inputSource.touchOnly
14958   type: bool
14959   value: true
14960   mirror: always
14962 # When true, selection is not collapased at the right click point if there is a
14963 # non-collapsed selection.
14964 - name: ui.mouse.right_click.collapse_selection.stop_if_non_collapsed_selection
14965   type: bool
14966   value: true
14967   mirror: always
14969 # When true, selection is not collapsed at the right click point if the clicked
14970 # node is not editable.
14971 - name: ui.mouse.right_click.collapse_selection.stop_if_non_editable_node
14972   type: bool
14973   value: false
14974   mirror: always
14976 #---------------------------------------------------------------------------
14977 # Prefs starting with "urlclassifier."
14978 #---------------------------------------------------------------------------
14980 # Update server response timeout for Safe Browsing.
14981 - name: urlclassifier.update.response_timeout_ms
14982   type: uint32_t
14983   value: 30000
14984   mirror: always
14986 # Download update timeout for Safe Browsing.
14987 - name: urlclassifier.update.timeout_ms
14988   type: uint32_t
14989   value: 90000
14990   mirror: always
14992 #---------------------------------------------------------------------------
14993 # Prefs starting with "view_source."
14994 #---------------------------------------------------------------------------
14996 - name: view_source.editor.external
14997   type: bool
14998   value: false
14999   mirror: always
15001 - name: view_source.wrap_long_lines
15002   type: bool
15003   value: @IS_ANDROID@
15004   mirror: always
15006 - name: view_source.syntax_highlight
15007   type: bool
15008   value: true
15009   mirror: always
15011 - name: view_source.tab_size
15012   type: int32_t
15013   value: 4
15014   mirror: always
15016 #---------------------------------------------------------------------------
15017 # Prefs starting with "webgl." (for pref access from Worker threads)
15018 #---------------------------------------------------------------------------
15020 - name: webgl.1.allow-core-profiles
15021   type: RelaxedAtomicBool
15022 #ifdef XP_MACOSX
15023   value: true
15024 #else
15025   value: false
15026 #endif
15027   mirror: always
15029 - name: webgl.angle.force-d3d11
15030   type: RelaxedAtomicBool
15031   value: false
15032   mirror: always
15034 - name: webgl.angle.try-d3d11
15035   type: RelaxedAtomicBool
15036 #ifdef XP_WIN
15037   value: true
15038 #else
15039   value: false
15040 #endif
15041   mirror: always
15043 - name: webgl.angle.force-warp
15044   type: RelaxedAtomicBool
15045   value: false
15046   mirror: always
15048 - name: webgl.auto-flush
15049   type: RelaxedAtomicBool
15050   value: true
15051   mirror: always
15053 - name: webgl.auto-flush.gl
15054   type: RelaxedAtomicBool
15055   value: false
15056   mirror: always
15058 - name: webgl.can-lose-context-in-foreground
15059   type: RelaxedAtomicBool
15060   value: true
15061   mirror: always
15063 - name: webgl.cgl.multithreaded
15064   type: RelaxedAtomicBool
15065   value: true
15066   mirror: always
15068 - name: webgl.colorspaces.prototype
15069   type: RelaxedAtomicBool
15070   value: false
15071   mirror: always
15073 - name: webgl.debug.incomplete-tex-color
15074   type: RelaxedAtomicUint32
15075   value: 0
15076   mirror: always
15078 - name: webgl.default-antialias
15079   type: RelaxedAtomicBool
15080   value: @IS_NOT_ANDROID@
15081   mirror: always
15083 - name: webgl.default-no-alpha
15084   type: RelaxedAtomicBool
15085   value: false
15086   mirror: always
15088 - name: webgl.disable-angle
15089   type: RelaxedAtomicBool
15090   value: false
15091   mirror: always
15093 - name: webgl.disable-wgl
15094   type: RelaxedAtomicBool
15095   value: false
15096   mirror: always
15098 - name: webgl.dxgl.enabled
15099   type: RelaxedAtomicBool
15100 #ifdef XP_WIN
15101   value: true
15102 #else
15103   value: false
15104 #endif
15105   mirror: always
15107 - name: webgl.dxgl.needs-finish
15108   type: RelaxedAtomicBool
15109   value: false
15110   mirror: always
15112 - name: webgl.disable-fail-if-major-performance-caveat
15113   type: RelaxedAtomicBool
15114   value: true
15115   mirror: always
15117 - name: webgl.disable-DOM-blit-uploads
15118   type: RelaxedAtomicBool
15119 #if defined(MOZ_AARCH64) && defined(XP_MACOSX)
15120   value: true
15121 #else
15122   value: false
15123 #endif
15124   mirror: always
15126 - name: webgl.disabled
15127   type: RelaxedAtomicBool
15128   value: false
15129   mirror: always
15131 - name: webgl.enable-debug-renderer-info
15132   type: RelaxedAtomicBool
15133   value: true
15134   mirror: always
15136 - name: webgl.enable-draft-extensions
15137   type: RelaxedAtomicBool
15138   value: false
15139   mirror: always
15141 - name: webgl.enable-privileged-extensions
15142   type: RelaxedAtomicBool
15143   value: false
15144   mirror: always
15146 - name: webgl.enable-renderer-query
15147   type: RelaxedAtomicBool
15148   value: true
15149   mirror: always
15151 - name: webgl.enable-surface-texture
15152   type: RelaxedAtomicBool
15153   value: true
15154   mirror: always
15156 - name: webgl.enable-webgl2
15157   type: RelaxedAtomicBool
15158   value: true
15159   mirror: always
15161 - name: webgl.fake-verts.max
15162   type: RelaxedAtomicUint32
15163   value: 10*1000*1000  # 10M as vec4 is count*4*4 = 160MB
15164   mirror: always
15166 # Only works on Mac for now.
15167 - name: webgl.forbid-hardware
15168   type: RelaxedAtomicBool
15169   value: false
15170   mirror: always
15172 # Only works on Mac for now.
15173 - name: webgl.forbid-software
15174   type: RelaxedAtomicBool
15175   value: true  # It's generally better to encourage fallback to e.g. canvas2d.
15176   mirror: always
15178 - name: webgl.force-enabled
15179   type: RelaxedAtomicBool
15180   value: false
15181   mirror: always
15183 - name: webgl.force-index-validation
15184   type: RelaxedAtomicInt32
15185   value: 0
15186   mirror: always
15188 - name: webgl.gl_khr_no_error
15189   type: RelaxedAtomicBool
15190 #ifdef XP_WIN
15191   value: false
15192 #elif defined(MOZ_WIDGET_GTK)
15193   # Bug 1862039 - All versions of Mesa as of Nov 2023 have issues with
15194   # GL_CONTEXT_FLAG_NO_ERROR_BIT. We should aspire to reenable it at
15195   # some point when the bugs are fixed.
15196   # See also https://gitlab.freedesktop.org/mesa/mesa/-/issues/10062
15197   value: false
15198 #else
15199   value: true
15200 #endif
15201   mirror: always
15203 - name: webgl.lose-context-on-memory-pressure
15204   type: RelaxedAtomicBool
15205   value: false
15206   mirror: always
15208 - name: webgl.max-contexts
15209   type: RelaxedAtomicUint32
15210   value: 1000
15211   mirror: always
15213 - name: webgl.max-contexts-per-principal
15214   type: RelaxedAtomicUint32
15215   value: 300
15216   mirror: always
15218 - name: webgl.max-size-per-texture-mib
15219   type: RelaxedAtomicUint32
15220   value: 1024
15221   mirror: always
15223 - name: webgl.max-vert-ids-per-draw
15224   type: RelaxedAtomicUint32
15225   value: 30*1000*1000
15226   mirror: always
15228 - name: webgl.max-warnings-per-context
15229   type: RelaxedAtomicUint32
15230   value: 32
15231   mirror: always
15233 - name: webgl.min_capability_mode
15234   type: RelaxedAtomicBool
15235   value: false
15236   mirror: always
15238 - name: webgl.msaa-force
15239   type: RelaxedAtomicBool
15240   value: false
15241   mirror: always
15243 - name: webgl.msaa-samples
15244   type: RelaxedAtomicUint32
15245   value: 4
15246   mirror: always
15248 - name: webgl.out-of-process
15249   type: RelaxedAtomicBool
15250 # (When reading the next line, know that preprocessor.py doesn't
15251 # understand parentheses, but && is higher precedence than ||.)
15252   value: true
15253   mirror: always
15255 - name: webgl.out-of-process.worker
15256   type: RelaxedAtomicBool
15257 # (When reading the next line, know that preprocessor.py doesn't
15258 # understand parentheses, but && is higher precedence than ||.)
15259   value: true
15260   mirror: always
15262 - name: webgl.out-of-process.force
15263   type: RelaxedAtomicBool
15264   value: false
15265   mirror: always
15267 - name: webgl.out-of-process.shmem-size
15268   type: RelaxedAtomicUint32
15269   value: 100000 # 100KB
15270   mirror: always
15272 - name: webgl.out-of-process.async-present
15273   type: RelaxedAtomicBool
15274   value: true
15275   mirror: always
15277 # Forces async present to wait for a sync, even while using remote textures.
15278 - name: webgl.out-of-process.async-present.force-sync
15279   type: RelaxedAtomicBool
15280   value: false
15281   mirror: always
15283 #if defined(MOZ_WIDGET_ANDROID)
15284 - name: webgl.out-of-process.enable-ahardwarebuffer
15285   type: bool
15286   value: false
15287   mirror: once
15288 #endif
15290 # Override the blocklist to assume that GL is threadsafe.
15291 - name: webgl.threadsafe-gl.force-enabled
15292   type: bool
15293   value: false
15294   mirror: once
15296 # Override the blocklist to assume that GL is not threadsafe.
15297 - name: webgl.threadsafe-gl.force-disabled
15298   type: bool
15299   value: false
15300   mirror: once
15302 - name: webgl.use-canvas-render-thread
15303   type: bool
15304   value: true
15305   mirror: once
15307 - name: webgl.override-unmasked-renderer
15308   type: DataMutexString
15309   value: ""
15310   mirror: always
15312 - name: webgl.override-unmasked-vendor
15313   type: DataMutexString
15314   value: ""
15315   mirror: always
15317 - name: webgl.power-preference-override
15318   type: RelaxedAtomicInt32
15319   value: 0
15320   mirror: always
15322 - name: webgl.prefer-16bpp
15323   type: RelaxedAtomicBool
15324   value: false
15325   mirror: always
15327 - name: webgl.sanitize-unmasked-renderer
15328   type: RelaxedAtomicBool
15329   value: true
15330   mirror: always
15332 - name: webgl.allow-immediate-queries
15333   type: RelaxedAtomicBool
15334   value: false
15335   mirror: always
15337 - name: webgl.allow-fb-invalidation
15338   type: RelaxedAtomicBool
15339   value: false
15340   mirror: always
15343 - name: webgl.perf.max-warnings
15344   type: RelaxedAtomicInt32
15345   value: 0
15346   mirror: always
15348 - name: webgl.perf.max-acceptable-fb-status-invals
15349   type: RelaxedAtomicInt32
15350   value: 0
15351   mirror: always
15353 - name: webgl.perf.spew-frame-allocs
15354   type: RelaxedAtomicBool
15355   value: true
15356   mirror: always
15358 #---------------------------------------------------------------------------
15359 # Prefs starting with "widget."
15360 #---------------------------------------------------------------------------
15362 # Global user preference for disabling native theme in content processes.
15364 # NOTE(emilio): When changing this make sure to update the non_native_theme
15365 # entry in python/mozbuild/mozbuild/mozinfo.py and test_fission_autostart.py
15366 - name: widget.non-native-theme.enabled
15367   type: RelaxedAtomicBool
15368   value: true
15369   mirror: always
15371 # Whether the non-native theme should always use system colors. Useful mostly
15372 # for testing forced colors mode.
15373 - name: widget.non-native-theme.always-high-contrast
15374   type: RelaxedAtomicBool
15375   value: false
15376   mirror: always
15378 # The style of scrollbars to use. Here are the current options:
15380 #   0: Default platform scrollbar style.
15381 #   1: macOS scrollbars
15382 #   2: GTK scrollbars
15383 #   3: Android scrollbars
15384 #   4: Windows 10 scrollbars
15385 #   5: Windows 11 scrollbars
15387 # Note that switching to non-default scrollbars is experimental and other
15388 # scrollbar-related prefs may interfere with the experience. For example,
15389 # setting the GTK thumb size may have no effect when using non-GTK scrollbars
15390 # on GTK.
15391 - name: widget.non-native-theme.scrollbar.style
15392   type: uint32_t
15393   value: 0
15394   mirror: always
15396 # An override that allows to override the default platform size. The size in CSS
15397 # pixels at full zoom of the minimum scrollbar width.
15398 - name: widget.non-native-theme.scrollbar.size.override
15399   type: uint32_t
15400   value: 0
15401   mirror: always
15403 # Whether we should use themed values for dark scrollbars.
15404 - name: widget.non-native-theme.scrollbar.dark-themed
15405   type: RelaxedAtomicBool
15406   value: true
15407   mirror: always
15409 # Whether the active thumb color should always use the themed colors, even if
15410 # dark scrollbars are in use.
15411 - name: widget.non-native-theme.scrollbar.active-always-themed
15412   type: RelaxedAtomicBool
15413   value: true
15414   mirror: always
15416 # Whether we use the Windows CSS scrollbar sizes, or the scrollbar sizes
15417 # defined above.
15418 - name: widget.non-native-theme.win.scrollbar.use-system-size
15419   type: bool
15420   value: true
15421   mirror: always
15423 # Whether Windows 11 scrollbars are always drawn with the thinner "overlay"
15424 # scrollbar style.
15425 - name: widget.non-native-theme.win11.scrollbar.force-overlay-style
15426   type: bool
15427   value: false
15428   mirror: always
15430 # The amount of space that the thumb should fill the scrollbar, from zero to
15431 # one.
15432 - name: widget.non-native-theme.gtk.scrollbar.thumb-size
15433   type: float
15434   value: 0.75
15435   mirror: always
15437 # The minimum size of the scroll thumb, in the scrollbar direction.
15438 - name: widget.non-native-theme.gtk.scrollbar.thumb-cross-size
15439   type: uint32_t
15440   value: 40
15441   mirror: always
15443 # Whether the thumb should be rounded for the non-native scrollbars.
15444 - name: widget.non-native-theme.gtk.scrollbar.round-thumb
15445   type: bool
15446   value: true
15447   mirror: always
15449 # Whether buttons shouldn't be suppressed for non-native scrollbars.
15450 - name: widget.non-native-theme.gtk.scrollbar.allow-buttons
15451   type: bool
15452   value: false
15453   mirror: always
15455 # Whether we should use the default accent color or the theme-provided one for
15456 # content (e.g. for form controls and CSS system colors).
15458 # Turned off on Windows, for now (we always use the default blue-ish
15459 # accent-color there). We might want to turn this on there, though it's worth
15460 # thinking on what the behavior should be for grey-ish accent colors (which are
15461 # a thing on Windows and can cause confusion with things like disabled form
15462 # controls). Maybe it's just fine.
15463 - name: widget.non-native-theme.use-theme-accent
15464   type: RelaxedAtomicBool
15465 #ifdef XP_WIN
15466   value: false
15467 #else
15468   value: true
15469 #endif
15470   mirror: always
15472 # Whether we should try to use WebRender to render widgets.
15473 - name: widget.non-native-theme.webrender
15474   type: bool
15475   value: true
15476   mirror: always
15478 # Whether the outline style should be one big stroke or two contrasting strokes
15479 - name: widget.non-native-theme.solid-outline-style
15480   type: bool
15481   value: false
15482   mirror: always
15484 # Preference to disable dark scrollbar implementation.
15485 # This is mainly for testing because dark scrollbars have to be semi-
15486 # transparent, but many reftests expect scrollbars to look identical
15487 # among different backgrounds.
15488 # However, some users may want to disable this as well.
15489 - name: widget.disable-dark-scrollbar
15490   type: bool
15491   value: false
15492   mirror: always
15494 - name: widget.window-transforms.disabled
15495   type: RelaxedAtomicBool
15496   value: false
15497   mirror: always
15499 #ifdef XP_MACOSX
15501 # Whether to shift by the menubar height on fullscreen mode.
15502 # 0: never
15503 # 1: always
15504 # 2: auto (tries to detect when it is needed)
15505 - name: widget.macos.shift-by-menubar-on-fullscreen
15506   type: RelaxedAtomicUint32
15507   value: 2
15508   mirror: always
15510 - name: widget.macos.native-context-menus
15511   type: RelaxedAtomicBool
15512   value: true
15513   mirror: always
15514 #endif
15516 # Whether native GTK context menus are enabled.
15517 # Disabled because at the very least there's missing custom icon support.
15518 - name: widget.gtk.native-context-menus
15519   type: RelaxedAtomicBool
15520   value: false
15521   mirror: always
15523 # Whether we use overlay scrollbars on GTK.
15524 - name: widget.gtk.overlay-scrollbars.enabled
15525   type: RelaxedAtomicBool
15526   value: true
15527   mirror: always
15529 # Whether we hide the pointer while typing on Linux
15530 - name: widget.gtk.hide-pointer-while-typing.enabled
15531   type: RelaxedAtomicBool
15532   value: true
15533   mirror: always
15535 # Whether we honor the scrollbar colors from the gtk theme.
15536 - name: widget.gtk.theme-scrollbar-colors.enabled
15537   type: bool
15538   value: true
15539   mirror: always
15541 # Whether libadwaita colors are used rather than the default ones.
15542 - name: widget.gtk.libadwaita-colors.enabled
15543   type: bool
15544   value: true
15545   mirror: always
15547 # Whether we enable rounded bottom corners on GTK by default.
15549 # The implementation is a bit hacky (see details in bug 1850827) so behind a
15550 # pref for emergency purposes.
15551 - name: widget.gtk.rounded-bottom-corners.enabled
15552   type: bool
15553   value: false
15554   mirror: always
15555   rust: true
15557 # Whether selection colors for the non-system theme get passed from the system
15558 # GTK theme.
15559 - name: widget.gtk.alt-theme.selection
15560   type: bool
15561   value: true
15562   mirror: always
15564 # Whether form control accent colors for the non-system theme get passed from
15565 # the system GTK theme.
15566 - name: widget.gtk.alt-theme.accent
15567   type: bool
15568   value: true
15569   mirror: always
15571 # Whether the scrollbar thumb active color from the non-system theme gets
15572 # passed from the system GTK theme.
15573 - name: widget.gtk.alt-theme.scrollbar_active
15574   type: bool
15575   value: true
15576   mirror: always
15578 # Whether we should try to grab the pointer on popups.
15579 #  0: Never
15580 #  1: Always
15581 #  2: Auto (depending on the system)
15582 - name: widget.gtk.grab-pointer
15583   type: int32_t
15584   value: 2
15585   mirror: always
15587 # Whether we should try ignore bogus leave-notify events from the window
15588 # manager.
15589 #  0: Never
15590 #  1: Always
15591 #  2: Auto (depending on the system)
15592 - name: widget.gtk.ignore-bogus-leave-notify
15593   type: int32_t
15594   value: 2
15595   mirror: always
15597 # Whether to use gtk high contrast themes to disable content styling like on
15598 # windows high contrast mode.
15599 - name: widget.content.gtk-high-contrast.enabled
15600   type: bool
15601   value: true
15602   mirror: always
15604 #ifdef MOZ_WAYLAND
15605 - name: widget.wayland.fractional-scale.enabled
15606   type: bool
15607   value: false
15608   mirror: once
15610 # Use opaque region for MozContainer wl_surface
15611 - name: widget.wayland.opaque-region.enabled
15612   type: bool
15613   value: true
15614   mirror: once
15616 # Use frame callback based vsync
15617 - name: widget.wayland.vsync.enabled
15618   type: bool
15619   value: true
15620   mirror: once
15622 # Whether to keep firing vsync at layout.throttled_frame_rate after we've been
15623 # occluded.
15624 - name: widget.wayland.vsync.keep-firing-at-idle
15625   type: bool
15626   value: false
15627   mirror: always
15628 #endif
15630 #ifdef MOZ_WIDGET_GTK
15631 # Whether to use DMABuf backend.
15632 - name: widget.dmabuf.enabled
15633   type: bool
15634   value: true
15635   mirror: once
15637 # Whether to override the DMABuf blocklist.
15638 - name: widget.dmabuf.force-enabled
15639   type: bool
15640   value: false
15641   mirror: once
15643 #ifdef NIGHTLY_BUILD
15644 # Keep those pref hidden on non-nightly builds to avoid people accidentally
15645 # turning it on.
15647 # Use DMABuf for content textures.
15648 # For testing purposes only.
15649 - name: widget.dmabuf-textures.enabled
15650   type: RelaxedAtomicBool
15651   value: false
15652   mirror: always
15653 #endif
15655 # Use DMABuf backend for WebGL.
15656 - name: widget.dmabuf-webgl.enabled
15657   type: RelaxedAtomicBool
15658   value: true
15659   mirror: always
15661 # Use gdk_window_move_to_rect to move Wayland popups when available.
15662 - name: widget.wayland.use-move-to-rect
15663   type: bool
15664   value: true
15665   mirror: once
15667 # The time we should spend on a DBUS call to the FileManager1 interface before
15668 # giving up and trying an alternative method.
15670 # -1 for the default system timeout, INT_MAX for "infinite time".
15672 # This happens right now on the main thread so 1 second should be enough, we
15673 # should consider moving it to a background task and just use the default
15674 # timeout.
15675 - name: widget.gtk.file-manager-show-items-timeout-ms
15676   type: int32_t
15677   value: 1000
15678   mirror: always
15680 # The timeout we should spend on a DBUS call to the Settings proxy before
15681 # giving up.
15683 # -1 for the default system timeout, INT_MAX for "infinite time".
15685 # This runs just once, but during startup, so make sure it doesn't take too
15686 # long. Three seconds should be way more than enough, and if we don't get the
15687 # reply on time then the only potential issue is that we use a light instead of
15688 # dark interface or vice versa.
15689 - name: widget.gtk.settings-portal-timeout-ms
15690   type: int32_t
15691   value: 3000
15692   mirror: always
15694 # Whether to use gtk portal for the file picker.
15695 #  - 0: never
15696 #  - 1: always
15697 #  - 2: auto (true for flatpak or GTK_USE_PORTAL=1, false otherwise)
15698 - name: widget.use-xdg-desktop-portal.file-picker
15699   type: int32_t
15700   value: 2
15701   mirror: always
15703 # Whether to use gtk portal for the mime handler.
15704 #  - 0: never
15705 #  - 1: always
15706 #  - 2: auto (for now only true for flatpak, see bug 1516290)
15707 - name: widget.use-xdg-desktop-portal.mime-handler
15708   type: int32_t
15709   value: 2
15710   mirror: always
15712 # Whether to try to use XDG portal for settings / look-and-feel information.
15713 # https://flatpak.github.io/xdg-desktop-portal/#gdbus-org.freedesktop.portal.Settings
15714 #  - 0: never
15715 #  - 1: always
15716 #  - 2: auto
15717 - name: widget.use-xdg-desktop-portal.settings
15718   type: int32_t
15719   value: 2
15720   mirror: always
15722 # Whether to use XDG portal for geolocation.
15723 # https://flatpak.github.io/xdg-desktop-portal/#gdbus-org.freedesktop.portal.Location
15724 #  - 0: never
15725 #  - 1: always
15726 #  - 2: auto
15727 - name: widget.use-xdg-desktop-portal.location
15728   type: int32_t
15729   value: 2
15730   mirror: always
15731 # Whether to use XDG portal for opening to a file.
15732 # https://flatpak.github.io/xdg-desktop-portal/#gdbus-org.freedesktop.portal.OpenURI
15733 #  - 0: never
15734 #  - 1: always
15735 #  - 2: auto (true for flatpak or GTK_USE_PORTAL=1, false otherwise)
15736 - name: widget.use-xdg-desktop-portal.open-uri
15737   type: int32_t
15738   value: 2
15739   mirror: always
15740 #endif
15742 #ifdef XP_WIN
15743 # WindowsUIUtils::Share to wait for user action on Windows share dialog
15744 # `true` means the promise resolves when user completes or cancels the share
15745 # action. This can be unsafe since selecting copy action fires no DataPackage
15746 # event as of 21H1.
15747 # `false` means the promise resolves when the share data is passed to
15748 # DataPackage.
15749 # This affects the behavior of `navigator.share()`.
15750 - name: widget.windows.share.wait_action.enabled
15751   type: bool
15752   value: false
15753   mirror: always
15755 - name: widget.windows.window_occlusion_tracking.enabled
15756   type: bool
15757   value: true
15758   mirror: always
15760 # Whether overlay scrollbars respect the system settings.
15761 # Note that these can be overridden by the ui.useOverlayScrollbars pref.
15762 - name: widget.windows.overlay-scrollbars.enabled
15763   type: bool
15764   value: true
15765   mirror: always
15767 # Whether we allow accessing the UWP system color pallete.
15768 - name: widget.windows.uwp-system-colors.enabled
15769   type: bool
15770   value: true
15771   mirror: always
15773 # Whether we use the accent color for highlight as some other UWP apps do.
15775 # false for now since it can cause some contrast-with-background issues
15776 # specially with grey accents, see bug 1776588.
15777 - name: widget.windows.uwp-system-colors.highlight-accent
15778   type: bool
15779   value: false
15780   mirror: always
15782 - name: widget.windows.window_occlusion_tracking_display_state.enabled
15783   type: bool
15784   value: false
15785   mirror: always
15787 - name: widget.windows.window_occlusion_tracking_session_lock.enabled
15788   type: bool
15789   value: true
15790   mirror: always
15792 # Whether to give explorer.exe a delated nudge to recalculate the fullscreenness
15793 # of a window after maximizing it.
15794 - name: widget.windows.fullscreen_remind_taskbar
15795   type: RelaxedAtomicBool
15796   value: true
15797   mirror: always
15799 # Whether to open the Windows file and folder pickers "remotely" (in a utility
15800 # process) or "locally" (in the main process).
15802 # Valid values:
15803 #  *  0: auto (possibly release-channel-dependent)
15804 #  *  1: remotely, falling back to locally
15805 #  *  2: remotely, no fallback
15806 #  * -1: locally, no fallback
15807 - name: widget.windows.utility_process_file_picker
15808   type: RelaxedAtomicInt32
15809   value: 0
15810   mirror: always
15812 # The number of messages of each type to keep for display in
15813 # about:windows-messages
15814 - name: widget.windows.messages_to_log
15815   type: RelaxedAtomicUint32
15816   value: 6
15817   mirror: always
15819 # Whether to flush the Ole clipboard synchronously.
15820 # Possible values are:
15821 #  * 0: never
15822 #  * 1: always
15823 #  * 2 (or others): when needed
15824 - name: widget.windows.sync-clipboard-flush
15825   type: uint32_t
15826   value: 2
15827   mirror: always
15829 # Whether to apply a hack (adjusting the window height by -1px and back again)
15830 # upon first entering fullscreen intended to work around a bug exhibited under
15831 # on some Windows 11 machines under some configurations. (See bug 1763981.)
15833 # Semantics:
15834 #  * 0: never
15835 #  * 1: always
15836 #  * 2: auto
15837 - name: widget.windows.apply-dwm-resize-hack
15838   type: RelaxedAtomicInt32
15839   value: 2
15840   mirror: always
15841 #endif
15843 # Whether to disable SwipeTracker (e.g. swipe-to-nav).
15844 - name: widget.disable-swipe-tracker
15845   type: bool
15846   value: false
15847   mirror: always
15849 # Various metrics to control SwipeTracker.
15850 - name: widget.swipe.velocity-twitch-tolerance
15851   type: float
15852   value: 0.0000001f
15853   mirror: always
15855 - name: widget.swipe.success-velocity-contribution
15856   type: float
15857   value: 0.05f
15858   mirror: always
15860 # When using pixel deltas for pan input, how many pixels do we consider a whole
15861 # swipe?
15863 # The values for this pref are derived from trial and error in an effort to
15864 # match the existing behavior on the respective platforms.
15865 - name: widget.swipe.pixel-size
15866   type: float
15867 #if defined(XP_MACOSX)
15868   value: 550.0f
15869 #else
15870   value: 1100.0f
15871 #endif
15872   mirror: always
15874 # When using page deltas for pan input, how many pages do we consider a whole
15875 # swipe navigation?
15877 # This is only relevant for GTK which is as of right now the only platform
15878 # which supports page-based pan gestures.
15879 - name: widget.swipe.page-size
15880   type: float
15881   value: 40.0f
15882   mirror: always
15884 - name: widget.transparent-windows
15885   type: bool
15886   value: true
15887   mirror: once
15889 # Whether the clipboard cached are used while getting system clipboard data.
15890 - name: widget.clipboard.use-cached-data.enabled
15891   type: bool
15892 #if defined(XP_MACOSX)
15893   value: true
15894 #else
15895   value: false
15896 #endif
15897   mirror: always
15899 # Whether to render in to a child SurfaceControl rather than directly into the SurfaceView
15900 - name: widget.android.use-surfacecontrol
15901   type: bool
15902   value: false
15903   mirror: once
15905 #---------------------------------------------------------------------------
15906 # Prefs starting with "zoom."
15907 #---------------------------------------------------------------------------
15909 - name: zoom.maxPercent
15910   type: uint32_t
15911 #ifdef ANDROID
15912   value: 400
15913 #else
15914   value: 500
15915 #endif
15916   mirror: always
15918 - name: zoom.minPercent
15919   type: uint32_t
15920 #ifdef ANDROID
15921   value: 20
15922 #else
15923   value: 30
15924 #endif
15925   mirror: always
15927 #---------------------------------------------------------------------------
15928 # End of prefs
15929 #---------------------------------------------------------------------------