Backed out 8 changesets (bug 1901851, bug 1728331) for causing bc failures in browser...
[gecko.git] / modules / libpref / init / StaticPrefList.yaml
blob3de1e588e1e00acac9d2bdac1a5f0ca66fc0e01a
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
39 #     set_spidermonkey_pref: <false | startup | always> # optional
41 # - `name` is the name of the pref, without double-quotes, as it appears
42 #   in about:config. It is used in most libpref API functions (from both C++
43 #   and JS code).
45 # - `type` is one of `bool`, `int32_t`, `uint32_t`, `float`, an atomic version
46 #   of one of those, `String` or `DataMutexString`. Note that float prefs are
47 #   stored internally as strings. The C++ preprocessor doesn't like template
48 #   syntax in a macro argument, so use the typedefs defined in
49 #   StaticPrefsBase.h; for example, use `RelaxedAtomicBool` instead of
50 #   `Atomic<bool, Relaxed>`.
52 # - `value` is the default value. Its type should be appropriate for
53 #   <cpp-type>, otherwise the generated code will fail to compile. A complex
54 #   C++ numeric expressions like `60 * 60` (which the YAML parser cannot treat
55 #   as an integer or float) is treated as a string and passed through without
56 #   change, which is useful.
58 # - `mirror` indicates how the pref value is mirrored into a C++ variable.
60 #   * `never`: There is no C++ mirror variable. The pref value can only be
61 #     accessed via the standard libpref API functions.
63 #   * `once`: The pref value is mirrored into a variable at startup; the
64 #     mirror variable is left unchanged after that. (The exact point at which
65 #     all `once` mirror variables are set is when the first `once` mirror
66 #     variable is accessed, via its getter function.) This is mostly useful for
67 #     graphics prefs where we often don't want a new pref value to apply until
68 #     restart. Otherwise, this update policy is best avoided because its
69 #     behaviour can cause confusion and bugs.
71 #   * `always`: The mirror variable is always kept in sync with the pref value.
72 #     This is the most common choice.
74 #   When a mirror variable is present, a getter will be created that can access
75 #   it. Using the getter function to read the pref's value has the two
76 #   following advantages over the normal API functions.
78 #   * A direct variable access is faster than a hash table lookup.
80 #   * A mirror variable can be accessed off the main thread. If a pref *is*
81 #     accessed off the main thread, it should have an atomic type. Assertions
82 #     enforce this.
84 #   Note that Rust code must access the mirror variable directly, rather than
85 #   via the getter function.
87 # - `do_not_use_directly` indicates if `_DoNotUseDirectly` should be appended to
88 #   the name of the getter function. This is simply a naming convention
89 #   indicating that there is some other wrapper getter function that should be
90 #   used in preference to the normal static pref getter. Defaults to `false` if
91 #   not present. Cannot be used with a `never` mirror value, because there is
92 #   no getter function in that case.
94 # - `include` names a header file that must be included for the pref value to
95 #   compile correctly, e.g. because it refers to a code constant. System
96 #   headers should be surrounded with angle brackets, e.g. `<cmath>`.
98 # - `rust` indicates if the mirror variable is used by Rust code. If so, it
99 #   will be usable via the `static_prefs::pref!` macro, e.g.
100 #   `static_prefs::pref!("layout.css.cross-fade.enabled")`.
102 # - `set_spidermonkey_pref` indicates whether SpiderMonkey boilerplate code
103 #   should be generated for this pref. If this is set to 'startup', the
104 #   pref on the SpiderMonkey side is only set during process startup. If set to
105 #   'always', the SpiderMonkey pref value is also updated when this pref is
106 #   changed at runtime.
107 #   This option is only valid for javascript.options.* prefs.
109 # The getter function's base name is the same as the pref's name, but with
110 # '.' or '-' chars converted to '_', to make a valid identifier. For example,
111 # the getter for `foo.bar_baz` is `foo_bar_baz()`. This is ugly but clear,
112 # and you can search for both the pref name and the getter using the regexp
113 # /foo.bar.baz/. Suffixes are added as follows:
115 # - If the `mirror` value is `once`, `_AtStartup` is appended, to indicate the
116 #   value was obtained at startup.
118 # - If the `do_not_use_directly` value is true, `_DoNotUseDirectly` is
119 #   appended.
121 # Preprocessor
122 # ------------
123 # Note finally that this file is preprocessed by preprocessor.py, not the C++
124 # preprocessor. As a result, the following things may be surprising.
126 # - YAML comments start with a '#', so putting a comment on the same line as a
127 #   preprocessor directive is dubious. E.g. avoid lines like `#define X 3 #
128 #   three` because the ` # three` will be part of `X`.
130 # - '@' use is required for substitutions to occur. E.g. with `#define FOO 1`,
131 #   `FOO` won't be replaced with `1` unless it has '@' chars around it.
133 # - Spaces aren't permitted between the leading '#' and the name of a
134 #   directive, e.g. `#ifdef XYZ` works but `# ifdef XYZ` does not.
136 # Please indent all prefs defined within #ifdef/#ifndef conditions. This
137 # improves readability, particular for conditional blocks that exceed a single
138 # screen. But note that the leading '-' in a definition must remain in the
139 # first column for it to be valid YAML.
141 #ifdef RELEASE_OR_BETA
142 #define IS_NOT_RELEASE_OR_BETA false
143 #else
144 #define IS_NOT_RELEASE_OR_BETA true
145 #endif
147 #ifdef NIGHTLY_BUILD
148 #define IS_NIGHTLY_BUILD      true
149 #define IS_NOT_NIGHTLY_BUILD  false
150 #else
151 #define IS_NIGHTLY_BUILD      false
152 #define IS_NOT_NIGHTLY_BUILD  true
153 #endif
155 #if defined(NIGHTLY_BUILD) || defined(MOZ_DEV_EDITION)
156 #define IS_NIGHTLY_OR_DEV_EDITION true
157 #else
158 #define IS_NIGHTLY_OR_DEV_EDITION false
159 #endif
161 #ifdef MOZILLA_OFFICIAL
162 #define IS_NOT_MOZILLA_OFFICIAL false
163 #else
164 #define IS_NOT_MOZILLA_OFFICIAL true
165 #endif
167 #ifdef EARLY_BETA_OR_EARLIER
168 #define IS_EARLY_BETA_OR_EARLIER true
169 #define IS_NOT_EARLY_BETA_OR_EARLIER false
170 #else
171 #define IS_EARLY_BETA_OR_EARLIER false
172 #define IS_NOT_EARLY_BETA_OR_EARLIER true
173 #endif
175 #if defined(MOZ_DEV_EDITION) || defined(EARLY_BETA_OR_EARLIER)
176 #define DEV_EDITION_OR_EARLY_BETA_OR_EARLIER true
177 #else
178 #define DEV_EDITION_OR_EARLY_BETA_OR_EARLIER false
179 #endif
181 #ifdef ANDROID
182 #define IS_ANDROID true
183 #define IS_NOT_ANDROID false
184 #else
185 #define IS_ANDROID false
186 #define IS_NOT_ANDROID true
187 #endif
189 #ifdef XP_WIN
190 #define IS_XP_WIN true
191 #define IS_NOT_XP_WIN false
192 #else
193 #define IS_XP_WIN false
194 #define IS_NOT_XP_WIN true
195 #endif
197 #ifdef XP_MACOSX
198 #define IS_XP_MACOSX true
199 #define IS_NOT_XP_MACOSX false
200 #else
201 #define IS_XP_MACOSX false
202 #define IS_NOT_XP_MACOSX true
203 #endif
205 #---------------------------------------------------------------------------
206 # Prefs starting with "accessibility."
207 #---------------------------------------------------------------------------
209 # Tab focus model bit field:
210 # 1 focuses text controls, 2 focuses other form elements, 4 adds links.
211 # Most users will want 1, 3, or 7. On macOS we expose a checkbox to alter
212 # between 7 and 3.
213 - name: accessibility.tabfocus
214   type: int32_t
215   value: 7
216   mirror: always
218 # Only on mac tabfocus is expected to handle UI widgets as well as web content.
219 # FIXME(emilio): This is weird now that we have a lot of HTML in our pages.
220 - name: accessibility.tabfocus_applies_to_xul
221   type: bool
222   value: @IS_XP_MACOSX@
223   mirror: always
225 - name: accessibility.accesskeycausesactivation
226   type: bool
227   value: true
228   mirror: always
230 - name: accessibility.monoaudio.enable
231   type: RelaxedAtomicBool
232   value: false
233   mirror: always
235 - name: accessibility.browsewithcaret
236   type: RelaxedAtomicBool
237   value: false
238   mirror: always
240 - name: accessibility.AOM.enabled
241   type: bool
242   value: false
243   mirror: always
245 - name: accessibility.ARIAElementReflection.enabled
246   type: bool
247   value: @IS_NIGHTLY_BUILD@
248   mirror: always
250 # Whether form controls and images should be focusable with mouse, in content
251 # documents.
253 # This matches historical macOS / Safari behavior.
255 #  * 0: never
256 #  * 1: always
257 #  * 2: on content documents
258 - name: accessibility.mouse_focuses_formcontrol
259   type: int32_t
260 #ifdef XP_MACOSX
261   value: 2
262 #else
263   value: 1
264 #endif
265   mirror: always
267 # Whether to enable support for the UI Automation API on Windows.
268 - name: accessibility.uia.enable
269   type: bool
270   value: false
271   mirror: always
273 # Whether to avoid accessibility activation on Windows shortly after clipboard
274 # copy.
276 # Possible values are:
277 #  * 0: never
278 #  * 1: always
279 #  * 2 (or others): when needed
280 - name: accessibility.windows.suppress-after-clipboard-copy
281   type: uint32_t
282   value: 2
283   mirror: always
285 # Whether to avoid accessibility activation on Windows shortly after max button
286 # hit-test for the "snap layout" feature.
288 # Possible values are:
289 #  * 0: never
290 #  * 1: always
291 #  * 2 (or others): when needed
292 - name: accessibility.windows.suppress-for-snap-layout
293   type: uint32_t
294   value: 2
295   mirror: always
297 #---------------------------------------------------------------------------
298 # Prefs starting with "alerts."
299 #---------------------------------------------------------------------------
301 # Whether to use platform-specific backends for showing desktop notifications.
302 # If no such backend is available, or if the pref is false, then XUL
303 # notifications are used.
304 - name: alerts.useSystemBackend
305   type: bool
306   value: true
307   mirror: always
309 #if defined(XP_WIN)
310  # On Windows, a COM Surrogate notification server receives notification events
311  # and can relaunch the application after it has been closed.
312 - name: alerts.useSystemBackend.windows.notificationserver.enabled
313   type: bool
314   value: true
315   mirror: never
316 #endif
318 #ifdef ANDROID
319   #---------------------------------------------------------------------------
320   # Prefs starting with "android."
321   #---------------------------------------------------------------------------
323   # On Android, we want an opaque background to be visible under the page,
324   # so layout should not force a default background.
325 -   name: android.widget_paints_background
326     type: RelaxedAtomicBool
327     value: true
328     mirror: always
330 -   name: android.touch_resampling.enabled
331     type: RelaxedAtomicBool
332     value: true
333     mirror: always
335 #endif
337 #---------------------------------------------------------------------------
338 # Prefs starting with "apz."
339 # The apz prefs are explained in AsyncPanZoomController.cpp
340 #---------------------------------------------------------------------------
342 # amount we zoom in for a double tap gesture if we couldn't find any content
343 # based rect to zoom to
344 - name: apz.doubletapzoom.defaultzoomin
345   type: AtomicFloat
346   value: 1.2f
347   mirror: always
349 - name: apz.scrollbarbuttonrepeat.enabled
350   type: RelaxedAtomicBool
351   value: true
352   mirror: always
354 # After a user has executed a pan gesture, we may receive momentum phase pan
355 # gestures from the OS. This specifies how long we should wait following the
356 # pan end gesture for possible momentum phase pan gestures before sending the
357 # TransformEnd notification.
358 - name: apz.scrollend-event.content.delay_ms
359   type: RelaxedAtomicInt32
360   value: 100
361   mirror: always
363 - name: apz.wr.activate_all_scroll_frames
364   type: RelaxedAtomicBool
365   value: false
366   mirror: always
368 - name: apz.wr.activate_all_scroll_frames_when_fission
369   type: RelaxedAtomicBool
370   value: true
371   mirror: always
373 - name: apz.prefer_jank_minimal_displayports
374   type: RelaxedAtomicBool
375   value: true
376   mirror: always
378 - name: apz.allow_double_tap_zooming
379   type: RelaxedAtomicBool
380   value: true
381   mirror: always
383 - name: apz.mac.enable_double_tap_zoom_touchpad_gesture
384   type: RelaxedAtomicBool
385   value: true
386   mirror: always
388 - name: apz.allow_immediate_handoff
389   type: RelaxedAtomicBool
390   value: false
391   mirror: always
393 - name: apz.allow_zooming
394   type: RelaxedAtomicBool
395   value: true
396   mirror: always
398 - name: apz.max_zoom
399   type: AtomicFloat
400   value: 10.0f
401   mirror: always
403 - name: apz.min_zoom
404   type: AtomicFloat
405   value: 0.25f
406   mirror: always
408 - name: apz.allow_zooming_out
409   type: RelaxedAtomicBool
410   value: false
411   mirror: always
413 - name: apz.android.chrome_fling_physics.friction
414   type: AtomicFloat
415   value: 0.015f
416   mirror: always
418 - name: apz.android.chrome_fling_physics.inflexion
419   type: AtomicFloat
420   value: 0.35f
421   mirror: always
423 - name: apz.android.chrome_fling_physics.stop_threshold
424   type: AtomicFloat
425   value: 0.1f
426   mirror: always
428 - name: apz.autoscroll.enabled
429   type: RelaxedAtomicBool
430   value: true
431   mirror: always
433 - name: apz.axis_lock.breakout_angle
434   type: AtomicFloat
435   value: float(M_PI / 8.0)    # 22.5 degrees
436   mirror: always
437   include: <cmath>
439 - name: apz.axis_lock.breakout_threshold
440   type: AtomicFloat
441   value: 1.0f / 32.0f
442   mirror: always
444 - name: apz.axis_lock.direct_pan_angle
445   type: AtomicFloat
446   value: float(M_PI / 3.0)    # 60 degrees
447   mirror: always
448   include: <cmath>
450 - name: apz.axis_lock.lock_angle
451   type: AtomicFloat
452   value: float(M_PI / 6.0)    # 30 degrees
453   mirror: always
454   include: <cmath>
456 # Whether to lock touch scrolling to one axis at a time. When a new
457 # axis lock mode is added, the APZCAxisLockCompatTester GTest shoud
458 # be updated to include the lock mode value.
459 # 0 = FREE (No locking at all)
460 # 1 = STANDARD (Once locked, remain locked until scrolling ends)
461 # 2 = STICKY (Allow lock to be broken, with hysteresis)
462 # 3 = DOMINANT_AXIS (Only allow movement on one axis at a time, only
463 #     applies to touchpad scrolling)
464 - name: apz.axis_lock.mode
465   type: RelaxedAtomicInt32
466 #if defined(XP_MACOSX)
467   value: 3
468 #else
469   value: 2
470 #endif
471   mirror: always
473 - name: apz.content_response_timeout
474   type: RelaxedAtomicInt32
475   value: 400
476   mirror: always
478 - name: apz.danger_zone_x
479   type: RelaxedAtomicInt32
480   value: 50
481   mirror: always
483 - name: apz.danger_zone_y
484   type: RelaxedAtomicInt32
485   value: 100
486   mirror: always
488 - name: apz.disable_for_scroll_linked_effects
489   type: RelaxedAtomicBool
490   value: false
491   mirror: always
493 - name: apz.displayport_expiry_ms
494   type: RelaxedAtomicUint32
495   value: 15000
496   mirror: always
498 - name: apz.drag.enabled
499   type: RelaxedAtomicBool
500   value: true
501   mirror: always
503 - name: apz.drag.touch.enabled
504   type: RelaxedAtomicBool
505   value: true
506   mirror: always
508 - name: apz.enlarge_displayport_when_clipped
509   type: RelaxedAtomicBool
510   value: @IS_ANDROID@
511   mirror: always
513 # Test only.
514 - name: apz.fixed-margin-override.enabled
515   type: RelaxedAtomicBool
516   value: false
517   mirror: always
519 # Test only.
520 - name: apz.fixed-margin-override.bottom
521   type: RelaxedAtomicInt32
522   value: 0
523   mirror: always
525 # Test only.
526 - name: apz.fixed-margin-override.top
527   type: RelaxedAtomicInt32
528   value: 0
529   mirror: always
531 - name: apz.fling_accel_base_mult
532   type: AtomicFloat
533   value: 1.0f
534   mirror: always
536 - name: apz.fling_accel_supplemental_mult
537   type: AtomicFloat
538   value: 1.0f
539   mirror: always
541 - name: apz.fling_accel_min_fling_velocity
542   type: AtomicFloat
543   value: 1.5f
544   mirror: always
546 - name: apz.fling_accel_min_pan_velocity
547   type: AtomicFloat
548   value: 0.8f
549   mirror: always
551 - name: apz.fling_accel_max_pause_interval_ms
552   type: RelaxedAtomicInt32
553   value: 50
554   mirror: always
556 - name: apz.fling_curve_function_x1
557   type: float
558   value: 0.0f
559   mirror: once
561 - name: apz.fling_curve_function_x2
562   type: float
563   value: 1.0f
564   mirror: once
566 - name: apz.fling_curve_function_y1
567   type: float
568   value: 0.0f
569   mirror: once
571 - name: apz.fling_curve_function_y2
572   type: float
573   value: 1.0f
574   mirror: once
576 - name: apz.fling_curve_threshold_inches_per_ms
577   type: AtomicFloat
578   value: -1.0f
579   mirror: always
581 - name: apz.fling_friction
582   type: AtomicFloat
583   value: 0.002f
584   mirror: always
586 - name: apz.fling_min_velocity_threshold
587   type: AtomicFloat
588   value: 0.5f
589   mirror: always
591 - name: apz.fling_stop_on_tap_threshold
592   type: AtomicFloat
593   value: 0.05f
594   mirror: always
596 - name: apz.fling_stopped_threshold
597   type: AtomicFloat
598   value: 0.01f
599   mirror: always
601 - name: apz.touch_acceleration_factor_x
602   type: float
603   value: 1.0f
604   mirror: always
606 - name: apz.touch_acceleration_factor_y
607   type: float
608   value: 1.0f
609   mirror: always
611 #ifdef MOZ_WIDGET_GTK
612 -   name: apz.gtk.kinetic_scroll.enabled
613     type: RelaxedAtomicBool
614     value: true
615     mirror: always
617 -   name: apz.gtk.pangesture.enabled
618     type: RelaxedAtomicBool
619     value: true
620     mirror: always
622 # Mode to use when receiving pan gesture input.
624 #  * 0: Auto mode (uses the default behavior, subject to change).
625 #  * 1: Page mode: Uses gtk deltas as a percentage of the page size to scroll. This mode matches:
627 #    https://gitlab.gnome.org/GNOME/gtk/blob/c734c7e9188b56f56c3a504abee05fa40c5475ac/gtk/gtkrange.c#L3063-3074
629 #  * 2: Pixel mode: Uses gtk deltas as a fixed pixel multiplier. This mode matches e.g. GNOME web.
631 #    https://webkit-search.igalia.com/webkit/rev/215039ef09d6bfd6e088175bfe30788d95b9705d/Source/WebKit/Shared/gtk/WebEventFactory.cpp#265-296
632 #    (multiplied then by pixelsPerLineStep which in GNOME-web is 40).
633 -   name: apz.gtk.pangesture.delta_mode
634     type: uint32_t
635     value: 0
636     mirror: always
638 -   name: apz.gtk.pangesture.page_delta_mode_multiplier
639     type: float
640     value: 1.0f
641     mirror: always
643 -   name: apz.gtk.pangesture.pixel_delta_mode_multiplier
644     type: float
645     value: 40.0f
646     mirror: always
648 -   name: apz.gtk.touchpad_pinch.enabled
649     type: RelaxedAtomicBool
650     value: true
651     mirror: always
653 -   name: apz.gtk.touchpad_pinch.three_fingers.enabled
654     type: RelaxedAtomicBool
655     value: false
656     mirror: always
657 #endif
659 - name: apz.keyboard.enabled
660   type: bool
661   value: @IS_NOT_ANDROID@
662   mirror: once
664 - name: apz.keyboard.passive-listeners
665   type: RelaxedAtomicBool
666   value: @IS_NOT_ANDROID@
667   mirror: always
669 - name: apz.max_tap_time
670   type: RelaxedAtomicInt32
671   value: 300
672   mirror: always
674 - name: apz.max_velocity_inches_per_ms
675   type: AtomicFloat
676   value: -1.0f
677   mirror: always
679 - name: apz.max_velocity_queue_size
680   type: uint32_t
681   value: 5
682   mirror: once
684 - name: apz.min_skate_speed
685   type: AtomicFloat
686   value: 1.0f
687   mirror: always
689 - name: apz.minimap.enabled
690   type: RelaxedAtomicBool
691   value: false
692   mirror: always
694 - name: apz.one_touch_pinch.enabled
695   type: RelaxedAtomicBool
696   value: @IS_ANDROID@
697   mirror: always
699 - name: apz.overscroll.enabled
700   type: RelaxedAtomicBool
701 #if defined(XP_MACOSX) || defined(XP_WIN)
702   value: true
703 #else
704   value: @IS_NIGHTLY_BUILD@
705 #endif
706   mirror: always
708 # The "test async scroll offset" (used via reftest-async-scroll
709 # or nsIDOMWindowUtils.setAsyncScrollOffset()) can be used to
710 # trigger overscroll. Used for tests only.
711 - name: apz.overscroll.test_async_scroll_offset.enabled
712   type: RelaxedAtomicBool
713   value: false
714   mirror: always
716 - name: apz.overscroll.min_pan_distance_ratio
717   type: AtomicFloat
718   value: 1.0f
719   mirror: always
721 - name: apz.overscroll.stop_distance_threshold
722   type: AtomicFloat
723   value: 5.0f
724   mirror: always
726 - name: apz.overscroll.spring_stiffness
727   type: AtomicFloat
728   value: 200
729   mirror: always
731 - name: apz.overscroll.damping
732   type: AtomicFloat
733   value: 1.1
734   mirror: always
736 - name: apz.overscroll.max_velocity
737   type: AtomicFloat
738   value: 10
739   mirror: always
741 - name: apz.paint_skipping.enabled
742   type: RelaxedAtomicBool
743   value: true
744   mirror: always
746 # Fetch displayport updates early from the message queue.
747 - name: apz.pinch_lock.mode
748   type: RelaxedAtomicInt32
749   value: 2
750   mirror: always
752 - name: apz.pinch_lock.scroll_lock_threshold
753   type: AtomicFloat
754   value: 1.0f / 16.0f   # 1/16 inches
755   mirror: always
757 - name: apz.pinch_lock.span_breakout_threshold
758   type: AtomicFloat
759   value: 1.0f / 32.0f   # 1/32 inches
760   mirror: always
762 - name: apz.pinch_lock.span_lock_threshold
763   type: AtomicFloat
764   value: 1.0f / 32.0f   # 1/32 inches
765   mirror: always
767 - name: apz.pinch_lock.buffer_max_age
768   type: int32_t
769   value: 80   # milliseconds
770   mirror: once
772 - name: apz.popups.enabled
773   type: RelaxedAtomicBool
774   value: true
775   mirror: always
777 # Whether to print the APZC tree for debugging.
778 - name: apz.printtree
779   type: RelaxedAtomicBool
780   value: false
781   mirror: always
783 - name: apz.record_checkerboarding
784   type: RelaxedAtomicBool
785   value: @IS_NIGHTLY_BUILD@
786   mirror: always
788 - name: apz.second_tap_tolerance
789   type: AtomicFloat
790   value: 0.5f
791   mirror: always
793 # If this is true, APZ fully recalculates the scroll thumb size and
794 # position in the compositor. This leads to the size and position
795 # being more accurate in scenarios such as async zooming.
796 - name: apz.scrollthumb.recalc
797   type: RelaxedAtomicBool
798   value: true
799   mirror: always
801 - name: apz.test.fails_with_native_injection
802   type: RelaxedAtomicBool
803   value: false
804   mirror: always
806 - name: apz.test.logging_enabled
807   type: RelaxedAtomicBool
808   value: false
809   mirror: always
811 - name: apz.touch_move_tolerance
812   type: AtomicFloat
813   value: 0.1f
814   mirror: always
816 - name: apz.touch_start_tolerance
817   type: AtomicFloat
818   value: 0.1f
819   mirror: always
821 - name: apz.velocity_bias
822   type: AtomicFloat
823   value: 0.0f
824   mirror: always
826 - name: apz.velocity_relevance_time_ms
827   type: RelaxedAtomicUint32
828   value: 100
829   mirror: always
831 - name: apz.windows.force_disable_direct_manipulation
832   type: RelaxedAtomicBool
833   value: false
834   mirror: always
836 - name: apz.windows.use_direct_manipulation
837   type: RelaxedAtomicBool
838   value: true
839   mirror: always
841 - name: apz.windows.check_for_pan_gesture_conversion
842   type: RelaxedAtomicBool
843   value: true
844   mirror: always
846 - name: apz.x_skate_highmem_adjust
847   type: AtomicFloat
848   value: 0.0f
849   mirror: always
851 - name: apz.x_skate_size_multiplier
852   type: AtomicFloat
853   value: 1.25f
854   mirror: always
856 - name: apz.x_stationary_size_multiplier
857   type: AtomicFloat
858   value: 1.5f
859   mirror: always
861 - name: apz.y_skate_highmem_adjust
862   type: AtomicFloat
863   value: 0.0f
864   mirror: always
866 - name: apz.y_skate_size_multiplier
867   type: AtomicFloat
868 #if defined(MOZ_WIDGET_ANDROID)
869   value: 1.5f
870 #else
871   value: 3.5f
872 #endif
873   mirror: always
875 - name: apz.y_stationary_size_multiplier
876   type: AtomicFloat
877 #if defined(MOZ_WIDGET_ANDROID)
878   value: 1.5f
879 #else
880   value: 3.5f
881 #endif
882   mirror: always
884 - name: apz.zoom_animation_duration_ms
885   type: RelaxedAtomicInt32
886 #if defined(MOZ_WIDGET_ANDROID)
887   value: 250
888 #else
889   value: 350
890 #endif
891   mirror: always
893 - name: apz.scale_repaint_delay_ms
894   type: RelaxedAtomicInt32
895   value: 500
896   mirror: always
898 # Whether to use rounded external scroll offsets.
899 - name: apz.rounded_external_scroll_offset
900   type: bool
901   value: false
902   mirror: always
904 #---------------------------------------------------------------------------
905 # Prefs starting with "beacon."
906 #---------------------------------------------------------------------------
908 # Is support for Navigator.sendBeacon enabled?
909 - name: beacon.enabled
910   type: bool
911   value: true
912   mirror: always
914 #---------------------------------------------------------------------------
915 # Prefs starting with "bidi."
916 #---------------------------------------------------------------------------
918 # Whether delete and backspace should immediately delete characters not
919 # visually adjacent to the caret, or adjust the visual position of the caret
920 # on the first keypress and delete the character on a second keypress
921 - name: bidi.edit.delete_immediately
922   type: bool
923   value: true
924   mirror: always
926 # Bidi caret movement style:
927 # 0 = logical
928 # 1 = visual
929 # 2 = visual, but logical during selection
930 - name: bidi.edit.caret_movement_style
931   type: int32_t
932 #if !defined(XP_LINUX) && defined(NIGHTLY_BUILD)
933   value: 1
934 #else
935   value: 2 # See Bug 1638240
936 #endif
937   mirror: always
939 # Bidi numeral style:
940 # 0 = nominalnumeralBidi *
941 # 1 = regularcontextnumeralBidi
942 # 2 = hindicontextnumeralBidi
943 # 3 = arabicnumeralBidi
944 # 4 = hindinumeralBidi
945 # 5 = persiancontextnumeralBidi
946 # 6 = persiannumeralBidi
947 - name: bidi.numeral
948   type: RelaxedAtomicUint32
949   value: 0
950   mirror: always
952 # Bidi text type
953 # 1 = charsettexttypeBidi *
954 # 2 = logicaltexttypeBidi
955 # 3 = visualtexttypeBidi
956 - name: bidi.texttype
957   type: RelaxedAtomicUint32
958   value: 1
959   mirror: always
961 # Bidi direction
962 # 1 = directionLTRBidi *
963 # 2 = directionRTLBidi
964 - name: bidi.direction
965   type: RelaxedAtomicUint32
966   value: 1
967   mirror: always
969 # Setting this pref to |true| forces Bidi UI menu items and keyboard shortcuts
970 # to be exposed, and enables the directional caret hook. By default, only
971 # expose it for bidi-associated system locales.
972 - name: bidi.browser.ui
973   type: bool
974   value: false
975   mirror: always
977 #---------------------------------------------------------------------------
978 # Prefs starting with "browser."
979 #---------------------------------------------------------------------------
981 - name: browser.active_color
982   type: String
983   value: "#EE0000"
984   mirror: never
986 - name: browser.active_color.dark
987   type: String
988   value: "#FF6666"
989   mirror: never
991 - name: browser.anchor_color
992   type: String
993   value: "#0000EE"
994   mirror: never
996 # If you change this, you probably also want to change
997 # nsXPLookAndFeel::GenericDarkColor for MozNativehyperlinktext.
998 - name: browser.anchor_color.dark
999   type: String
1000   value: "#8C8CFF"
1001   mirror: never
1003 # See http://dev.w3.org/html5/spec/forms.html#attr-fe-autofocus
1004 - name: browser.autofocus
1005   type: bool
1006   value: true
1007   mirror: always
1009 - name: browser.cache.disk.enable
1010   type: RelaxedAtomicBool
1011   value: true
1012   mirror: always
1014 - name: browser.cache.memory.enable
1015   type: RelaxedAtomicBool
1016   value: true
1017   mirror: always
1019 # Limit of recent metadata we keep in memory for faster access, in KB.
1020 - name: browser.cache.disk.metadata_memory_limit
1021   type: RelaxedAtomicUint32
1022   value: 250   # 0.25 MB
1023   mirror: always
1025 # Does the user want smart-sizing?
1026 - name: browser.cache.disk.smart_size.enabled
1027   type: RelaxedAtomicBool
1028   value: true
1029   mirror: always
1031 # Disk cache capacity in kilobytes. It's used only when
1032 # browser.cache.disk.smart_size.enabled == false
1033 - name: browser.cache.disk.capacity
1034   type: RelaxedAtomicUint32
1035   value: 256000
1036   mirror: always
1038 # -1 = determine dynamically, 0 = none, n = memory capacity in kilobytes.
1039 - name: browser.cache.memory.capacity
1040   type: RelaxedAtomicInt32
1041   value: -1
1042   mirror: always
1044 # When smartsizing is disabled we could potentially fill all disk space by
1045 # cache data when the disk capacity is not set correctly. To avoid that we
1046 # check the free space every time we write some data to the cache. The free
1047 # space is checked against two limits. Once the soft limit is reached we start
1048 # evicting the least useful entries, when we reach the hard limit writing to
1049 # the entry fails.
1050 - name: browser.cache.disk.free_space_soft_limit
1051   type: RelaxedAtomicUint32
1052   value: 5 * 1024   # 5MB
1053   mirror: always
1055 - name: browser.cache.disk.free_space_hard_limit
1056   type: RelaxedAtomicUint32
1057   value: 1024    # 1MB
1058   mirror: always
1060 # The number of chunks we preload ahead of read. One chunk currently has
1061 # 256kB.
1062 - name: browser.cache.disk.preload_chunk_count
1063   type: RelaxedAtomicUint32
1064   value: 4    # 1 MB of read ahead
1065   mirror: always
1067 # Max-size (in KB) for entries in disk cache. Set to -1 for no limit.
1068 # (Note: entries bigger than 1/8 of disk-cache are never cached)
1069 - name: browser.cache.disk.max_entry_size
1070   type: RelaxedAtomicUint32
1071   value: 50 * 1024    # 50 MB
1072   mirror: always
1074 # Max-size (in KB) for entries in memory cache. Set to -1 for no limit.
1075 # (Note: entries bigger than than 90% of the mem-cache are never cached.)
1076 - name: browser.cache.memory.max_entry_size
1077   type: RelaxedAtomicInt32
1078   value: 5 * 1024
1079   mirror: always
1081 # Memory limit (in kB) for new cache data not yet written to disk. Writes to
1082 # the cache are buffered and written to disk on background with low priority.
1083 # With a slow persistent storage these buffers may grow when data is coming
1084 # fast from the network. When the amount of unwritten data is exceeded, new
1085 # writes will simply fail. We have two buckets, one for important data
1086 # (priority) like html, css, fonts and js, and one for other data like images,
1087 # video, etc.
1088 # Note: 0 means no limit.
1089 - name: browser.cache.disk.max_chunks_memory_usage
1090   type: RelaxedAtomicUint32
1091   value: 40 * 1024
1092   mirror: always
1093 - name: browser.cache.disk.max_priority_chunks_memory_usage
1094   type: RelaxedAtomicUint32
1095   value: 40 * 1024
1096   mirror: always
1099 # Number of seconds the cache spends writing pending data and closing files
1100 # after shutdown has been signalled. Past that time data is not written and
1101 # files are left open for the OS to clean up.
1102 - name: browser.cache.max_shutdown_io_lag
1103   type: RelaxedAtomicUint32
1104   value: 2
1105   mirror: always
1107 # After the max_shutdown_io_lag has passed, we will attempt to cancel
1108 # blocking IO (on windows). The CacheIOThread may pick up more blocking
1109 # tasks so we want to cancel those too. The main thread will be woken
1110 # up every shutdown_io_time_between_cancellations_ms to cancel the IO
1111 # on the other thread.
1112 - name: browser.cache.shutdown_io_time_between_cancellations_ms
1113   type: RelaxedAtomicUint32
1114   value: 5
1115   mirror: always
1117 # A percentage limit for media content type in the disk cache. When some entries
1118 # need to be evicted and media is over the limit, it's evicted first.
1119 - name: browser.cache.disk.content_type_media_limit
1120   type: RelaxedAtomicInt32
1121   value: 50
1122   mirror: always
1124 # How often to validate document in cache
1125 #   0 = once-per-session,
1126 #   1 = each-time,
1127 #   2 = never,
1128 #   3 = when-appropriate/automatically
1129 - name: browser.cache.check_doc_frequency
1130   type: RelaxedAtomicUint32
1131   value: 3
1132   mirror: always
1134 # Compression level for cached JavaScript bytecode
1135 #   0 = do not compress,
1136 #   1 = minimal compression,
1137 #   9 = maximal compression
1138 - name: browser.cache.jsbc_compression_level
1139   type: RelaxedAtomicUint32
1140   value: 0
1141   mirror: always
1143 # Whether tooltips are enabled.
1144 - name: browser.chrome.toolbar_tips
1145   type: bool
1146   value: true
1147   mirror: always
1149 # Whether tooltips are hidden on keydown.
1150 #  0: never
1151 #  1: always
1152 #  2: only on non-modifier keys
1153 - name: browser.chrome.toolbar_tips.hide_on_keydown
1154   type: uint32_t
1155 #if defined(XP_WIN)
1156   value: 0
1157 #else
1158   value: 2
1159 #endif
1160   mirror: always
1162 # DLP agent name, for display in the browser
1163 - name: browser.contentanalysis.agent_name
1164   type: String
1165   value: "A DLP agent"
1166   mirror: never
1168 # (optional) The organization name that the DLP agent should have. If this is
1169 # non-empty and the DLP agent is not signed with this organization name,
1170 # Firefox will fail the connection.
1171 - name: browser.contentanalysis.client_signature
1172   type: String
1173   value: ""
1174   mirror: never
1176 # Content analysis by external applications, e.g. data-loss prevention apps
1177 - name: browser.contentanalysis.enabled
1178   type: bool
1179   value: false
1180   mirror: always
1182 # What content analysis should return if there is a problem communicating
1183 # with the agent. (see DefaultResponse enum in ContentAnalysis.h)
1184 # Make sure these stay in sync with the out-of-range check in Policies.sys.mjs.
1186 #   0: Block all requests
1187 #   1: Warn on all requests (which lets the user decide)
1188 #   2: Allow all requests
1189 - name: browser.contentanalysis.default_result
1190   type: uint32_t
1191   value: 0
1192   mirror: always
1194 # Is the IPC pipe to the DLP tool specific to the user or to the system?
1195 - name: browser.contentanalysis.is_per_user
1196   type: bool
1197   value: true
1198   mirror: always
1200 # Path name of pipe used to connect to a configured DLP agent.
1201 - name: browser.contentanalysis.pipe_path_name
1202   type: String
1203   value: "path_user"
1204   mirror: never
1206 # Space-separated list of regexs that are compared to URLs of resources
1207 # being checked by content-analysis.  Resources that match are not checked
1208 # and are always permitted.
1209 # By default this does not check any about: page except for about:blank
1210 # and about:srcdoc.
1211 - name: browser.contentanalysis.allow_url_regex_list
1212   type: String
1213   value: "^about:(?!blank|srcdoc).*"
1214   mirror: never
1216 # Space-separated list of regexs that are compared to URLs of resources
1217 # being checked by content-analysis.  Resources that match are not checked
1218 # and are always denied.
1219 - name: browser.contentanalysis.deny_url_regex_list
1220   type: String
1221   value: ""
1222   mirror: never
1224 # Should CA ignore the system setting and use silent notifications?
1225 - name: browser.contentanalysis.silent_notifications
1226   type: bool
1227   value: false
1228   mirror: always
1230 # Time (secs) after which content analysis operations are considered timed-out
1231 - name: browser.contentanalysis.agent_timeout
1232   type: uint32_t
1233   value: 30
1234   mirror: always
1236 # Should Firefox show a notification or dialog when content analysis blocks
1237 # access?
1238 - name: browser.contentanalysis.show_blocked_result
1239   type: bool
1240   value: true
1241   mirror: always
1243 # Should Firefox bypass content analysis for pastes and drags whose source
1244 # is the same tab?
1245 - name: browser.contentanalysis.bypass_for_same_tab_operations
1246   type: bool
1247   value: false
1248   mirror: always
1250 # Content blocking for Enhanced Tracking Protection
1251 - name: browser.contentblocking.database.enabled
1252   type: bool
1253   value: false
1254   mirror: always
1256 # How many recent block/unblock actions per origins we remember in the
1257 # Content Blocking log for each top-level window.
1258 - name: browser.contentblocking.originlog.length
1259   type: uint32_t
1260   value: 32
1261   mirror: always
1263 # Min font device pixel size at which to turn on high quality.
1264 - name: browser.display.auto_quality_min_font_size
1265   type: RelaxedAtomicUint32
1266   value: 20
1267   mirror: always
1269 - name: browser.display.background_color
1270   type: String
1271   value: "#FFFFFF"
1272   mirror: never
1274 - name: browser.display.background_color.dark
1275   type: String
1276   value: "#1C1B22"
1277   mirror: never
1279 # This preference is a bit confusing because we use the opposite
1280 # string value in the colors dialog to indicate to users how FF HCM
1281 # will behave.
1282 # With resect to document colors, these values mean:
1283 # 0 = "default" = always, except in high contrast mode
1284 # 1 = "always"
1285 # 2 = "never"
1287 # On windows, we set this to 0, which means FF HCM will mirror OS HCM.
1288 # Everywhere else, we set this to 1, disabling FF HCM.
1289 - name: browser.display.document_color_use
1290   type: RelaxedAtomicUint32
1291 #if defined(XP_WIN)
1292   value: 0
1293 #else
1294   value: 1
1295 #endif
1296   mirror: always
1297   rust: true
1299 # 0 = always native
1300 # 1 = never native
1301 # other = default
1302 - name: browser.display.windows.non_native_menus
1303   type: RelaxedAtomicUint32
1304   value: 2
1305   mirror: always
1306   rust: true
1308 # This pref dictates whether or not backplates and background images
1309 # are to be drawn, when in high-contrast mode:
1310 #   false: do not draw backplates or render background images
1311 #   true: render background images and draw backplates
1312 # This condition is only considered when high-contrast mode is enabled
1313 # in Firefox, ie. when the user has:
1314 #   (1) mUseAccessibilityMode set to true (Widows high-contrast mode is on)
1315 #       AND browser.display.document_color_use set to 0
1316 #       (only with high-contrast themes) OR
1317 #   (2) browser.display.document_color_use set to 2 (always)
1318 - name: browser.display.permit_backplate
1319   type: RelaxedAtomicBool
1320   value: true
1321   mirror: always
1322   rust: true
1324 # Whether we should suppress the background-image of the canvas (the root
1325 # frame) if we're in forced colors mode.
1327 # This is important because some sites use background-image with a plain color
1328 # and it causes undesirable results in high-contrast mode.
1330 # See bug 1614921 for example.
1331 - name: browser.display.suppress_canvas_background_image_on_forced_colors
1332   type: bool
1333   value: true
1334   mirror: always
1336 - name: browser.display.foreground_color
1337   type: String
1338   value: "#000000"
1339   mirror: never
1341 - name: browser.display.foreground_color.dark
1342   type: String
1343   value: "#FBFBFE"
1344   mirror: never
1346 # Determines the behavior of OS zoom settings.
1348 #   0: doesn't affect rendering at all
1349 #   1: affects full zoom (dpi, effectively).
1350 #   2: affects text zoom.
1352 # Default is (1): Historical behavior on Linux, matches other browsers on
1353 # Windows, and generally creates more consistent rendering.
1354 - name: browser.display.os-zoom-behavior
1355   type: RelaxedAtomicInt32
1356   value: 1
1357   mirror: always
1358   rust: true
1360 # Whether focus rings are always shown by default.
1362 # This is the initial value of nsWindowRoot::mShowFocusRings, but it can be
1363 # overridden by system preferences.
1364 - name: browser.display.show_focus_rings
1365   type: bool
1366   value: false
1367   mirror: always
1369 # Enable showing image placeholders while image is loading or when image is broken.
1370 - name: browser.display.show_image_placeholders
1371   type: bool
1372   value: true
1373   mirror: always
1375 # Whether we should always enable focus rings after focus was moved by keyboard.
1377 # This behavior matches both historical and GTK / Windows focus behavior.
1379 # :focus-visible is intended to provide better heuristics than this.
1380 - name: browser.display.always_show_rings_after_key_focus
1381   type: bool
1382   value: false
1383   mirror: always
1385 # In theory: 0 = never, 1 = quick, 2 = always, though we always just use it as
1386 # a bool!
1387 - name: browser.display.use_document_fonts
1388   type: RelaxedAtomicInt32
1389   value: 1
1390   mirror: always
1391   rust: true
1393 # font-family names for which we'll override use_document_fonts=0, and always
1394 # use the specified font.
1395 # This is to support ligature-icon fonts, which render literal strings like
1396 # "arrow_drop_down" with an icon, even when use_document_fonts is disabled.
1397 # If an author provides & uses such a font, and we decline to use it, we'll end
1398 # up rendering these literal strings where the author intended an icon, which
1399 # can cause all sorts of overlapping/unreadable content.
1400 - name: browser.display.use_document_fonts.icon_font_allowlist
1401   type: String
1402   value: >-
1403     Material Icons,
1404     Material Icons Extended,
1405     Material Icons Outlined,
1406     Material Icons Round,
1407     Material Icons Sharp,
1408     Material Icons Two Tone,
1409     Google Material Icons,
1410     Google Material Icons Filled,
1411     Material Symbols Outlined,
1412     Material Symbols Round,
1413     Material Symbols Rounded,
1414     Material Symbols Sharp,
1415     Google Symbols,
1416     FontAwesome
1417   mirror: never
1419 - name: browser.display.use_system_colors
1420   type: RelaxedAtomicBool
1421 #ifdef XP_WIN
1422   value: true
1423 #else
1424   value: false
1425 #endif
1426   mirror: always
1428 - name: browser.dom.window.dump.enabled
1429   type: RelaxedAtomicBool
1430   value: @IS_NOT_MOZILLA_OFFICIAL@
1431   mirror: always
1433 # See bug 1738574
1434 - name: browser.download.start_downloads_in_tmp_dir
1435   type: bool
1436   value: false
1437   mirror: always
1439 # See bug 1747343
1440 - name: browser.download.always_ask_before_handling_new_types
1441   type: bool
1442   value: false
1443   mirror: always
1445 # See bug 1731668
1446 - name: browser.download.enable_spam_prevention
1447   type: bool
1448   value: false
1449   mirror: always
1451 # See bug 1772569
1452 - name: browser.download.open_pdf_attachments_inline
1453   type: bool
1454   value: false
1455   mirror: always
1457 # See bug 1811830
1458 - name: browser.download.force_save_internally_handled_attachments
1459   type: bool
1460   value: false
1461   mirror: always
1463 - name: browser.download.sanitize_non_media_extensions
1464   type: bool
1465   value: true
1466   mirror: always
1468 # Image document's automatic image sizing.
1469 - name: browser.enable_automatic_image_resizing
1470   type: bool
1471   value: true
1472   mirror: always
1474 # Image document's click-to-resize.
1475 - name: browser.enable_click_image_resizing
1476   type: bool
1477   value: @IS_NOT_ANDROID@
1478   mirror: always
1480 - name: browser.find.ignore_ruby_annotations
1481   type: bool
1482   value: true
1483   mirror: always
1485 #if defined(XP_MACOSX)
1486 # Whether pressing Esc will exit fullscreen.
1487 - name: browser.fullscreen.exit_on_escape
1488   type: bool
1489   value: true
1490   mirror: always
1491 #endif
1493 # The max url length we'll store in history.
1495 # The default value is mostly a guess based on various facts:
1497 # * IE didn't support urls longer than 2083 chars
1498 # * Sitemaps protocol used to support a maximum of 2048 chars
1499 # * Various SEO guides suggest to not go over 2000 chars
1500 # * Various apps/services are known to have issues over 2000 chars
1501 # * RFC 2616 - HTTP/1.1 suggests being cautious about depending
1502 #   on URI lengths above 255 bytes
1504 - name: browser.history.maxUrlLength
1505   type: uint32_t
1506   value: 2000
1507   mirror: always
1509 # Max size of push/replaceState data parameter
1510 - name: browser.history.maxStateObjectSize
1511   type: int32_t
1512   value: 16777216
1513   mirror: always
1515 # True to collect wireframes upon navigations / pushState
1516 - name: browser.history.collectWireframes
1517   type: bool
1518   value: false
1519   mirror: always
1521 # The minimum area for a rect to be included in a wireframe, in CSS pixels.
1523 # The current value of 50 is pretty arbitrary, and will be tuned as we refine
1524 # and test the wireframing capability.
1525 - name: browser.history.wireframeAreaThreshold
1526   type: uint32_t
1527   value: 50
1528   mirror: always
1530 #if defined(XP_WIN) || defined(XP_LINUX)
1531   # Notify TabUnloader or send the memory pressure if the memory resource
1532   # notification is signaled AND the available commit space is lower than
1533   # this value.
1534 -   name: browser.low_commit_space_threshold_mb
1535     type: RelaxedAtomicUint32
1536     value: 200
1537     mirror: always
1538 #endif
1540 #ifdef XP_LINUX
1541   # On Linux we also check available memory in comparison to total memory,
1542   # and use this percent value (out of 100) to determine if we are in a
1543   # low memory scenario.
1544 -   name: browser.low_commit_space_threshold_percent
1545     type: RelaxedAtomicUint32
1546     value: 5
1547     mirror: always
1548 #endif
1550 # Render animations and videos as a solid color
1551 - name: browser.measurement.render_anims_and_video_solid
1552   type: RelaxedAtomicBool
1553   value: false
1554   mirror: always
1556 - name: browser.navigation.requireUserInteraction
1557   type: bool
1558   value: false
1559   mirror: always
1561 # Indicates if about:newtab shows content (enabled) or just blank.
1562 - name: browser.newtabpage.enabled
1563   type: bool
1564   value: true
1565   mirror: always
1567 # Open PDFs in Edge with the --app flag if it is the default.
1568 - name: browser.pdf.launchDefaultEdgeAsApp
1569   type: bool
1570   value: true
1571   mirror: always
1573 # Maximium delay between keystrokes that will be considered typing (milliseconds).
1574 - name: browser.places.interactions.typing_timeout_ms
1575   type: RelaxedAtomicUint32
1576   value: 3000
1577   mirror: always
1579 # Maximum delay between scroll input events that will be considered a scrolling interaction (milliseconds).
1580 - name: browser.places.interactions.scrolling_timeout_ms
1581   type: RelaxedAtomicUint32
1582   value: 5000
1583   mirror: always
1585 # Number of seconds till the sponsored session is timeout.
1586 - name: browser.places.sponsoredSession.timeoutSecs
1587   type: RelaxedAtomicUint32
1588   value: 3600
1589   mirror: always
1591 # Whether to start the private browsing mode at application startup
1592 - name: browser.privatebrowsing.autostart
1593   type: bool
1594   value: false
1595   mirror: always
1597 # Force usage of in-memory (rather than file on disk) media cache for video streaming when private browsing
1598 - name: browser.privatebrowsing.forceMediaMemoryCache
1599   type: bool
1600   value: false
1601   mirror: always
1603 # Communicates the toolbar color to platform (for e.g., prefers-color-scheme).
1605 # Returns whether the toolbar is dark (0), light (1), or system (2). The
1606 # theming code overrides it if appropriate.
1607 - name: browser.theme.toolbar-theme
1608   type: RelaxedAtomicUint32
1609   value: 2
1610   mirror: always
1612 # Communicates the preferred content theme color to platform (for e.g.,
1613 # prefers-color-scheme).
1615 # dark (0), light (1), system (2), or toolbar (3).
1617 # Default to "toolbar", the theming code sets it appropriately.
1618 - name: browser.theme.content-theme
1619   type: RelaxedAtomicUint32
1620   value: 2
1621   mirror: always
1622   rust: true
1624 # Whether the firefox titlebar respects the
1625 # -moz-windows-accent-color-in-titlebar setting on the tab strip.
1626 - name: browser.theme.windows.accent-color-in-tabs.enabled
1627   type: RelaxedAtomicBool
1628   value: false
1629   mirror: always
1630   rust: true
1632 # Blocked plugin content
1633 - name: browser.safebrowsing.blockedURIs.enabled
1634   type: bool
1635   value: true
1636   mirror: always
1638 # Malware protection
1639 - name: browser.safebrowsing.malware.enabled
1640   type: bool
1641   value: true
1642   mirror: always
1644 # Phishing protection
1645 - name: browser.safebrowsing.phishing.enabled
1646   type: bool
1647   value: true
1648   mirror: always
1650 # Maximum size for an array to store the safebrowsing prefixset.
1651 - name: browser.safebrowsing.prefixset_max_array_size
1652   type: RelaxedAtomicUint32
1653   value: 512*1024
1654   mirror: always
1656 # SessionStore prefs
1657 # Maximum number of bytes of DOMSessionStorage data we collect per origin.
1658 - name: browser.sessionstore.dom_storage_limit
1659   type: uint32_t
1660   value: 2048
1661   mirror: always
1663 # Maximum number of characters of form field data per field we collect.
1664 - name: browser.sessionstore.dom_form_limit
1665   type: uint32_t
1666   value: 1024*1024*2
1667   mirror: always
1669 # Maximum number of characters of form data we collect per origin.
1670 - name: browser.sessionstore.dom_form_max_limit
1671   type: uint32_t
1672   value: 1024*1024*50
1673   mirror: always
1675 # Minimal interval between two save operations in milliseconds (while the user is active).
1676 - name: browser.sessionstore.interval
1677   type: RelaxedAtomicUint32
1678   value: 15000
1679   mirror: always
1681 # Disable collection of data for session store using the native collector code,
1682 # instead use the older implementation that's not compatible with session
1683 # history in the parent (and thus Fission).
1684 - name: browser.sessionstore.disable_platform_collection
1685   type: bool
1686 #if defined(MOZ_THUNDERBIRD)
1687   value: true
1688 #else
1689   value: false
1690 #endif
1691   mirror: once
1692   do_not_use_directly: true
1694 #if defined(NIGHTLY_BUILD) || defined(MOZ_DEV_EDITION) || defined(DEBUG)
1695 - name: browser.startup.record
1696   type: bool
1697   value: false
1698   mirror: always
1699 #endif
1701 # Causes SessionStore to ignore non-final update messages from
1702 # browser tabs that were not caused by a flush from the parent.
1703 # This is a testing flag and should not be used by end-users.
1704 - name: browser.sessionstore.debug.no_auto_updates
1705   type: RelaxedAtomicBool
1706   value: false
1707   mirror: always
1709 # Whether we should draw the tabs on top of the titlebar.
1711 # no (0), yes (1), or default (2), which is true everywhere except Linux.
1712 - name: browser.tabs.inTitlebar
1713   type: int32_t
1714   value: 2
1715   mirror: always
1717 # If set, use DocumentChannel to directly initiate loads entirely
1718 # from parent-process BrowsingContexts
1719 - name: browser.tabs.documentchannel.parent-controlled
1720   type: bool
1721   value: false
1722   mirror: always
1724 # Testing-only pref which makes data: URIs be loaded in a "web" content process
1725 # instead of within a process based on the URI's loader.
1726 - name: browser.tabs.remote.dataUriInDefaultWebProcess
1727   type: bool
1728   value: false
1729   mirror: always
1731 # Testing-only pref to force system-triggered about:blank loads to not change
1732 # content processes. This is used for performance tests which load an
1733 # about:blank document between navigations for historical reasons to avoid
1734 # unnecessary process switches.
1735 - name: browser.tabs.remote.systemTriggeredAboutBlankAnywhere
1736   type: bool
1737   value: false
1738   mirror: always
1740 # Testing-only pref to cause PBrowser creation for a specific BrowsingContext to
1741 # fail, to test the errored codepath.
1742 - name: browser.tabs.remote.testOnly.failPBrowserCreation.enabled
1743   type: bool
1744   value: false
1745   mirror: always
1747 - name: browser.tabs.remote.force-paint
1748   type: bool
1749   value: true
1750   mirror: always
1752 # When this pref is enabled document loads with a mismatched
1753 # Cross-Origin-Embedder-Policy header will fail to load
1754 - name: browser.tabs.remote.useCrossOriginEmbedderPolicy
1755   type: RelaxedAtomicBool
1756   value: true
1757   mirror: always
1759 # This pref makes `credentialless` a valid value for
1760 # Cross-Origin-Embedder-Policy header
1761 - name: browser.tabs.remote.coep.credentialless
1762   type: RelaxedAtomicBool
1763 #if defined(ANDROID)
1764   value: @IS_NIGHTLY_BUILD@
1765 #else
1766   value: true
1767 #endif
1768   mirror: always
1769   do_not_use_directly: true
1771 # When this pref is enabled top level loads with a mismatched
1772 # Cross-Origin-Opener-Policy header will be loaded in a separate process.
1773 - name: browser.tabs.remote.useCrossOriginOpenerPolicy
1774   type: RelaxedAtomicBool
1775   value: true
1776   mirror: always
1778 # When this pref is enabled then we use a separate content process for
1779 # top-level load of file:// URIs
1780 - name: browser.tabs.remote.separateFileUriProcess
1781   type: RelaxedAtomicBool
1782 #if !defined(ANDROID)
1783   value: true
1784 #else
1785   value: false
1786 #endif
1787   mirror: always
1789 # Pref to control whether we use a separate privileged content process
1790 # for certain mozilla webpages (which are listed in the pref
1791 # browser.tabs.remote.separatedMozillaDomains).
1792 - name: browser.tabs.remote.separatePrivilegedMozillaWebContentProcess
1793   type: bool
1794   value: false
1795   mirror: always
1797 # Whether or not process selection for subframes will prefer re-using an
1798 # existing content process over creating a new one. Enabling this pref should
1799 # reduce the number of processes allocated for non-first-party domains if
1800 # dom.ipc.processCount.webIsolated > 1.
1801 - name: browser.tabs.remote.subframesPreferUsed
1802   type: bool
1803   value: true
1804   mirror: always
1806 # When this pref is enabled, opaque response is only allowed to enter the
1807 # content process if it's a response for media (audio, image, video), CSS, or
1808 # JavaScript.
1809 - name: browser.opaqueResponseBlocking
1810   type: RelaxedAtomicBool
1811 #if defined(ANDROID)
1812   value: false
1813 #else
1814   value: true
1815 #endif
1816   mirror: always
1818 # When this pref is enabled, the JS validator will be enabled for
1819 # ORB.
1820 - name: browser.opaqueResponseBlocking.javascriptValidator
1821   type: bool
1822   value: true
1823   mirror: always
1825 # This pref controls how filtering of opaque responses for calls to `Window.fetch`.
1826 # (and similar) is performed in the parent process. This is intended to make sure
1827 # that data that would be filtered in a content process never actually reaches that
1828 # content process.
1829 # See https://fetch.spec.whatwg.org/#concept-filtered-response-opaque
1830 #   0) Don't filter in the parent process at all, and let content processes handle
1831 #      opaque filtering. Regardless of if ORB is enabled or not. N.B. that if ORB
1832 #      is enabled opaque responses will be blocked.
1833 #   1) If ORB is enabled, in the parent process, filter the responses that ORB allows.
1834 #      N.B. any responses ORB doesn't allow will not send data to a content process
1835 #      since they will return a NetworkError. If the request is allowed by ORB, the
1836 #      internal response will be intact and sent to the content process as is.
1837 #   2) If ORB is enabled, in the parent process, filter the responses that ORB blocks,
1838 #      when they were issued by `Window.fetch` (and similar).
1839 #   3) Filter all responses in the parent, regardless of if ORB is enabled or not.
1840 #      This means that opaque responses coming from `Window.fetch` won't even be
1841 #      considered for being blocked by ORB.
1842 - name: browser.opaqueResponseBlocking.filterFetchResponse
1843   type: uint32_t
1844   value: 2
1845   mirror: always
1846   do_not_use_directly: true
1848 # This pref controls how exceptions to opaque response blocking for the media MIME types
1849 # `audio/*` and `video/*` are handled. This is because step 8 in the spec that performs
1850 # audio or video type pattern matching cannot handle certain MIME types (yet).
1851 # See https://whatpr.org/fetch/1442.html#orb-algorithm
1852 #   0) No exceptions
1853 #   1) Some exceptions, explicitly hard coded in `IsOpaqueSafeListedSpecBreakingMIMEType`
1854 #   2) Allow all MIME types beginning with `audio/*` or `video/*`.
1855 - name: browser.opaqueResponseBlocking.mediaExceptionsStrategy
1856   type: uint32_t
1857   value: 1
1858   mirror: always
1859   do_not_use_directly: true
1861 # When true, zooming will be enabled on all sites, even ones that declare
1862 # user-scalable=no or use touch-action to disable pinch gestures.
1863 - name: browser.ui.zoom.force-user-scalable
1864   type: RelaxedAtomicBool
1865   value: false
1866   mirror: always
1868 - name: browser.viewport.desktopWidth
1869   type: RelaxedAtomicInt32
1870   value: 980
1871   mirror: always
1873 - name: browser.visited_color
1874   type: String
1875   value: "#551A8B"
1876   mirror: never
1878 # If you change this, you probably also want to change
1879 # nsXPLookAndFeel::GenericDarkColor for MozNativevisitedhyperlinktext.
1880 - name: browser.visited_color.dark
1881   type: String
1882   value: "#FFADFF"
1883   mirror: never
1885 # When true, soft reloads (including location.reload())
1886 # will only froce validate the top level document, subresources will
1887 # be loaded normally as-if users normally navigated to the page.
1888 - name: browser.soft_reload.only_force_validate_top_level_document
1889   type: bool
1890   value: true
1891   mirror: always
1893 # Whether or not to save and restore zoom levels on a per-site basis.
1894 - name: browser.zoom.siteSpecific
1895   type: bool
1896   value: @IS_NOT_ANDROID@
1897   mirror: always
1899 #---------------------------------------------------------------------------
1900 # Prefs starting with "channelclassifier."
1901 #---------------------------------------------------------------------------
1903 - name: channelclassifier.allowlist_example
1904   type: bool
1905   value: false
1906   mirror: always
1908 #---------------------------------------------------------------------------
1909 # Prefs starting with "clipboard."
1910 #---------------------------------------------------------------------------
1912 # Clipboard behavior.
1913 - name: clipboard.autocopy
1914   type: bool
1915 #if !defined(ANDROID) && !defined(XP_MACOSX) && defined(XP_UNIX)
1916   value: true
1917 #else
1918   value: false
1919 #endif
1920   mirror: always
1922 #ifdef XP_WIN
1923   # allow to copy clipboard data to Clipboard History/Cloud
1924   # (used on sensitive data in about:logins and Private Browsing)
1925 -   name: clipboard.copyPrivateDataToClipboardCloudOrHistory
1926     type: bool
1927     value: false
1928     mirror: always
1930   # Whether to put a file promise onto the clipboard when copying images on Windows
1931 -   name: clipboard.imageAsFile.enabled
1932     type: bool
1933     value: @IS_NOT_EARLY_BETA_OR_EARLIER@
1934     mirror: always
1935 #endif
1937 #---------------------------------------------------------------------------
1938 # Prefs starting with "consoleservice."
1939 #---------------------------------------------------------------------------
1941 #if defined(ANDROID)
1942   # Disable sending console to logcat on release builds.
1943 -   name: consoleservice.logcat
1944     type: RelaxedAtomicBool
1945     value: @IS_NOT_RELEASE_OR_BETA@
1946     mirror: always
1947 #endif
1949 #---------------------------------------------------------------------------
1950 # Prefs starting with "content."
1951 #---------------------------------------------------------------------------
1953 - name: content.cors.disable
1954   type: bool
1955   value: false
1956   mirror: always
1958 # Back off timer notification after count.
1959 # -1 means never.
1960 - name: content.notify.backoffcount
1961   type: int32_t
1962   value: -1
1963   mirror: always
1965 # Notification interval in microseconds.
1966 # The notification interval has a dramatic effect on how long it takes to
1967 # initially display content for slow connections. The current value
1968 # provides good incremental display of content without causing an increase
1969 # in page load time. If this value is set below 1/10 of a second it starts
1970 # to impact page load performance.
1971 # See bugzilla bug 72138 for more info.
1972 - name: content.notify.interval
1973   type: int32_t
1974   value: 120000
1975   mirror: always
1977 # Do we notify based on time?
1978 - name: content.notify.ontimer
1979   type: bool
1980   value: true
1981   mirror: always
1983 # How many times to deflect in interactive mode.
1984 - name: content.sink.interactive_deflect_count
1985   type: int32_t
1986   value: 0
1987   mirror: always
1989 # How many times to deflect in perf mode.
1990 - name: content.sink.perf_deflect_count
1991   type: int32_t
1992   value: 200
1993   mirror: always
1995 # Parse mode for handling pending events.
1996 # 0 = don't check for pending events
1997 # 1 = don't deflect if there are pending events
1998 # 2 = bail if there are pending events
1999 - name: content.sink.pending_event_mode
2000   type: int32_t
2001 #ifdef XP_WIN
2002   value: 1
2003 #else
2004   value: 0
2005 #endif
2006   mirror: always
2008 # How often to probe for pending events. 1 = every token.
2009 - name: content.sink.event_probe_rate
2010   type: int32_t
2011   value: 1
2012   mirror: always
2014 # How long to stay off the event loop in interactive mode (microseconds).
2015 - name: content.sink.interactive_parse_time
2016   type: int32_t
2017   value: 3000
2018   mirror: always
2020 # How long to stay off the event loop in perf mode.
2021 - name: content.sink.perf_parse_time
2022   type: int32_t
2023   value: 30000
2024   mirror: always
2026 #  How long to be in interactive mode after an event.
2027 - name: content.sink.interactive_time
2028   type: uint32_t
2029   value: 750000
2030   mirror: always
2032 # How long to stay in perf mode after initial loading.
2033 - name: content.sink.initial_perf_time
2034   type: uint32_t
2035   value: 2000000
2036   mirror: always
2038 # Should we switch between perf-mode and interactive-mode?
2039 # 0 = Switch
2040 # 1 = Interactive mode
2041 # 2 = Perf mode
2042 - name: content.sink.enable_perf_mode
2043   type: int32_t
2044   value: 0
2045   mirror: always
2047 #---------------------------------------------------------------------------
2048 # Prefs starting with "converter."
2049 #---------------------------------------------------------------------------
2051 # Whether we include ruby annotation in the text despite whether it
2052 # is requested. This was true because we didn't explicitly strip out
2053 # annotations. Set false by default to provide a better behavior, but
2054 # we want to be able to pref-off it if user doesn't like it.
2055 - name: converter.html2txt.always_include_ruby
2056   type: bool
2057   value: false
2058   mirror: always
2060 #---------------------------------------------------------------------------
2061 # Prefs starting with "cookiebanners."
2062 #---------------------------------------------------------------------------
2064 # Controls the cookie banner handling mode in normal browsing.
2065 # 0: Disables all cookie banner handling.
2066 # 1: Reject-all if possible, otherwise do nothing.
2067 # 2: Reject-all if possible, otherwise accept-all.
2068 - name: cookiebanners.service.mode
2069   type: uint32_t
2070   value: 0
2071   mirror: always
2073 # When set to true, cookie banners are detected and detection events are
2074 # dispatched, but they will not be handled. Requires the service to be enabled
2075 # for the desired mode via pref cookiebanners.service.mode*
2076 - name: cookiebanners.service.detectOnly
2077   type: bool
2078   value: false
2079   mirror: always
2081 # Controls the cookie banner handling mode in private browsing. Same mode
2082 # options as the normal browsing pref above.
2083 - name: cookiebanners.service.mode.privateBrowsing
2084   type: uint32_t
2085   value: 0
2086   mirror: always
2088 # Enables use of global CookieBannerRules, which apply to all sites. This is
2089 # used for click rules that can handle common Consent Management Providers
2090 # (CMP).
2091 # Enabling this (when the cookie handling feature is enabled) may negatively
2092 # impact site performance since it requires us to run rule-defined query
2093 # selectors for every page.
2094 - name: cookiebanners.service.enableGlobalRules
2095   type: bool
2096   value: true
2097   mirror: always
2099 # Whether global rules are allowed to run in sub-frames. Running query selectors
2100 # in every sub-frame may negatively impact performance, but is required for some
2101 # CMPs.
2102 - name: cookiebanners.service.enableGlobalRules.subFrames
2103   type: bool
2104   value: true
2105   mirror: always
2107 # Enables the cookie banner cookie injector. The cookie banner cookie injector
2108 # depends on the `cookiebanners.service.mode` pref above.
2109 - name: cookiebanners.cookieInjector.enabled
2110   type: bool
2111   value: true
2112   mirror: always
2114 # By default, how many seconds in the future cookies should expire after they
2115 # have been injected. Defaults to 12 months. Individual cookie rules may
2116 # override this.
2117 - name: cookiebanners.cookieInjector.defaultExpiryRelative
2118   type: uint32_t
2119   value: 31536000
2120   mirror: always
2122 # How many times per site and site load to check for cookie banners after which
2123 # the mechanism is considered on cooldown for the site in the current browsing
2124 # session. If the threshold is set to zero, banner clicking won't be considered
2125 # as being on cooldown regardless of how many times the site is loaded. The
2126 # maximum value for the retry is 255, any value over than that will be capped.
2127 - name: cookiebanners.bannerClicking.maxTriesPerSiteAndSession
2128   type: uint32_t
2129   value: 3
2130   mirror: always
2132 #---------------------------------------------------------------------------
2133 # Prefs starting with "datareporting."
2134 #---------------------------------------------------------------------------
2136 - name: datareporting.healthreport.uploadEnabled
2137   type: RelaxedAtomicBool
2138   value: false
2139   mirror: always
2140   rust: true
2142 #---------------------------------------------------------------------------
2143 # Prefs starting with "device."
2144 #---------------------------------------------------------------------------
2146 # Is support for the device sensors API enabled?
2147 - name: device.sensors.enabled
2148   type: bool
2149   value: true
2150   mirror: always
2152 # KaiOS-only, see https://bugzilla.mozilla.org/show_bug.cgi?id=1699707#c10
2153 - name: device.sensors.ambientLight.enabled
2154   type: bool
2155   value: false
2156   mirror: always
2158 - name: device.sensors.motion.enabled
2159   type: bool
2160   value: true
2161   mirror: always
2163 - name: device.sensors.orientation.enabled
2164   type: bool
2165   value: true
2166   mirror: always
2168 # KaiOS-only, see https://bugzilla.mozilla.org/show_bug.cgi?id=1699707#c10
2169 - name: device.sensors.proximity.enabled
2170   type: bool
2171   value: false
2172   mirror: always
2174 - name: device.sensors.test.events
2175   type: bool
2176   value: false
2177   mirror: always
2179 #---------------------------------------------------------------------------
2180 # Prefs starting with "devtools."
2181 #---------------------------------------------------------------------------
2183 - name: devtools.console.stdout.chrome
2184   type: RelaxedAtomicBool
2185   value: @IS_NOT_MOZILLA_OFFICIAL@
2186   mirror: always
2188 - name: devtools.console.stdout.content
2189   type: RelaxedAtomicBool
2190   value: false
2191   mirror: always
2193 #---------------------------------------------------------------------------
2194 # Prefs starting with "docshell."
2195 #---------------------------------------------------------------------------
2197 # Used to indicate whether session history listeners should be notified
2198 # about content viewer eviction. Used only for testing.
2199 - name: docshell.shistory.testing.bfevict
2200   type: bool
2201   value: false
2202   mirror: always
2204 # If true, pages with an opener won't be bfcached.
2205 - name: docshell.shistory.bfcache.require_no_opener
2206   type: bool
2207   value: @IS_ANDROID@
2208   mirror: always
2210 # If true, page with beforeunload or unload event listeners can be bfcached.
2211 - name: docshell.shistory.bfcache.allow_unload_listeners
2212   type: bool
2213   value: @IS_ANDROID@
2214   mirror: always
2216 # If true, page with beforeunload event listeners can be bfcached.
2217 # This only works when sessionHistoryInParent is enabled.
2218 - name: docshell.shistory.bfcache.ship_allow_beforeunload_listeners
2219   type: bool
2220   value: true
2221   mirror: always
2223 #---------------------------------------------------------------------------
2224 # Prefs starting with "dom."
2225 #---------------------------------------------------------------------------
2227 # Allow cut/copy
2228 - name: dom.allow_cut_copy
2229   type: bool
2230   value: true
2231   mirror: always
2233 # Checks if offscreen animation throttling is enabled.
2234 - name: dom.animations.offscreen-throttling
2235   type: bool
2236   value: true
2237   mirror: always
2239 # Is support for Navigator.getBattery enabled?
2240 - name: dom.battery.enabled
2241   type: bool
2242   value: true
2243   mirror: always
2245 # Block multiple external protocol URLs in iframes per single event.
2246 - name: dom.block_external_protocol_in_iframes
2247   type: bool
2248   value: true
2249   mirror: always
2251 # Block sandboxed BrowsingContexts from navigating to external protocols.
2252 - name: dom.block_external_protocol_navigation_from_sandbox
2253   type: bool
2254   value: true
2255   mirror: always
2257 # Block Insecure downloads from Secure Origins
2258 - name: dom.block_download_insecure
2259   type: bool
2260   value: true
2261   mirror: always
2263 # Block multiple window.open() per single event.
2264 - name: dom.block_multiple_popups
2265   type: bool
2266   value: true
2267   mirror: always
2269 # The maximum number of popup that is allowed to be opened. Set to -1 for no
2270 # limit.
2271 - name: dom.popup_maximum
2272   type: int32_t
2273   value: 20
2274   mirror: always
2276   # Enable CacheAPI in private browsing mode with encryption
2277 - name: dom.cache.privateBrowsing.enabled
2278   type: RelaxedAtomicBool
2279   value: true
2280   mirror: always
2282 # Exposes window.caches and skips SecureContext check.
2283 # dom.serviceWorkers.testing.enabled also includes the same effect.
2284 - name: dom.caches.testing.enabled
2285   type: RelaxedAtomicBool
2286   value: false
2287   mirror: always
2289 # Disable capture attribute for input elements; only supported on GeckoView.
2290 - name: dom.capture.enabled
2291   type: bool
2292   value: false
2293   mirror: always
2295 # HTML specification says the level should be 5
2296 # https://html.spec.whatwg.org/#timer-initialisation-steps
2297 - name: dom.clamp.timeout.nesting.level
2298   type: uint32_t
2299   value: 5
2300   mirror: once
2302 # Disable custom highlight API; implementation pending.
2303 - name: dom.customHighlightAPI.enabled
2304   type: RelaxedAtomicBool
2305   value: @IS_NIGHTLY_BUILD@
2306   mirror: always
2307   rust: true
2309 # Allow control characters appear in composition string.
2310 # When this is false, control characters except
2311 # CHARACTER TABULATION (horizontal tab) are removed from
2312 # both composition string and data attribute of compositionupdate
2313 # and compositionend events.
2314 - name: dom.compositionevent.allow_control_characters
2315   type: bool
2316   value: false
2317   mirror: always
2319 # Compression Streams (CompressionStream/DecompressionStream)
2320 - name: dom.compression_streams.enabled
2321   type: RelaxedAtomicBool
2322   value: true
2323   mirror: always
2325 # Is support for CSSPseudoElement enabled?
2326 - name: dom.css_pseudo_element.enabled
2327   type: bool
2328   value: false
2329   mirror: always
2331 # After how many seconds we allow external protocol URLs in iframe when not in
2332 # single events
2333 - name: dom.delay.block_external_protocol_in_iframes
2334   type: uint32_t
2335   value: 10   # in seconds
2336   mirror: always
2338 # Whether the above pref has any effect at all.
2339 # Make sure cases like bug 1795380 work before trying to turn this off. See
2340 # bug 1680721 for some other context that might be relevant.
2341 - name: dom.delay.block_external_protocol_in_iframes.enabled
2342   type: bool
2343   value: true
2344   mirror: always
2346 # Only propagate the open window click permission if the setTimeout() is equal
2347 # to or less than this value.
2348 - name: dom.disable_open_click_delay
2349   type: int32_t
2350   value: 1000
2351   mirror: always
2353 - name: dom.disable_open_during_load
2354   type: bool
2355   value: false
2356   mirror: always
2358 - name: dom.disable_beforeunload
2359   type: bool
2360   value: false
2361   mirror: always
2363 - name: dom.require_user_interaction_for_beforeunload
2364   type: bool
2365   value: true
2366   mirror: always
2368 # Enable/disable Gecko specific edit commands
2369 - name: dom.document.edit_command.contentReadOnly.enabled
2370   type: bool
2371   value: @IS_NOT_EARLY_BETA_OR_EARLIER@
2372   mirror: always
2374 - name: dom.document.edit_command.insertBrOnReturn.enabled
2375   type: bool
2376   value: @IS_NOT_EARLY_BETA_OR_EARLIER@
2377   mirror: always
2379 # Only intended for fuzzing purposes, this will break mozPrintCallback, etc.
2380 - name: dom.window_print.fuzzing.block_while_printing
2381   type: bool
2382   value: false
2383   mirror: always
2385 - name: dom.element.transform-getters.enabled
2386   type: bool
2387   value: false
2388   mirror: always
2390 # Whether the popover attribute implementation is enabled,
2391 # see https://html.spec.whatwg.org/#the-popover-attribute
2392 - name: dom.element.popover.enabled
2393   type: RelaxedAtomicBool
2394   value: true
2395   mirror: always
2396   rust: true
2398 # Whether the blocking attribute implementation is enabled,
2399 # see https://html.spec.whatwg.org/#blocking-attributes
2400 - name: dom.element.blocking.enabled
2401   type: RelaxedAtomicBool
2402   value: false
2403   mirror: always
2405 # Whether CustomStateSet is enabled
2406 - name: dom.element.customstateset.enabled
2407   type: RelaxedAtomicBool
2408   value: true
2409   mirror: always
2410   rust: true
2412 # Whether the invoketarget attribute implementation is enabled
2413 - name: dom.element.invokers.enabled
2414   type: bool
2415   value: false
2416   mirror: always
2418 - name: dom.mouse_capture.enabled
2419   type: bool
2420   value: true
2421   mirror: always
2423 # Is support for Performance.mozMemory enabled?
2424 - name: dom.enable_memory_stats
2425   type: bool
2426   value: false
2427   mirror: always
2429 # Enable Performance API
2430 # Whether nonzero values can be returned from performance.timing.*
2431 - name: dom.enable_performance
2432   type: RelaxedAtomicBool
2433   value: true
2434   mirror: always
2436 # Enable Performance Observer API
2437 - name: dom.enable_performance_observer
2438   type: RelaxedAtomicBool
2439   value: true
2440   mirror: always
2442 # Whether resource timing will be gathered and returned by performance.GetEntries*
2443 - name: dom.enable_resource_timing
2444   type: bool
2445   value: true
2446   mirror: always
2448 # Whether event timing will be gathered and returned by performance observer*
2449 - name: dom.enable_event_timing
2450   type: RelaxedAtomicBool
2451   value: true
2452   mirror: always
2454 # Whether the LargestContentfulPaint API will be gathered and returned by performance observer*
2455 - name: dom.enable_largest_contentful_paint
2456   type: RelaxedAtomicBool
2457   value: true
2458   mirror: always
2460 # Whether performance.GetEntries* will contain an entry for the active document
2461 - name: dom.enable_performance_navigation_timing
2462   type: bool
2463   value: true
2464   mirror: always
2466 # Whether the scheduler interface will be exposed
2467 - name: dom.enable_web_task_scheduling
2468   type: RelaxedAtomicBool
2469   value: @IS_NIGHTLY_BUILD@
2470   mirror: always
2472 # If this is true, it's allowed to fire "cut", "copy" and "paste" events.
2473 # Additionally, "input" events may expose clipboard content when inputType
2474 # is "insertFromPaste" or something.
2475 - name: dom.event.clipboardevents.enabled
2476   type: bool
2477   value: true
2478   mirror: always
2480 # Whether Shift+Right click force-opens the context menu
2481 - name: dom.event.contextmenu.shift_suppresses_event
2482   type: bool
2483   value: true
2484   mirror: always
2486 - name: dom.event.dragexit.enabled
2487   type: bool
2488   value: @IS_NOT_NIGHTLY_BUILD@
2489   mirror: always
2491 # If this pref is set to true, typing a surrogate pair causes one `keypress`
2492 # event whose `charCode` stores the unicode code point over 0xFFFF.  This is
2493 # compatible with Safari and Chrome in non-Windows platforms.
2494 # Otherwise, typing a surrogate pair causes two `keypress` events.  This is
2495 # compatible with legacy web apps which does
2496 # `String.fromCharCode(event.charCode)`.
2497 - name: dom.event.keypress.dispatch_once_per_surrogate_pair
2498   type: bool
2499   value: false
2500   mirror: always
2502 # This is meaningful only when `dispatch_once_per_surrogate_pair` is false.
2503 # If this pref is set to true, `.key` of the first `keypress` is set to the
2504 # high-surrogate and `.key` of the other is set to the low-surrogate.
2505 # Therefore, setting this exposing ill-formed UTF-16 string with `.key`.
2506 # (And also `InputEvent.data` if pressed in an editable element.)
2507 # Otherwise, `.key` of the first `keypress` is set to the surrogate pair, and
2508 # `.key` of the second `keypress` is set to the empty string.
2509 - name: dom.event.keypress.key.allow_lone_surrogate
2510   type: bool
2511   value: @IS_NOT_EARLY_BETA_OR_EARLIER@
2512   mirror: always
2514 # Whether wheel event target's should be grouped. When enabled, all wheel
2515 # events that occur in a given wheel transaction have the same event target.
2516 - name: dom.event.wheel-event-groups.enabled
2517   type: bool
2518   value: true
2519   mirror: always
2521 # Whether WheelEvent should return pixels instead of lines for
2522 # WheelEvent.deltaX/Y/Z, when deltaMode hasn't been checked.
2524 # Other browsers don't use line deltas and websites forget to check for it, see
2525 # bug 1392460.
2526 - name: dom.event.wheel-deltaMode-lines.disabled
2527   type: bool
2528   value: true
2529   mirror: always
2531 # Mostly for debugging. Whether we should do the same as
2532 # dom.event.wheel-deltaMode-lines.disabled, but unconditionally rather than
2533 # only when deltaMode hasn't been checked.
2534 - name: dom.event.wheel-deltaMode-lines.always-disabled
2535   type: bool
2536   value: false
2537   mirror: always
2539 # A blocklist (list of domains) for the
2540 # dom.event.wheel-deltaMode-lines.disabled behavior, in case potential
2541 # unforeseen problems with it arrive.
2542 - name: dom.event.wheel-deltaMode-lines.always-enabled
2543   type: String
2544   value: ""
2545   mirror: never
2547 #if defined(XP_MACOSX)
2548 # Whether to disable treating ctrl click as right click
2549 - name: dom.event.treat_ctrl_click_as_right_click.disabled
2550   type: bool
2551   value: @IS_NIGHTLY_BUILD@
2552   mirror: always
2553 #endif
2555 # Whether Gecko keeps store or forgets the last deepest "enter" event target for
2556 # the next "enter" or "leave" event dispatching when the last "over" event
2557 # target is removed from the DOM tree.
2558 - name: dom.events.mouse-pointer-boundary.keep-enter-targets-after-over-target-removed
2559   type: bool
2560   value: @IS_EARLY_BETA_OR_EARLIER@
2561   mirror: always
2563 # Whether .offset{X,Y} for events targeted at SVG nodes returns bounds relative
2564 # to the outer SVG.
2565 - name: dom.events.offset-in-svg-relative-to-svg-root
2566   type: bool
2567   value: true
2568   mirror: always
2570 # Control whether clipboard.read(), clipboard.write() and ClipboardItem are exposed
2571 # to content.
2572 - name: dom.events.asyncClipboard.clipboardItem
2573   type: bool
2574   value: true
2575   mirror: always
2577 # Skips checking permission and user activation when accessing the clipboard.
2578 # Should only be enabled in tests.
2579 # Access with Clipboard::IsTestingPrefEnabled().
2580 - name: dom.events.testing.asyncClipboard
2581   type: bool
2582   value: false
2583   mirror: always
2584   do_not_use_directly: true
2586 # Control whether `navigator.clipboard.readText()` is exposed to content.
2587 - name: dom.events.asyncClipboard.readText
2588   type: bool
2589   value: true
2590   mirror: always
2591   do_not_use_directly: true
2593 # This pref controls whether or not the `protected` dataTransfer state is
2594 # enabled. If the `protected` dataTransfer stae is disabled, then the
2595 # DataTransfer will be read-only whenever it should be protected, and will not
2596 # be disconnected after a drag event is completed.
2597 - name: dom.events.dataTransfer.protected.enabled
2598   type: bool
2599   value: false
2600   mirror: always
2602 # Whether to hide normal files (i.e. non-images) in dataTransfer inside
2603 # the content process.
2604 - name: dom.events.dataTransfer.mozFile.enabled
2605   type: bool
2606   value: true
2607   mirror: always
2609 - name: dom.events.dataTransfer.imageAsFile.enabled
2610   type: bool
2611   value: false
2612   mirror: always
2614 # User interaction timer interval, in ms
2615 - name: dom.events.user_interaction_interval
2616   type: uint32_t
2617   value: 5000
2618   mirror: always
2620 # Whether to try to compress touchmove events on IPC layer.
2621 - name: dom.events.compress.touchmove
2622   type: bool
2623   value: true
2624   mirror: always
2626 # In addition to the above IPC layer compresison, allow touchmove
2627 # events to be further coalesced in the child side after they
2628 # are sent.
2629 - name: dom.events.coalesce.touchmove
2630   type: bool
2631   value: true
2632   mirror: always
2634 # Allow mousemove events to be coalesced in the child side after they are sent.
2635 - name: dom.events.coalesce.mousemove
2636   type: bool
2637   value: true
2638   mirror: always
2640 # Expose Window.TextEvent and make the builtin editors dispatch `textInput`
2641 # event as a default action of `beforeinput`.
2642 - name: dom.events.textevent.enabled
2643   type: bool
2644   value: true
2645   mirror: always
2647 # Whether to expose test interfaces of various sorts
2648 - name: dom.expose_test_interfaces
2649   type: bool
2650   value: false
2651   mirror: always
2653 - name: dom.fetchKeepalive.enabled
2654   type: RelaxedAtomicBool
2655   value: false
2656   mirror: always
2658 - name: dom.fetchObserver.enabled
2659   type: RelaxedAtomicBool
2660   value: false
2661   mirror: always
2663 # Whether to set the incremental flag on the top level document's
2664 # priority header
2665 - name: dom.document_priority.incremental
2666   type: RelaxedAtomicBool
2667   value: true
2668   mirror: always
2670 # Allow the content process to create a File from a path. This is allowed just
2671 # on parent process, on 'file' Content process, or for testing.
2672 - name: dom.file.createInChild
2673   type: RelaxedAtomicBool
2674   value: false
2675   mirror: always
2677 # Support @autocomplete values for form autofill feature.
2678 - name: dom.forms.autocomplete.formautofill
2679   type: bool
2680   value: false
2681   mirror: always
2683 # Only trusted submit event could trigger form submission.
2684 - name: dom.forms.submit.trusted_event_only
2685   type: bool
2686   value: false
2687   mirror: always
2689 # This pref just controls whether we format the number with grouping separator
2690 # characters when the internal value is set or updated. It does not stop the
2691 # user from typing in a number and using grouping separators.
2692 - name: dom.forms.number.grouping
2693   type: bool
2694   value: false
2695   mirror: always
2697 # The interval in milliseconds between two Escape key events where the second
2698 # key event will exit fullscreen, even if it is consumed.
2699 - name: dom.fullscreen.force_exit_on_multiple_escape_interval
2700   type: uint32_t
2701   value: 500
2702   mirror: always
2704 # Whether the Gamepad API is enabled
2705 - name: dom.gamepad.enabled
2706   type: bool
2707   value: true
2708   mirror: always
2710 # Is Gamepad Extension API enabled?
2711 - name: dom.gamepad.extensions.enabled
2712   type: bool
2713   value: true
2714   mirror: always
2716 # Is LightIndicator API enabled in Gamepad Extension API?
2717 - name: dom.gamepad.extensions.lightindicator
2718   type: bool
2719   value: false
2720   mirror: always
2722 # Is MultiTouch API enabled in Gamepad Extension API?
2723 - name: dom.gamepad.extensions.multitouch
2724   type: bool
2725   value: false
2726   mirror: always
2728 # Is Gamepad vibrate haptic feedback function enabled?
2729 - name: dom.gamepad.haptic_feedback.enabled
2730   type: bool
2731   value: true
2732   mirror: always
2734 - name: dom.gamepad.non_standard_events.enabled
2735   type: bool
2736   value: @IS_NOT_RELEASE_OR_BETA@
2737   mirror: always
2739 - name: dom.gamepad.test.enabled
2740   type: RelaxedAtomicBool
2741   value: false
2742   mirror: always
2744 # W3C draft ImageCapture API
2745 - name: dom.imagecapture.enabled
2746   type: bool
2747   value: false
2748   mirror: always
2750 # The root margin for image lazy loading, defined as four (value, percentage)
2751 # pairs.
2752 - name: dom.image-lazy-loading.root-margin.top
2753   type: float
2754   value: 600
2755   mirror: always
2757 - name: dom.image-lazy-loading.root-margin.top.percentage
2758   type: bool
2759   value: false
2760   mirror: always
2762 - name: dom.image-lazy-loading.root-margin.bottom
2763   type: float
2764   value: 600
2765   mirror: always
2767 - name: dom.image-lazy-loading.root-margin.bottom.percentage
2768   type: bool
2769   value: false
2770   mirror: always
2772 - name: dom.image-lazy-loading.root-margin.left
2773   type: float
2774   value: 600
2775   mirror: always
2777 - name: dom.image-lazy-loading.root-margin.left.percentage
2778   type: bool
2779   value: false
2780   mirror: always
2782 - name: dom.image-lazy-loading.root-margin.right
2783   type: float
2784   value: 600
2785   mirror: always
2787 - name: dom.image-lazy-loading.root-margin.right.percentage
2788   type: bool
2789   value: false
2790   mirror: always
2792 # Enable indexedDB in private browsing mode with encryption
2793 - name: dom.indexedDB.privateBrowsing.enabled
2794   type: RelaxedAtomicBool
2795   value: true
2796   mirror: always
2798 # A pref that is used to slow down connection idle maintenance for testing
2799 # purposes.
2800 - name: dom.indexedDB.connectionIdleMaintenance.pauseOnConnectionThreadMs
2801   type: RelaxedAtomicUint32
2802   value: 0
2803   mirror: always
2805 # Whether or not indexedDB test mode is enabled.
2806 - name: dom.indexedDB.testing
2807   type: RelaxedAtomicBool
2808   value: false
2809   mirror: always
2811 # Whether or not indexedDB experimental features are enabled.
2812 - name: dom.indexedDB.experimental
2813   type: RelaxedAtomicBool
2814   value: false
2815   mirror: always
2817 # Whether or not indexedDB preprocessing is enabled.
2818 - name: dom.indexedDB.preprocessing
2819   type: RelaxedAtomicBool
2820   value: false
2821   mirror: always
2823 # How innerWidth / innerHeight return rounded or fractional sizes.
2825 #   0 or others: Do not round at all.
2826 #   1: Round.
2827 #   2: Truncate.
2829 # NOTE(emilio): Fractional sizes are not web-compatible, see the regressions
2830 # from bug 1676843, but we want to expose the fractional sizes (probably in
2831 # another API) one way or another, see [1], so we're keeping the code for the
2832 # time being.
2834 # [1]: https://github.com/w3c/csswg-drafts/issues/5260
2835 - name: dom.innerSize.rounding
2836   type: uint32_t
2837   value: 2
2838   mirror: always
2840 # Whether we conform to Input Events Level 1 or Input Events Level 2.
2841 # true:  conforming to Level 1
2842 # false: conforming to Level 2
2843 - name: dom.input_events.conform_to_level_1
2844   type: bool
2845   value: true
2846   mirror: always
2848 # Whether we allow BrowsingContextGroup to suspend input events
2849 - name: dom.input_events.canSuspendInBCG.enabled
2850   type: bool
2851   value: false
2852   mirror: always
2854 # The minimum number of ticks after page navigation
2855 # that need to occur before user input events are allowed to be handled.
2856 - name: dom.input_events.security.minNumTicks
2857   type: uint32_t
2858   value: 3
2859   mirror: always
2861 # The minimum elapsed time (in milliseconds) after page navigation
2862 # for user input events are allowed to be handled.
2863 - name: dom.input_events.security.minTimeElapsedInMS
2864   type: uint32_t
2865   value: 100
2866   mirror: always
2868 # By default user input handling delay is disabled (mostly) for testing ,
2869 # this is used for forcefully enable it for certain tests.
2870 - name: dom.input_events.security.isUserInputHandlingDelayTest
2871   type: bool
2872   value: false
2873   mirror: always
2875 # The maximum time (milliseconds) we reserve for handling input events in each
2876 # frame.
2877 - name: dom.input_event_queue.duration.max
2878   type: uint32_t
2879   value: 8
2880   mirror: always
2882 # How often to check for CPOW timeouts (ms). CPOWs are only timed
2883 # out by the hang monitor.
2884 - name: dom.ipc.cpow.timeout
2885   type: uint32_t
2886   value: 500
2887   mirror: always
2889 #ifdef MOZ_ENABLE_FORKSERVER
2890 - name: dom.ipc.forkserver.enable
2891   type: bool
2892   value: false
2893   mirror: once
2894 #endif
2896 #ifdef MOZ_WIDGET_GTK
2898 # Avoid the use of GTK in content processes if possible, by running
2899 # them in headless mode, to conserve resources (e.g., connections to
2900 # the X server).  See the usage in `ContentParent.cpp` for the full
2901 # definition of "if possible".
2903 # This does not affect sandbox policies; content processes may still
2904 # dynamically connect to the display server for, e.g., WebGL.
2905 - name: dom.ipc.avoid-gtk
2906   type: bool
2907   value: true
2908   mirror: always
2909 #endif
2911 # Whether or not to collect a paired minidump when force-killing a
2912 # content process.
2913 - name: dom.ipc.tabs.createKillHardCrashReports
2914   type: bool
2915   value: @IS_NOT_RELEASE_OR_BETA@
2916   mirror: once
2918 # Enable e10s hang monitoring (slow script checking and plugin hang detection).
2919 - name: dom.ipc.processHangMonitor
2920   type: bool
2921   value: true
2922   mirror: once
2924 # Whether we report such process hangs
2925 - name: dom.ipc.reportProcessHangs
2926   type: RelaxedAtomicBool
2927 # Don't report hangs in DEBUG builds. They're too slow and often a
2928 # debugger is attached.
2929 #ifdef DEBUG
2930   value: false
2931 #else
2932   value: true
2933 #endif
2934   mirror: always
2936 # Process launch delay (in milliseconds).
2937 - name: dom.ipc.processPrelaunch.delayMs
2938   type: uint32_t
2939 # This number is fairly arbitrary ... the intention is to put off
2940 # launching another app process until the last one has finished
2941 # loading its content, to reduce CPU/memory/IO contention.
2942   value: 1000
2943   mirror: always
2945 - name: dom.ipc.processPrelaunch.startupDelayMs
2946   type: uint32_t
2947 # delay starting content processes for a short time after browser start
2948 # to provide time for the UI to come up
2949   value: 1000
2950   mirror: always
2952 # Process preallocation cache
2953 # Only used in fission; in e10s we use 1 always
2954 - name: dom.ipc.processPrelaunch.fission.number
2955   type: uint32_t
2956   value: 3
2957   mirror: always
2959 # Limit preallocated processes below this memory size (in MB)
2960 - name: dom.ipc.processPrelaunch.lowmem_mb
2961   type: uint32_t
2962   value: 4096
2963   mirror: always
2965 - name: dom.ipc.processPriorityManager.enabled
2966   type: bool
2967   value: true
2968   mirror: always
2970 - name: dom.ipc.processPriorityManager.testMode
2971   type: bool
2972   value: false
2973   mirror: always
2975 - name: dom.ipc.processPriorityManager.backgroundPerceivableGracePeriodMS
2976   type: uint32_t
2977 #if defined(MOZ_WIDGET_ANDROID) && defined(NIGHTLY_BUILD)
2978   value: 3000
2979 #else
2980   value: 0
2981 #endif
2982   mirror: always
2984 - name: dom.ipc.processPriorityManager.backgroundGracePeriodMS
2985   type: uint32_t
2986 #if defined(MOZ_WIDGET_ANDROID) && defined(NIGHTLY_BUILD)
2987   value: 3000
2988 #else
2989   value: 0
2990 #endif
2991   mirror: always
2993 #ifdef XP_WIN
2994 - name: dom.ipc.processPriorityManager.backgroundUsesEcoQoS
2995   type: bool
2996   value: false
2997   mirror: always
2998 #endif
3000 # Support for input type=month, type=week. By default, disabled.
3001 - name: dom.forms.datetime.others
3002   type: bool
3003   value: @IS_ANDROID@
3004   mirror: always
3006 - name: dom.forms.always_allow_pointer_events.enabled
3007   type: bool
3008   value: true
3009   mirror: always
3011 # Is support for key events and focus events on disabled elements enabled?
3012 - name: dom.forms.always_allow_key_and_focus_events.enabled
3013   type: bool
3014   value: @IS_EARLY_BETA_OR_EARLIER@
3015   mirror: always
3017 # Whether to disable only the descendants or the parent fieldset element too
3018 # Note that this still allows it to be selected by `:disable`.
3019 - name: dom.forms.fieldset_disable_only_descendants.enabled
3020   type: bool
3021   value: @IS_EARLY_BETA_OR_EARLIER@
3022   mirror: always
3024 # Whether to allow or disallow web apps to cancel `beforeinput` events caused
3025 # by MozEditableElement#setUserInput() which is used by autocomplete, autofill
3026 # and password manager.
3027 - name: dom.input_event.allow_to_cancel_set_user_input
3028   type: bool
3029   value: false
3030   mirror: always
3032 # How long a content process can take before closing its IPC channel
3033 # after shutdown is initiated.  If the process exceeds the timeout,
3034 # we fear the worst and kill it.
3035 - name: dom.ipc.tabs.shutdownTimeoutSecs
3036   type: RelaxedAtomicUint32
3037 #if !defined(DEBUG) && !defined(MOZ_ASAN) && !defined(MOZ_VALGRIND) && !defined(MOZ_TSAN)
3038   value: 20
3039 #else
3040   value: 0
3041 #endif
3042   mirror: always
3044 # Whether a native event loop should be used in the content process.
3045 - name: dom.ipc.useNativeEventProcessing.content
3046   type: RelaxedAtomicBool
3047 #if defined(XP_WIN) || defined(XP_MACOSX)
3048   value: false
3049 #else
3050   value: true
3051 #endif
3052   mirror: always
3054 # If this is true, TextEventDispatcher dispatches keydown and keyup events
3055 # even during composition (keypress events are never fired during composition
3056 # even if this is true).
3057 - name: dom.keyboardevent.dispatch_during_composition
3058   type: bool
3059   value: true
3060   mirror: always
3062 # Enable/disable KeyboardEvent.initKeyEvent function
3063 - name: dom.keyboardevent.init_key_event.enabled
3064   type: bool
3065   value: false
3066   mirror: always
3068 # Enable/disable KeyboardEvent.initKeyEvent function in addons even if it's
3069 # disabled.
3070 - name: dom.keyboardevent.init_key_event.enabled_in_addons
3071   type: bool
3072   value: @IS_NOT_NIGHTLY_BUILD@
3073   mirror: always
3075 # If this is true, keypress events for non-printable keys are dispatched only
3076 # for event listeners of the system event group in web content.
3077 - name: dom.keyboardevent.keypress.dispatch_non_printable_keys_only_system_group_in_content
3078   type: bool
3079   value: true
3080   mirror: always
3082 # If this is true, "keypress" event's keyCode value and charCode value always
3083 # become same if the event is not created/initialized by JS.
3084 - name: dom.keyboardevent.keypress.set_keycode_and_charcode_to_same_value
3085   type: bool
3086   value: true
3087   mirror: always
3089 # Whether "W3C Web Manifest" processing is enabled
3090 - name: dom.manifest.enabled
3091   type: bool
3092   value: true
3093   mirror: always
3095 # Enable mapped array buffer by default.
3096 - name: dom.mapped_arraybuffer.enabled
3097   type: bool
3098   value: true
3099   mirror: always
3101 # Autoplay Policy Detection https://w3c.github.io/autoplay/
3102 - name: dom.media.autoplay-policy-detection.enabled
3103   type: RelaxedAtomicBool
3104   value: true
3105   mirror: always
3107 # WebCodecs API
3108 - name: dom.media.webcodecs.enabled
3109   type: RelaxedAtomicBool
3110   value: @IS_NIGHTLY_BUILD@
3111   mirror: always
3113 # Number of seconds of very quiet or silent audio before considering the audio
3114 # inaudible.
3115 - name: dom.media.silence_duration_for_audibility
3116   type: AtomicFloat
3117   value: 2.0f
3118   mirror: always
3120 # Inform mozjemalloc that the foreground content processes can keep more dirty
3121 # pages in memory.
3122 - name: dom.memory.foreground_content_processes_have_larger_page_cache
3123   type: bool
3124   value: true
3125   mirror: always
3127 # 0 no-op
3128 # 1 free dirty mozjemalloc pages
3129 # 2 trigger memory-pressure/heap-minimize
3130 # 3 trigger memory-pressure/low-memory
3131 - name: dom.memory.memory_pressure_on_background
3132   type: uint32_t
3133   value: 0
3134   mirror: always
3136 # Enable meta-viewport support in remote APZ-enabled frames.
3137 - name: dom.meta-viewport.enabled
3138   type: RelaxedAtomicBool
3139   value: false
3140   mirror: always
3142 # Timeout clamp in ms for timeouts we clamp.
3143 - name: dom.min_timeout_value
3144   type: RelaxedAtomicInt32
3145   value: 4
3146   mirror: always
3148 # Timeout clamp in ms for background windows.
3149 - name: dom.min_background_timeout_value
3150   type: int32_t
3151   value: 1000
3152   mirror: always
3154 # Timeout clamp in ms for background windows when throttling isn't enabled.
3155 - name: dom.min_background_timeout_value_without_budget_throttling
3156   type: int32_t
3157   value: 1000
3158   mirror: always
3160 # Are missing-property use counters for certain DOM attributes enabled?
3161 - name: dom.missing_prop_counters.enabled
3162   type: bool
3163   value: true
3164   mirror: always
3166 # Limit of location change caused by content scripts in a time span per
3167 # BrowsingContext. This includes calls to History and Location APIs.
3168 - name: dom.navigation.locationChangeRateLimit.count
3169   type: uint32_t
3170   value: 200
3171   mirror: always
3173 # Time span in seconds for location change rate limit.
3174 - name: dom.navigation.locationChangeRateLimit.timespan
3175   type: uint32_t
3176   value: 10
3177   mirror: always
3179 # Whether to allow <object> and <embed> element loads to be retargeted to an
3180 # external application or download.
3181 - name: dom.navigation.object_embed.allow_retargeting
3182   type: bool
3183   value: false
3184   mirror: always
3186 # Network Information API
3187 # This feature is not available on Firefox desktop. It exposes too much
3188 # user information. Let's be consistent and disable it on Android.
3189 # But let's keep it around in case it becomes necessary for webcompat
3190 # reasons
3191 # https://bugzilla.mozilla.org/show_bug.cgi?id=1637922
3192 - name: dom.netinfo.enabled
3193   type: RelaxedAtomicBool
3194   value: false
3195   mirror: always
3197 # Whether we should open noopener links in a new process.
3198 - name: dom.noopener.newprocess.enabled
3199   type: bool
3200   value: true
3201   mirror: always
3203 # Whether origin trials are enabled.
3204 - name: dom.origin-trials.enabled
3205   type: bool
3206   value: true
3207   mirror: always
3209 # Whether we use the test key to verify tokens.
3210 - name: dom.origin-trials.test-key.enabled
3211   type: bool
3212   value: false
3213   mirror: always
3215 # Origin trial state for "TestTrial".
3216 # 0: normal, 1: always-enabled, 2: always-disabled
3217 - name: dom.origin-trials.test-trial.state
3218   type: RelaxedAtomicInt32
3219   value: 0
3220   mirror: always
3222 # Origin trial state for COEP: Credentialless.
3223 # 0: normal, 1: always-enabled, 2: always-disabled
3224 - name: dom.origin-trials.coep-credentialless.state
3225   type: RelaxedAtomicInt32
3226   value: 0
3227   mirror: always
3229 # Origin trial state for Private Attribution
3230 # 0: normal, 1: always-enabled, 2: always-disabled
3231 - name: dom.origin-trials.private-attribution.state
3232   type: RelaxedAtomicInt32
3233   value: 0
3234   mirror: always
3236 # User pref to control whether Private Attribution
3237 # information should be collected / submitted.
3238 - name: dom.private-attribution.submission.enabled
3239   type: bool
3240   value: true
3241   mirror: always
3243 # Is support for Window.paintWorklet enabled?
3244 - name: dom.paintWorklet.enabled
3245   type: bool
3246   value: false
3247   mirror: always
3249 # Enable/disable the PaymentRequest API
3250 - name: dom.payments.request.enabled
3251   type: bool
3252   value: false
3253   mirror: always
3255 # Whether a user gesture is required to call PaymentRequest.prototype.show().
3256 - name: dom.payments.request.user_interaction_required
3257   type: bool
3258   value: true
3259   mirror: always
3261 # Time in milliseconds for PaymentResponse to wait for
3262 # the Web page to call complete().
3263 - name: dom.payments.response.timeout
3264   type: uint32_t
3265   value: 5000
3266   mirror: always
3268 # Enable printing performance marks/measures to log
3269 - name: dom.performance.enable_user_timing_logging
3270   type: RelaxedAtomicBool
3271   value: false
3272   mirror: always
3274 # Enable notification of performance timing
3275 - name: dom.performance.enable_notify_performance_timing
3276   type: bool
3277   value: false
3278   mirror: always
3280 # Is support for PerformanceTiming.timeToContentfulPaint enabled?
3281 - name: dom.performance.time_to_contentful_paint.enabled
3282   type: bool
3283   value: false
3284   mirror: always
3286 # Is support for PerformanceTiming.timeToDOMContentFlushed enabled?
3287 - name: dom.performance.time_to_dom_content_flushed.enabled
3288   type: bool
3289   value: false
3290   mirror: always
3292 # Is support for PerformanceTiming.timeToFirstInteractive enabled?
3293 - name: dom.performance.time_to_first_interactive.enabled
3294   type: bool
3295   value: false
3296   mirror: always
3298 # Is support for PerformanceTiming.timeToNonBlankPaint enabled?
3299 - name: dom.performance.time_to_non_blank_paint.enabled
3300   type: bool
3301   value: false
3302   mirror: always
3304 # Is support for Permissions.revoke enabled?
3305 - name: dom.permissions.revoke.enable
3306   type: bool
3307   value: false
3308   mirror: always
3310 # Is support for Element.requestPointerLock enabled?
3311 # This is added for accessibility purpose. When user has no way to exit
3312 # pointer lock (e.g. no keyboard available), they can use this pref to
3313 # disable the Pointer Lock API altogether.
3314 - name: dom.pointer-lock.enabled
3315   type: bool
3316   value: true
3317   mirror: always
3319 # re-SAB: Whether to allow postMessage of a SharedArrayBuffer if various
3320 # preconditions related to COOP and COEP are met
3321 - name: dom.postMessage.sharedArrayBuffer.withCOOP_COEP
3322   type: bool
3323   value: true
3324   mirror: once
3326 # Overridden in all.js on RELEASE_OR_BETA in order to add the locked attribute.
3327 - name: dom.postMessage.sharedArrayBuffer.bypassCOOP_COEP.insecure.enabled
3328   type: RelaxedAtomicBool
3329   value: false
3330   mirror: always
3332 # Should we speculatively prefetch dns for anchor elements on http documents
3333 - name: dom.prefetch_dns_for_anchor_http_document
3334   type: bool
3335   value: true
3336   mirror: always
3338 # Should we speculatively prefetch dns for anchor elements on https documents
3339 - name: dom.prefetch_dns_for_anchor_https_document
3340   type: bool
3341   value: false
3342   mirror: always
3344 # This currently only affects XHTML. For XUL the cache is always allowed.
3345 - name: dom.prototype_document_cache.enabled
3346   type: bool
3347   value: true
3348   mirror: always
3350 # Push
3351 - name: dom.push.enabled
3352   type: RelaxedAtomicBool
3353   value: true
3354   mirror: always
3356 # This enables the SVGPathSeg APIs
3357 - name: dom.svg.pathSeg.enabled
3358   type: bool
3359   value: false
3360   mirror: always
3362 # Preference that is primarily used for testing of problematic file paths.
3363 # It can also be used for switching between different storage directories, but
3364 # such feature is not officially supported.
3365 - name: dom.quotaManager.storageName
3366   type: String
3367   value: "storage"
3368   mirror: never
3370 # An upper limit for the "age" of an origin. Any origin which is older than the
3371 # threshold is considered as unaccessed. That doesn't necessarily mean that
3372 # such origins will be immediatelly archived. They will be archived only when
3373 # dom.quotaManager.checkQuotaInfoLoadTime is true and loading of quota info
3374 # takes a long time (dom.quotaManager.longQuotaInfoLoadTimeThresholdMs is used
3375 # to decide what is a long quota info load time).
3376 - name: dom.quotaManager.unaccessedForLongTimeThresholdSec
3377   type: RelaxedAtomicUint32
3378   value: 33696000 # 13 months
3379   mirror: always
3381 # Should we try to load origin information from the cache?
3382 # See bug 1563023 for more details.
3383 - name: dom.quotaManager.loadQuotaFromCache
3384   type: RelaxedAtomicBool
3385   value: true
3386   mirror: always
3388 # Should we check build ID as part of the cache validation?
3389 # When enabled, the cache is invalidated on any upgrade (or downgrade),
3390 # ensuring that changes in how quota usage is calculated can't cause
3391 # inconsistencies at the cost of a slower initialization. Currently, this
3392 # should only be set to false in tests using a packaged profile that inherently
3393 # includes a build id different from the building running the tests. In the
3394 # future this may be set to false if we are confident that we have sufficiently
3395 # thorough schema versioning.
3396 - name: dom.quotaManager.caching.checkBuildId
3397   type: RelaxedAtomicBool
3398   value: true
3399   mirror: always
3401 # Should we check quota info load time and eventually archive some unaccessed
3402 # origins if loading of quota info takes a long time ?
3403 - name: dom.quotaManager.checkQuotaInfoLoadTime
3404   type: RelaxedAtomicBool
3405   value: true
3406   mirror: always
3408 # An upper limit for quota info load time, anything which takes longer than the
3409 # threshold is considered as long quota info load time.
3410 - name: dom.quotaManager.longQuotaInfoLoadTimeThresholdMs
3411   type: RelaxedAtomicUint32
3412   value: 21000 # 21 seconds
3413   mirror: always
3415 # Preference that users can set to override temporary storage smart limit
3416 # calculation.
3417 - name: dom.quotaManager.temporaryStorage.fixedLimit
3418   type: RelaxedAtomicInt32
3419   value: -1
3420   mirror: always
3422 # A pref that is used to enable testing features.
3423 - name: dom.quotaManager.testing
3424   type: SequentiallyConsistentAtomicBool
3425   value: false
3426   mirror: always
3428 #if defined(XP_WIN)
3429   # Preference that is used to set nsILocalFileWin::useDOSDevicePathSyntax
3430   # attribute for all local file instances created by QuotaManager and its
3431   # clients. The value of this preference is cached so changing the preference
3432   # during runtime has no effect.
3433   # See bug 1626846 for setting this to false by default.
3434 -   name: dom.quotaManager.useDOSDevicePathSyntax
3435     type: RelaxedAtomicBool
3436     value: true
3437     mirror: always
3438     do_not_use_directly: true
3440   # Preference that is used to enable the hack for overrriding xFullPathname in
3441   # QuotaVFS.
3442 -   name: dom.quotaManager.overrideXFullPathname
3443     type: RelaxedAtomicBool
3444     value: true
3445     mirror: always
3446 #elif defined(XP_UNIX)
3447   # Preference that is used to enable the overriding of Unix xFullPathname
3448   # implementation in QuotaVFS.
3449 -   name: dom.quotaManager.overrideXFullPathnameUnix
3450     type: RelaxedAtomicBool
3451     value: true
3452     mirror: always
3453 #endif
3455 # How many times we should retry directory removal or renaming if access was
3456 # denied?
3457 - name: dom.quotaManager.directoryRemovalOrRenaming.maxRetries
3458   type: RelaxedAtomicUint32
3459 #ifdef XP_WIN
3460   value: 10
3461 #else
3462   value: 0
3463 #endif
3464   mirror: always
3466 # How long we should wait between retries (in milliseconds)?
3467 - name: dom.quotaManager.directoryRemovalOrRenaming.delayMs
3468   type: RelaxedAtomicUint32
3469   value: 200
3470   mirror: always
3472 #ifdef MOZ_BACKGROUNDTASKS
3473 # Use a Background Task to delete files at shutdown.
3474 - name: dom.quotaManager.backgroundTask.enabled
3475   type: bool
3476 #ifdef XP_MACOSX
3477 # Needs to figure out how to prevent bug 1827486.
3478   value: false
3479 #else
3480   value: true
3481 #endif
3482   mirror: never
3483 #endif
3485 # Use to control to dump CheckedUnsafePtr creation stack and assignment stacks.
3486 - name: dom.checkedUnsafePtr.dumpStacks.enabled
3487   type: RelaxedAtomicBool
3488   value: false
3489   mirror: always
3491 # Determines within what distance of a tick mark, in pixels, dragging an input
3492 # range range will snap the range's value to that tick mark. By default, this is
3493 # half the default width of the range thumb.
3494 - name: dom.range_element.magnet_effect_threshold
3495   type: float
3496   value: 10.0f
3497   mirror: always
3499 # Reporting API.
3500 - name: dom.reporting.enabled
3501   type: RelaxedAtomicBool
3502   value: false
3503   mirror: always
3505 - name: dom.reporting.testing.enabled
3506   type: RelaxedAtomicBool
3507   value: false
3508   mirror: always
3510 - name: dom.reporting.featurePolicy.enabled
3511   type: RelaxedAtomicBool
3512   value: false
3513   mirror: always
3515 - name: dom.reporting.crash.enabled
3516   type: RelaxedAtomicBool
3517   value: false
3518   mirror: always
3520 - name: dom.reporting.header.enabled
3521   type: RelaxedAtomicBool
3522   value: false
3523   mirror: always
3525 # In seconds. The timeout to remove not-active report-to endpoints.
3526 - name: dom.reporting.cleanup.timeout
3527   type: uint32_t
3528   value: 3600
3529   mirror: always
3531 # Any X seconds the reports are dispatched to endpoints.
3532 - name: dom.reporting.delivering.timeout
3533   type: uint32_t
3534   value: 5
3535   mirror: always
3537 # How many times the delivering of a report should be tried.
3538 - name: dom.reporting.delivering.maxFailures
3539   type: uint32_t
3540   value: 3
3541   mirror: always
3543 # How many reports should be stored in the report queue before being delivered.
3544 - name: dom.reporting.delivering.maxReports
3545   type: uint32_t
3546   value: 100
3547   mirror: always
3549 # Enable Screen Orientation lock
3550 - name: dom.screenorientation.allow-lock
3551   type: bool
3552   value: @IS_NIGHTLY_BUILD@
3553   mirror: always
3555 # Enable Screen Wake Lock API
3556 - name: dom.screenwakelock.enabled
3557   type: bool
3558   value: true
3559   mirror: always
3561 # Whether to enable the JavaScript start-up cache. This causes one of the first
3562 # execution to record the bytecode of the JavaScript function used, and save it
3563 # in the existing cache entry. On the following loads of the same script, the
3564 # bytecode would be loaded from the cache instead of being generated once more.
3565 - name: dom.script_loader.bytecode_cache.enabled
3566   type: bool
3567   value: true
3568   mirror: always
3570 # Ignore the heuristics of the bytecode cache, and always record on the first
3571 # visit. (used for testing purposes).
3573 # Choose one strategy to use to decide when the bytecode should be encoded and
3574 # saved. The following strategies are available right now:
3575 #   * -2 : (reader mode) The bytecode cache would be read, but it would never
3576 #          be saved.
3577 #   * -1 : (eager mode) The bytecode would be saved as soon as the script is
3578 #          seen for the first time, independently of the size or last access
3579 #          time.
3580 #   *  0 : (default) The bytecode would be saved in order to minimize the
3581 #          page-load time.
3583 # Other values might lead to experimental strategies. For more details, have a
3584 # look at: ScriptLoader::ShouldCacheBytecode function.
3585 - name: dom.script_loader.bytecode_cache.strategy
3586   type: int32_t
3587   value: 0
3588   mirror: always
3590 # Select which parse/delazification strategy should be used while parsing
3591 # scripts off-main-thread. (see CompileOptions.h, DelazificationOption enum)
3593 #   0: On-demand only. Delazification will be triggered only on the main thread
3594 #      before the execution of the function.
3596 #   1: Compare on-demand delazification (= 0) with concurrent depth-first
3597 #      delazification (= 2).
3599 #   2: Depth-first. Delazify all functions off-thread in the order of appearance
3600 #      in the source.
3602 #   3: Large-first. Delazify all functions off-thread starting with the largest
3603 #      functions first, and the smallest as the last one to be delazified, where
3604 #      the size of function is measured in bytes between the start to the end of
3605 #      the function.
3607 # 255: Parse everything eagerly, from the first parse. All functions are parsed
3608 #      at the same time as the top-level of a file.
3609 - name: dom.script_loader.delazification.strategy
3610   type: uint32_t
3611   value: 255
3612   mirror: always
3614 # Maximum total size after which the delazification strategy, specified by
3615 # `dom.script_loader.delazification.strategy`, is no longer applied, and the
3616 # on-demand strategy is used by default.
3618 # -1 disable the threshold, and delazification strategy is applied to all
3619 # scripts.
3621 # Default value is 10MB for utf8 scripts.
3622 - name: dom.script_loader.delazification.max_size
3623   type: int32_t
3624   value: 10485760
3625   mirror: always
3627 # Minimum memory, in GB, required to enable delazification strategy, specified
3628 # by `dom.script_loader.delazification.strategy`. Otherwise, the on-demand
3629 # delazification strategy is used.
3630 - name: dom.script_loader.delazification.min_mem
3631   type: int32_t
3632   value: 2
3633   mirror: always
3635 # Enable  speculative off main thread parsing of external scripts as
3636 # soon as they are fetched.
3637 - name: dom.script_loader.external_scripts.speculative_omt_parse.enabled
3638   type: bool
3639   value: true
3640   mirror: always
3642 # Speculatively compile non parser inserted scripts
3643 - name: dom.script_loader.external_scripts.speculate_non_parser_inserted.enabled
3644   type: bool
3645   value: false
3646   mirror: always
3648 # Speculatively compile async scripts
3649 - name: dom.script_loader.external_scripts.speculate_async.enabled
3650   type: bool
3651   value: false
3652   mirror: always
3654 # Speculatively compile link preload scripts
3655 - name: dom.script_loader.external_scripts.speculate_link_preload.enabled
3656   type: bool
3657   value: false
3658   mirror: always
3660 - name: dom.securecontext.allowlist_onions
3661   type: bool
3662   value: false
3663   mirror: always
3665 # This pref enables the featurePolicy header support.
3666 - name: dom.security.featurePolicy.header.enabled
3667   type: bool
3668   value: false
3669   mirror: always
3671 - name: dom.security.featurePolicy.experimental.enabled
3672   type: bool
3673   value: false
3674   mirror: always
3676 # Expose the 'featurePolicy' attribute in document and HTMLIFrameElement
3677 - name: dom.security.featurePolicy.webidl.enabled
3678   type: bool
3679   value: false
3680   mirror: always
3682 # Perform IPC based Principal vetting in ContentParent
3683 - name: dom.security.enforceIPCBasedPrincipalVetting
3684   type: RelaxedAtomicBool
3685   value: true
3686   mirror: always
3688 # For testing purposes only: Flipping this pref to true allows
3689 # to skip the allowlist for about: pages and do not ship with a
3690 # CSP and NS_ASSERT right away.
3691 - name: dom.security.skip_about_page_csp_allowlist_and_assert
3692   type: RelaxedAtomicBool
3693   value: false
3694   mirror: always
3696 # For testing purposes only: Flipping this pref to true allows
3697 # to skip the assertion that every about page ships with a CSP.
3698 - name: dom.security.skip_about_page_has_csp_assert
3699   type: RelaxedAtomicBool
3700   value: false
3701   mirror: always
3703 # For testing purposes only: Flipping this pref to true allows
3704 # to skip the assertion that HTML fragments (e.g. innerHTML) can
3705 # not be used within chrome code or about: pages.
3706 - name: dom.security.skip_html_fragment_assertion
3707   type: RelaxedAtomicBool
3708   value: false
3709   mirror: always
3711 # For testing purposes only; Flipping this pref to true allows
3712 # to skip the assertion that remote scripts can not be loaded
3713 # in system privileged contexts.
3714 - name: dom.security.skip_remote_script_assertion_in_system_priv_context
3715   type: RelaxedAtomicBool
3716   value: false
3717   mirror: always
3719 # If and only if true, support for Trusted Types
3720 # (https://w3c.github.io/trusted-types/dist/spec/) is enabled.
3721 - name: dom.security.trusted_types.enabled
3722   type: RelaxedAtomicBool
3723   value: False
3724   mirror: always
3726 # If true, all content requests will get upgraded to HTTPS://
3727 # (some Firefox functionality requests, like OCSP will not be affected)
3728 - name: dom.security.https_only_mode
3729   type: RelaxedAtomicBool
3730   value: false
3731   mirror: always
3733 # If true, all content requests in Private Browsing Mode will get
3734 # upgraded to HTTPS://. (If dom.security.https_only_mode is set
3735 # to true then this pref has no effect)
3736 - name: dom.security.https_only_mode_pbm
3737   type: RelaxedAtomicBool
3738   value: false
3739   mirror: always
3741 # If true, sends http background request for top-level sites to
3742 # counter long timeouts.
3743 - name: dom.security.https_only_mode_send_http_background_request
3744   type: RelaxedAtomicBool
3745   value: true
3746   mirror: always
3748 # Time limit, in milliseconds, before sending the http background
3749 # request for HTTPS-Only and HTTPS-First
3750 - name: dom.security.https_only_fire_http_request_background_timer_ms
3751   type: RelaxedAtomicUint32
3752   value: 3000
3753   mirror: always
3755 # If true, tries to break upgrade downgrade cycles where https-only tries
3756 # to upgrad ethe connection, but the website tries to downgrade again.
3757 - name: dom.security.https_only_mode_break_upgrade_downgrade_endless_loop
3758   type: RelaxedAtomicBool
3759   value: true
3760   mirror: always
3762 # If true and HTTPS-only mode is enabled, requests
3763 # to local IP addresses are also upgraded
3764 - name: dom.security.https_only_mode.upgrade_local
3765   type: RelaxedAtomicBool
3766   value: false
3767   mirror: always
3769 # If true and HTTPS-only mode is enabled, requests
3770 # to .onion hosts are also upgraded
3771 - name: dom.security.https_only_mode.upgrade_onion
3772   type: RelaxedAtomicBool
3773   value: false
3774   mirror: always
3776 # WARNING: Don't ever update that pref manually! It is only used
3777 # for telemetry purposes and allows to reason about retention of
3778 # the pref dom.security.https_only_mode from above.
3779 - name: dom.security.https_only_mode_ever_enabled
3780   type: RelaxedAtomicBool
3781   value: false
3782   mirror: always
3784 # WARNING: Don't ever update that pref manually! It is only used
3785 # for telemetry purposes and allows to reason about retention of
3786 # the pref dom.security.https_only_mode_pbm from above.
3787 - name: dom.security.https_only_mode_ever_enabled_pbm
3788   type: RelaxedAtomicBool
3789   value: false
3790   mirror: always
3792 # If true checks for secure www connections when https fails
3793 # and gives the user suggestions on the error page
3794 - name: dom.security.https_only_mode_error_page_user_suggestions
3795   type: RelaxedAtomicBool
3796   value: false
3797   mirror: always
3799 # If true, top-level request will get upgraded to HTTPS and
3800 # downgraded again if the request failed.
3801 - name: dom.security.https_first
3802   type: RelaxedAtomicBool
3803   value: false
3804   mirror: always
3806 # If true, top-level requests in Private Browsing Mode will get
3807 # upgraded to HTTPS. (If dom.security.https_first
3808 # is set to true then this pref has no effect)
3809 - name: dom.security.https_first_pbm
3810   type: RelaxedAtomicBool
3811   value: true
3812   mirror: always
3814 # If true, top-level requests that are initiated from the address
3815 # bar and with an empty scheme get upgraded to HTTPS
3816 # with a fallback
3817 - name: dom.security.https_first_schemeless
3818   type: RelaxedAtomicBool
3819   value: @IS_EARLY_BETA_OR_EARLIER@
3820   mirror: always
3822 # If true, will add a special temporary HTTPS-First exception for a site when a
3823 # HTTPS-First upgrade fails.
3824 - name: dom.security.https_first_add_exception_on_failiure
3825   type: RelaxedAtomicBool
3826   value: true
3827   mirror: always
3829 - name: dom.security.unexpected_system_load_telemetry_enabled
3830   type: bool
3831   value: true
3832   mirror: always
3834 # pref controls `Sanitizer` API being exposed
3835 # https://wicg.github.io/sanitizer-api/
3836 - name: dom.security.sanitizer.enabled
3837   type: bool
3838   value: false
3839   mirror: always
3841 # Pref that controls the Element.setHTML API idenpendetly of the sanitizer
3842 # API.
3843 - name: dom.security.setHTML.enabled
3844   type: bool
3845   value: false
3846   mirror: always
3848 # Logs elements and attributes removed by the Sanitizer API to the console.
3849 - name: dom.security.sanitizer.logging
3850   type: bool
3851   value: false
3852   mirror: always
3854 # pref controls `identity` credentials being exposed
3855 - name: dom.security.credentialmanagement.identity.enabled
3856   type: bool
3857   value: false
3858   mirror: always
3860 # pref controls "heavyweight" network discoverable `identity` credentials being exposed
3861 - name: dom.security.credentialmanagement.identity.heavyweight.enabled
3862   type: bool
3863   value: false
3864   mirror: always
3866 # pref controls storable "lightweight" `identity` credentials being exposed
3867 - name: dom.security.credentialmanagement.identity.lightweight.enabled
3868   type: bool
3869   value: false
3870   mirror: always
3872 # pref controls `identity` credential UI for testing. When true, UI is not shown and
3873 # the first option in the account and provider lists are chosen
3874 - name: dom.security.credentialmanagement.identity.select_first_in_ui_lists
3875   type: bool
3876   value: false
3877   mirror: always
3879 # pref controls `identity` credential platform behavior for testing. When true,
3880 # the .well-known file check is not performed.
3881 - name: dom.security.credentialmanagement.identity.test_ignore_well_known
3882   type: bool
3883   value: false
3884   mirror: always
3886 # pref controls whether we should delay identity credential rejections at all
3887 - name: dom.security.credentialmanagement.identity.reject_delay.enabled
3888   type: bool
3889   value: true
3890   mirror: always
3892 # pref controls how long we should delay identity credential rejections if enabled
3893 - name: dom.security.credentialmanagement.identity.reject_delay.duration_ms
3894   type: uint32_t
3895   value: 120000
3896   mirror: always
3898 # Enforce origin check whenever a content process tries to set a document URI
3899 - name: dom.security.setdocumenturi
3900   type: bool
3901   value: true
3902   mirror: always
3904 # Whether or not selection events on text controls are enabled.
3905 - name: dom.select_events.textcontrols.selectionchange.enabled
3906   type: bool
3907   value: true
3908   mirror: always
3910 - name: dom.select_events.textcontrols.selectstart.enabled
3911   type: bool
3912   value: false
3913   mirror: always
3915 - name: dom.select.showPicker.enabled
3916   type: bool
3917   value: true
3918   mirror: always
3920 - name: dom.send_after_paint_to_content
3921   type: bool
3922   value: false
3923   mirror: always
3925 - name: dom.separate_event_queue_for_post_message.enabled
3926   type: bool
3927   value: true
3928   mirror: always
3930 - name: dom.arena_allocator.enabled
3931   type: bool
3932   value: true
3933   mirror: once
3935 - name: dom.serviceWorkers.enabled
3936   type: RelaxedAtomicBool
3937   value: true
3938   mirror: always
3940 - name: dom.serviceWorkers.navigationPreload.enabled
3941   type: RelaxedAtomicBool
3942   value: true
3943   mirror: always
3945 # Mitigates ServiceWorker navigation faults by bypassing the ServiceWorker on
3946 # navigation faults.  This is more extensive than just resetting interception
3947 # because we also mark the page as uncontrolled so that subresources will not
3948 # go to the ServiceWorker either.
3949 - name: dom.serviceWorkers.mitigations.bypass_on_fault
3950   type: bool
3951   value: true
3952   mirror: always
3954 # Additional ServiceWorker navigation mitigation control to unregister the
3955 # ServiceWorker after multiple faults are encountered. The mitigation is
3956 # disabled when this is set to zero, otherwise this is the number of faults that
3957 # need to occur for a specific ServiceWorker before it will be unregistered.
3958 - name: dom.serviceWorkers.mitigations.navigation_fault_threshold
3959   type: uint32_t
3960   value: 3
3961   mirror: always
3963 # This is the group usage head room for service workers.
3964 # The quota usage mitigation algorithm uses this preference to determine if the
3965 # origin or also group data should be cleared or not.
3966 # The default value is 400 MiB.
3967 - name: dom.serviceWorkers.mitigations.group_usage_headroom_kb
3968   type: uint32_t
3969   value: 400 * 1024
3970   mirror: always
3972 - name: dom.serviceWorkers.testing.enabled
3973   type: RelaxedAtomicBool
3974   value: false
3975   mirror: always
3977 # Whether ServiceWorkerManager should persist the service worker
3978 # registered by temporary installed extension (only meant to be used
3979 # for testing purpose, to make it easier to test some particular scenario
3980 # with a temporary installed addon, which doesn't need to be signed to be
3981 # installed on release channel builds).
3982 - name: dom.serviceWorkers.testing.persistTemporarilyInstalledAddons
3983   type: RelaxedAtomicBool
3984   value: false
3985   mirror: always
3987 - name: dom.storage.enabled
3988   type: RelaxedAtomicBool
3989   value: true
3990   mirror: always
3992 # ReadableStream.from(asyncIterable)
3993 - name: dom.streams.from.enabled
3994   type: RelaxedAtomicBool
3995   value: true
3996   mirror: always
3998 - name: dom.workers.pFetch.enabled
3999   type: RelaxedAtomicBool
4000   value: true
4001   mirror: always
4003 - name: dom.workers.importScripts.enforceStrictMimeType
4004   type: RelaxedAtomicBool
4005   value: true
4006   mirror: always
4008 # Is support for modules (new Worker(..., {type: "module"})) enabled for workers?
4009 - name: dom.workers.modules.enabled
4010   type: RelaxedAtomicBool
4011   value: true
4012   mirror: always
4014 - name: dom.workers.serialized-sab-access
4015   type: RelaxedAtomicBool
4016   value: false
4017   mirror: always
4019 # Enable stronger diagnostics on worker shutdown.
4020 # If this is true, we will potentially run an extra GCCC when a  worker should
4021 # exit its DoRunLoop but holds any WorkerRef and we will MOZ_DIAGNOSTIC_ASSERT
4022 # when during that extra GCCC such a WorkerRef is freed.
4023 - name: dom.workers.GCCC_on_potentially_last_event
4024   type: RelaxedAtomicBool
4025 #if defined(FUZZING) || defined(DEBUG)
4026   value: true
4027 #else
4028   value: false
4029 #endif
4030   mirror: always
4032 - name: dom.sitepermsaddon-provider.enabled
4033   type: bool
4034   value: @IS_NOT_ANDROID@
4035   mirror: always
4037 # Whether automatic storage access granting heuristics should be turned on.
4038 - name: dom.storage_access.auto_grants
4039   type: bool
4040   value: true
4041   mirror: always
4043 - name: dom.storage_access.auto_grants.delayed
4044   type: bool
4045   value: true
4046   mirror: always
4048 # Storage-access API.
4049 - name: dom.storage_access.enabled
4050   type: bool
4051   value: true
4052   mirror: always
4054 # Forward-Declared Storage-access API.
4055 - name: dom.storage_access.forward_declared.enabled
4056   type: bool
4057   value: false
4058   mirror: always
4060 # How long the Forward-Declared Storage-access API allows between pair requests
4061 # in seconds
4062 - name: dom.storage_access.forward_declared.lifetime
4063   type: uint32_t
4064   value: 15 * 60
4065   mirror: always
4067 # The maximum number of origins that a given third-party tracker is allowed
4068 # to have concurrent access to before the user is presented with a storage
4069 # access prompt.  Only effective when the auto_grants pref is turned on.
4070 - name: dom.storage_access.max_concurrent_auto_grants
4071   type: int32_t
4072   value: 5
4073   mirror: always
4075 - name: dom.storage_access.frame_only
4076   type: bool
4077   value: true
4078   mirror: always
4080 # Only grant storage access to secure contexts.
4081 - name: dom.storage_access.dont_grant_insecure_contexts
4082   type: RelaxedAtomicBool
4083   value: true
4084   mirror: always
4086 # Whether the File System API is enabled
4087 - name: dom.fs.enabled
4088   type: RelaxedAtomicBool
4089   value: true
4090   mirror: always
4092 # Whether the WritableFileStream is enabled or disabled.
4093 - name: dom.fs.writable_file_stream.enabled
4094   type: RelaxedAtomicBool
4095   value: true
4096   mirror: always
4098 # LocalStorage data limit as determined by summing up the lengths of all string
4099 # keys and values. This is consistent with the legacy implementation and other
4100 # browser engines. This value should really only ever change in unit testing
4101 # where being able to lower it makes it easier for us to test certain edge
4102 # cases. Measured in KiBs.
4103 - name: dom.storage.default_quota
4104   type: RelaxedAtomicUint32
4105   # Only allow relatively small amounts of data since performance of the
4106   # synchronous IO is very bad. We are enforcing simple per-origin quota only.
4107   value: 5 * 1024
4108   mirror: always
4110 # Per-site quota for legacy LocalStorage implementation.
4111 - name: dom.storage.default_site_quota
4112   type: RelaxedAtomicUint32
4113   value: 25 * 1024
4114   mirror: always
4116 # Whether or not the unsupported legacy implemenation should be enabled. Please
4117 # don't advertise this pref as a way for disabling LSNG. This pref is intended
4118 # for internal testing only and will be removed in near future. Accidental
4119 # disabling of LSNG can lead to a data loss in a combination with disabled
4120 # shadow writes. Disabling of shadow writes is the initial step towards
4121 # removing legacy implementation and will be done soon.
4122 - name: dom.storage.enable_unsupported_legacy_implementation
4123   type: RelaxedAtomicBool
4124   value: false
4125   mirror: always
4126   do_not_use_directly: true
4128 # The amount of snapshot peak usage which is attempted to be pre-incremented
4129 # during snapshot creation.
4130 - name: dom.storage.snapshot_peak_usage.initial_preincrement
4131   type: RelaxedAtomicUint32
4132   value: 16384
4133   mirror: always
4135 # The amount of snapshot peak usage which is attempted to be pre-incremented
4136 # during snapshot creation if the LocalStorage usage was already close to the
4137 # limit (a fallback for dom.storage.snapshot_peak_usage.initial_preincrement).
4138 - name: dom.storage.snapshot_peak_usage.reduced_initial_preincrement
4139   type: RelaxedAtomicUint32
4140   value: 4096
4141   mirror: always
4143 # The amount of snapshot peak usage which is attempted to be pre-incremented
4144 # beyond the specific values which are subsequently requested after snapshot
4145 # creation.
4146 - name: dom.storage.snapshot_peak_usage.gradual_preincrement
4147   type: RelaxedAtomicUint32
4148   value: 4096
4149   mirror: always
4151 # The amount of snapshot peak usage which is attempted to be pre-incremented
4152 # beyond the specific values which are subsequently requested after snapshot
4153 # creation if the LocalStorage total usage was already close to the limit
4154 # (a fallback for dom.storage.snapshot_peak_usage.gradual_preincrement).
4155 - name: dom.storage.snapshot_peak_usage.reduced_gradual_preincrement
4156   type: RelaxedAtomicUint32
4157   value: 1024
4158   mirror: always
4160 # How long between a snapshot becomes idle and when we actually finish the
4161 # snapshot. This preference is only used when "dom.storage.snapshot_reusing"
4162 # is true.
4163 - name: dom.storage.snapshot_idle_timeout_ms
4164   type: uint32_t
4165   value: 5000
4166   mirror: always
4168 # Is support for Storage test APIs enabled?
4169 - name: dom.storage.testing
4170   type: bool
4171   value: false
4172   mirror: always
4174 # For area and anchor elements with target=_blank and no rel set to
4175 # opener/noopener.
4176 - name: dom.targetBlankNoOpener.enabled
4177   type: bool
4178   value: true
4179   mirror: always
4181 # Is support for Selection.GetRangesForInterval enabled?
4182 - name: dom.testing.selection.GetRangesForInterval
4183   type: bool
4184   value: false
4185   mirror: always
4187 - name: dom.testing.structuredclonetester.enabled
4188   type: RelaxedAtomicBool
4189   value: false
4190   mirror: always
4192 - name: dom.testing.sync-content-blocking-notifications
4193   type: bool
4194   value: false
4195   mirror: always
4197 # To enable TestUtils interface on WPT
4198 - name: dom.testing.testutils.enabled
4199   type: RelaxedAtomicBool
4200   value: false
4201   mirror: always
4203 - name: dom.text_fragments.enabled
4204   type: RelaxedAtomicBool
4205   value: false
4206   mirror: always
4207   rust: true
4209 - name: dom.textMetrics.actualBoundingBox.enabled
4210   type: RelaxedAtomicBool
4211   value: true
4212   mirror: always
4214 - name: dom.textMetrics.baselines.enabled
4215   type: RelaxedAtomicBool
4216   value: true
4217   mirror: always
4219 - name: dom.textMetrics.emHeight.enabled
4220   type: RelaxedAtomicBool
4221   value: true
4222   mirror: always
4224 - name: dom.textMetrics.fontBoundingBox.enabled
4225   type: RelaxedAtomicBool
4226   value: true
4227   mirror: always
4229 # Time (in ms) that it takes to regenerate 1ms.
4230 - name: dom.timeout.background_budget_regeneration_rate
4231   type: int32_t
4232   value: 100
4233   mirror: always
4235 # Time (in ms) that it takes to regenerate 1ms.
4236 - name: dom.timeout.foreground_budget_regeneration_rate
4237   type: int32_t
4238   value: 1
4239   mirror: always
4241 # Maximum value (in ms) for the background budget. Only valid for
4242 # values greater than 0.
4243 - name: dom.timeout.background_throttling_max_budget
4244   type: int32_t
4245   value: 50
4246   mirror: always
4248 # Maximum value (in ms) for the foreground budget. Only valid for
4249 # values greater than 0.
4250 - name: dom.timeout.foreground_throttling_max_budget
4251   type: int32_t
4252   value: -1
4253   mirror: always
4255 # The maximum amount a timeout can be delayed by budget throttling.
4256 - name: dom.timeout.budget_throttling_max_delay
4257   type: int32_t
4258   value: 15000
4259   mirror: always
4261 # Turn on budget throttling by default.
4262 - name: dom.timeout.enable_budget_timer_throttling
4263   type: bool
4264   value: true
4265   mirror: always
4267 # Should we defer timeouts and intervals while loading a page.  Released
4268 # on Idle or when the page is loaded.
4269 - name: dom.timeout.defer_during_load
4270   type: bool
4271   value: true
4272   mirror: always
4274 # Maximum amount of time in milliseconds consecutive setTimeout()/setInterval()
4275 # callback are allowed to run before yielding the event loop.
4276 - name: dom.timeout.max_consecutive_callbacks_ms
4277   type: uint32_t
4278   value: 4
4279   mirror: always
4281 # Maximum deferral time for setTimeout/Interval in milliseconds
4282 - name: dom.timeout.max_idle_defer_ms
4283   type: uint32_t
4284   value: 10*1000
4285   mirror: always
4287 # Delay in ms from document load until we start throttling background timeouts.
4288 - name: dom.timeout.throttling_delay
4289   type: int32_t
4290   value: 30000
4291   mirror: always
4293 # UDPSocket API
4294 - name: dom.udpsocket.enabled
4295   type: bool
4296   value: false
4297   mirror: always
4299 # Whether to dump worker use counters
4300 - name: dom.use_counters.dump.worker
4301   type: RelaxedAtomicBool
4302   value: false
4303   mirror: always
4305 # Whether to dump document use counters
4306 - name: dom.use_counters.dump.document
4307   type: bool
4308   value: false
4309   mirror: always
4311 # Whether to dump page use counters
4312 - name: dom.use_counters.dump.page
4313   type: bool
4314   value: false
4315   mirror: always
4317 # Time limit, in milliseconds, for user gesture transient activation.
4318 - name: dom.user_activation.transient.timeout
4319   type: uint32_t
4320   value: 5000
4321   mirror: always
4323 # Whether to treat the clicks on scrollbars as user interaction with web content.
4324 - name: dom.user_activation.ignore_scrollbars
4325   type: bool
4326   value: true
4327   mirror: always
4329 # Whether to shim a Components object on untrusted windows.
4330 - name: dom.use_components_shim
4331   type: bool
4332   value: @IS_NOT_NIGHTLY_BUILD@
4333   mirror: always
4335 - name: dom.vibrator.enabled
4336   type: bool
4337   value: false
4338   mirror: always
4340 - name: dom.vibrator.max_vibrate_ms
4341   type: RelaxedAtomicUint32
4342   value: 10000
4343   mirror: always
4345 - name: dom.vibrator.max_vibrate_list_len
4346   type: RelaxedAtomicUint32
4347   value: 128
4348   mirror: always
4350 # Is support for WebVR APIs enabled?
4351 # Disabled everywhere, but not removed.
4352 - name: dom.vr.enabled
4353   type: RelaxedAtomicBool
4354   value: false
4355   mirror: always
4357 # Should VR sessions always be reported as supported, without first
4358 # checking for VR runtimes?  This will prevent permission prompts
4359 # from being suppressed on machines without VR runtimes and cause
4360 # navigator.xr.isSessionSupported to always report that immersive-vr
4361 # is supported.
4362 - name: dom.vr.always_support_vr
4363   type: RelaxedAtomicBool
4364   value: false
4365   mirror: always
4367 # Should AR sessions always be reported as supported, without first
4368 # checking for AR runtimes?  This will prevent permission prompts
4369 # from being suppressed on machines without AR runtimes and cause
4370 # navigator.xr.isSessionSupported to always report that immersive-ar
4371 # is supported.
4372 - name: dom.vr.always_support_ar
4373   type: RelaxedAtomicBool
4374   value: false
4375   mirror: always
4377 # It is often desirable to automatically start vr presentation when
4378 # a user puts on the VR headset.  This is done by emitting the
4379 # Window.vrdisplayactivate event when the headset's sensors detect it
4380 # being worn.  This can result in WebVR content taking over the headset
4381 # when the user is using it outside the browser or inadvertent start of
4382 # presentation due to the high sensitivity of the proximity sensor in some
4383 # headsets, so it is off by default.
4384 - name: dom.vr.autoactivate.enabled
4385   type: RelaxedAtomicBool
4386   value: false
4387   mirror: always
4389 # Minimum number of milliseconds that the browser will wait before
4390 # attempting to poll again for connected VR controllers.  The browser
4391 # will not attempt to poll for VR controllers until it needs to use them.
4392 - name: dom.vr.controller.enumerate.interval
4393   type: RelaxedAtomicInt32
4394   value: 1000
4395   mirror: always
4397 # The threshold value of trigger inputs for VR controllers.
4398 - name: dom.vr.controller_trigger_threshold
4399   type: AtomicFloat
4400   value: 0.1f
4401   mirror: always
4403 # Minimum number of milliseconds that the browser will wait before
4404 # attempting to poll again for connected VR displays.  The browser
4405 # will not attempt to poll for VR displays until it needs to use
4406 # them, such as when detecting a WebVR site.
4407 - name: dom.vr.display.enumerate.interval
4408   type: RelaxedAtomicInt32
4409   value: 5000
4410   mirror: always
4412 # The number of milliseconds since last frame start before triggering a new
4413 # frame. When content is failing to submit frames on time or the lower level
4414 # VR platform APIs are rejecting frames, it determines the rate at which RAF
4415 # callbacks will be called.
4416 - name: dom.vr.display.rafMaxDuration
4417   type: RelaxedAtomicUint32
4418   value: 50
4419   mirror: always
4421 # Minimum number of milliseconds the browser will wait before attempting
4422 # to re-start the VR service after an enumeration returned no devices.
4423 - name: dom.vr.external.notdetected.timeout
4424   type: RelaxedAtomicInt32
4425   value: 60000
4426   mirror: always
4428 # Minimum number of milliseconds the browser will wait before attempting
4429 # to re-start the VR service after a VR API (eg, OpenVR or Oculus)
4430 # requests that we shutdown and unload its libraries.
4431 # To ensure that we don't interfere with VR runtime software auto-updates,
4432 # we will not attempt to re-load the service until this timeout has elapsed.
4433 - name: dom.vr.external.quit.timeout
4434   type: RelaxedAtomicInt32
4435   value: 10000
4436   mirror: always
4438 # Minimum number of milliseconds that the VR session will be kept
4439 # alive after the browser and content no longer are using the
4440 # hardware.  If a VR multitasking environment, this should be set
4441 # very low or set to 0.
4442 - name: dom.vr.inactive.timeout
4443   type: RelaxedAtomicInt32
4444   value: 5000
4445   mirror: always
4447 # Maximum number of milliseconds the browser will wait for content to call
4448 # VRDisplay.requestPresent after emitting vrdisplayactivate during VR
4449 # link traversal.  This prevents a long running event handler for
4450 # vrdisplayactivate from later calling VRDisplay.requestPresent, which would
4451 # result in a non-responsive browser in the VR headset.
4452 - name: dom.vr.navigation.timeout
4453   type: RelaxedAtomicInt32
4454   value: 5000
4455   mirror: always
4457 # Oculus device
4458 - name: dom.vr.oculus.enabled
4459   type: RelaxedAtomicBool
4460 #if defined(HAVE_64BIT_BUILD) && !defined(ANDROID)
4461   # We are only enabling WebVR by default on 64-bit builds (Bug 1384459).
4462   value: true
4463 #else
4464   # On Android, this pref is irrelevant.
4465   value: false
4466 #endif
4467   mirror: always
4469 # When enabled, Oculus sessions may be created with the ovrInit_Invisible
4470 # flag if a page is using tracking but not presenting.  When a page
4471 # begins presenting VR frames, the session will be re-initialized without
4472 # the flag.  This eliminates the "Firefox not responding" warnings in
4473 # the headset, but might not be compatible with all versions of the Oculus
4474 # runtime.
4475 - name: dom.vr.oculus.invisible.enabled
4476   type: RelaxedAtomicBool
4477   value: true
4478   mirror: always
4480 # Minimum number of milliseconds after content has stopped VR presentation
4481 # before the Oculus session is re-initialized to an invisible / tracking
4482 # only mode.  If this value is too high, users will need to wait longer
4483 # after stopping WebVR presentation before automatically returning to the
4484 # Oculus home interface.  (They can immediately return to the Oculus Home
4485 # interface through the Oculus HUD without waiting this duration)
4486 # If this value is too low, the Oculus Home interface may be visible
4487 # momentarily during VR link navigation.
4488 - name: dom.vr.oculus.present.timeout
4489   type: RelaxedAtomicInt32
4490   value: 500
4491   mirror: always
4493 # OpenVR device
4494 - name: dom.vr.openvr.enabled
4495   type: RelaxedAtomicBool
4496 #if !defined(HAVE_64BIT_BUILD) && !defined(ANDROID)
4497   # We are only enabling WebVR by default on 64-bit builds (Bug 1384459).
4498   value: false
4499 #elif defined(XP_WIN) || defined(XP_MACOSX)
4500   # We enable OpenVR by default for Windows and macOS.
4501   value: true
4502 #else
4503   # See Bug 1310663 (Linux).  On Android, this pref is irrelevant.
4504   value: false
4505 #endif
4506   mirror: always
4508 # OSVR device
4509 - name: dom.vr.osvr.enabled
4510   type: RelaxedAtomicBool
4511   value: false
4512   mirror: always
4514 # Pose prediction reduces latency effects by returning future predicted HMD
4515 # poses to callers of the WebVR API.  This currently only has an effect for
4516 # Oculus Rift on SDK 0.8 or greater.
4517 - name: dom.vr.poseprediction.enabled
4518   type: RelaxedAtomicBool
4519   value: true
4520   mirror: always
4522 # Enable a separate process for VR module.
4523 - name: dom.vr.process.enabled
4524   type: bool
4525 #if defined(XP_WIN)
4526   value: true
4527 #else
4528   value: false
4529 #endif
4530   mirror: once
4532 - name: dom.vr.process.startup_timeout_ms
4533   type: int32_t
4534   value: 5000
4535   mirror: once
4537 # Puppet device, used for simulating VR hardware within tests and dev tools.
4538 - name: dom.vr.puppet.enabled
4539   type: RelaxedAtomicBool
4540   value: false
4541   mirror: always
4543 # Starting VR presentation is only allowed within a user gesture or event such
4544 # as VRDisplayActivate triggered by the system. dom.vr.require-gesture allows
4545 # this requirement to be disabled for special cases such as during automated
4546 # tests or in a headless kiosk system.
4547 - name: dom.vr.require-gesture
4548   type: RelaxedAtomicBool
4549   value: true
4550   mirror: always
4552 # Is support for WebXR APIs enabled?
4553 - name: dom.vr.webxr.enabled
4554   type: RelaxedAtomicBool
4555   value: false
4556   mirror: always
4558 # Points in the native bounds geometry are required to be quantized
4559 # sufficiently to prevent fingerprinting. The WebXR spec suggests
4560 # quantizing to the nearest 5 centimeters.
4561 - name: dom.vr.webxr.quantization
4562   type: AtomicFloat
4563   value: 0.05f
4564   mirror: always
4566 #ifdef XP_WIN
4567   # Control firing WidgetMouseEvent by handling Windows pointer messages or
4568   # mouse messages.
4569 -   name: dom.w3c_pointer_events.dispatch_by_pointer_messages
4570     type: bool
4571     value: true
4572     mirror: always
4574 -   name: dom.w3c_pointer_events.scroll_by_pen.enabled
4575     type: bool
4576     value: true
4577     mirror: always
4578 #endif
4580 # If the value is >= 0, it will be used for max touch points in child processes.
4581 - name: dom.maxtouchpoints.testing.value
4582   type: int32_t
4583   value: -1
4584   mirror: always
4586 # Maximum value of navigator.hardwareConcurrency.
4587 - name: dom.maxHardwareConcurrency
4588   type: RelaxedAtomicUint32
4589 #ifdef NIGHTLY_BUILD
4590   value: 128
4591 #else
4592   value: 16
4593 #endif
4594   mirror: always
4596 # W3C pointer events draft.
4597 - name: dom.w3c_pointer_events.implicit_capture
4598   type: bool
4599   value: true
4600   mirror: always
4602 - name: dom.w3c_pointer_events.getcoalescedevents_only_in_securecontext
4603   type: bool
4604   value: @IS_NIGHTLY_BUILD@
4605   mirror: always
4607 # Whether `click`, `auxclick` and `contextmenu` events are dispatched as a
4608 # PointerEvent or MouseEvent.
4609 - name: dom.w3c_pointer_events.dispatch_click_as_pointer_event
4610   type: bool
4611   value: true
4612   mirror: always
4614 # In case Touch API is enabled, this pref controls whether to support
4615 # ontouch* event handlers, document.createTouch, document.createTouchList and
4616 # document.createEvent("TouchEvent").
4617 - name: dom.w3c_touch_events.legacy_apis.enabled
4618   type: bool
4619   value: @IS_ANDROID@
4620   mirror: always
4622 # W3C touch events
4623 # 0 - disabled, 1 - enabled, 2 - autodetect
4624 # Autodetection is currently only supported on Windows and GTK3 (and assumed on
4625 # Android).
4626 - name: dom.w3c_touch_events.enabled
4627   type: int32_t
4628 #if defined(XP_MACOSX)
4629   value: 0
4630 #else
4631   value: 2
4632 #endif
4633   mirror: always
4635 # Is support for the Web Audio API enabled?
4636 - name: dom.webaudio.enabled
4637   type: bool
4638   value: true
4639   mirror: always
4641 - name: dom.webkitBlink.dirPicker.enabled
4642   type: RelaxedAtomicBool
4643   value: @IS_NOT_ANDROID@
4644   mirror: always
4646 # Whether allowing selection across the boundary
4647 # between shadow DOM and light DOM.
4648 # This is based on https://github.com/mfreed7/shadow-dom-selection
4649 - name: dom.shadowdom.selection_across_boundary.enabled
4650   type: bool
4651   value: @IS_NIGHTLY_BUILD@
4652   mirror: always
4654 # NOTE: This preference is used in unit tests. If it is removed or its default
4655 # value changes, please update test_sharedMap_static_prefs.js accordingly.
4656 - name: dom.webcomponents.shadowdom.report_usage
4657   type: bool
4658   value: false
4659   mirror: always
4661 # Is support for Declarative ShadowDOM enabled?
4662 - name: dom.webcomponents.shadowdom.declarative.enabled
4663   type: bool
4664   value: true
4665   mirror: always
4667 # Is support for the Web GPU API enabled?
4668 - name: dom.webgpu.enabled
4669   type: RelaxedAtomicBool
4670   value: @IS_NIGHTLY_BUILD@
4671   mirror: always
4673 # Is support for the Web GPU API enabled on DOM workers?
4674 - name: dom.webgpu.workers.enabled
4675   type: RelaxedAtomicBool
4676   value: false
4677   mirror: always
4679 # Are WebGPU indirect draws/dispatches enabled?
4680 - name: dom.webgpu.indirect-dispatch.enabled
4681   type: RelaxedAtomicBool
4682   value: false
4683   mirror: always
4685 # Comma-separated list of wgpu backend names to permit in WebGPU adapters.
4687 # If non-empty, this is parsed by `wgpu_core::instance::parse_backends_from_comma_list` to
4688 # produce a `wgpu_types::Backends` bitset used to create a `wgpu_core::hub::Global`. As of
4689 # 2023-3-22, recognized names are:
4691 #     "vulkan" | "vk" => Backends::VULKAN,
4692 #     "dx12" | "d3d12" => Backends::DX12,
4693 #     "dx11" | "d3d11" => Backends::DX11,
4694 #     "metal" | "mtl" => Backends::METAL,
4695 #     "opengl" | "gles" | "gl" => Backends::GL,
4696 #     "webgpu" => Backends::BROWSER_WEBGPU,
4697 - name: dom.webgpu.wgpu-backend
4698   type: DataMutexString
4699   value: ""
4700   mirror: always
4701   rust: true
4703 - name: dom.webgpu.allow-present-without-readback
4704   type: RelaxedAtomicBool
4705 #if defined(XP_WIN)
4706   value: true
4707 #else
4708   value: false
4709 #endif
4710   mirror: always
4712 # For testing purposes, crash if we don't get a hardware adapter.
4713 - name: dom.webgpu.testing.assert-hardware-adapter
4714   type: RelaxedAtomicBool
4715   value: false
4716   mirror: always
4717   rust: true
4719 # Whether to pass labels to the hardware abstraction layer. This is only useful when
4720 # inspecting a WebGPU workload in a GPU debugging tool like renderdoc. Enabling it
4721 # exposes poorly tested driver API surfaces so it should not be enabled by default.
4722 - name: dom.webgpu.hal-labels
4723   type: bool
4724   value: false
4725   mirror: once
4726   rust: true
4728 # Is support for HTMLInputElement.webkitEntries enabled?
4729 - name: dom.webkitBlink.filesystem.enabled
4730   type: bool
4731   value: @IS_NOT_ANDROID@
4732   mirror: always
4734 # Whether the WebMIDI API is enabled
4735 - name: dom.webmidi.enabled
4736   type: bool
4737   value: @IS_NOT_ANDROID@
4738   mirror: always
4740 # midi permission is addon-gated
4741 - name: dom.webmidi.gated
4742   type: bool
4743   value: true
4744   mirror: always
4746 - name: dom.webnotifications.allowcrossoriginiframe
4747   type: RelaxedAtomicBool
4748   value: false
4749   mirror: always
4751 - name: dom.webnotifications.enabled
4752   type: RelaxedAtomicBool
4753   value: true
4754   mirror: always
4756 - name: dom.webnotifications.privateBrowsing.enableDespiteLimitations
4757   type: RelaxedAtomicBool
4758   value: false
4759   mirror: always
4761 - name: dom.webnotifications.requireuserinteraction
4762   type: RelaxedAtomicBool
4763   value: true
4764   mirror: always
4766 - name: dom.webnotifications.requireinteraction.enabled
4767   type: RelaxedAtomicBool
4768 #if defined(XP_WIN)
4769   value: true
4770 #else
4771   value: @IS_NIGHTLY_BUILD@
4772 #endif
4773   mirror: always
4775 - name: dom.webnotifications.silent.enabled
4776   type: RelaxedAtomicBool
4777   value: @IS_NIGHTLY_BUILD@
4778   mirror: always
4780 - name: dom.webnotifications.vibrate.enabled
4781   type: RelaxedAtomicBool
4782   value: false
4783   mirror: always
4785 # Setting log level for notification modules.
4786 # The value follows the enum ConsoleLogLevel in ConsoleInstance.webidl.
4787 - name: dom.webnotifications.loglevel
4788   type: String
4789   value: Error
4790   mirror: never
4792 - name: dom.window.clientinformation.enabled
4793   type: bool
4794   value: true
4795   mirror: always
4797 # Whether Window.sizeToContent() is enabled.
4798 - name: dom.window.sizeToContent.enabled
4799   type: bool
4800   value: false
4801   mirror: always
4803 - name: dom.worker.canceling.timeoutMilliseconds
4804   type: RelaxedAtomicUint32
4805   value: 30000    # 30 seconds
4806   mirror: always
4808 - name: dom.worker.use_medium_high_event_queue
4809   type: RelaxedAtomicBool
4810   value: true
4811   mirror: always
4813 # Enables the dispatching of console log events from worker threads to the
4814 # main-thread.
4815 - name: dom.worker.console.dispatch_events_to_main_thread
4816   type: RelaxedAtomicBool
4817   value: true
4818   mirror: always
4820 - name: dom.workers.testing.enabled
4821   type: RelaxedAtomicBool
4822   value: false
4823   mirror: always
4825 # WebIDL test prefs.
4826 - name: dom.webidl.test1
4827   type: bool
4828   value: true
4829   mirror: always
4830 - name: dom.webidl.test2
4831   type: bool
4832   value: true
4833   mirror: always
4835 # WebShare API - exposes navigator.share()
4836 - name: dom.webshare.enabled
4837   type: bool
4838 #ifdef XP_WIN
4839   value: @IS_EARLY_BETA_OR_EARLIER@
4840 #else
4841   value: false
4842 #endif
4843   mirror: always
4845 # WebShare API - allows WebShare without user interaction (for tests only).
4846 - name: dom.webshare.requireinteraction
4847   type: bool
4848   value: true
4849   mirror: always
4851 # Hide the confirm dialog when a POST request is reloaded.
4852 - name: dom.confirm_repost.testing.always_accept
4853   type: bool
4854   value: false
4855   mirror: always
4857 # Whether we should suspend inactive tabs or not
4858 - name: dom.suspend_inactive.enabled
4859   type: bool
4860   value: @IS_ANDROID@
4861   mirror: always
4863 # The following three prefs control the maximum script run time before slow
4864 # script warning.
4866 # Controls the time that a content script can run before showing a
4867 # notification.
4868 - name: dom.max_script_run_time
4869   type: int32_t
4870   value: 10
4871   mirror: always
4873 # Controls whether we want to wait for user input before surfacing notifying
4874 # the parent process about a long-running script.
4875 - name: dom.max_script_run_time.require_critical_input
4876   type: bool
4877 # On desktop, we don't want to annoy the user with a notification if they're
4878 # not interacting with the browser. On Android however, we automatically
4879 # terminate long-running scripts, so we want to make sure we don't get in the
4880 # way of that by waiting for input.
4881 #if defined(MOZ_WIDGET_ANDROID)
4882   value: false
4883 #else
4884   value: true
4885 #endif
4886   mirror: always
4888 # Controls if a content script will be aborted on child process shutdown.
4889 - name: dom.abort_script_on_child_shutdown
4890   type: bool
4891   value: true
4892   mirror: always
4894 - name: dom.max_chrome_script_run_time
4895   type: int32_t
4896   value: 0
4897   mirror: always
4899 - name: dom.max_ext_content_script_run_time
4900   type: int32_t
4901   value: 5
4902   mirror: always
4904 # Let Resize Observer report the size of all fragments, and not just the
4905 # first one, as per CSSWG resolution:
4906 # https://github.com/w3c/csswg-drafts/issues/3673#issuecomment-467221565
4907 - name: dom.resize_observer.support_fragments
4908   type: bool
4909   value: false
4910   mirror: always
4912 # <iframe loading="lazy">
4913 - name: dom.iframe_lazy_loading.enabled
4914   type: RelaxedAtomicBool
4915   value: true
4916   mirror: always
4918 # Whether allowing using <tab> to move focus to root elements
4919 - name: dom.disable_tab_focus_to_root_element
4920   type: bool
4921   value: true
4922   mirror: always
4924 #---------------------------------------------------------------------------
4925 # Prefs starting with "editor"
4926 #---------------------------------------------------------------------------
4928 # Default background color of HTML editor.  This is referred only when
4929 # "editor.use_custom_colors" is set to `true`.
4930 - name: editor.background_color
4931   type: String
4932   value: "#FFFFFF"
4933   mirror: never
4935 # Whether HTMLEditor consides block or inline element with computed style or
4936 # only with the default style of HTML definition.
4937 - name: editor.block_inline_check.use_computed_style
4938   type: bool
4939   value: true
4940   mirror: always
4942 # Delay to mask last input character in password fields.
4943 # If negative value, to use platform's default behavior.
4944 # If 0, no delay to mask password.
4945 # Otherwise, password fields unmask last input character(s) during specified
4946 # time (in milliseconds).
4947 - name: editor.password.mask_delay
4948   type: int32_t
4949   value: -1
4950   mirror: always
4952 # Set to true when you test mask_delay of password editor.  If this is set
4953 # to true, "MozLastInputMasked" is fired when last input characters are
4954 # masked by timeout.
4955 - name: editor.password.testing.mask_delay
4956   type: bool
4957   value: false
4958   mirror: always
4960 # How line breakers are treated in single line editor:
4961 # * 0: Only remove the leading and trailing newlines.
4962 # * 1: Remove the first newline and all characters following it.
4963 # * 2: Replace newlines with spaces (default of Firefox).
4964 # * 3: Remove newlines from the string.
4965 # * 4: Replace newlines with commas (default of Thunderbird).
4966 # * 5: Collapse newlines and surrounding white space characters and
4967 #      remove them from the string.
4968 # Other values are treated as 1.
4969 - name: editor.singleLine.pasteNewlines
4970   type: int32_t
4971   value: 2
4972   mirror: always
4974 # Whether user pastes should be truncated.
4975 - name: editor.truncate_user_pastes
4976   type: bool
4977   value: true
4978   mirror: always
4980 # When this is set to `true`, "editor.background_color" must be set, then,
4981 # the value is treated as default background color of the HTML editor.
4982 # If `false` and "browser.display.use_system_colors" is set to `true`,
4983 # "browser.display.background_color" is used instead.
4984 # Otherwise, no color is used as default background color.
4985 # This pref is for Thunderbird and SeaMonkey.
4986 - name: editor.use_custom_colors
4987   type: bool
4988   value: false
4989   mirror: always
4991 # If this is set to `true`, CSS mode of style editor is enabled by default
4992 # unless it's a mail editor.
4993 # This pref is for Thunderbird and SeaMonkey.
4994 - name: editor.use_css
4995   type: bool
4996   value: false
4997   mirror: always
4999 # Whether enabling blink compatible white-space normalizer or keep using
5000 # Gecko's traditional white-space normalizer.
5001 - name: editor.white_space_normalization.blink_compatible
5002   type: bool
5003   value: false
5004   mirror: always
5006 # General prefs for editor, indicating whether Gecko-specific editing UI is
5007 # enabled by default. Those UIs are not implemented by any other browsers.  So,
5008 # only Firefox users can change some styles with them. This means that Firefox
5009 # users may get unexpected result of some web apps if they assume that users
5010 # cannot change such styles.
5011 - name: editor.resizing.enabled_by_default
5012   type: bool
5013   value: false
5014   mirror: always
5015 - name: editor.inline_table_editing.enabled_by_default
5016   type: bool
5017   value: false
5018   mirror: always
5019 - name: editor.positioning.enabled_by_default
5020   type: bool
5021   value: false
5022   mirror: always
5024 # Controls if a double click word selection also deletes one adjacent whitespace
5025 # (if feasible). This mimics native behaviour on MacOS.
5026 - name: editor.word_select.delete_space_after_doubleclick_selection
5027   type: bool
5028 #ifdef XP_MACOSX
5029   value: true
5030 #else
5031   value: false
5032 #endif
5033   mirror: always
5035 #---------------------------------------------------------------------------
5036 # Prefs starting with "extensions."
5037 #---------------------------------------------------------------------------
5039 # Pref that enforces the use of web_accessible_resources for content loads.
5040 # This behavior is default for MV3.  The pref controls this for MV2.
5041 - name: extensions.content_web_accessible.enabled
5042   type: bool
5043   value: false
5044   mirror: always
5046 # Whether the InstallTrigger implementation should be enabled (or hidden and
5047 # none of its methods available).
5048 - name: extensions.InstallTriggerImpl.enabled
5049   type: bool
5050   value: false
5051   mirror: always
5053 # Whether the InstallTrigger implementation should be enabled (or completely
5054 # hidden), separate from InstallTriggerImpl because InstallTrigger is improperly
5055 # used also for UA detection.
5056 - name: extensions.InstallTrigger.enabled
5057   type: bool
5058   value: @IS_NOT_EARLY_BETA_OR_EARLIER@
5059   mirror: always
5062 # Whether the background.service_worker in the extension manifest.json file
5063 # is enabled.
5064 # all.js locks the pref to false when MOZ_WEBEXT_WEBIDL_ENABLED is false.
5065 - name: extensions.backgroundServiceWorker.enabled
5066   type: bool
5067   value: false
5068   mirror: once
5070 # Maximum number of misspelled words in a text.
5071 - name: extensions.spellcheck.inline.max-misspellings
5072   type: int32_t
5073   value: 500
5074   mirror: always
5076 # Whether the extensions can register a service worker on its own.
5077 # NOTE: WebExtensions Framework ability to register a background service worker
5078 # is not controlled by this pref, only the extension code ability to use
5079 # navigator.serviceWorker.register is locked behind this pref.
5080 - name: extensions.serviceWorkerRegister.allowed
5081   type: bool
5082   value: false
5083   mirror: always
5085 # Temporary pref to allow reverting the fix to bug 1853409.
5086 # TODO bug 1856071: Remove this pref.
5087 # When true, extensions can run content scripts in about:blank documents that
5088 # have a null principal. When false, extensions require permissions to all URLs.
5089 - name: extensions.script_about_blank_without_permission
5090   type: bool
5091   value: false
5092   mirror: always
5094 # When true, content scripts of MV2 extensions can run in blob:-documents without
5095 # requiring match_origin_as_fallback to be set, to revert bug 1897113.
5096 # TODO bug 1899134: Remove this pref.
5097 - name: extensions.script_blob_without_match_origin_as_fallback
5098   type: bool
5099   value: false
5100   mirror: always
5102 # Legacy behavior on filterResponse calls on intercepted sw script requests.
5103 - name: extensions.filterResponseServiceWorkerScript.disabled
5104   type: bool
5105   value: false
5106   mirror: always
5108 # This pref governs whether we run webextensions in a separate process (true)
5109 # or the parent/main process (false)
5110 - name: extensions.webextensions.remote
5111   type: RelaxedAtomicBool
5112   value: false
5113   mirror: always
5115 # Whether to expose the MockExtensionAPI test interface in tests.
5116 # The interface MockExtensionAPI doesn't represent a real extension API,
5117 # it is only available in test and does include a series of cases useful
5118 # to test the API request handling without tying the unit test to a
5119 # specific WebExtensions API.
5120 - name: extensions.webidl-api.expose_mock_interface
5121   type: RelaxedAtomicBool
5122   value: false
5123   mirror: always
5125 # Whether to allow acccess to AddonManager to developer sites for testing
5126 # NOTE: We'd like this to be a "hidden" pref once StaticPrefs supports it.
5127 - name: extensions.webapi.testing
5128   type: RelaxedAtomicBool
5129   value: false
5130   mirror: always
5132 # Automation-only pref to allow AddonManager over insecure protocols.
5133 # NOTE: We'd like this to be a "hidden" pref once StaticPrefs supports it.
5134 - name: extensions.webapi.testing.http
5135   type: RelaxedAtomicBool
5136   value: false
5137   mirror: always
5139 # Whether to expose the AddonManager web API.
5140 - name: extensions.webapi.enabled
5141   type: RelaxedAtomicBool
5142   value: @IS_NOT_ANDROID@
5143   mirror: always
5145 #---------------------------------------------------------------------------
5146 # Prefs starting with "fission."
5147 #---------------------------------------------------------------------------
5149 # Whether to enable Fission in new windows by default.
5150 # IMPORTANT: This preference should *never* be checked directly, since any
5151 # session can contain a mix of Fission and non-Fission windows. Instead,
5152 # callers should check whether the relevant nsILoadContext has the
5153 # `useRemoteSubframes` flag set.
5154 # Callers which cannot use `useRemoteSubframes` must use
5155 # `Services.appinfo.fissionAutostart` or `mozilla::FissionAutostart()` to check
5156 # whether fission is enabled by default.
5157 - name: fission.autostart
5158   type: bool
5159   value: @IS_NOT_ANDROID@
5160   mirror: never
5162 # Disable storing the session history in the parent process, and accessing it
5163 # over IPC from the child processes.
5164 - name: fission.disableSessionHistoryInParent
5165   type: bool
5166   value: @IS_ANDROID@
5167   mirror: once
5168   do_not_use_directly: true
5170 # If session history is stored in the parent process, enable bfcache for it.
5171 - name: fission.bfcacheInParent
5172   type: bool
5173   value: true
5174   mirror: always
5175   do_not_use_directly: true
5177 # Allow renaming of processes from Private Windows to the eTLD+1 on nightly
5178 # Setting this pref creates a privacy leak, but helps greatly with
5179 # debugging.
5180 - name: fission.processPrivateWindowSiteNames
5181   type: bool
5182   value: false
5183   mirror: always
5185 # Allow renaming of process names to the eTLD+1 on all versions, NOT
5186 # including processes from Private Windows
5187 # Setting this pref creates a privacy leak, but helps greatly with
5188 # debugging
5189 - name: fission.processSiteNames
5190   type: bool
5191   value: false
5192   mirror: always
5194 # Allow showing of current profile along with process names, NOT
5195 # including processes from Private Windows
5196 # Setting this pref creates a privacy leak, but helps greatly with
5197 # debugging
5198 - name: fission.processProfileName
5199   type: bool
5200   value: false
5201   mirror: always
5203 # The strategy used to control how sites are isolated into separate processes
5204 # when Fisison is enabled. This pref has no effect if Fission is disabled.
5205 # See the `WebContentIsolationStrategy` enum in `ProcessIsolation.cpp`.
5206 - name: fission.webContentIsolationStrategy
5207   type: uint32_t
5208   value: 1
5209   mirror: always
5211 # Time in seconds before a site loaded with the Cross-Origin-Opener-Policy
5212 # header is no longer considered high-value and isolated in the "highValueCOOP"
5213 # configuration.
5214 - name: fission.highValue.coop.expiration
5215   type: uint32_t
5216   value: 2592000   # 30 days (in seconds)
5217   mirror: always
5219 # Time in seconds before a site are considered high-value by the login detection
5220 # service is no longer considered high-value and isolated in the "highValueHasSavedLogin"
5221 # or "highValueIsLoggedIn" configuration.
5222 - name: fission.highValue.login.expiration
5223   type: uint32_t
5224   value: 2592000   # 30 days (in seconds)
5225   mirror: always
5227 # If true, capture login attemp, and add "highValueIsLoggedIn" permission to
5228 # the permission manager no matter whether fission is enabled and
5229 # WebContentIsolationStrateg is set to IsolateHighvalue.
5230 - name: fission.highValue.login.monitor
5231   type: bool
5232   value: @IS_ANDROID@
5233   mirror: always
5235 # If true, do not send blocklisted preference values to the subprocess
5236 - name: fission.omitBlocklistedPrefsInSubprocesses
5237   type: RelaxedAtomicBool
5238   value: true
5239   mirror: always
5241 # If true, crash when a blocklisted preference is accessed in a subprocess
5242 - name: fission.enforceBlocklistedPrefsInSubprocesses
5243   type: RelaxedAtomicBool
5244   value: @IS_EARLY_BETA_OR_EARLIER@
5245   mirror: always
5247 #---------------------------------------------------------------------------
5248 # Prefs starting with "font."
5249 #---------------------------------------------------------------------------
5251 # A value greater than zero enables font size inflation for
5252 # pan-and-zoom UIs, so that the fonts in a block are at least the size
5253 # that, if a block's width is scaled to match the device's width, the
5254 # fonts in the block are big enough that at most the pref value ems of
5255 # text fit in *the width of the device*.
5257 # When both this pref and the next are set, the larger inflation is used.
5258 - name: font.size.inflation.emPerLine
5259   type: uint32_t
5260   value: 0
5261   mirror: always
5263 # A value greater than zero enables font size inflation for
5264 # pan-and-zoom UIs, so that if a block's width is scaled to match the
5265 # device's width, the fonts in a block are at least the given font size.
5266 # The value given is in twips, i.e., 1/20 of a point, or 1/1440 of an inch.
5268 # When both this pref and the previous are set, the larger inflation is used.
5269 - name: font.size.inflation.minTwips
5270   type: uint32_t
5271   value: 0
5272   mirror: always
5274 # In products with multi-mode pan-and-zoom and non-pan-and-zoom UIs,
5275 # this pref forces font inflation to always be enabled in all modes.
5276 # That is, any heuristics used to detect pan-and-zoom
5277 # vs. non-pan-and-zoom modes are disabled and all content is treated
5278 # as pan-and-zoom mode wrt font inflation.
5280 # This pref has no effect if font inflation is not enabled through
5281 # either of the prefs above.  It has no meaning in single-mode UIs.
5282 - name: font.size.inflation.forceEnabled
5283   type: bool
5284   value: false
5285   mirror: always
5287 # In products with multi-mode pan-and-zoom and non-pan-and-zoom UIs,
5288 # this pref disables font inflation in master-process contexts where
5289 # existing heuristics can't be used determine enabled-ness.
5291 # This pref has no effect if font inflation is not enabled through
5292 # either of the prefs above.  The "forceEnabled" pref above overrides
5293 # this pref.
5294 - name: font.size.inflation.disabledInMasterProcess
5295   type: bool
5296   value: false
5297   mirror: always
5299 # Defines the font size inflation mapping intercept parameter.
5301 # Font size inflation computes a minimum font size, m, based on
5302 # other preferences (see font.size.inflation.minTwips and
5303 # font.size.inflation.emPerLine, above) and the width of the
5304 # frame in which the text resides. Using this minimum, a specified
5305 # font size, s, is mapped to an inflated font size, i, using an
5306 # equation that varies depending on the value of the font size
5307 # inflation mapping intercept parameter, P.
5309 # If the intercept parameter is negative, then the following mapping
5310 # function is used:
5312 # i = m + s
5314 # If the intercept parameter is non-negative, then the mapping function
5315 # is a function such that its graph meets the graph of i = s at the
5316 # point where both i and s are (1 + P/2) * m for values of s that are
5317 # large enough. This means that when s=0, i is always equal to m.
5318 - name: font.size.inflation.mappingIntercept
5319   type: int32_t
5320   value: 1
5321   mirror: always
5323 # Since the goal of font size inflation is to avoid having to
5324 # repeatedly scroll side to side to read a block of text, and there are
5325 # a number of page layouts where a relatively small chunk of text is
5326 # better off not being inflated according to the same algorithm we use
5327 # for larger chunks of text, we want a threshold for an amount of text
5328 # that triggers font size inflation.  This preference controls that
5329 # threshold.
5331 # It controls the threshold used within an *approximation* of the
5332 # number of lines of text we use.  In particular, if we assume that
5333 # each character (collapsing collapsible whitespace) has a width the
5334 # same as the em-size of the font (when, normally, it's actually quite
5335 # a bit smaller on average), this preference gives the percentage of a
5336 # number of lines of text we'd need to trigger inflation.  This means
5337 # that a percentage of 100 means that we'd need a number of characters
5338 # (we know the font size and the width) equivalent to one line of
5339 # square text (which is actually a lot less than a real line of text).
5341 # A value of 0 means there's no character length threshold.
5342 - name: font.size.inflation.lineThreshold
5343   type: uint32_t
5344   value: 400
5345   mirror: always
5347 # This controls the percentage that fonts will be inflated, if font
5348 # size inflation is enabled. Essentially, if we have a specified font
5349 # size, s, and an inflated font size, i, this specifies that the ratio
5350 # i/s * 100 should never exceed the value of this preference. In order
5351 # for this preference to have any effect, its value must be greater
5352 # than 100, since font inflation can never decrease the ratio i/s.
5353 - name: font.size.inflation.maxRatio
5354   type: uint32_t
5355   value: 0
5356   mirror: always
5358 #---------------------------------------------------------------------------
5359 # Prefs starting with "full-screen-api."
5360 #---------------------------------------------------------------------------
5362 - name: full-screen-api.enabled
5363   type: bool
5364   value: true
5365   mirror: always
5367 - name: full-screen-api.allow-trusted-requests-only
5368   type: bool
5369   value: true
5370   mirror: always
5372 - name: full-screen-api.mouse-event-allow-left-button-only
5373   type: bool
5374   value: true
5375   mirror: always
5377 - name: full-screen-api.exit-on.windowOpen
5378   type: bool
5379   value: true
5380   mirror: always
5382 - name: full-screen-api.exit-on.windowRaise
5383   type: bool
5384   value: true
5385   mirror: always
5387 - name: full-screen-api.pointer-lock.enabled
5388   type: bool
5389   value: true
5390   mirror: always
5392 # whether to prevent the top level widget from going fullscreen
5393 - name: full-screen-api.ignore-widgets
5394   type: bool
5395   value: false
5396   mirror: always
5398 #---------------------------------------------------------------------------
5399 # Prefs starting with "fuzzing.". It's important that these can only be
5400 # checked in fuzzing builds (when FUZZING is defined), otherwise you could
5401 # enable the fuzzing stuff on your regular build which would be bad :)
5402 #---------------------------------------------------------------------------
5404 #ifdef FUZZING
5405 -   name: fuzzing.enabled
5406     type: bool
5407 #ifdef FUZZING_SNAPSHOT
5408     value: true
5409 #else
5410     value: false
5411 #endif
5412     mirror: always
5414 -   name: fuzzing.necko.enabled
5415     type: RelaxedAtomicBool
5416     value: false
5417     mirror: always
5419 -   name: fuzzing.necko.http3
5420     type: RelaxedAtomicBool
5421     value: false
5422     mirror: always
5423     rust: true
5425 # This configures a virtual authenticator for WebAuthn. The value encodes the
5426 # arguments to the WebDriver "Add Virtual Authenticator" extension command.
5427 # Bits 0, 1, 2, and 3 encode "is_user_verified", "is_user_consenting",
5428 # "has_user_verification", and "has_resident_key" in that order. Bit 5 encodes
5429 # the transport, either "usb" (0) or "internal" (1). Bits 6 and 7 encode the
5430 # protocol, either "ctap1/u2f" (1), "ctap2" (2), or "ctap2_1" (3). Note that
5431 # the valid protocol values are non-zero---an authenticator will not be
5432 # configured if this pref is set to zero. Changing this pref requires
5433 # a restart.
5434 - name: fuzzing.webauthn.authenticator_config
5435   type: RelaxedAtomicUint32
5436   value: 0
5437   mirror: always
5438   rust: true
5439 #endif
5441 #---------------------------------------------------------------------------
5442 # Prefs starting with "general."
5443 #---------------------------------------------------------------------------
5445 - name: general.aboutConfig.enable
5446   type: bool
5447   value: true
5448   mirror: always
5450 # Limits the depth of recursive conversion of data when opening
5451 # a content to view.  This is mostly intended to prevent infinite
5452 # loops with faulty converters involved.
5453 - name: general.document_open_conversion_depth_limit
5454   type: uint32_t
5455   value: 20
5456   mirror: always
5458 - name: general.smoothScroll
5459   type: RelaxedAtomicBool
5460   value: true
5461   mirror: always
5463 # This pref and general.smoothScroll.stopDecelerationWeighting determine
5464 # the timing function.
5465 - name: general.smoothScroll.currentVelocityWeighting
5466   type: AtomicFloat
5467   value: 0.25
5468   mirror: always
5470 # To connect consecutive scroll events into a continuous flow, the animation's
5471 # duration should be longer than scroll events intervals (or else the scroll
5472 # will stop before the next event arrives - we're guessing the next interval
5473 # by averaging recent intervals).
5474 # This defines how much longer the duration is compared to the events
5475 # interval (percentage).
5476 - name: general.smoothScroll.durationToIntervalRatio
5477   type: RelaxedAtomicInt32
5478   value: 200
5479   mirror: always
5481 - name: general.smoothScroll.lines
5482   type: RelaxedAtomicBool
5483   value: true
5484   mirror: always
5486 - name: general.smoothScroll.lines.durationMaxMS
5487   type: RelaxedAtomicInt32
5488   value: 150
5489   mirror: always
5491 - name: general.smoothScroll.lines.durationMinMS
5492   type: RelaxedAtomicInt32
5493   value: 150
5494   mirror: always
5496 - name: general.smoothScroll.mouseWheel
5497   type: RelaxedAtomicBool
5498   value: true
5499   mirror: always
5501 - name: general.smoothScroll.mouseWheel.durationMaxMS
5502   type: RelaxedAtomicInt32
5503   value: 200
5504   mirror: always
5506 - name: general.smoothScroll.mouseWheel.durationMinMS
5507   type: RelaxedAtomicInt32
5508   value: 50
5509   mirror: always
5511 - name: general.smoothScroll.other
5512   type: RelaxedAtomicBool
5513   value: true
5514   mirror: always
5516 - name: general.smoothScroll.other.durationMaxMS
5517   type: RelaxedAtomicInt32
5518   value: 150
5519   mirror: always
5521 - name: general.smoothScroll.other.durationMinMS
5522   type: RelaxedAtomicInt32
5523   value: 150
5524   mirror: always
5526 - name: general.smoothScroll.pages
5527   type: RelaxedAtomicBool
5528   value: true
5529   mirror: always
5531 - name: general.smoothScroll.pages.durationMaxMS
5532   type: RelaxedAtomicInt32
5533   value: 150
5534   mirror: always
5536 - name: general.smoothScroll.pages.durationMinMS
5537   type: RelaxedAtomicInt32
5538   value: 150
5539   mirror: always
5541 - name: general.smoothScroll.scrollbars
5542   type: RelaxedAtomicBool
5543   value: true
5544   mirror: always
5546 - name: general.smoothScroll.scrollbars.durationMaxMS
5547   type: RelaxedAtomicInt32
5548   value: 150
5549   mirror: always
5551 - name: general.smoothScroll.scrollbars.durationMinMS
5552   type: RelaxedAtomicInt32
5553   value: 150
5554   mirror: always
5556 - name: general.smoothScroll.pixels
5557   type: RelaxedAtomicBool
5558   value: true
5559   mirror: always
5561 - name: general.smoothScroll.pixels.durationMaxMS
5562   type: RelaxedAtomicInt32
5563   value: 150
5564   mirror: always
5566 - name: general.smoothScroll.pixels.durationMinMS
5567   type: RelaxedAtomicInt32
5568   value: 150
5569   mirror: always
5571 # This pref and general.smoothScroll.currentVelocityWeighting determine
5572 # the timing function.
5573 - name: general.smoothScroll.stopDecelerationWeighting
5574   type: AtomicFloat
5575   value: 0.4f
5576   mirror: always
5578 # Alternative smooth scroll physics. ("MSD" = Mass-Spring-Damper)
5579 - name: general.smoothScroll.msdPhysics.enabled
5580   type: RelaxedAtomicBool
5581   value: @IS_NIGHTLY_BUILD@
5582   mirror: always
5584 - name: general.smoothScroll.msdPhysics.continuousMotionMaxDeltaMS
5585   type: RelaxedAtomicInt32
5586   value: 120
5587   mirror: always
5589 - name: general.smoothScroll.msdPhysics.motionBeginSpringConstant
5590   type: RelaxedAtomicInt32
5591   value: 1250
5592   mirror: always
5594 - name: general.smoothScroll.msdPhysics.slowdownMinDeltaMS
5595   type: RelaxedAtomicInt32
5596   value: 12
5597   mirror: always
5599 - name: general.smoothScroll.msdPhysics.slowdownMinDeltaRatio
5600   type: AtomicFloat
5601   value: 1.3f
5602   mirror: always
5604 - name: general.smoothScroll.msdPhysics.slowdownSpringConstant
5605   type: RelaxedAtomicInt32
5606   value: 2000
5607   mirror: always
5609 - name: general.smoothScroll.msdPhysics.regularSpringConstant
5610   type: RelaxedAtomicInt32
5611   value: 1000
5612   mirror: always
5614 #---------------------------------------------------------------------------
5615 # Prefs starting with "geo."
5616 #---------------------------------------------------------------------------
5618 # Is support for Navigator.geolocation enabled?
5619 - name: geo.enabled
5620   type: bool
5621   value: true
5622   mirror: always
5624 # Time, in milliseconds, to wait for the location provider to spin up.
5625 - name: geo.timeout
5626   type: int32_t
5627   value: 6000
5628   mirror: always
5630 #ifdef MOZ_ENABLE_DBUS
5631 # Whether to use Geoclue location provider (if available on the system).
5632 - name: geo.provider.use_geoclue
5633   type: bool
5634   value: true
5635   mirror: always
5637 # Whether to always provide high location accuracy, even if site
5638 # doesn't actually request this level of accuracy.
5639 # Almost no site correctly requests high accuracy so force it by default
5640 # for compatibility with other geolocation providers.
5641 - name: geo.provider.geoclue.always_high_accuracy
5642   type: bool
5643   value: true
5644   mirror: always
5645 #endif
5647 #---------------------------------------------------------------------------
5648 # Prefs starting with "gfx."
5649 #---------------------------------------------------------------------------
5651 # Allow 24-bit colour when the hardware supports it.
5652 - name: gfx.android.rgb16.force
5653   type: bool
5654   value: false
5655   mirror: once
5657 - name: gfx.apitrace.enabled
5658   type: bool
5659   value: false
5660   mirror: once
5662 - name: gfx.blithelper.precision
5663   type: RelaxedAtomicUint32
5664   value: 2 # { 0: lowp, 1: mediump, 2: highp }
5665   mirror: always
5667 - name: gfx.blithelper.lut-size.rgb.b
5668   type: RelaxedAtomicUint32
5669   value: 15
5670   mirror: always
5671 - name: gfx.blithelper.lut-size.rgb.g
5672   type: RelaxedAtomicUint32
5673   value: 31
5674   mirror: always
5675 - name: gfx.blithelper.lut-size.rgb.r
5676   type: RelaxedAtomicUint32
5677   value: 31
5678   mirror: always
5680 - name: gfx.blithelper.lut-size.ycbcr.cb
5681   type: RelaxedAtomicUint32
5682   value: 15
5683   mirror: always
5684 - name: gfx.blithelper.lut-size.ycbcr.cr
5685   type: RelaxedAtomicUint32
5686   value: 31
5687   mirror: always
5688 - name: gfx.blithelper.lut-size.ycbcr.y
5689   type: RelaxedAtomicUint32
5690   value: 31
5691   mirror: always
5693 # Nb: we ignore this pref on release and beta.
5694 - name: gfx.blocklist.all
5695   type: int32_t
5696   value: 0
5697   mirror: once
5699 #if defined(XP_DARWIN)
5700 - name: gfx.cairo_quartz_cg_layer.enabled
5701   type: bool
5702   value: true
5703   mirror: always
5704 #endif
5706 - name: gfx.canvas.accelerated
5707   type: bool
5708 #if defined(XP_MACOSX) || defined(XP_LINUX) && !defined(ANDROID)
5709   value: true
5710 #elif defined(MOZ_WIDGET_ANDROID)
5711   value: true
5712 #else
5713   value: false
5714 #endif
5715   mirror: always
5717 # Whether to attempt to enable Accelerated Canvas2D regardless of blocklisting.
5718 - name: gfx.canvas.accelerated.force-enabled
5719   type: bool
5720   value: false
5721   mirror: always
5723 - name: gfx.canvas.accelerated.async-present
5724   type: RelaxedAtomicBool
5725   value: true
5726   mirror: always
5728 - name: gfx.canvas.accelerated.cache-items
5729   type: RelaxedAtomicUint32
5730   value: 2048
5731   mirror: always
5733 - name: gfx.canvas.accelerated.cache-size
5734   type: RelaxedAtomicUint32
5735   value: 256
5736   mirror: always
5738 - name: gfx.canvas.accelerated.reserve-empty-cache
5739   type: RelaxedAtomicUint32
5740   value: 36
5741   mirror: always
5743 - name: gfx.canvas.accelerated.max-draw-target-count
5744   type: RelaxedAtomicUint32
5745   value: 200
5746   mirror: always
5748 - name: gfx.canvas.accelerated.max-size
5749   type: RelaxedAtomicInt32
5750   value: 8192
5751   mirror: always
5753 - name: gfx.canvas.accelerated.min-size
5754   type: RelaxedAtomicInt32
5755   value: 128
5756   mirror: always
5758 - name: gfx.canvas.accelerated.max-surface-size
5759   type: RelaxedAtomicUint32
5760   value: 5280
5761   mirror: always
5763 - name: gfx.canvas.accelerated.shared-page-size
5764   type: RelaxedAtomicUint32
5765   value: 1024
5766   mirror: always
5768 # The minimum number of frames before acting on performance profile info
5769 - name: gfx.canvas.accelerated.profile-frames
5770   type: RelaxedAtomicUint32
5771   value: 10
5772   mirror: always
5774 # The ratio of failed frames to total frames when to fall back from acceleration
5775 - name: gfx.canvas.accelerated.profile-fallback-ratio
5776   type: AtomicFloat
5777   value: 0.3
5778   mirror: always
5780 # The ratio of cache misses at which to fail a profile frame
5781 - name: gfx.canvas.accelerated.profile-cache-miss-ratio
5782   type: AtomicFloat
5783   value: 0.66
5784   mirror: always
5786 # The maximum size of the GPU path cache in MB.
5787 - name: gfx.canvas.accelerated.gpu-path-size
5788   type: RelaxedAtomicUint32
5789   value: 4
5790   mirror: always
5792 # The maximum allowed complexity of a GPU path.
5793 - name: gfx.canvas.accelerated.gpu-path-complexity
5794   type: RelaxedAtomicUint32
5795   value: 4000
5796   mirror: always
5798 # Whether to accelerate stroked paths by converting them to fill paths.
5799 - name: gfx.canvas.accelerated.stroke-to-fill-path
5800   type: RelaxedAtomicBool
5801   value: false
5802   mirror: always
5804 # Whether to use aa-stroke to accelerate stroked paths.
5805 - name: gfx.canvas.accelerated.aa-stroke.enabled
5806   type: RelaxedAtomicBool
5807   value: true
5808   mirror: always
5810 # Draws an indicator if acceleration is used.
5811 - name: gfx.canvas.accelerated.debug
5812   type: RelaxedAtomicBool
5813   value: false
5814   mirror: always
5816 # 0x7fff is the maximum supported xlib surface size and is more than enough for canvases.
5817 - name: gfx.canvas.max-size
5818   type: RelaxedAtomicInt32
5819   value: 0x7fff
5820   mirror: always
5822 - name: gfx.canvas.remote
5823   type: bool
5824 #if defined(XP_WIN)
5825   value: true
5826 #else
5827   value: false
5828 #endif
5829   mirror: once
5831 - name: gfx.canvas.remote.allow-in-parent
5832   type: bool
5833   value: false
5834   mirror: once
5836 # Whether OffscreenCanvas can use remote canvas
5837 - name: gfx.canvas.remote.allow-offscreen
5838   type: RelaxedAtomicBool
5839   value: true
5840   mirror: always
5842 # How many worker threads spawned for remote canvas
5843 #  -1 - Calculate based on processor cores
5844 #   0 - No worker threads spawned, will do work on CanvasRenderThread
5845 #  >0 - Create worker thread pool with given size
5846 - name: gfx.canvas.remote.worker-threads
5847   type: int32_t
5848 #if defined(XP_WIN)
5849   value: -1
5850 #else
5851   value: 0
5852 #endif
5853   mirror: once
5855 # Default size of the shmem buffers used for recording
5856 - name: gfx.canvas.remote.default-buffer-size
5857   type: RelaxedAtomicUint32
5858   value: 32 * 1024
5859   mirror: always
5861 # Maximum number of Default size shmem buffers to use
5862 - name: gfx.canvas.remote.max_default_buffers
5863   type: RelaxedAtomicUint32
5864   value: 256
5865   mirror: always
5867 # How many times to spin before waiting in remote canvas
5868 - name: gfx.canvas.remote.max-spin-count
5869   type: RelaxedAtomicUint32
5870   value: 500
5871   mirror: always
5873 # How long to wait in milliseconds for the next event while in a transaction
5874 - name: gfx.canvas.remote.event-timeout-ms
5875   type: RelaxedAtomicUint32
5876   value: 2
5877   mirror: always
5879 # How many times we have a spare buffer before we drop one
5880 - name: gfx.canvas.remote.drop-buffer-limit
5881   type: RelaxedAtomicUint32
5882   value: 100
5883   mirror: always
5885 # Delay in milliseconds to drop buffers when there have been no non-empty transactions
5886 - name: gfx.canvas.remote.drop-buffer-milliseconds
5887   type: RelaxedAtomicUint32
5888   value: 10000
5889   mirror: always
5891 - name: gfx.canvas.remote.use-draw-image-fast-path
5892   type: RelaxedAtomicBool
5893   value: true
5894   mirror: always
5896 - name: gfx.canvas.remote.recycle-used-data-surface
5897   type: RelaxedAtomicBool
5898   value: true
5899   mirror: always
5901 - name: gfx.canvas.remote.use-canvas-translator-event
5902   type: bool
5903   value: @IS_NIGHTLY_BUILD@
5904   mirror: once
5906 - name: gfx.canvas.willreadfrequently.enabled
5907   type: bool
5908 #if defined(XP_WIN)
5909   value: false
5910 #else
5911   value: true
5912 #endif
5913   mirror: once
5916 - name: gfx.color_management.display_profile
5917   type: DataMutexString
5918   value: ""
5919   mirror: always # But be warned: We cache the result.
5921 - name: gfx.color_management.force_srgb
5922   type: RelaxedAtomicBool
5923   value: false
5924   mirror: always
5926 - name: gfx.color_management.native_srgb
5927   type: RelaxedAtomicBool
5928 #if defined(XP_MACOSX)
5929   value: true
5930 #else
5931   value: false
5932 #endif
5933   mirror: always
5935 - name: gfx.color_management.enablev4
5936   type: RelaxedAtomicBool
5937   value: true
5938   mirror: always
5940 # 0 = Off, 1 = Full, 2 = Tagged Images Only.
5941 # See CMSMode in gfx/thebes/gfxPlatform.h.
5942 - name: gfx.color_management.mode
5943   type: RelaxedAtomicInt32
5944   value: 2
5945   mirror: always
5947 # The zero default here should match QCMS_INTENT_DEFAULT from qcms.h
5948 - name: gfx.color_management.rendering_intent
5949   type: RelaxedAtomicInt32
5950   value: 0
5951   mirror: always
5953 - name: gfx.color_management.rec709_gamma_as_srgb
5954   type: RelaxedAtomicBool
5955   value: true # Tragic backwards compat.
5956   mirror: always
5958 - name: gfx.color_management.rec2020_gamma_as_rec709
5959   type: RelaxedAtomicBool
5960   value: true # Match naive behavior, but hopefully we can stop soon!
5961   mirror: always
5963 # Whether GL contexts can be migrated to a different GPU (to match the one the
5964 # OS is using for composition).
5966 # 0 = force disable migration
5967 # 1 = use migration where in safe configurations (the default)
5968 # 2 = force enable migration (for testing)
5969 - name: gfx.compositor.gpu-migration
5970   type: RelaxedAtomicInt32
5971   value: 1
5972   mirror: always
5974 - name: gfx.core-animation.tint-opaque
5975   type: RelaxedAtomicBool
5976   value: false
5977   mirror: always
5979 #ifdef XP_DARWIN
5980   # Create specialized video-only layers for video content in
5981   # fullscreen windows. Consistently works well on Apple Silicon,
5982   # some issues remain on Intel hardware.
5983 -   name: gfx.core-animation.specialize-video
5984     type: RelaxedAtomicBool
5985 #if defined(MOZ_AARCH64)
5986     value: true
5987 #else
5988     value: false
5989 #endif
5990     mirror: always
5991 #endif
5993 #if defined(XP_DARWIN) && defined(NIGHTLY_BUILD)
5994   # Spoof the timing of the video sample instead of marking the untimed
5995   # sample to be displayed immediately.
5996 -   name: gfx.core-animation.specialize-video.spoof-timing
5997     type: RelaxedAtomicBool
5998     value: false
5999     mirror: always
6001   # Check that the sample has a color space and if it doesn't, log that
6002   # and supply the default color space from the main display.
6003 -   name: gfx.core-animation.specialize-video.check-color-space
6004     type: RelaxedAtomicBool
6005     value: false
6006     mirror: always
6008   # Log properties of the video surface, buffer, and format.
6009 -   name: gfx.core-animation.specialize-video.log
6010     type: RelaxedAtomicBool
6011     value: false
6012     mirror: always
6013 #endif
6015 #ifdef XP_DARWIN
6016 -   name: gfx.core-animation.low-power-telemetry-frames
6017     type: int32_t
6018     value: 600
6019     mirror: once
6020 #endif
6022 #if defined(MOZ_WIDGET_ANDROID)
6023   # Overrides the glClear color used when the surface origin is not (0, 0)
6024   # Used for drawing a border around the content.
6025 -   name: gfx.compositor.override.clear-color.r
6026     type: AtomicFloat
6027     value: 0.0f
6028     mirror: always
6030 -   name: gfx.compositor.override.clear-color.g
6031     type: AtomicFloat
6032     value: 0.0f
6033     mirror: always
6035 -   name: gfx.compositor.override.clear-color.b
6036     type: AtomicFloat
6037     value: 0.0f
6038     mirror: always
6040 -   name: gfx.compositor.override.clear-color.a
6041     type: AtomicFloat
6042     value: 0.0f
6043     mirror: always
6044 #endif  # defined(MOZ_WIDGET_ANDROID)
6046 - name: gfx.content.always-paint
6047   type: RelaxedAtomicBool
6048   value: false
6049   mirror: always
6051 # Size in megabytes
6052 - name: gfx.content.skia-font-cache-size
6053   type: int32_t
6054   value: 5
6055   mirror: once
6057 - name: gfx.device-reset.limit
6058   type: int32_t
6059   value: 10
6060   mirror: once
6062 - name: gfx.device-reset.threshold-ms
6063   type: int32_t
6064   value: -1
6065   mirror: once
6068 # Whether to disable the automatic detection and use of direct2d.
6069 - name: gfx.direct2d.disabled
6070   type: bool
6071   value: false
6072   mirror: once
6074 # Whether to attempt to enable Direct2D regardless of automatic detection or
6075 # blacklisting.
6076 - name: gfx.direct2d.force-enabled
6077   type: bool
6078   value: false
6079   mirror: once
6081 - name: gfx.direct2d.target-independent-rasterization.disabled
6082   type: bool
6083   value: false
6084   mirror: once
6086 - name: gfx.direct3d11.reuse-decoder-device
6087   type: bool
6088   value: true
6089   mirror: once
6090 # Enable reuse decoder device even when it is blocked.
6091 - name: gfx.direct3d11.reuse-decoder-device-force-enabled
6092   type: bool
6093   value: false
6094   mirror: once
6096 - name: gfx.direct3d11.allow-keyed-mutex
6097   type: RelaxedAtomicBool
6098   value: true
6099   mirror: always
6101 - name: gfx.direct3d11.use-double-buffering
6102   type: RelaxedAtomicBool
6103   value: false
6104   mirror: always
6106 - name: gfx.direct3d11.enable-debug-layer
6107   type: bool
6108   value: false
6109   mirror: once
6111 - name: gfx.direct3d11.break-on-error
6112   type: bool
6113   value: false
6114   mirror: once
6116 - name: gfx.direct3d11.sleep-on-create-device
6117   type: int32_t
6118   value: 0
6119   mirror: once
6121 # Rate by which the frame rate is divided. I.e. at a number higher than 1 we
6122 # will only refresh every <x> frames.
6123 - name: gfx.display.frame-rate-divisor
6124   type: RelaxedAtomicInt32
6125   value: 1
6126   mirror: always
6128 - name: gfx.display.max-frame-rate
6129   type: RelaxedAtomicInt32
6130   value: 0
6131   mirror: always
6133 # Whether to disable downloadable font cache so that behavior is consistently
6134 # the uncached load behavior across pages (useful for testing reflow problems)
6135 - name: gfx.downloadable_fonts.disable_cache
6136   type: RelaxedAtomicBool
6137   value: false
6138   mirror: always
6140 # Whether to preserve color bitmap tables in fonts (bypassing OTS).
6141 # Currently these are supported only on platforms where we use Freetype
6142 # to render fonts (Linux/Gtk and Android).
6143 - name: gfx.downloadable_fonts.keep_color_bitmaps
6144   type: RelaxedAtomicBool
6145   value: false
6146   mirror: always
6148 # Whether to validate OpenType variation tables in fonts.
6149 - name: gfx.downloadable_fonts.validate_variation_tables
6150   type: RelaxedAtomicBool
6151   value: true
6152   mirror: always
6154 # Whether OTS validation should be applied to OpenType Layout (OTL) tables.
6155 - name: gfx.downloadable_fonts.otl_validation
6156   type: RelaxedAtomicBool
6157   value: @IS_NOT_RELEASE_OR_BETA@
6158   mirror: always
6160 - name: gfx.e10s.font-list.shared
6161   type: bool
6162   value: true
6163   mirror: once
6165 # Do we fire a notification about missing fonts, so the front-end can decide
6166 # whether to try and do something about it (e.g. download additional fonts)?
6167 - name: gfx.missing_fonts.notify
6168   type: RelaxedAtomicBool
6169   value: false
6170   mirror: always
6172 #if !defined(MOZ_WIDGET_ANDROID)
6173 - name: gfx.egl.prefer-gles.enabled
6174   type: bool
6175 #if defined(MOZ_WIDGET_GTK) && defined(MOZ_AARCH64)
6176   value: true
6177 #else
6178   value: false
6179 #endif
6180   mirror: once
6181 #endif
6183 # [Windows] Whether registry FontSubstitutes entries are used unconditionally,
6184 # or only if the original font is not available.
6185 #if defined(XP_WIN)
6186 - name: gfx.windows-font-substitutes.always
6187   type: bool
6188   value: false
6189   mirror: once
6190 #endif
6192 - name: gfx.font-list-omt.enabled
6193   type: bool
6194 #if defined(XP_MACOSX)
6195   value: true
6196 #else
6197   value: false
6198 #endif
6199   mirror: once
6201 # [Android] OPPO, realme and OnePlus device seem to crash when using Font
6202 # Match API. We turn off this feature on these devices. Set true if you want to
6203 # turn on it at force.
6204 #if defined(MOZ_WIDGET_ANDROID)
6205 - name: gfx.font-list.use_font_match_api.force-enabled
6206   type: bool
6207   value: false
6208   mirror: once
6209 #endif
6211 # Whether to load fonts (e.g. Twemoji Mozilla) bundled with the application:
6212 #  -1 - Auto behavior based on OS version (currently, disables loading on
6213 #       "low-memory" Android devices)
6214 #   0 - Skip loading any bundled fonts
6215 #   1 - Always load bundled fonts
6216 - name: gfx.bundled-fonts.activate
6217   type: int32_t
6218   value: -1
6219   mirror: once
6221 - name: gfx.font_loader.delay
6222   type: RelaxedAtomicUint32
6223 #if defined(XP_WIN)
6224   value: 60000
6225 #else
6226   value: 8000
6227 #endif
6228   mirror: always
6230 # Disable antialiasing of Ahem, for use in tests.
6231 - name: gfx.font_rendering.ahem_antialias_none
6232   type: RelaxedAtomicBool
6233   value: false
6234   mirror: always
6236 #if defined(XP_DARWIN)
6237   # Set to true to revert from HarfBuzz AAT shaping to the old Core Text
6238   # backend.
6239 -   name: gfx.font_rendering.coretext.enabled
6240     type: RelaxedAtomicBool
6241     value: false
6242     mirror: always
6243 #endif
6245 - name: gfx.font_rendering.colr_v1.enabled
6246   type: RelaxedAtomicBool
6247   value: true
6248   mirror: always
6250 - name: gfx.font_rendering.opentype_svg.enabled
6251   type: RelaxedAtomicBool
6252   value: true
6253   mirror: always
6254   rust: true
6256 - name: gfx.font_rendering.fallback.async
6257   type: RelaxedAtomicBool
6258   value: true
6259   mirror: always
6261 # whether to always search all font cmaps during system font fallback
6262 - name: gfx.font_rendering.fallback.always_use_cmaps
6263   type: RelaxedAtomicBool
6264   value: false
6265   mirror: always
6267 # whether to do font fallback for codepoints with General Category = Unassigned
6268 - name: gfx.font_rendering.fallback.unassigned_chars
6269   type: RelaxedAtomicBool
6270   value: false
6271   mirror: always
6273 #ifdef MOZ_WIDGET_GTK
6274 -   name: gfx.font_rendering.fontconfig.max_generic_substitutions
6275     type: RelaxedAtomicUint32
6276     value: 3
6277     mirror: always
6278 #endif
6280 #if defined(XP_WIN)
6281 # Whether the DirectWrite bold simulation should be used when a bold font-weight
6282 # is requested but no bold face available in the family. This renders poorly with
6283 # some third-party fonts, so by default we disable it for webfonts and allow it
6284 # only with locally-installed fonts.
6285 # Values:
6286 #   0 - never use DWrite bold simulation; always multi-strike instead
6287 #   1 - use DWrite bold for installed fonts, multi-strike for webfont resources
6288 #   2 - use DWrite bold for all fonts
6289 - name: gfx.font_rendering.directwrite.bold_simulation
6290   type: RelaxedAtomicUint32
6291   value: 1
6292   mirror: always
6293 #endif
6295 - name: gfx.font_rendering.graphite.enabled
6296   type: RelaxedAtomicBool
6297   value: true
6298   mirror: always
6300 # Cache shaped word results
6301 - name: gfx.font_rendering.wordcache.charlimit
6302   type: RelaxedAtomicUint32
6303   value: 32
6304   mirror: always
6306 # Cache shaped word results
6307 - name: gfx.font_rendering.wordcache.maxentries
6308   type: RelaxedAtomicUint32
6309   value: 10000
6310   mirror: always
6312 # The level of logging:
6313 # - 0: no logging;
6314 # - 1: adds errors;
6315 # - 2: adds warnings;
6316 # - 3 or 4: adds debug logging.
6317 # If you set the value to 4, you will also need to set the environment
6318 # variable MOZ_LOG to gfx:4. See mozilla/Logging.h for details.
6319 - name: gfx.logging.level
6320   type: RelaxedAtomicInt32
6321   value: mozilla::gfx::LOG_DEFAULT
6322   mirror: always
6323   include: mozilla/gfx/LoggingConstants.h
6325 - name: gfx.logging.crash.length
6326   type: uint32_t
6327   value: 16
6328   mirror: once
6330 # The maximums here are quite conservative, we can tighten them if problems show up.
6331 - name: gfx.logging.texture-usage.enabled
6332   type: bool
6333   value: false
6334   mirror: once
6336 - name: gfx.logging.peak-texture-usage.enabled
6337   type: bool
6338   value: false
6339   mirror: once
6341 - name: gfx.logging.slow-frames.enabled
6342   type: bool
6343   value: false
6344   mirror: once
6346 # Use gfxPlatform::MaxAllocSize instead of the pref directly.
6347 - name: gfx.max-alloc-size
6348   type: int32_t
6349   value: (int32_t)0x7FFFFFFF
6350   mirror: once
6351   do_not_use_directly: true
6353 # Use gfxPlatform::MaxTextureSize instead of the pref directly.
6354 - name: gfx.max-texture-size
6355   type: int32_t
6356   value: (int32_t)32767
6357   mirror: once
6358   do_not_use_directly: true
6360 # Enable OffscreenCanvas everywhere.
6361 - name: gfx.offscreencanvas.enabled
6362   type: RelaxedAtomicBool
6363   value: true
6364   mirror: always
6366 - name: gfx.offscreencanvas.shared-provider
6367   type: RelaxedAtomicBool
6368   value: true
6369   mirror: always
6371 - name: gfx.offscreencanvas.snapshot-timeout-ms
6372   type: int32_t
6373   value: 10000
6374   mirror: always
6376 - name: gfx.omta.background-color
6377   type: bool
6378   value: true
6379   mirror: always
6381 - name: gfx.partialpresent.force
6382   type: RelaxedAtomicInt32
6383   value: 0
6384   mirror: always
6386 # SwapInterval
6387 - name: gfx.swap-interval.glx
6388   type: RelaxedAtomicBool
6389   value: true
6390   mirror: always
6392 - name: gfx.swap-interval.egl
6393   type: RelaxedAtomicBool
6394   mirror: always
6395 #ifdef MOZ_WIDGET_ANDROID
6396   value: true
6397 #else
6398   value: false
6399 #endif
6402 # Log severe performance warnings to the error console and profiles.
6403 # This should be use to quickly find which slow paths are used by test cases.
6404 - name: gfx.perf-warnings.enabled
6405   type: RelaxedAtomicBool
6406   value: false
6407   mirror: always
6409 #ifdef MOZ_X11
6410 # Whether to force using GLX over EGL.
6411 - name: gfx.x11-egl.force-disabled
6412   type: bool
6413   value: false
6414   mirror: once
6416 # Whether to force using EGL over GLX.
6417 - name: gfx.x11-egl.force-enabled
6418   type: bool
6419   value: false
6420   mirror: once
6422 - name: gfx.x11.glx_sgi_video_sync
6423   type: bool
6424   value: false
6425   mirror: once
6426 #endif
6428 - name: gfx.testing.device-fail
6429   type: RelaxedAtomicBool
6430   value: false
6431   mirror: always
6433 - name: gfx.testing.device-reset
6434   type: RelaxedAtomicInt32
6435   value: 0
6436   mirror: always
6438 # Meant to be used for tests only. If greater than 0 then we assert that the
6439 # number of active render textures increases by this amount or less.
6440 #ifdef DEBUG
6441 - name: gfx.testing.assert-render-textures-increase
6442   type: RelaxedAtomicInt32
6443   value: 0
6444   mirror: always
6445 #endif
6447 - name: gfx.text.disable-aa
6448   type: bool
6449   value: false
6450   mirror: once
6452 - name: gfx.text.subpixel-position.force-enabled
6453   type: bool
6454   value: false
6455   mirror: once
6457 - name: gfx.text.subpixel-position.force-disabled
6458   type: bool
6459   value: false
6460   mirror: once
6462 - name: gfx.use-iosurface-textures
6463   type: bool
6464   value: false
6465   mirror: once
6467 - name: gfx.use-mutex-on-present
6468   type: bool
6469   value: false
6470   mirror: once
6472 # Use SurfaceTextures as preferred backend for TextureClient/Host.
6473 - name: gfx.use-surfacetexture-textures
6474   type: bool
6475   value: false
6476   mirror: once
6478 - name: gfx.vsync.compositor.unobserve-count
6479   type: int32_t
6480   value: 10
6481   mirror: once
6483 - name: gfx.vsync.force-disable-waitforvblank
6484   type: RelaxedAtomicBool
6485   value: false
6486   mirror: always
6488 - name: gfx.will-change.ignore-opacity
6489   type: RelaxedAtomicBool
6490   value: true
6491   mirror: always
6493 # Should we override the blocklist to enable WebGPU?
6494 - name: gfx.webgpu.ignore-blocklist
6495   type: bool
6496   value: false
6497   mirror: once
6499 # Whether to use the WebRender hardware backend
6500 - name: gfx.webrender.all
6501   type: bool
6502   value: false
6503   mirror: once
6505 #ifdef XP_WIN
6506 - name: gfx.webrender.force-angle
6507   type: bool
6508   value: true
6509   mirror: once
6510 #endif
6512 # WebRender is not enabled when there is no GPU process on window when
6513 # WebRender uses ANGLE. It is for avoiding that WebGL and WebRender use ANGLE
6514 # at once. But there is a case that we want to enable WebRender for testing.
6515 #ifdef XP_WIN
6516 - name: gfx.webrender.enabled-no-gpu-process-with-angle-win
6517   type: bool
6518   value: true
6519   mirror: once
6520 #endif
6522 - name: gfx.webrender.svg-images
6523   type: RelaxedAtomicBool
6524   value: true
6525   mirror: always
6527 - name: gfx.webrender.svg-shapes
6528   type: RelaxedAtomicBool
6529   value: true
6530   mirror: always
6532 - name: gfx.webrender.debug.blob.paint-flashing
6533   type: RelaxedAtomicBool
6534   value: false
6535   mirror: always
6537 - name: gfx.webrender.debug.enable-capture
6538   type: bool
6539   value: false
6540   mirror: once
6542 - name: gfx.webrender.debug.dl.dump-parent
6543   type: RelaxedAtomicBool
6544   value: false
6545   mirror: always
6547 - name: gfx.webrender.debug.dl.dump-content
6548   type: RelaxedAtomicBool
6549   value: false
6550   mirror: always
6552 - name: gfx.webrender.debug.dl.dump-content-serialized
6553   type: RelaxedAtomicBool
6554   value: false
6555   mirror: always
6557 # When true, we output warning messages when rejecting surface promotion
6558 # when it has been requested. This is important for color correctness of
6559 # wide color videos, as well as for GPU performance for all videos.
6560 - name: gfx.webrender.debug.surface-promotion-logging
6561   type: RelaxedAtomicBool
6562   value: false
6563   mirror: always
6565 #ifdef MOZ_WIDGET_GTK
6566 - name: gfx.webrender.reject-software-driver
6567   type: bool
6568   value: true
6569   mirror: once
6570 #endif
6572 - name: gfx.webrender.debug.highlight-painted-layers
6573   type: RelaxedAtomicBool
6574   value: false
6575   mirror: always
6577 - name: gfx.webrender.debug.slow-cpu-frame-threshold
6578   type: AtomicFloat
6579   value: 10.0
6580   mirror: always
6582 - name: gfx.webrender.late-scenebuild-threshold
6583   type: RelaxedAtomicInt32
6584   value: 4
6585   mirror: always
6587 - name: gfx.webrender.max-filter-ops-per-chain
6588   type: RelaxedAtomicUint32
6589   value: 64
6590   mirror: always
6592 - name: gfx.webrender.batching.lookback
6593   type: uint32_t
6594   value: 10
6595   mirror: always
6597 - name: gfx.webrender.blob-tile-size
6598   type: uint32_t
6599   value: 256
6600   mirror: always
6602 - name: gfx.webrender.batched-upload-threshold
6603   type: int32_t
6604 #if defined(MOZ_WIDGET_ANDROID)
6605   value: 262144
6606 #else
6607   value: 65536
6608 #endif
6609   mirror: always
6611 - name: gfx.webrender.compositor
6612   type: bool
6613 #if defined(XP_WIN) || defined(XP_MACOSX)
6614   value: true
6615 #else
6616   value: false
6617 #endif
6618   mirror: once
6620 - name: gfx.webrender.scissored-cache-clears.enabled
6621   type: bool
6622   value: true
6623   mirror: once
6625 - name: gfx.webrender.scissored-cache-clears.force-enabled
6626   type: bool
6627   value: false
6628   mirror: once
6630 - name: gfx.webrender.compositor.force-enabled
6631   type: bool
6632   value: false
6633   mirror: once
6635 - name: gfx.webrender.compositor.max_update_rects
6636   type: uint32_t
6637   value: 1
6638   mirror: once
6640 - name: gfx.webrender.compositor.surface-pool-size
6641   type: uint32_t
6642   value: 25
6643   mirror: once
6645 # Number of damage rects we can give to the compositor for a new frame with
6646 # partial present. This controls whether partial present is used or not.
6647 - name: gfx.webrender.max-partial-present-rects
6648   type: uint32_t
6649 #if defined(XP_WIN) || defined(MOZ_WIDGET_ANDROID) || defined(MOZ_WIDGET_GTK)
6650   value: 1
6651 #else
6652   value: 0
6653 #endif
6654   mirror: once
6656 # Whether or not we can reuse the buffer contents using the GL buffer age
6657 # extension, if supported by the platform. This requires partial present
6658 # to be used.
6659 - name: gfx.webrender.allow-partial-present-buffer-age
6660   type: bool
6661   value: true
6662   mirror: once
6664 # Whether or not we should force partial present on.
6665 - name: gfx.webrender.force-partial-present
6666   type: bool
6667   value: false
6668   mirror: once
6670 - name: gfx.webrender.enable-gpu-markers
6671   type: bool
6672 #ifdef DEBUG
6673   value: true
6674 #else
6675   value: false
6676 #endif
6677   mirror: once
6679 - name: gfx.webrender.enable-item-cache
6680   type: bool
6681   value: true
6682   mirror: once
6684 # Whether or not to fallback from WebRender to Software WebRender.
6685 - name: gfx.webrender.fallback.software
6686   type: bool
6687   value: true
6688   mirror: once
6690 #ifdef XP_WIN
6691   # Whether to use an overlay of hardware decoded video with DirectComposition
6692 -   name: gfx.webrender.dcomp-video-hw-overlay-win
6693     type: bool
6694     value: true
6695     mirror: once
6696   # Enable hardware decoded video overlay even when it is blocked.
6697 -   name: gfx.webrender.dcomp-video-hw-overlay-win-force-enabled
6698     type: bool
6699     value: false
6700     mirror: once
6701   # Whether to use a yuv video overlay layers with DirectComposition
6702 -   name: gfx.webrender.dcomp-video-yuv-overlay-win
6703     type: bool
6704     value: false
6705     mirror: once
6706 -   name: gfx.webrender.dcomp-video-vp-scaling-win
6707     type: bool
6708     value: true
6709     mirror: once
6710   # Whether to use virtual surfaces, as opposed to each tile owning a surface.
6711 -   name: gfx.webrender.dcomp-use-virtual-surfaces
6712     type: bool
6713     value: true
6714     mirror: once
6715   # Whether to use an overlay of software decoded video with DirectComposition
6716 -   name: gfx.webrender.dcomp-video-sw-overlay-win
6717     type: bool
6718     value: true
6719     mirror: once
6720   # Enable software decoded video overlay even when it is blocked.
6721 -   name: gfx.webrender.dcomp-video-sw-overlay-win-force-enabled
6722     type: bool
6723     value: false
6724     mirror: once
6725 -   name: gfx.webrender.dcomp-video-check-slow-present
6726     type: RelaxedAtomicBool
6727     value: true
6728     mirror: always
6729   # Force triple buffering in overlay's video swap chain
6730 -   name: gfx.webrender.dcomp-video-force-triple-buffering
6731     type: RelaxedAtomicBool
6732     value: false
6733     mirror: always
6734 -   name: gfx.webrender.dcomp-video-swap-chain-present-interval-0
6735     type: RelaxedAtomicBool
6736     value: false
6737     mirror: always
6738 -   name: gfx.video.convert-yuv-to-nv12.image-host-win
6739     type: RelaxedAtomicBool
6740     value: true
6741     mirror: always
6742 #endif
6744 # Whether or not fallback to Software WebRender requires the GPU process.
6745 - name: gfx.webrender.fallback.software.requires-gpu-process
6746   type: bool
6747   value: false
6748   mirror: once
6750 - name: gfx.webrender.program-binary-disk
6751   type: bool
6752 #if defined(XP_WIN) || defined(ANDROID)
6753   value: true
6754 #else
6755   value: false
6756 #endif
6757   mirror: once
6759 - name: gfx.webrender.use-optimized-shaders
6760   type: bool
6761   value: true
6762   mirror: once
6764 - name: gfx.webrender.precache-shaders
6765   type: bool
6766   value: false
6767   mirror: once
6769 # When gl debug message is a high severity message, forwward it to gfx critical
6770 # note.
6771 - name: gfx.webrender.gl-debug-message-critical-note
6772   type: bool
6773 #if defined(XP_WIN) && defined(NIGHTLY_BUILD)
6774   value: true
6775 #else
6776   value: false
6777 #endif
6778   mirror: once
6780 # Enable printing gl debug messages
6781 - name: gfx.webrender.gl-debug-message-print
6782   type: bool
6783   value: false
6784   mirror: once
6786 #ifdef NIGHTLY_BUILD
6787   # Keep this pref hidden on non-nightly builds to avoid people accidentally
6788   # turning it on.
6789 - name: gfx.webrender.panic-on-gl-error
6790   type: bool
6791   value: false
6792   mirror: once
6793 #endif
6795 #ifdef XP_WIN
6796   # Enables display of performance debugging counters when DirectComposition
6797   # is used.
6798   # Performance counters are displayed on the top-right corner of the screen.
6799 -   name: gfx.webrender.debug.dcomp-counter
6800     type: RelaxedAtomicBool
6801     value: false
6802     mirror: always
6803   # Enables highlighting redraw regions of DCompositionVisual
6804 -   name: gfx.webrender.debug.dcomp-redraw-regions
6805     type: RelaxedAtomicBool
6806     value: false
6807     mirror: always
6808 #endif
6810 #ifdef XP_DARWIN
6811   # Files show up in $HOME/Desktop/nativelayerdumps-PID/frame-123.html
6812 -   name: gfx.webrender.debug.dump-native-layer-tree-to-file
6813     type: RelaxedAtomicBool
6814     value: false
6815     mirror: always
6816 #endif
6818 - name: gfx.webrender.enable-low-priority-pool
6819   type: RelaxedAtomicBool
6820 #if defined(ANDROID)
6821   value: false
6822 #else
6823   value: true
6824 #endif
6825   mirror: always
6827   # Force subpixel anti-aliasing as much as possible, despite performance cost.
6828 - name: gfx.webrender.quality.force-subpixel-aa-where-possible
6829   type: bool
6830   value: false
6831   mirror: always
6833 - name: gfx.webrender.enable-subpixel-aa
6834   type: bool
6835   mirror: once
6836 #ifdef MOZ_WIDGET_ANDROID
6837   value: false
6838 #else
6839   value: true
6840 #endif
6842 #ifdef XP_MACOSX
6843 - name: gfx.webrender.enable-client-storage
6844   type: bool
6845   value: true
6846   mirror: once
6847 #endif
6849  # Width of WebRender tile size
6850 - name: gfx.webrender.picture-tile-width
6851   type: RelaxedAtomicInt32
6852   value: 1024
6853   mirror: always
6855  # Width of WebRender tile size
6856 - name: gfx.webrender.picture-tile-height
6857   type: RelaxedAtomicInt32
6858   value: 512
6859   mirror: always
6861 # WebRender upper bound for shared surface size
6862 # According to apitrace, textures larger than 2048 break fast clear
6863 # optimizations on some intel drivers. We sometimes need to go larger, but
6864 # we try to avoid it.
6865 - name: gfx.webrender.max-shared-surface-size
6866   type: int32_t
6867   value: 2048
6868   mirror: once
6870 # Whether to use EGL robustness or not.
6871 - name: gfx.webrender.prefer-robustness
6872   type: bool
6873 #if defined(XP_WIN) || defined(MOZ_WIDGET_GTK)
6874   value: true
6875 #else
6876   value: false
6877 #endif
6878   mirror: once
6880 # Whether to use the WebRender software backend
6881 - name: gfx.webrender.software
6882   type: bool
6883   value: false
6884   mirror: once
6886 # Whether to use the D3D11 RenderCompositor when using WebRender software backend
6887 - name: gfx.webrender.software.d3d11
6888   type: bool
6889   value: true
6890   mirror: once
6892 - name: gfx.webrender.software.opengl
6893   type: bool
6894 #if defined(MOZ_WIDGET_ANDROID)
6895   value: true
6896 #else
6897   value: false
6898 #endif
6899   mirror: once
6901 - name: gfx.webrender.software.d3d11.upload-mode
6902   type: RelaxedAtomicInt32
6903   value: 4
6904   mirror: always
6906 # Whether to force widgets to don't support acceleration to use WebRender
6907 # despite that
6908 - name: gfx.webrender.unaccelerated-widget.force
6909   type: RelaxedAtomicBool
6910   value: false
6911   mirror: always
6913 # Enable a lower quality, but higher performance pinch-zoom mode. Primarily
6914 # for devices with weak GPUs, or when running SWGL.
6915 - name: gfx.webrender.low-quality-pinch-zoom
6916   type: bool
6917 #if defined(MOZ_WIDGET_ANDROID) && defined(NIGHTLY_BUILD)
6918   value: true
6919 #else
6920   value: false
6921 #endif
6922   mirror: once
6924 # Disable wait of GPU execution completion
6925 - name: gfx.webrender.wait-gpu-finished.disabled
6926   type: bool
6927 #if defined(XP_WIN)
6928   value: true
6929 #else
6930   value: false
6931 #endif
6932   mirror: once
6934 # Enable VideoProcessor Super Resolution for video overlay
6935 - name: gfx.webrender.overlay-vp-super-resolution
6936   type: bool
6937 #if defined(XP_WIN)
6938   value: true
6939 #else
6940   value: false
6941 #endif
6942   mirror: once
6944 # Enable VideoProcessor-HDR on SDR content for video overlay
6945 - name: gfx.webrender.overlay-vp-auto-hdr
6946   type: bool
6947 #if defined(XP_WIN)
6948   value: true
6949 #else
6950   value: false
6951 #endif
6952   mirror: once
6954 # Use vsync events generated by hardware
6955 - name: gfx.work-around-driver-bugs
6956   type: bool
6957   value: true
6958   mirror: once
6960 - name: gfx.ycbcr.accurate-conversion
6961   type: RelaxedAtomicBool
6962   value: false
6963   mirror: always
6965 - name: gfx.remote-texture.recycle.disabled
6966   type: RelaxedAtomicBool
6967   value: false
6968   mirror: always
6970 - name: gfx.remote-texture.wait-owner-at-image-host
6971   type: RelaxedAtomicBool
6972   value: @IS_NOT_NIGHTLY_BUILD@
6973   mirror: always
6975 #---------------------------------------------------------------------------
6976 # Prefs starting with "gl." (OpenGL)
6977 #---------------------------------------------------------------------------
6979 - name: gl.allow-high-power
6980   type: RelaxedAtomicBool
6981   value: true
6982   mirror: always
6984 - name: gl.ignore-dx-interop2-blacklist
6985   type: RelaxedAtomicBool
6986   value: false
6987   mirror: always
6989 - name: gl.use-tls-is-current
6990   type: RelaxedAtomicInt32
6991   value: 0
6992   mirror: always
6994 #---------------------------------------------------------------------------
6995 # Prefs starting with "html5."
6996 #---------------------------------------------------------------------------
6998 # Time in milliseconds between the time a network buffer is seen and the timer
6999 # firing when the timer hasn't fired previously in this parse in the
7000 # off-the-main-thread HTML5 parser.
7001 - name: html5.flushtimer.initialdelay
7002   type: RelaxedAtomicInt32
7003   value: 16
7004   mirror: always
7006 # Time in milliseconds between the time a network buffer is seen and the timer
7007 # firing when the timer has already fired previously in this parse.
7008 - name: html5.flushtimer.subsequentdelay
7009   type: RelaxedAtomicInt32
7010   value: 16
7011   mirror: always
7013 #---------------------------------------------------------------------------
7014 # Prefs starting with "idle_period."
7015 #---------------------------------------------------------------------------
7017 - name: idle_period.min
7018   type: uint32_t
7019   value: 3
7020   mirror: always
7022 - name: idle_period.during_page_load.min
7023   type: uint32_t
7024   value: 12
7025   mirror: always
7027 - name: idle_period.cross_process_scheduling
7028   type: RelaxedAtomicBool
7029   value: true
7030   mirror: always
7032 #---------------------------------------------------------------------------
7033 # Prefs starting with "image."
7034 #---------------------------------------------------------------------------
7036 # The maximum size (in kB) that the aggregate frames of an animation can use
7037 # before it starts to discard already displayed frames and redecode them as
7038 # necessary.
7039 - name: image.animated.decode-on-demand.threshold-kb
7040   type: RelaxedAtomicUint32
7041   value: 20*1024
7042   mirror: always
7044 # The minimum number of frames we want to have buffered ahead of an
7045 # animation's currently displayed frame.
7046 - name: image.animated.decode-on-demand.batch-size
7047   type: RelaxedAtomicUint32
7048   value: 6
7049   mirror: always
7051 # Whether we should recycle already displayed frames instead of discarding
7052 # them. This saves on the allocation itself, and may be able to reuse the
7053 # contents as well. Only applies if generating full frames.
7054 - name: image.animated.decode-on-demand.recycle
7055   type: bool
7056   value: true
7057   mirror: once
7059 # Resume an animated image from the last displayed frame rather than
7060 # advancing when out of view.
7061 - name: image.animated.resume-from-last-displayed
7062   type: RelaxedAtomicBool
7063   value: true
7064   mirror: always
7066 # Maximum number of surfaces for an image before entering "factor of 2" mode.
7067 # This in addition to the number of "native" sizes of an image. A native size
7068 # is a size for which we can decode a frame without up or downscaling. Most
7069 # images only have 1, but some (i.e. ICOs) may have multiple frames for the
7070 # same data at different sizes.
7071 - name: image.cache.factor2.threshold-surfaces
7072   type: RelaxedAtomicInt32
7073   value: 4
7074   mirror: always
7076 # Maximum size of a surface in KB we are willing to produce when rasterizing
7077 # an SVG.
7078 - name: image.cache.max-rasterized-svg-threshold-kb
7079   type: RelaxedAtomicInt32
7080   value: 200*1024
7081   mirror: always
7083 # The maximum size, in bytes, of the decoded images we cache.
7084 - name: image.cache.size
7085   type: int32_t
7086   value: 5*1024*1024
7087   mirror: once
7089 # A weight, from 0-1000, to place on time when comparing to size.
7090 # Size is given a weight of 1000 - timeweight.
7091 - name: image.cache.timeweight
7092   type: int32_t
7093   value: 500
7094   mirror: once
7096 # Decode all images automatically on load, ignoring our normal heuristics.
7097 - name: image.decode-immediately.enabled
7098   type: RelaxedAtomicBool
7099   value: false
7100   mirror: always
7102 # Decode all images synchronously, intended to be used for reftests.
7103 - name: image.testing.decode-sync.enabled
7104   type: bool
7105   value: false
7106   mirror: always
7108 # Whether we attempt to downscale images during decoding.
7109 - name: image.downscale-during-decode.enabled
7110   type: RelaxedAtomicBool
7111   value: true
7112   mirror: always
7114 # Whether we use EXIF metadata for image density.
7115 - name: image.exif-density-correction.enabled
7116   type: RelaxedAtomicBool
7117   value: true
7118   mirror: always
7120 # Whether EXIF density metadata is sanity checked against PixelXDimension and PixelYDimension
7121 - name: image.exif-density-correction.sanity-check.enabled
7122   type: RelaxedAtomicBool
7123   value: true
7124   mirror: always
7126 # The threshold for inferring that changes to an <img> element's |src|
7127 # attribute by JavaScript represent an animation, in milliseconds. If the |src|
7128 # attribute is changing more frequently than this value, then we enter a
7129 # special "animation mode" which is designed to eliminate flicker. Set to 0 to
7130 # disable.
7131 - name: image.infer-src-animation.threshold-ms
7132   type: RelaxedAtomicUint32
7133   value: 2000
7134   mirror: always
7136 # Whether the network request priority should be adjusted according
7137 # the layout and view frame position of each particular image.
7138 - name: image.layout_network_priority
7139   type: RelaxedAtomicBool
7140   value: true
7141   mirror: always
7143 # Chunk size for calls to the image decoders.
7144 - name: image.mem.decode_bytes_at_a_time
7145   type: uint32_t
7146   value: 16384
7147   mirror: once
7149 # Discards inactive image frames and re-decodes them on demand from
7150 # compressed data.
7151 - name: image.mem.discardable
7152   type: RelaxedAtomicBool
7153   value: true
7154   mirror: always
7156 # Discards inactive image frames of _animated_ images and re-decodes them on
7157 # demand from compressed data. Has no effect if image.mem.discardable is false.
7158 - name: image.mem.animated.discardable
7159   type: bool
7160   value: true
7161   mirror: once
7163 # Enable extra information for debugging in the image memory reports.
7164 - name: image.mem.debug-reporting
7165   type: RelaxedAtomicBool
7166   value: false
7167   mirror: always
7169 # Force unmapping of unused shared surfaces after a timeout period or when we
7170 # encounter virtual memory pressure. By default this is only enabled on 32-bit
7171 # Firefox.
7172 - name: image.mem.shared.unmap.force-enabled
7173   type: bool
7174   value: false
7175   mirror: once
7177 # Minimum timeout to unmap shared surfaces since they have been last used,
7178 # in milliseconds.
7179 - name: image.mem.shared.unmap.min_expiration_ms
7180   type: uint32_t
7181   value: 60*1000
7182   mirror: once
7184 # Mininum size for shared surfaces to consider unmapping, in kilobytes.
7185 - name: image.mem.shared.unmap.min_threshold_kb
7186   type: uint32_t
7187   value: 100
7188   mirror: once
7190 # How much of the data in the surface cache is discarded when we get a memory
7191 # pressure notification, as a fraction. The discard factor is interpreted as a
7192 # reciprocal, so a discard factor of 1 means to discard everything in the
7193 # surface cache on memory pressure, a discard factor of 2 means to discard half
7194 # of the data, and so forth. The default should be a good balance for desktop
7195 # and laptop systems, where we never discard visible images.
7196 - name: image.mem.surfacecache.discard_factor
7197   type: uint32_t
7198   value: 1
7199   mirror: once
7201 # Maximum size for the surface cache, in kilobytes.
7202 - name: image.mem.surfacecache.max_size_kb
7203   type: uint32_t
7204   value: 2024 * 1024
7205   mirror: once
7207 # Minimum timeout for expiring unused images from the surface cache, in
7208 # milliseconds. This controls how long we store cached temporary surfaces.
7209 - name: image.mem.surfacecache.min_expiration_ms
7210   type: uint32_t
7211   value: 60*1000
7212   mirror: once
7214 # The surface cache's size, within the constraints of the maximum size set
7215 # above, is determined as a fraction of main memory size. The size factor is
7216 # interpreted as a reciprocal, so a size factor of 4 means to use no more than
7217 # 1/4 of main memory.  The default should be a good balance for most systems.
7218 - name: image.mem.surfacecache.size_factor
7219   type: uint32_t
7220   value: 4
7221   mirror: once
7223 # Maximum size in kilobytes that we allow to allocate an imgFrame, meant for
7224 # testing/fuzzing purposes. -1 disables this limit (there are other limits in
7225 # place).
7226 - name: image.mem.max_legal_imgframe_size_kb
7227   type: RelaxedAtomicInt32
7228   value: -1
7229   mirror: always
7231 # Whether we record SVG images as blobs or not.
7232 - name: image.svg.blob-image
7233   type: RelaxedAtomicBool
7234   value: false
7235   mirror: always
7237 # Whether to set the incremental attribute in the Priority header for images
7238 - name: image.priority.incremental
7239   type: RelaxedAtomicBool
7240   value: true
7241   mirror: always
7243 # Whether we attempt to decode AVIF images or not.
7244 - name: image.avif.enabled
7245   type: RelaxedAtomicBool
7246 #if defined(MOZ_AV1)
7247   value: true
7248 #else
7249   value: false
7250 #endif
7251   mirror: always
7253 # How strict we are in accepting/rejecting AVIF inputs according to whether they
7254 # conform to the specification
7255 # 0 = Permissive: accept whatever we can simply, unambiguously interpret
7256 # 1 = Normal: reject violations of "shall" specification directives
7257 # 2 = Strict: reject violations of "should" specification directives
7258 - name: image.avif.compliance_strictness
7259   type: RelaxedAtomicInt32
7260   value: 1
7261   mirror: always
7263 # Whether we apply container-level transforms like mirroring and rotation
7264 - name: image.avif.apply_transforms
7265   type: RelaxedAtomicBool
7266   value: true
7267   mirror: always
7269 # Whether we use dav1d (true) or libaom (false) to decode AVIF image
7270 - name: image.avif.use-dav1d
7271   type: RelaxedAtomicBool
7272   value: true
7273   mirror: always
7275 # Whether to allow decoding of animated AVIF sequences.
7276 - name: image.avif.sequence.enabled
7277   type: RelaxedAtomicBool
7278   value: true
7279   mirror: always
7281 # Whether AVIF files containing sequences should be animated even when the
7282 # major brand is set to 'avif'.
7283 - name: image.avif.sequence.animate_avif_major_branded_images
7284   type: RelaxedAtomicBool
7285   value: false
7286   mirror: always
7288 # Whether we attempt to decode JXL images or not.
7289 - name: image.jxl.enabled
7290   type: RelaxedAtomicBool
7291   value: false
7292   mirror: always
7294 #---------------------------------------------------------------------------
7295 # Prefs starting with "intl."
7296 #---------------------------------------------------------------------------
7298 #ifdef XP_WIN
7299   # Whether making Gecko TSF-aware or only working with IMM.  TSF is a modern
7300   # IME API set of Windows which replaces IMM APIs.  Unless you can avoid the
7301   # problem which you see with enabling TSF, you shouldn't change this pref
7302   # to false since IMM handler is now not maintained nor tested with latest
7303   # Windows.  If you need to change this pref to false, please file a bug to
7304   # <https://bugzilla.mozilla.org>.
7305   # Restart required to apply this pref change.
7306 -   name: intl.tsf.enabled
7307     type: bool
7308     value: true
7309     mirror: once
7311   # Whether Gecko creates or does not create native caret for legacy ATOK
7312   # (2011 - 2015).
7313 -   name: intl.tsf.hack.atok.create_native_caret
7314     type: bool
7315     value: true
7316     mirror: always
7318   # Whether Gecko returns available composition string rect or TS_E_NOLAYOUT
7319   # from ITextStoreACP::GetTextExt() when the specified range is same as the
7320   # range of composition string but some character rects in it are still
7321   # dirty if and only if ATOK is active TIP.
7322   # Note that this is ignored if active ATOK is or older than 2016 and
7323   # create_native_caret is true.
7324 -   name: intl.tsf.hack.atok.do_not_return_no_layout_error_of_composition_string
7325     type: bool
7326     value: true
7327     mirror: always
7329   # Whether Gecko sets input scope of ATOK to "search" or never does it.
7330   # When "search" is set to the input scope, ATOK may stop their suggestions.
7331   # To avoid it, turn this pref on, or changing the settings in ATOK.
7332   # Note that if you enable this pref and you use the touch keyboard for touch
7333   # screens, you cannot access some specific features for a "search" input
7334   # field.
7335 -   name: intl.tsf.hack.atok.search_input_scope_disabled
7336     type: bool
7337     value: false
7338     mirror: always
7340   # Whether Gecko returns caret rect before composition string or TS_E_NOLAYOUT
7341   # from ITextStoreACP::GetTextExt() when the specified range is larger than
7342   # composition start offset if and only if Free ChangJie is active TIP.
7343 -   name: intl.tsf.hack.free_chang_jie.do_not_return_no_layout_error
7344     type: bool
7345     value: true
7346     mirror: always
7348   # Whether Gecko returns available composition string rect or TS_E_NOLAYOUT
7349   # from ITextStoreACP::GetTextExt() when the specified range is same as the
7350   # range of composition string but some character rects in it are still
7351   # dirty if and only if Japanist 10 is active TIP.
7352 -   name: intl.tsf.hack.japanist10.do_not_return_no_layout_error_of_composition_string
7353     type: bool
7354     value: true
7355     mirror: always
7357   # Whether Gecko returns previous character rect or TS_E_NOLAYOUT from
7358   # ITfContextView::GetTextExt() when the specified range is the first
7359   # character of selected clause of composition string if and only if Japanese TIP
7360   # of Microsoft is active.
7361 -   name: intl.tsf.hack.ms_japanese_ime.do_not_return_no_layout_error_at_first_char
7362     type: bool
7363     value: true
7364     mirror: always
7366   # Whether Gecko returns previous character rect or TS_E_NOLAYOUT from
7367   # ITfContextView::GetTextExt() when the specified range is the caret of
7368   # composition string if and only if Japanese TIP of Microsoft is active.
7369 -   name: intl.tsf.hack.ms_japanese_ime.do_not_return_no_layout_error_at_caret
7370     type: bool
7371     value: true
7372     mirror: always
7374   # Whether Gecko returns caret rect before composition string or TS_E_NOLAYOUT
7375   # from ITfContextView::GetTextExt() when the specified range is larger than
7376   # composition start offset if and only Simplified Chinese TIP of Microsoft
7377   # is active.
7378 -   name: intl.tsf.hack.ms_simplified_chinese.do_not_return_no_layout_error
7379     type: bool
7380     value: true
7381     mirror: always
7383   # Whether Geckos hacks ITextStoreACP::QueryInsert() or not.  The method should
7384   # return new selection after specified length text is inserted at specified
7385   # range.  However, Microsoft Pinyin and Microsoft Wubi expect that the result
7386   # is same as specified range.  If following prefs are true,
7387   # ITextStoreACP::QueryInsert() returns specified range only when one of the
7388   # TIPs is active.
7389 -   name: intl.tsf.hack.ms_simplified_chinese.query_insert_result
7390     type: bool
7391     value: true
7392     mirror: always
7394   # Whether Gecko returns caret rect before composition string or TS_E_NOLAYOUT
7395   # from ITfContextView::GetTextExt() when the specified range is larger than
7396   # composition start offset if and only Traditional Chinese TIP of Microsoft
7397   # is active.
7398 -   name: intl.tsf.hack.ms_traditional_chinese.do_not_return_no_layout_error
7399     type: bool
7400     value: true
7401     mirror: always
7403   # Whether Geckos hacks ITextStoreACP::QueryInsert() or not.  The method should
7404   # return new selection after specified length text is inserted at specified
7405   # range.  However, Microsoft ChangJie and Microsoft Quick expect that the
7406   # result is same as specified range.  If following prefs are true,
7407   # ITextStoreACP::QueryInsert() returns specified range only when one of the
7408   # TIPs is active.
7409 -   name: intl.tsf.hack.ms_traditional_chinese.query_insert_result
7410     type: bool
7411     value: true
7412     mirror: always
7414   # Whether Gecko sets input scope of the URL bar to IS_DEFAULT when black
7415   # listed IMEs are active or does not.  If you use tablet mode mainly and you
7416   # want to use touch keyboard for URL when you set focus to the URL bar, you
7417   # can set this to false.  Then, you'll see, e.g., ".com" key on the keyboard.
7418   # However, if you set this to false, such IMEs set its open state to "closed"
7419   # when you set focus to the URL bar.  I.e., input mode is automatically
7420   # changed to English input mode.
7421   # Known buggy IME list:
7422   #   - Microsoft IME for Japanese
7423   #   - Google Japanese Input
7424   #   - Microsoft Bopomofo
7425   #   - Microsoft ChangJie
7426   #   - Microsoft Phonetic
7427   #   - Microsoft Quick
7428   #   - Microsoft New ChangJie
7429   #   - Microsoft New Phonetic
7430   #   - Microsoft New Quick
7431   #   - Microsoft Pinyin
7432   #   - Microsoft Pinyin New Experience Input Style
7433   #   - Microsoft Wubi
7434   #   - Microsoft IME for Korean (except on Win7)
7435   #   - Microsoft Old Hangul
7436 -   name: intl.ime.hack.set_input_scope_of_url_bar_to_default
7437     type: bool
7438     value: true
7439     mirror: always
7441   # On Windows 10 Build 17643 (an Insider Preview build of RS5), Microsoft
7442   # have fixed the caller of ITextACPStore::GetTextExt() to return
7443   # TS_E_NOLAYOUT to TIP as-is, rather than converting to E_FAIL.
7444   # Therefore, if TIP supports asynchronous layout computation perfectly, we
7445   # can return TS_E_NOLAYOUT and TIP waits next OnLayoutChange()
7446   # notification.  However, some TIPs still have some bugs of asynchronous
7447   # layout support.  We keep hacking the result of GetTextExt() like running
7448   # on Windows 10, however, there could be unknown TIP bugs if we stop
7449   # hacking the result.  So, user can stop checking build ID to make Gecko
7450   # hack the result forcibly.
7451 -   name: intl.tsf.hack.allow_to_stop_hacking_on_build_17643_or_later
7452     type: bool
7453     value: @IS_EARLY_BETA_OR_EARLIER@
7454     mirror: always
7456   # If true, automatically extend selection to cluster boundaries when
7457   # TSF/TIP requests to select from/by middle of a cluster.
7458 -   name: intl.tsf.hack.extend_setting_selection_range_to_cluster_boundaries
7459     type: bool
7460     value: @IS_NOT_EARLY_BETA_OR_EARLIER@
7461     mirror: always
7463   # Whether Gecko supports IMM even if TSF is enabled.  This pref exists
7464   # only for check TSF behavior of new versions.  Therefore, users should
7465   # not set this to false for daily use.
7466 -   name: intl.tsf.support_imm
7467     type: bool
7468     value: true
7469     mirror: once
7471   # If true, TSF and TIP (IME) can retrieve URL of the document containing
7472   # the focused element.  When this is set to true, Gecko exposes the spec
7473   # of the URL.
7474   # And Gecko exposes only "http" and "https" URLs.  E.g., "data", "blob",
7475   # "file" URLs are never exposed.
7476 -  name: intl.tsf.expose_url.allowed
7477    type: bool
7478    value: true
7479    mirror: always
7481   # If true, TSF and TIP (IME) can retrieve URL of the document containing
7482   # the focused element in the private browsing mode too.
7483 -  name: intl.tsf.expose_url_in_private_browsing.allowed
7484    type: bool
7485    value: false
7486    mirror: always
7488 #if defined(ENABLE_TESTS)
7489   # If true, NS_GetComplexLineBreaks compares the line breaks produced in the
7490   # content process using the Uniscribe line breaker, with those from a
7491   # brokered call to the parent.
7492 -   name: intl.compare_against_brokered_complex_line_breaks
7493     type: bool
7494     value: false
7495     mirror: always
7496 #endif
7497 #endif
7499 # If you use legacy Chinese IME which puts an ideographic space to composition
7500 # string as placeholder, this pref might be useful.  If this is true and when
7501 # web contents forcibly commits composition (e.g., moving focus), the
7502 # ideographic space will be ignored (i.e., commits with empty string).
7503 - name: intl.ime.remove_placeholder_character_at_commit
7504   type: bool
7505   value: false
7506   mirror: always
7509 #if defined(XP_MACOSX) || defined(MOZ_WIDGET_GTK) || defined(ANDROID)
7510 # Whether text input without keyboard press nor IME composition should cause a
7511 # set of composition events or not.  E.g., when you use Emoji picker on macOS,
7512 # it inserts an Emoji character directly.  If set to true, `compositionstart`,
7513 # `compositionupdate` and `compositionend` events will be fired, and the
7514 # correspnding `beforeinput` events are not cancelable.  Otherwise, if set to
7515 # false, any user input events are not exposed to web apps but only
7516 # `beforeinput` event is fired as "insert text" as a cancelable event.
7517 - name: intl.ime.use_composition_events_for_insert_text
7518   type: bool
7519   value: false
7520   mirror: always
7521 #endif
7523 # If true, we use UAX14/29 compatible segmenter rules using ICU4X
7524 - name: intl.icu4x.segmenter.enabled
7525   type: RelaxedAtomicBool
7526   value: true
7527   mirror: always
7529 #---------------------------------------------------------------------------
7530 # Prefs starting with "javascript."
7532 # NOTE: SpiderMonkey starts up before `mirror: once` preferences are sealed and
7533 #       we cannot use them (Bug 1698311). Instead, we use `mirror: always`
7534 #       prefs but mark as `do_not_use_directly` and `LoadStartupJSPrefs` will
7535 #       mirror them into SpiderMonkey.
7536 #---------------------------------------------------------------------------
7538 # The JavaScript JIT compilers. These are read once on startup so a browser may
7539 # need to be restarted if toggling them. In general each subsequent JIT depends
7540 # on the ones before it being enabled.
7541 - name: javascript.options.blinterp
7542   type: bool
7543   value: true
7544   mirror: always  # LoadStartupJSPrefs
7545   do_not_use_directly: true
7547 - name: javascript.options.baselinejit
7548   type: bool
7549   value: true
7550   mirror: always  # LoadStartupJSPrefs
7551   do_not_use_directly: true
7553 - name: javascript.options.ion
7554   type: bool
7555   value: true
7556   mirror: always  # LoadStartupJSPrefs
7557   do_not_use_directly: true
7559 # The irregexp JIT for regex evaluation.
7560 - name: javascript.options.native_regexp
7561   type: bool
7562   value: true
7563   mirror: always  # LoadStartupJSPrefs
7564   do_not_use_directly: true
7566 # Jit Hints Cache - An in-process cache for the
7567 # content process to accelerate repeated baseline
7568 # compilations
7569 - name: javascript.options.jithints
7570   type: bool
7571   value: true
7572   mirror: always  # LoadStartupJSPrefs
7573   do_not_use_directly: true
7575 # "Warm-up" thresholds at which we attempt to compile a script/function with
7576 # the next JIT tier.
7578 # NOTE: These must match JitOptions defaults.
7579 - name: javascript.options.blinterp.threshold
7580   type: int32_t
7581   value: 10
7582   mirror: always  # LoadStartupJSPrefs
7583   do_not_use_directly: true
7585 - name: javascript.options.baselinejit.threshold
7586   type: int32_t
7587   value: 100
7588   mirror: always  # LoadStartupJSPrefs
7589   do_not_use_directly: true
7591 - name: javascript.options.ion.threshold
7592   type: int32_t
7593   value: 1500
7594   mirror: always  # LoadStartupJSPrefs
7595   do_not_use_directly: true
7597 # Enable off-main-thread Warp compilation.
7598 - name: javascript.options.ion.offthread_compilation
7599   type: bool
7600   value: true
7601   mirror: always  # LoadStartupJSPrefs
7602   do_not_use_directly: true
7604 #ifdef DEBUG
7605   # Enable extra correctness checks in the JITs that are slow and only available
7606   # in debug builds.
7607 -   name: javascript.options.jit.full_debug_checks
7608     type: bool
7609     value: false
7610     mirror: always  # LoadStartupJSPrefs
7611     do_not_use_directly: true
7612 #endif
7614 # Heuristic threshold for Warp/Ion to decide that too many bailouts are
7615 # happening and an IonScript should be discarded.
7617 # NOTE: This must match JitOptions defaults.
7618 - name: javascript.options.ion.frequent_bailout_threshold
7619   type: int32_t
7620   value: 10
7621   mirror: always  # LoadStartupJSPrefs
7622   do_not_use_directly: true
7624 # A threshold for Warp to decide whether a function can be inlined.
7625 # If the size of a function is smaller than this threshold, then it
7626 # may be inlined.
7628 # NOTE: These must match JitOptions defaults.
7629 - name: javascript.options.inlining_bytecode_max_length
7630   type: uint32_t
7631   value: 130
7632   mirror: always
7633   do_not_use_directly: true
7635 - name: javascript.options.use_emulates_undefined_fuse
7636   type: bool
7637   value: true
7638   mirror: always
7639   do_not_use_directly: true
7640   set_spidermonkey_pref: startup
7642 - name: javascript.options.compact_on_user_inactive
7643   type: bool
7644   value: true
7645   mirror: always
7647 # No-op pref for testing the SpiderMonkey pref system.
7648 - name: javascript.options.tests.uint32-pref
7649   type: uint32_t
7650   value: 1
7651   mirror: always
7652   set_spidermonkey_pref: always
7654 # Enable fuse based destructuring
7655 - name: javascript.options.destructuring_fuse
7656   type: bool
7657   value: true
7658   mirror: always
7659   set_spidermonkey_pref: startup
7661 # The default amount of time to wait from the user being idle to starting a
7662 # shrinking GC. Measured in milliseconds.
7663 - name: javascript.options.compact_on_user_inactive_delay
7664   type: uint32_t
7665 #ifdef NIGHTLY_BUILD
7666   value: 15000
7667 #else
7668   value: 300000
7669 #endif
7670   mirror: always
7672 # Use better error message when accessing property of null or undefined.
7673 - name: javascript.options.property_error_message_fix
7674   type: bool
7675   value: @IS_NIGHTLY_OR_DEV_EDITION@
7676   mirror: always
7677   set_spidermonkey_pref: startup
7679 # Support for weak references in JavaScript (WeakRef and FinalizationRegistry).
7680 - name: javascript.options.weakrefs
7681   type: bool
7682   value: true
7683   mirror: always
7684   set_spidermonkey_pref: startup
7686 # Whether to expose the FinalizationRegistry.prototype.cleanupSome method.
7687 - name: javascript.options.experimental.weakrefs.expose_cleanupSome
7688   type: bool
7689   value: false
7690   mirror: always
7691   set_spidermonkey_pref: startup
7693 # ShadowRealms: https://github.com/tc39/proposal-shadowrealm
7694 - name: javascript.options.experimental.shadow_realms
7695   # Atomic, as we assert the preference, and that assertion may happen
7696   # in a worker.
7697   type: RelaxedAtomicBool
7698   value: false
7699   mirror: always
7700   # Non-startup pref because the WPT test harness sets prefs after startup.
7701   set_spidermonkey_pref: always
7703 # Support for String.prototype.{is,to}WellFormed in JavaScript.
7704 - name: javascript.options.well_formed_unicode_strings
7705   type: bool
7706   value: true
7707   mirror: always
7708   set_spidermonkey_pref: startup
7710 # Support for Object.groupBy/Map.groupBy in JavaScript.
7711 - name: javascript.options.array_grouping
7712   type: bool
7713   value: true
7714   mirror: always
7715   set_spidermonkey_pref: startup
7717 # Experimental support for ArrayBuffer.prototype.transfer{,ToFixedLength}() in JavaScript.
7718 - name: javascript.options.arraybuffer_transfer
7719   type: bool
7720   value: true
7721   mirror: always
7722   set_spidermonkey_pref: startup
7724 # Experimental support for New Set methods
7725 - name: javascript.options.experimental.new_set_methods
7726   type: bool
7727   value: true
7728   mirror: always
7729   set_spidermonkey_pref: startup
7731 # Experimental support for resizable ArrayBuffers in JavaScript.
7732 - name: javascript.options.experimental.arraybuffer_resizable
7733   type: bool
7734   value: true
7735   mirror: always
7736   set_spidermonkey_pref: startup
7738 # Experimental support for growable SharedArrayBuffers in JavaScript.
7739 - name: javascript.options.experimental.sharedarraybuffer_growable
7740   type: bool
7741   value: true
7742   mirror: always
7743   set_spidermonkey_pref: startup
7745 # Experimental support for Duplicate Named Capture Groups in JavaScript.
7746 - name: javascript.options.experimental.regexp_duplicate_named_groups
7747   type: bool
7748   value: true
7749   mirror: always
7750   set_spidermonkey_pref: startup
7752 #ifdef NIGHTLY_BUILD
7753   # Experimental support for Iterator Helpers in JavaScript.
7754 -   name: javascript.options.experimental.iterator_helpers
7755     type: bool
7756     value: false
7757     mirror: always
7758     set_spidermonkey_pref: startup
7760   # Experimental support for Async Iterator Helpers in JavaScript.
7761 -   name: javascript.options.experimental.async_iterator_helpers
7762     type: bool
7763     value: false
7764     mirror: always
7765     set_spidermonkey_pref: startup
7767   # Experimental support for Symbols as WeakMap keys in JavaScript.
7768 -   name: javascript.options.experimental.symbols_as_weakmap_keys
7769     type: bool
7770     value: false
7771     mirror: always
7772     set_spidermonkey_pref: startup
7774   # Experimental support for Uint8Array base64/hex in JavaScript.
7775 -   name: javascript.options.experimental.uint8array_base64
7776     type: bool
7777     value: false
7778     mirror: always
7779     set_spidermonkey_pref: startup
7781   # Experimental support for Float16Array in JavaScript.
7782 -   name: javascript.options.experimental.float16array
7783     type: bool
7784     value: false
7785     mirror: always
7786     set_spidermonkey_pref: startup
7788   # Experimental support for Import Assertions in JavaScript.
7789 -   name: javascript.options.experimental.import_attributes
7790     type: bool
7791     value: false
7792     mirror: always
7793   # Import attributes were developed under the 'assert' keyword.
7794   # We have that keyword under a pref, as we'd rather not ship it if we
7795   # can avoid it, but in the case we can't, we'd like access to it quickly.
7796 -   name: javascript.options.experimental.import_attributes.assert_syntax
7797     type: bool
7798     value: false
7799     mirror: always
7800 #endif  // NIGHTLY_BUILD
7802 #ifdef ENABLE_JSON_PARSE_WITH_SOURCE
7803 -   name: javascript.options.experimental.json_parse_with_source
7804     type: bool
7805     value: false
7806     mirror: always
7807     set_spidermonkey_pref: startup
7808 #endif  // ENABLE_JSON_PARSE_WITH_SOURCE
7810 - name: javascript.options.wasm_caching
7811   type: bool
7812   value: true
7813   mirror: always
7815 # The amount of time we wait between a request to GC (due to leaving a page) and doing the actual GC, in ms.
7816 - name: javascript.options.gc_delay
7817   type: uint32_t
7818   value: 4000
7819   mirror: always
7821 # The amount of time we wait from the first request to GC to actually doing the first GC, in ms.
7822 - name: javascript.options.gc_delay.first
7823   type: uint32_t
7824   value: 10000
7825   mirror: always
7827 # After doing a zonal GC, wait this much time (in ms) and then do a full GC,
7828 # unless one is already pending.
7829 - name: javascript.options.gc_delay.full
7830   type: uint32_t
7831   value: 60000
7832   mirror: always
7834 # Maximum amount of time that should elapse between incremental GC slices, in ms.
7835 - name: javascript.options.gc_delay.interslice
7836   type: uint32_t
7837   value: 250
7838   mirror: always
7840 # nsJSEnvironmentObserver observes the memory-pressure notifications and
7841 # forces a garbage collection and cycle collection when it happens, if the
7842 # appropriate pref is set.
7843 - name: javascript.options.gc_on_memory_pressure
7844   type: bool
7845   # Disable the JS engine's GC on memory pressure, since we do one in the
7846   # mobile browser (bug 669346).
7847   # XXX: this value possibly should be changed, or the pref removed entirely.
7848   #      See bug 1450787.
7849   value: @IS_NOT_ANDROID@
7850   mirror: always
7852 # We allow at most MIN(max, MAX(NUM_CPUS / cpu_divisor, 1)) concurrent GCs
7853 # between processes
7854 - name: javascript.options.concurrent_multiprocess_gcs.cpu_divisor
7855   type: RelaxedAtomicUint32
7856   value: 4
7857   mirror: always
7859 # See 'cpu_divisor' above, 0 means UINT_32_MAX.
7860 - name: javascript.options.concurrent_multiprocess_gcs.max
7861   type: RelaxedAtomicUint32
7862   value: 0
7863   mirror: always
7865 - name: javascript.options.mem.log
7866   type: bool
7867   value: false
7868   mirror: always
7870 - name: javascript.options.mem.notify
7871   type: bool
7872   value: false
7873   mirror: always
7875 # Whether the Parent process allocates and shares memory with all content
7876 # processes. This is mirrored once, as the parent process will do this
7877 # allocation early on.
7878 - name: javascript.options.self_hosted.use_shared_memory
7879   type: bool
7880   value: true
7881   mirror: always  # LoadStartupJSPrefs
7882   do_not_use_directly: true
7884 - name: javascript.options.main_thread_stack_quota_cap
7885   type: uint32_t
7886 #if defined(MOZ_ASAN)
7887   value: 6 * 1024 * 1024
7888 #else
7889   value: 2 * 1024 * 1024
7890 #endif
7891   mirror: always
7893 - name: javascript.options.wasm_optimizingjit
7894   type: bool
7895   value: true
7896   mirror: always
7898 -   name: javascript.options.wasm_relaxed_simd
7899     type: bool
7900 #if defined(ENABLE_WASM_RELAXED_SIMD)
7901     value: @IS_NIGHTLY_BUILD@
7902 #else
7903     value: false
7904 #endif
7905     mirror: always
7906     set_spidermonkey_pref: startup
7908 -   name: javascript.options.wasm_moz_intgemm
7909     type: bool
7910 #if defined(ENABLE_WASM_MOZ_INTGEMM)
7911     value: @IS_NIGHTLY_BUILD@
7912 #else
7913     value: false
7914 #endif
7915     mirror: always
7916     set_spidermonkey_pref: startup
7918 -   name: javascript.options.wasm_exnref
7919     type: bool
7920     value: @IS_EARLY_BETA_OR_EARLIER@
7921     mirror: always
7922     set_spidermonkey_pref: startup
7924 -   name: javascript.options.wasm_gc
7925     type: bool
7926 #if defined(ENABLE_WASM_GC)
7927     value: true
7928 #else
7929     value: false
7930 #endif
7931     mirror: always
7932     set_spidermonkey_pref: startup
7934 -   name: javascript.options.wasm_memory_control
7935     type: bool
7936     value: false
7937     mirror: always
7938     set_spidermonkey_pref: startup
7940 -   name: javascript.options.wasm_branch_hinting
7941     type: bool
7942 #if defined(ENABLE_WASM_BRANCH_HINTING)
7943     value: @IS_NIGHTLY_BUILD@
7944 #else
7945     value: false
7946 #endif
7947     mirror: always
7948     set_spidermonkey_pref: startup
7950 #if defined(ENABLE_WASM_SIMD)
7951 #if defined(JS_CODEGEN_X64) || defined(JS_CODEGEN_X86)
7952   # Enables AVX instructions support on X86/X64 platforms.
7953   # Changing these prefs requires a restart.
7954 -   name: javascript.options.wasm_simd_avx
7955     type: bool
7956     value: true
7957     mirror: always
7958 #endif
7959 #endif
7961 -   name: javascript.options.wasm_memory64
7962     type: bool
7963 #if defined(ENABLE_WASM_MEMORY64)
7964     value: @IS_NIGHTLY_BUILD@
7965 #else
7966     value: false
7967 #endif
7968     mirror: always
7969     set_spidermonkey_pref: startup
7971 -   name: javascript.options.wasm_multi_memory
7972     type: bool
7973 #if defined(ENABLE_WASM_MULTI_MEMORY)
7974     value: true
7975 #else
7976     value: false
7977 #endif
7978     mirror: always
7979     set_spidermonkey_pref: startup
7981 -   name: javascript.options.wasm_js_string_builtins
7982     type: bool
7983     value: false
7984     mirror: always
7985     set_spidermonkey_pref: startup
7987 -   name: javascript.options.wasm_tail_calls
7988     type: bool
7989 #if defined(ENABLE_WASM_TAIL_CALLS)
7990     value: true
7991 #else
7992     value: false
7993 #endif
7994     mirror: always
7995     set_spidermonkey_pref: startup
7997 -   name: javascript.options.wasm_js_promise_integration
7998     type: bool
7999     value: false
8000     mirror: always
8001     set_spidermonkey_pref: startup
8003 -   name: javascript.options.wasm_test_serialization
8004     type: bool
8005     value: false
8006     mirror: always
8007     set_spidermonkey_pref: startup
8009 -   name: javascript.options.wasm_experimental_compile_pipeline
8010     type: bool
8011     value: false
8012     mirror: always
8013     set_spidermonkey_pref: startup
8015 # Support for pretenuring allocations based on their allocation site.
8016 - name: javascript.options.site_based_pretenuring
8017   type: bool
8018   value: true
8019   mirror: always
8020   do_not_use_directly: true
8021   set_spidermonkey_pref: startup
8023 #if defined(DEBUG) || defined(NIGHTLY_BUILD) || defined(JS_GC_ZEAL)
8024 # Enable extra poisoning of GC memory.
8025 - name: javascript.options.extra_gc_poisoning
8026   type: bool
8027 #ifdef DEBUG
8028   value: true
8029 #else
8030   value: false
8031 #endif
8032   mirror: always
8033   set_spidermonkey_pref: startup
8034 #endif
8036 #if !defined(JS_CODEGEN_MIPS32) && !defined(JS_CODEGEN_MIPS64) && !defined(JS_CODEGEN_LOONG64)
8037   # Spectre security vulnerability mitigations for the JS JITs.
8038   #
8039   # NOTE: The MIPS and LoongArch backends do not support these mitigations (and generally
8040   #       do not need them). In that case, leave the pref unlisted with its
8041   #       default value of false.
8042 -   name: javascript.options.spectre.index_masking
8043     type: bool
8044     value: true
8045     mirror: always  # LoadStartupJSPrefs
8046     do_not_use_directly: true
8048 -   name: javascript.options.spectre.object_mitigations
8049     type: bool
8050     value: true
8051     mirror: always  # LoadStartupJSPrefs
8052     do_not_use_directly: true
8054 -   name: javascript.options.spectre.string_mitigations
8055     type: bool
8056     value: true
8057     mirror: always  # LoadStartupJSPrefs
8058     do_not_use_directly: true
8060 -   name: javascript.options.spectre.value_masking
8061     type: bool
8062     value: true
8063     mirror: always  # LoadStartupJSPrefs
8064     do_not_use_directly: true
8066 -   name: javascript.options.spectre.jit_to_cxx_calls
8067     type: bool
8068     value: false
8069     mirror: always  # LoadStartupJSPrefs
8070     do_not_use_directly: true
8071 #endif  // !defined(JS_CODEGEN_MIPSXX) && !defined(JS_CODEGEN_LOONG64)
8073 # Separate pref to override the values of the Spectre-related prefs above for
8074 # isolated web content processes, where we don't need these mitigations.
8075 - name: javascript.options.spectre.disable_for_isolated_content
8076   type: bool
8077   value: true
8078   mirror: always
8080 # Whether the W^X policy is enforced to mark JIT code pages as either writable
8081 # or executable but never both at the same time. OpenBSD defaults to W^X.
8082 - name: javascript.options.content_process_write_protect_code
8083   type: bool
8084 #if defined(XP_OPENBSD)
8085   value: true
8086 #else
8087   value: false
8088 #endif
8089   mirror: always
8091 # Whether to use the XPCOM thread pool for JS helper tasks.
8092 - name: javascript.options.external_thread_pool
8093   type: bool
8094   value: true
8095   mirror: always
8096   do_not_use_directly: true
8098 # Whether to use the off-thread script compilation and decoding.
8099 - name: javascript.options.parallel_parsing
8100   type: bool
8101   value: true
8102   mirror: always
8104 # Whether to use fdlibm for Math.sin, Math.cos, and Math.tan. When
8105 # privacy.resistFingerprinting is true, this pref is ignored and fdlibm is used
8106 # anyway.
8107 - name: javascript.options.use_fdlibm_for_sin_cos_tan
8108   type: bool
8109   value: @IS_EARLY_BETA_OR_EARLIER@
8110   mirror: always
8111   set_spidermonkey_pref: always
8113 # Whether to support parsing '//(#@) source(Mapping)?URL=' pragmas.
8114 - name: javascript.options.source_pragmas
8115   type: bool
8116   value: true
8117   mirror: always
8119 # asm.js
8120 - name: javascript.options.asmjs
8121   type: bool
8122   value: true
8123   mirror: always
8125 # Whether to throw a TypeError if asm.js code hits validation failure.
8126 - name: javascript.options.throw_on_asmjs_validation_failure
8127   type: bool
8128   value: false
8129   mirror: always
8131 # Whether to disable the jit within the main process
8132 - name: javascript.options.main_process_disable_jit
8133   type: bool
8134 #ifdef XP_IOS
8135   value: true
8136 #else
8137   value: false
8138 #endif
8139   mirror: always
8141 #---------------------------------------------------------------------------
8142 # Prefs starting with "layers."
8143 #---------------------------------------------------------------------------
8145 # Whether to disable acceleration for all widgets.
8146 - name: layers.acceleration.disabled
8147   type: bool
8148   value: false
8149   mirror: once
8150   do_not_use_directly: true
8151 # Instead, use gfxConfig::IsEnabled(Feature::HW_COMPOSITING).
8153 # Whether to force acceleration on, ignoring blacklists.
8155 # bug 838603 -- on Android, accidentally blacklisting OpenGL layers
8156 # means a startup crash for everyone.
8157 # Temporarily force-enable GL compositing.  This is default-disabled
8158 # deep within the bowels of the widgetry system.  Remove me when GL
8159 # compositing isn't default disabled in widget/android.
8160 - name: layers.acceleration.force-enabled
8161   type: bool
8162   value: @IS_ANDROID@
8163   mirror: once
8164   do_not_use_directly: true
8166 # Whether we allow AMD switchable graphics.
8167 - name: layers.amd-switchable-gfx.enabled
8168   type: bool
8169   value: true
8170   mirror: once
8172 # Whether to use async panning and zooming.
8173 - name: layers.async-pan-zoom.enabled
8174   type: bool
8175   value: true
8176   mirror: once
8177   do_not_use_directly: true
8179 - name: layers.child-process-shutdown
8180   type: RelaxedAtomicBool
8181   value: true
8182   mirror: always
8184 - name: layers.d3d11.force-warp
8185   type: bool
8186   value: false
8187   mirror: once
8189 - name: layers.d3d11.enable-blacklist
8190   type: bool
8191   value: true
8192   mirror: once
8194 # Enable DEAA antialiasing for transformed layers in the compositor.
8195 - name: layers.deaa.enabled
8196   type: RelaxedAtomicBool
8197 #if defined(MOZ_WIDGET_ANDROID)
8198   value: false
8199 #else
8200   value: true
8201 #endif
8202   mirror: always
8204 # Force all possible layers to be always active layers.
8205 - name: layers.force-active
8206   type: bool
8207   value: false
8208   mirror: always
8210 - name: layers.draw-mask-debug
8211   type: RelaxedAtomicBool
8212   value: false
8213   mirror: always
8215 - name: layers.force-synchronous-resize
8216   type: RelaxedAtomicBool
8217 #ifdef MOZ_WAYLAND
8218   # We want to control it by nsWindow::SynchronouslyRepaintOnResize() on Linux/Wayland.
8219   value: false
8220 #else
8221   value: true
8222 #endif
8223   mirror: always
8225 - name: layers.gpu-process.allow-software
8226   type: bool
8227 #if defined(XP_WIN)
8228   value: true
8229 #else
8230   value: false
8231 #endif
8232   mirror: once
8234 - name: layers.gpu-process.enabled
8235   type: bool
8236 #if defined(XP_WIN) || defined(MOZ_WIDGET_ANDROID)
8237   value: true
8238 #else
8239   value: false
8240 #endif
8241   mirror: once
8243 - name: layers.gpu-process.force-enabled
8244   type: bool
8245   value: false
8246   mirror: once
8248 - name: layers.gpu-process.ipc_reply_timeout_ms
8249   type: int32_t
8250   value: 10000
8251   mirror: once
8253 # How many unstable GPU process restarts we allow for a given configuration.
8254 - name: layers.gpu-process.max_restarts
8255   type: RelaxedAtomicInt32
8256 #if defined(XP_WIN) || defined(MOZ_WIDGET_GTK) || defined(MOZ_WIDGET_ANDROID)
8257   value: 6
8258 #else
8259   value: 1
8260 #endif
8261   mirror: always
8263 # How many frames we must render before declaring the GPU process stable, and
8264 # allow restarts without it counting against our maximum restarts.
8265 - name: layers.gpu-process.stable.frame-threshold
8266   type: RelaxedAtomicUint32
8267   value: 10
8268   mirror: always
8270 # How many milliseconds the GPU process must have lived before we accept that
8271 # it is stable, and allow restarts without it counting against our maximum
8272 # restarts.
8273 - name: layers.gpu-process.stable.min-uptime-ms
8274   type: RelaxedAtomicInt32
8275   value: 4 * 60000
8276   mirror: always
8278 # Note: This pref will only be used if it is less than layers.gpu-process.max_restarts.
8279 - name: layers.gpu-process.max_restarts_with_decoder
8280   type: RelaxedAtomicInt32
8281   value: 0
8282   mirror: always
8284 - name: layers.gpu-process.startup_timeout_ms
8285   type: int32_t
8286   value: 5000
8287   mirror: once
8289 - name: layers.gpu-process.crash-also-crashes-browser
8290   type: bool
8291   value: false
8292   mirror: always
8294 # Whether to animate simple opacity and transforms on the compositor.
8295 - name: layers.offmainthreadcomposition.async-animations
8296   type: bool
8297   value: true
8298   mirror: always
8300 # Whether to log information about off main thread animations to stderr.
8301 - name: layers.offmainthreadcomposition.log-animations
8302   type: bool
8303   value: false
8304   mirror: always
8306 - name: layers.offmainthreadcomposition.force-disabled
8307   type: bool
8308   value: false
8309   mirror: once
8311 # Compositor target frame rate. NOTE: If vsync is enabled the compositor
8312 # frame rate will still be capped.
8313 # -1 -> default (match layout.frame_rate or 60 FPS)
8314 # 0  -> full-tilt mode: Recomposite even if not transaction occured.
8315 - name: layers.offmainthreadcomposition.frame-rate
8316   type: RelaxedAtomicInt32
8317   value: -1
8318   mirror: always
8320 #ifdef XP_WIN
8321 -   name: layers.prefer-opengl
8322     type: bool
8323     value: false
8324     mirror: once
8325 #endif
8327 # Copy-on-write canvas.
8328 - name: layers.shared-buffer-provider.enabled
8329   type: RelaxedAtomicBool
8330   value: true
8331   mirror: always
8333 - name: layers.recycle-allocator-rdd
8334   type: bool
8335   value: true
8336   mirror: once
8338 - name: layers.iosurfaceimage.recycle-limit
8339   type: RelaxedAtomicUint32
8340   value: 15
8341   mirror: always
8343 - name: layers.iosurfaceimage.use-nv12
8344   type: bool
8345   value: true
8346   mirror: once
8348 #---------------------------------------------------------------------------
8349 # Prefs starting with "layout."
8350 #---------------------------------------------------------------------------
8352 # Debug-only pref to force enable the AccessibleCaret. If you want to
8353 # control AccessibleCaret by mouse, you'll need to set
8354 # "layout.accessiblecaret.hide_carets_for_mouse_input" to false.
8355 - name: layout.accessiblecaret.enabled
8356   type: bool
8357   value: false
8358   mirror: always
8360 # Enable the accessible caret on platforms/devices
8361 # that we detect have touch support. Note that this pref is an
8362 # additional way to enable the accessible carets, rather than
8363 # overriding the layout.accessiblecaret.enabled pref.
8364 - name: layout.accessiblecaret.enabled_on_touch
8365   type: bool
8366   value: true
8367   mirror: always
8369 # By default, carets become tilt only when they are overlapping.
8370 - name: layout.accessiblecaret.always_tilt
8371   type: bool
8372   value: false
8373   mirror: always
8375 # Show caret in cursor mode when long tapping on an empty content. This
8376 # also changes the default update behavior in cursor mode, which is based
8377 # on the emptiness of the content, into something more heuristic. See
8378 # AccessibleCaretManager::UpdateCaretsForCursorMode() for the details.
8379 - name: layout.accessiblecaret.caret_shown_when_long_tapping_on_empty_content
8380   type: bool
8381   value: false
8382   mirror: always
8384 # 0 = by default, always hide carets for selection changes due to JS calls.
8385 # 1 = update any visible carets for selection changes due to JS calls,
8386 #     but don't show carets if carets are hidden.
8387 # 2 = always show carets for selection changes due to JS calls.
8388 - name: layout.accessiblecaret.script_change_update_mode
8389   type: int32_t
8390   value: 0
8391   mirror: always
8393 # Allow one caret to be dragged across the other caret without any limitation.
8394 # This matches the built-in convention for all desktop platforms.
8395 - name: layout.accessiblecaret.allow_dragging_across_other_caret
8396   type: bool
8397   value: true
8398   mirror: always
8400 # Optionally provide haptic feedback on long-press selection events.
8401 - name: layout.accessiblecaret.hapticfeedback
8402   type: bool
8403   value: false
8404   mirror: always
8406 # Smart phone-number selection on long-press is not enabled by default.
8407 - name: layout.accessiblecaret.extend_selection_for_phone_number
8408   type: bool
8409   value: false
8410   mirror: always
8412 # Keep the accessible carets hidden when the user is using mouse input (as
8413 # opposed to touch/pen/etc.).
8414 - name: layout.accessiblecaret.hide_carets_for_mouse_input
8415   type: bool
8416   value: true
8417   mirror: always
8419 # CSS attributes (width, height, margin-left) of the AccessibleCaret in CSS
8420 # pixels.
8421 - name: layout.accessiblecaret.width
8422   type: float
8423   value: 34.0f
8424   mirror: always
8426 - name: layout.accessiblecaret.height
8427   type: float
8428   value: 36.0f
8429   mirror: always
8431 - name: layout.accessiblecaret.margin-left
8432   type: float
8433   value: -18.5f
8434   mirror: always
8436 - name: layout.accessiblecaret.transition-duration
8437   type: float
8438   value: 250.0f
8439   mirror: always
8441 # Simulate long tap events to select words. Mainly used in manual testing
8442 # with mouse.
8443 - name: layout.accessiblecaret.use_long_tap_injector
8444   type: bool
8445   value: false
8446   mirror: always
8448 # To support magnify glass, whether we dispatch additional chrome event such as
8449 # dragcaret.
8450 - name: layout.accessiblecaret.magnifier.enabled
8451   type: bool
8452   value: @IS_ANDROID@
8453   mirror: always
8455 # One of several prefs affecting the maximum area to pre-render when animating
8456 # a large element on the compositor.
8457 # This pref enables transform (and transform like properties) animations on a
8458 # large element run on the compositor with rendering partial area of the
8459 # element on the main thread instead of rendering the whole area.  Once the
8460 # animation tried to composite out of the partial rendered area, the animation
8461 # is rendered again with the latest visible partial area.
8462 - name: layout.animation.prerender.partial
8463   type: RelaxedAtomicBool
8464   value: false
8465   mirror: always
8467 # One of several prefs affecting the maximum area to pre-render when animating
8468 # a large element on the compositor.
8469 # This value is applied to both x and y axes and a perfect square contructed
8470 # by the greater axis value which will be capped by the absolute limits is used
8471 # for the partial pre-render area.
8472 - name: layout.animation.prerender.viewport-ratio-limit
8473   type: AtomicFloat
8474   value: 1.125f
8475   mirror: always
8477 # One of several prefs affecting the maximum area to pre-render when animating
8478 # a large element on the compositor.
8479 - name: layout.animation.prerender.absolute-limit-x
8480   type: RelaxedAtomicUint32
8481   value: 4096
8482   mirror: always
8484 # One of several prefs affecting the maximum area to pre-render when animating
8485 # a large element on the compositor.
8486 - name: layout.animation.prerender.absolute-limit-y
8487   type: RelaxedAtomicUint32
8488   value: 4096
8489   mirror: always
8491 # Test-only pref, if this is true, partial pre-rendered transform animations
8492 # get stuck when it reaches to the pre-rendered boundaries and the pre-render
8493 # region is never updated.
8494 - name: layout.animation.prerender.partial.jank
8495   type: RelaxedAtomicBool
8496   value: false
8497   mirror: always
8499 # Whether to enable CSS Anchor Positioning support.
8500 # https://drafts.csswg.org/css-anchor-position-1/
8501 - name: layout.css.anchor-positioning.enabled
8502   type: RelaxedAtomicBool
8503   value: false
8504   mirror: always
8505   rust: true
8507 # Override DPI. A value of -1 means use the maximum of 96 and the system DPI.
8508 # A value of 0 means use the system DPI. A positive value is used as the DPI.
8509 # This sets the physical size of a device pixel and thus controls the
8510 # interpretation of physical units such as "pt".
8511 - name: layout.css.dpi
8512   type: int32_t
8513   value: -1
8514   mirror: always
8516 # Whether to always underline links.
8517 - name: layout.css.always_underline_links
8518   type: RelaxedAtomicBool
8519   value: false
8520   mirror: always
8521   rust: true
8523 # Whether to respect align-content on blocks.
8524 - name: layout.css.align-content.blocks.enabled
8525   type: RelaxedAtomicBool
8526   value: true
8527   mirror: always
8528   rust: true
8530 # Whether content-box and stroke-box are enabled for transform-box.
8531 - name: layout.css.transform-box-content-stroke.enabled
8532   type: RelaxedAtomicBool
8533   value: true
8534   mirror: always
8535   rust: true
8537 # Whether transition-behavior property is enabled?
8538 - name: layout.css.transition-behavior.enabled
8539   type: RelaxedAtomicBool
8540   value: @IS_NIGHTLY_BUILD@
8541   mirror: always
8542   rust: true
8544 # Whether @starting-style is enabled?
8545 - name: layout.css.starting-style-at-rules.enabled
8546   type: RelaxedAtomicBool
8547   value: @IS_NIGHTLY_BUILD@
8548   mirror: always
8549   rust: true
8551 # Should we look for counter ancestor scopes first?
8552 - name: layout.css.counter-ancestor-scope.enabled
8553   type: bool
8554   value: true
8555   mirror: always
8557 # Whether the `-moz-control-character-visibility` property is exposed to
8558 # content.
8560 # Only for testing purposes.
8561 - name: layout.css.moz-control-character-visibility.enabled
8562   type: RelaxedAtomicBool
8563   value: false
8564   mirror: always
8565   rust: true
8567 # This pref controls whether the `prefers-color-scheme` value of iframes images
8568 # reacts to the embedder `color-scheme` in content.
8569 - name: layout.css.iframe-embedder-prefers-color-scheme.content.enabled
8570   type: RelaxedAtomicBool
8571   value: true
8572   mirror: always
8574 # Controls the transparency of the initial about:blank document. Generally you
8575 # don't ever want a white flash in dark mode, but due to backwards compat we
8576 # have some extra control over this, for now at least.
8578 # See https://github.com/w3c/csswg-drafts/issues/9624 for iframes.
8580 # Values:
8581 #  1: content-inaccessible top-level only.
8582 #  2: frames and content-inaccessible top-level only.
8583 #  3: always
8584 #  Others: don't treat this document specially.
8585 - name: layout.css.initial-document-transparency
8586   type: RelaxedAtomicInt32
8587   value: 3
8588   mirror: always
8590 # The minimum contrast ratio between the accent color foreground and background
8591 # colors.
8593 # We don't use this for text, so we need a contrast of at least AA (for user
8594 # interface components and graphical objects), which per WCAG is 3:1
8595 - name: layout.css.accent-color.min-contrast-ratio
8596   type: AtomicFloat
8597   value: 3.0
8598   mirror: always
8600 # The target contrast ratio between the accent color foreground and background
8601 # colors when darkening.
8603 # We aim a bit further than the minimum contrast ratio, which seems to provide
8604 # nice results in practice.
8605 - name: layout.css.accent-color.darkening-target-contrast-ratio
8606   type: AtomicFloat
8607   value: 6.0
8608   mirror: always
8610 # Whether the `animation-composition` in css-animations-2 is enabled.
8611 - name: layout.css.animation-composition.enabled
8612   type: bool
8613   value: true
8614   mirror: always
8616 # Is the codepath for using cached scrollbar styles enabled?
8617 - name: layout.css.cached-scrollbar-styles.enabled
8618   type: bool
8619   value: true
8620   mirror: always
8622 # Whether we cache inline styles in a document unconditionally or not.
8623 - name: layout.css.inline-style-caching.always-enabled
8624   type: bool
8625   value: true
8626   mirror: always
8628 # Whether computed local-fragment-only image urls serialize using the same
8629 # rules as filter/mask/etc (not resolving the URL for local refs).
8631 # See https://github.com/w3c/csswg-drafts/issues/3195
8632 - name: layout.css.computed-style.dont-resolve-image-local-refs
8633   type: RelaxedAtomicBool
8634   value: true
8635   mirror: always
8636   rust: true
8638 # Are implicit tracks in computed grid templates serialized?
8639 - name: layout.css.serialize-grid-implicit-tracks
8640   type: RelaxedAtomicBool
8641   value: true
8642   mirror: always
8644 # Whether the system-ui generic family is enabled.
8645 - name: layout.css.system-ui.enabled
8646   type: RelaxedAtomicBool
8647   value: true
8648   mirror: always
8649   rust: true
8651 # Set the number of device pixels per CSS pixel. A value <= 0 means choose
8652 # automatically based on user settings for the platform (e.g., "UI scale factor"
8653 # on Mac). If browser.display.os-zoom-behavior == 1, then a positive value
8654 # will be multiplied by the text scale factor; otherwise a positive value is
8655 # used as-is. This controls the size of a CSS "px" at 100% full-zoom.
8656 # The size of system fonts is also changed in proportion with the change in
8657 # "px" sizes. Use "ui.textScaleFactor" instead to only change the size of "px".
8658 # This is only used for windows on the screen, not for printing.
8659 - name: layout.css.devPixelsPerPx
8660   type: AtomicFloat
8661   value: -1.0f
8662   mirror: always
8664 # Is support for CSS backdrop-filter enabled?
8665 - name: layout.css.backdrop-filter.enabled
8666   type: bool
8667   value: true
8668   mirror: always
8670 # Do we override the blocklist for CSS backdrop-filter?
8671 - name: layout.css.backdrop-filter.force-enabled
8672   type: bool
8673   value: false
8674   mirror: always
8676 # Is support for rect() enabled?
8677 - name: layout.css.basic-shape-rect.enabled
8678   type: RelaxedAtomicBool
8679   value: true
8680   mirror: always
8681   rust: true
8683 # Is support for shape() enabled?
8684 - name: layout.css.basic-shape-shape.enabled
8685   type: RelaxedAtomicBool
8686   value: @IS_NIGHTLY_BUILD@
8687   mirror: always
8688   rust: true
8690 # Is support for xywh() enabled?
8691 - name: layout.css.basic-shape-xywh.enabled
8692   type: RelaxedAtomicBool
8693   value: true
8694   mirror: always
8695   rust: true
8697 # Whether alt text in content is enabled.
8698 - name: layout.css.content.alt-text.enabled
8699   type: RelaxedAtomicBool
8700   value: true
8701   mirror: always
8702   rust: true
8704 # Should stray control characters be rendered visibly?
8705 - name: layout.css.control-characters.visible
8706   type: RelaxedAtomicBool
8707   value: @IS_NOT_RELEASE_OR_BETA@
8708   mirror: always
8709   rust: true
8711 # Whether the `content-visibility` CSS property is enabled
8712 - name: layout.css.content-visibility.enabled
8713   type: RelaxedAtomicBool
8714   value: true
8715   mirror: always
8716   rust: true
8718 # Whether the `contain-intrinsic-size` CSS property is enabled
8719 - name: layout.css.contain-intrinsic-size.enabled
8720   type: RelaxedAtomicBool
8721   value: true
8722   mirror: always
8723   rust: true
8725 # Is support for GeometryUtils.convert*FromNode enabled?
8726 - name: layout.css.convertFromNode.enabled
8727   type: bool
8728   value: @IS_NOT_RELEASE_OR_BETA@
8729   mirror: always
8731 - name: layout.css.cross-fade.enabled
8732   type: RelaxedAtomicBool
8733   value: false
8734   mirror: always
8735   rust: true
8737 # Is support for light-dark() on content enabled?
8738 - name: layout.css.light-dark.enabled
8739   type: RelaxedAtomicBool
8740   value: true
8741   mirror: always
8742   rust: true
8744 # Is support for fit-content() enabled?
8745 - name: layout.css.fit-content-function.enabled
8746   type: RelaxedAtomicBool
8747   value: false
8748   mirror: always
8749   rust: true
8751 # Whether to use tight bounds for floating ::first-letter (legacy Gecko behavior)
8752 # or loose bounds based on overall font metrics (WebKit/Blink-like behavior)?
8753 # Values mean:
8754 #     1   legacy Gecko behavior (tight bounds)
8755 #     0   loose typographic bounds (similar to webkit/blink)
8756 #    -1   auto behavior: use loose bounds if reduced line-height (<1em) or negative
8757 #         block-start margin is present; otherwise use tight bounds.
8758 - name: layout.css.floating-first-letter.tight-glyph-bounds
8759   type: int32_t
8760 #ifdef NIGHTLY_BUILD
8761   value: -1
8762 #else
8763   value: 1
8764 #endif
8765   mirror: always
8767 # Is support for the @font-palette-values rule and font-palette property enabled?
8768 - name: layout.css.font-palette.enabled
8769   type: RelaxedAtomicBool
8770   value: true
8771   mirror: always
8772   rust: true
8774 # Is support for variation fonts enabled?
8775 - name: layout.css.font-variations.enabled
8776   type: RelaxedAtomicBool
8777   value: true
8778   mirror: always
8779   rust: true
8781 # Is support for the size-adjust @font-face descriptor enabled?
8782 - name: layout.css.size-adjust.enabled
8783   type: RelaxedAtomicBool
8784   value: true
8785   mirror: always
8786   rust: true
8788 # Is support for the tech() function in the @font-face src descriptor enabled?
8789 - name: layout.css.font-tech.enabled
8790   type: RelaxedAtomicBool
8791   value: true
8792   mirror: always
8793   rust: true
8795 # Is support for font-variant-emoji enabled?
8796 - name: layout.css.font-variant-emoji.enabled
8797   type: RelaxedAtomicBool
8798   value: @IS_NIGHTLY_BUILD@
8799   mirror: always
8800   rust: true
8802 # Visibility level of font families available to CSS font-matching:
8803 #   1 - only base system fonts
8804 #   2 - also fonts from optional language packs
8805 #   3 - also user-installed fonts
8806 - name: layout.css.font-visibility
8807   type: int32_t
8808   value: 3
8809   mirror: always
8811 # Is support for GeometryUtils.getBoxQuads enabled?
8812 - name: layout.css.getBoxQuads.enabled
8813   type: bool
8814   value: @IS_NOT_RELEASE_OR_BETA@
8815   mirror: always
8817 # Is support for (linear|radial|conic)-gradient color interpolation methods enabled?
8818 - name: layout.css.gradient-color-interpolation-method.enabled
8819   type: RelaxedAtomicBool
8820   value: true
8821   mirror: always
8822   rust: true
8824 # Should we propagate baseline alignment information from a parent grid into
8825 # its subgrids?
8826 - name: layout.css.grid-subgrid-baselines.enabled
8827   type: RelaxedAtomicBool
8828   value: @IS_NIGHTLY_BUILD@
8829   mirror: always
8831 # Is support for CSS masonry layout enabled?
8832 - name: layout.css.grid-template-masonry-value.enabled
8833   type: RelaxedAtomicBool
8834   value: @IS_NIGHTLY_BUILD@
8835   mirror: always
8836   rust: true
8838 # Is support for :has() enabled?
8839 - name: layout.css.has-selector.enabled
8840   type: RelaxedAtomicBool
8841   value: true
8842   mirror: always
8843   rust: true
8845 # Is support for CSS initial-letter property enabled?
8846 - name: layout.css.initial-letter.enabled
8847   type: bool
8848   value: false
8849   mirror: always
8851 # Is eager first-letter processing during intrinsic size computation enabled?
8852 - name: layout.css.intrinsic-size-first-letter.enabled
8853   type: bool
8854   value: true
8855   mirror: always
8857 # Which model to use for CSS letter-spacing:
8858 #   0 - Gecko legacy model, spacing added to trailing side of letter
8859 #   1 - WebKit/Blink-compatible, spacing always added to right-hand side
8860 #   2 - Symmetrical spacing, half added to each side
8861 - name: layout.css.letter-spacing.model
8862   type: int32_t
8863 #ifdef NIGHTLY_BUILD
8864   value: 2
8865 #else
8866   value: 0
8867 #endif
8868   mirror: always
8870 # Is support for motion-path url enabled?
8871 - name: layout.css.motion-path-url.enabled
8872   type: RelaxedAtomicBool
8873   value: true
8874   mirror: always
8875   rust: true
8877 # Pref to control whether the ::marker property restrictions defined in [1]
8878 # apply.
8880 # [1]: https://drafts.csswg.org/css-pseudo-4/#selectordef-marker
8881 - name: layout.css.marker.restricted
8882   type: RelaxedAtomicBool
8883   value: true
8884   mirror: always
8885   rust: true
8887 # Is -moz-osx-font-smoothing enabled? (Only supported in OSX builds)
8888 - name: layout.css.osx-font-smoothing.enabled
8889   type: bool
8890 #if defined(XP_MACOSX)
8891   value: true
8892 #else
8893   value: false
8894 #endif
8895   mirror: always
8897 # Is support for CSS overflow-clip-box enabled for non-UA sheets?
8898 - name: layout.css.overflow-clip-box.enabled
8899   type: bool
8900   value: false
8901   mirror: always
8903 # Is support for CSS overflow: -moz-hidden-unscrollable enabled
8904 - name: layout.css.overflow-moz-hidden-unscrollable.enabled
8905   type: RelaxedAtomicBool
8906   value: @IS_NOT_NIGHTLY_BUILD@
8907   mirror: always
8908   rust: true
8910 # Is support for overscroll-behavior enabled?
8911 - name: layout.css.overscroll-behavior.enabled
8912   type: bool
8913   value: true
8914   mirror: always
8916 # Enables support for the page-orientation  property inside of CSS @page rules.
8917 - name: layout.css.page-orientation.enabled
8918   type: RelaxedAtomicBool
8919   value: true
8920   mirror: always
8921   rust: true
8923 # Enables support for different CSS page sizes on each page when printing.
8924 - name: layout.css.allow-mixed-page-sizes
8925   type: RelaxedAtomicBool
8926   value: true
8927   mirror: always
8929 # Enables support for @margin rules.
8930 - name: layout.css.margin-rules.enabled
8931   type: RelaxedAtomicBool
8932   value: false
8933   mirror: always
8934   rust: true
8936 # Whether Properties and Values is enabled
8937 - name: layout.css.properties-and-values.enabled
8938   type: RelaxedAtomicBool
8939   value: true
8940   mirror: always
8941   rust: true
8943 # Whether @scope rule is enabled
8944 - name: layout.css.at-scope.enabled
8945   type: RelaxedAtomicBool
8946   value: false
8947   mirror: always
8948   rust: true
8950 # Dictates whether or not the prefers contrast media query will be
8951 # usable.
8952 #   true: prefers-contrast will toggle based on OS and browser settings.
8953 #   false: prefers-contrast will only parse and toggle in the browser
8954 #   chrome and ua.
8955 - name: layout.css.prefers-contrast.enabled
8956   type: RelaxedAtomicBool
8957   value: true
8958   mirror: always
8959   rust: true
8961 # An override for prefers-color-scheme for content documents.
8962 #   0: Dark
8963 #   1: Light
8964 #   2: Auto (system color scheme unless overridden by browser theme)
8965 - name: layout.css.prefers-color-scheme.content-override
8966   type: RelaxedAtomicInt32
8967   value: 2
8968   mirror: always
8970 # Dictates whether or not the forced-colors media query is enabled.
8971 - name: layout.css.forced-colors.enabled
8972   type: RelaxedAtomicBool
8973   value: true
8974   mirror: always
8975   rust: true
8977 # Dictates whether or not the prefers-reduced-transparency media query is enabled.
8978 - name: layout.css.prefers-reduced-transparency.enabled
8979   type: RelaxedAtomicBool
8980   value: false
8981   mirror: always
8982   rust: true
8984 # Dictates whether or not the inverted-colors media query is enabled.
8985 - name: layout.css.inverted-colors.enabled
8986   type: RelaxedAtomicBool
8987   value: false
8988   mirror: always
8989   rust: true
8991 # Is support for forced-color-adjust properties enabled?
8992 - name: layout.css.forced-color-adjust.enabled
8993   type: RelaxedAtomicBool
8994   value: true
8995   mirror: always
8996   rust: true
8998 # Is support for -moz-prefixed animation properties enabled?
8999 - name: layout.css.prefixes.animations
9000   type: bool
9001   value: true
9002   mirror: always
9004 # Is support for -moz-border-image enabled?
9005 - name: layout.css.prefixes.border-image
9006   type: bool
9007   value: true
9008   mirror: always
9010 # Is support for -moz-box-sizing enabled?
9011 - name: layout.css.prefixes.box-sizing
9012   type: bool
9013   value: true
9014   mirror: always
9016 # Is support for -moz-prefixed font feature properties enabled?
9017 - name: layout.css.prefixes.font-features
9018   type: bool
9019   value: true
9020   mirror: always
9022 # Is support for -moz-prefixed transform properties enabled?
9023 - name: layout.css.prefixes.transforms
9024   type: bool
9025   value: false
9026   mirror: always
9028 # Is support for -moz-prefixed transition properties enabled?
9029 - name: layout.css.prefixes.transitions
9030   type: bool
9031   value: false
9032   mirror: always
9034 # Enable relative color syntax: https://drafts.csswg.org/css-color-5/#relative-colors
9035 - name: layout.css.relative-color-syntax.enabled
9036   type: RelaxedAtomicBool
9037   value: true
9038   mirror: always
9039   rust: true
9041 # Is CSS error reporting enabled?
9042 - name: layout.css.report_errors
9043   type: bool
9044   value: true
9045   mirror: always
9047 # Are inter-character ruby annotations enabled?
9048 - name: layout.css.ruby.intercharacter.enabled
9049   type: bool
9050   value: false
9051   mirror: always
9053 - name: layout.css.scroll-behavior.damping-ratio
9054   type: AtomicFloat
9055   value: 1.0f
9056   mirror: always
9058 # Tuning of the smooth scroll motion used by CSSOM-View scroll-behavior.
9059 # Spring-constant controls the strength of the simulated MSD
9060 # (Mass-Spring-Damper).
9061 - name: layout.css.scroll-behavior.spring-constant
9062   type: AtomicFloat
9063   value: 250.0f
9064   mirror: always
9066 # Whether the scroll-driven animations generated by CSS is enabled. This
9067 # also include animation-timeline property.
9068 - name: layout.css.scroll-driven-animations.enabled
9069   type: RelaxedAtomicBool
9070   value: false
9071   mirror: always
9072   rust: true
9074 # When selecting the snap point for CSS scroll snapping, the velocity of the
9075 # scroll frame is clamped to this speed, in CSS pixels / s.
9076 - name: layout.css.scroll-snap.prediction-max-velocity
9077   type: RelaxedAtomicInt32
9078   value: 2000
9079   mirror: always
9081 #  When selecting the snap point for CSS scroll snapping, the velocity of the
9082 # scroll frame is integrated over this duration, in seconds.  The snap point
9083 # best suited for this position is selected, enabling the user to perform fling
9084 # gestures.
9085 - name: layout.css.scroll-snap.prediction-sensitivity
9086   type: AtomicFloat
9087   value: 0.750f
9088   mirror: always
9090 # Stylo thread-pool size.
9091 # Negative means auto, 0 disables the thread-pool (main-thread styling), other
9092 # numbers override as specified.
9093 # Note that 1 still creates a thread-pool of one thread!
9094 - name: layout.css.stylo-threads
9095   type: RelaxedAtomicInt32
9096   value: -1
9097   mirror: always
9098   rust: true
9100 # Stylo work unit size. This is the amount of nodes we'll process in a single
9101 # unit of work of the thread-pool.
9103 # Larger values will increase style sharing cache hits and general DOM locality
9104 # at the expense of decreased opportunities for parallelism.  There are some
9105 # measurements in bug 1385982 comments 11, 12, 13 that investigate some
9106 # slightly different values for the work unit size.
9108 # If the size is significantly increased, make sure to also review
9109 # stylo-local-work-queue prefs, since we might end up doing too much work
9110 # sequentially.
9112 # A value of 0 disables parallelism altogether.
9113 - name: layout.css.stylo-work-unit-size
9114   type: RelaxedAtomicUint32
9115   value: 16
9116   mirror: always
9117   rust: true
9119 # The minimum amount of work that a thread doing styling will try to keep
9120 # locally before sending work to other threads, in a worker.
9121 - name: layout.css.stylo-local-work-queue.in-worker
9122   type: RelaxedAtomicUint32
9123   value: 0
9124   mirror: always
9125   rust: true
9127 # As above but for the main thread. The main thread can't really steal from
9128 # other threads so it might want a bigger min queue size before giving work to
9129 # other threads.
9130 - name: layout.css.stylo-local-work-queue.in-main-thread
9131   type: RelaxedAtomicUint32
9132   value: 32
9133   mirror: always
9134   rust: true
9136 # Are counters for implemented CSS properties enabled?
9137 - name: layout.css.use-counters.enabled
9138   type: bool
9139   value: true
9140   mirror: always
9142 # Are counters for unimplemented CSS properties enabled?
9143 - name: layout.css.use-counters-unimplemented.enabled
9144   type: RelaxedAtomicBool
9145   value: true
9146   mirror: always
9147   rust: true
9149 # Should the :visited selector ever match (otherwise :link matches instead)?
9150 - name: layout.css.visited_links_enabled
9151   type: bool
9152   value: true
9153   mirror: always
9155 # The margin used for detecting relevancy for `content-visibility: auto`.
9156 - name: layout.css.content-visibility-relevant-content-margin
9157   type: float
9158   value: 50 # 50%
9159   mirror: always
9161 # Whether the `hanging` and `each-line` keywords are supported by `text-indent`
9162 - name: layout.css.text-indent-keywords.enabled
9163   type: RelaxedAtomicBool
9164   value: true
9165   mirror: always
9166   rust: true
9168 # Whether the "modern" uppercase mapping of ÃŸ to áºž (rather than SS) is used.
9169 - name: layout.css.text-transform.uppercase-eszett.enabled
9170   type: bool
9171   value: false
9172   mirror: always
9174 - name: layout.css.text-wrap-balance.enabled
9175   type: bool
9176   value: true
9177   mirror: always
9179 # Maximum number of lines to try balancing.
9180 - name: layout.css.text-wrap-balance.limit
9181   type: int32_t
9182   value: 10
9183   mirror: always
9185 - name: layout.css.text-wrap-balance-after-clamp.enabled
9186   type: bool
9187   value: true
9188   mirror: always
9190 - name: layout.css.text-align.justify-only-after-last-tab
9191   type: bool
9192   value: true
9193   mirror: always
9195 # Support for the css Zoom property.
9196 - name: layout.css.zoom.enabled
9197   type: RelaxedAtomicBool
9198   value: true
9199   mirror: always
9200   rust: true
9202 # UA styles for h1 in article/aside/nav/section. See bug 1883896.
9203 - name: layout.css.h1-in-section-ua-styles.enabled
9204   type: RelaxedAtomicBool
9205   value: @IS_NOT_NIGHTLY_BUILD@
9206   mirror: always
9208 # The maximum width or height of the cursor we should allow when intersecting
9209 # the UI, in CSS pixels.
9210 - name: layout.cursor.block.max-size
9211   type: uint32_t
9212   value: 32
9213   mirror: always
9215 - name: layout.cursor.disable-for-popups
9216   type: bool
9217   value: true
9218   mirror: always
9220 - name: layout.display-list.build-twice
9221   type: RelaxedAtomicBool
9222   value: false
9223   mirror: always
9225 # Toggle retaining display lists between paints.
9226 - name: layout.display-list.retain
9227   type: RelaxedAtomicBool
9228   value: true
9229   mirror: always
9231 # Toggle retaining display lists between paints.
9232 - name: layout.display-list.retain.chrome
9233   type: RelaxedAtomicBool
9234   value: true
9235   mirror: always
9237 - name: layout.display-list.retain.sc
9238   type: RelaxedAtomicBool
9239   value: false
9240   mirror: always
9242 # Set the maximum number of modified frames allowed before doing a full
9243 # display list rebuild.
9244 - name: layout.display-list.rebuild-frame-limit
9245   type: RelaxedAtomicUint32
9246   value: 500
9247   mirror: always
9249 # Pref to dump the display list to the log. Useful for debugging drawing.
9250 - name: layout.display-list.dump
9251   type: RelaxedAtomicBool
9252   value: false
9253   mirror: always
9255 # Pref to dump the display list to the log. Useful for debugging drawing.
9256 - name: layout.display-list.dump-content
9257   type: RelaxedAtomicBool
9258   value: false
9259   mirror: always
9261 # Pref to dump the display list to the log. Useful for debugging drawing.
9262 - name: layout.display-list.dump-parent
9263   type: RelaxedAtomicBool
9264   value: false
9265   mirror: always
9267 - name: layout.display-list.show-rebuild-area
9268   type: RelaxedAtomicBool
9269   value: false
9270   mirror: always
9272 - name: layout.display-list.improve-fragmentation
9273   type: RelaxedAtomicBool
9274   value: true
9275   mirror: always
9277 # Are dynamic reflow roots enabled?
9278 - name: layout.dynamic-reflow-roots.enabled
9279   type: bool
9280   value: @IS_EARLY_BETA_OR_EARLIER@
9281   mirror: always
9283 # Enables the mechanism to optimize away flex item's final reflow.
9284 # Warning: Disabling the pref will impact the performance. This is useful only for
9285 # debugging flexbox issues.
9286 - name: layout.flexbox.item-final-reflow-optimization.enabled
9287   type: bool
9288   value: true
9289   mirror: always
9291 # Enables the <input type=search> custom layout frame with a clear icon.
9292 # Still needs tests and a web-exposed way to remove that icon, see bug 1654288.
9293 - name: layout.forms.input-type-search.enabled
9294   type: bool
9295   value: false
9296   mirror: always
9298 # Enables the Reveal Password button inside a <input type=password>.
9299 - name: layout.forms.reveal-password-button.enabled
9300   type: bool
9301   value: false
9302   mirror: always
9304 # Enables the Reveal Password context-menu entry.
9305 - name: layout.forms.reveal-password-context-menu.enabled
9306   type: bool
9307   value: true
9308   mirror: always
9310 # If enabled, textareas won't include 'overflow:auto' scrollbars in their
9311 # block-axis size (usually height).
9312 - name: layout.forms.textarea-sizing-excludes-auto-scrollbar.enabled
9313   type: bool
9314   value: true
9315   mirror: always
9317 # Pref to control browser frame rate, in Hz. A value <= 0 means choose
9318 # automatically based on knowledge of the platform (or 60Hz if no platform-
9319 # specific information is available).
9320 - name: layout.frame_rate
9321   type: RelaxedAtomicInt32
9322   value: -1
9323   mirror: always
9325 # If it has been this many frame periods since a refresh, assume that painting
9326 # is quiescent (will not happen again soon).
9327 - name: layout.idle_period.required_quiescent_frames
9328   type: uint32_t
9329   value: 2
9330   mirror: always
9332 # The amount of time (milliseconds) needed between an idle period's
9333 # end and the start of the next tick to avoid jank.
9334 - name: layout.idle_period.time_limit
9335   type: uint32_t
9336   value: 1
9337   mirror: always
9339 # The minimum amount of time (milliseconds) required to be remaining
9340 # in the current vsync interval for us to attempt an extra tick, or
9341 # <0 to disable extra ticks entirely.
9342 - name: layout.extra-tick.minimum-ms
9343   type: int32_t
9344   value: 4
9345   mirror: always
9347 # Whether to load the broken image icon eagerly. This is mostly needed for
9348 # reftests, since the broken image icon doesn't block the load event and thus
9349 # there's no easy way to guarantee it's loaded.
9350 - name: layout.image.eager_broken_image_icon
9351   type: bool
9352   value: false
9353   mirror: always
9355 # Enable/disable interruptible reflow, which allows reflows to stop
9356 # before completion (and display the partial results) when user events
9357 # are pending.
9358 - name: layout.interruptible-reflow.enabled
9359   type: bool
9360   value: true
9361   mirror: always
9363 # On Android, don't synth mouse move events after scrolling, as they cause
9364 # unexpected user-visible behaviour. Can remove this after bug 1633450 is
9365 # satisfactorily resolved.
9366 - name: layout.reflow.synthMouseMove
9367   type: bool
9368   value: @IS_NOT_ANDROID@
9369   mirror: always
9371 # This pref determines which side vertical scrollbars should be on.
9372 # 0 = end-side in UI direction
9373 # 1 = end-side in document/content direction
9374 # 2 = right
9375 # 3 = left
9376 - name: layout.scrollbar.side
9377   type: int32_t
9378   value: 0
9379   mirror: always
9381 # This pref is to be set by test code only.
9382 - name: layout.scrollbars.always-layerize-track
9383   type: RelaxedAtomicBool
9384   value: false
9385   mirror: always
9387 - name: layout.scrollbars.click_and_hold_track.continue_to_end
9388   type: bool
9389 # On Linux, click-and-hold on the scrollbar track should continue scrolling
9390 # until the mouse is released. On the other platforms we want to stop
9391 # scrolling as soon as the scrollbar thumb has reached the current mouse
9392 # position.
9393 #ifdef MOZ_WIDGET_GTK
9394   value: true
9395 #else
9396   value: false
9397 #endif
9398   mirror: always
9400 # Whether anchor is kept selected.
9401 - name: layout.selectanchor
9402   type: bool
9403   value: false
9404   mirror: always
9406 # Controls caret style and word-delete during text selection.
9407 # 0: Use platform default
9408 # 1: Caret moves and blinks as when there is no selection; word
9409 #    delete deselects the selection and then deletes word.
9410 # 2: Caret moves to selection edge and is not visible during selection;
9411 #    word delete deletes the selection (Mac and Linux default).
9412 # 3: Caret moves and blinks as when there is no selection; word delete
9413 #    deletes the selection.
9414 # Windows default is 1 for word delete behavior, the rest as for 2.
9415 - name: layout.selection.caret_style
9416   type: int32_t
9417   value: 0
9418   mirror: always
9420 # If layout.show_previous_page is true then during loading of a new page we
9421 # will draw the previous page if the new page has painting suppressed.
9422 - name: layout.show_previous_page
9423   type: bool
9424   value: true
9425   mirror: always
9427 # Pref to stop overlay scrollbars from fading out, for testing purposes.
9428 - name: layout.testing.overlay-scrollbars.always-visible
9429   type: bool
9430   value: false
9431   mirror: always
9433 # Throttled frame rate, in frames per second.
9434 - name: layout.throttled_frame_rate
9435   type: uint32_t
9436   value: 1
9437   mirror: always
9439 # Whether we should throttle in-process iframes in the active tab.
9440 - name: layout.throttle_in_process_iframes
9441   type: bool
9442   value: true
9443   mirror: always
9445 - name: layout.lower_priority_refresh_driver_during_load
9446   type: bool
9447   value: true
9448   mirror: always
9450 # If > 0, nsRefreshDriver will keep ticking this amount of milliseconds after
9451 # top level page load.
9452 - name: layout.keep_ticking_after_load_ms
9453   type: uint32_t
9454   value: 1000
9455   mirror: always
9457 # Pref to control enabling scroll anchoring.
9458 - name: layout.css.scroll-anchoring.enabled
9459   type: bool
9460   value: true
9461   mirror: always
9463 # Pref to control whether to suspend also RefreshDriver::Tick when the page
9464 # itself is suspended because of some synchronous operation, like sync XHR.
9465 - name: layout.skip_ticks_while_page_suspended
9466   type: bool
9467   value: true
9468   mirror: always
9470 # Pref to control how many consecutive scroll-anchoring adjustments (since the
9471 # most recent user scroll or timeout) we'll average, before we consider whether
9472 # to automatically turn off scroll anchoring. When we hit this threshold, the
9473 # actual decision to disable also depends on the
9474 # min-average-adjustment-threshold pref, see below for more details.
9476 # Zero disables the heuristic.
9477 - name: layout.css.scroll-anchoring.max-consecutive-adjustments
9478   type: uint32_t
9479   value: 10
9480   mirror: always
9482 # Whether to reset counting the consecutive scroll-anchoring adjustments during
9483 # running async scrolling by APZ.
9484 - name: layout.css.scroll-anchoring.reset-heuristic-during-animation
9485   type: bool
9486   value: false
9487   mirror: always
9489 # The time after which we reset the max-consecutive-adjustments period, in
9490 # milliseconds.
9492 # This prevents sporadic back-and-forth scroll anchoring to trigger the
9493 # max-consecutive-adjustments heuristic.
9494 - name: layout.css.scroll-anchoring.max-consecutive-adjustments-timeout-ms
9495   type: uint32_t
9496   value: 500
9497   mirror: always
9499 # Pref to control whether we should disable scroll anchoring on a scroller
9500 # where at least max-consecutive-adjustments have happened, and which the
9501 # average adjustment ends up being less than this number, in CSS pixels.
9503 # So, for example, given max-consecutive-adjustments=10 and
9504 # min-average-adjustment-treshold=3, we'll block scroll anchoring if there have
9505 # been 10 consecutive adjustments without a user scroll or more, and the
9506 # average offset difference between them amount to less than 3 CSS pixels.
9507 - name: layout.css.scroll-anchoring.min-average-adjustment-threshold
9508   type: uint32_t
9509   value: 2
9510   mirror: always
9512 # Pref to control disabling scroll anchoring suppression triggers, see
9514 # https://drafts.csswg.org/css-scroll-anchoring/#suppression-triggers
9516 # Those triggers should be unnecessary after bug 1561450.
9517 - name: layout.css.scroll-anchoring.suppressions.enabled
9518   type: bool
9519   value: true
9520   mirror: always
9522 - name: layout.css.scroll-anchoring.highlight
9523   type: bool
9524   value: false
9525   mirror: always
9527 # Pref to control whether we reselect scroll anchors if sub-optimal
9529 # See https://github.com/w3c/csswg-drafts/issues/6787
9530 - name: layout.css.scroll-anchoring.reselect-if-suboptimal
9531   type: bool
9532   value: true
9533   mirror: always
9535 # Are shared memory User Agent style sheets enabled?
9536 - name: layout.css.shared-memory-ua-sheets.enabled
9537   type: bool
9538   value: true
9539   mirror: always
9541 # Is support for -webkit-line-clamp on regular blocks enabled?
9542 - name: layout.css.webkit-line-clamp.block.enabled
9543   type: bool
9544   value: false
9545   mirror: always
9547 # Is 'content:none' supported on (non-pseudo) elements?
9548 - name: layout.css.element-content-none.enabled
9549   type: RelaxedAtomicBool
9550   value: false
9551   mirror: always
9552   rust: true
9554 # Whether we want scrollbar-width: thin to behave as scrollbar-width: auto.
9555 - name: layout.css.scrollbar-width-thin.disabled
9556   type: RelaxedAtomicBool
9557   value: false
9558   mirror: always
9560 # field-sizing CSS property
9561 - name: layout.css.field-sizing.enabled
9562   type: RelaxedAtomicBool
9563   value: false
9564   mirror: always
9566 # Whether supports() conditions in @import is enabled
9567 - name: layout.css.import-supports.enabled
9568   type: RelaxedAtomicBool
9569   value: true
9570   mirror: always
9571   rust: true
9573 # Whether :-moz-broken is supported in content.
9574 - name: layout.css.moz-broken.content.enabled
9575   type: RelaxedAtomicBool
9576   value: false
9577   mirror: always
9578   rust: true
9580 # Whether the modern ::slider-* pseudos are enabled.
9581 - name: layout.css.modern-range-pseudos.enabled
9582   type: RelaxedAtomicBool
9583   value: false
9584   mirror: always
9585   rust: true
9587 # Is matching video-dynamic-range: high allowed?
9588 - name: layout.css.video-dynamic-range.allows-high
9589   type: RelaxedAtomicBool
9590 #if defined(XP_MACOSX)
9591   value: true
9592 #else
9593   value: false
9594 #endif
9595   mirror: always
9597 # Whether frame visibility tracking is enabled globally.
9598 - name: layout.framevisibility.enabled
9599   type: bool
9600   value: true
9601   mirror: always
9603 # The fraction of the scrollport we allow to horizontally scroll by before we
9604 # schedule an update of frame visibility.
9605 - name: layout.framevisibility.amountscrollbeforeupdatehorizontal
9606   type: int32_t
9607   value: 2
9608   mirror: always
9610 # The fraction of the scrollport we allow to vertically scroll by before we
9611 # schedule an update of frame visibility.
9612 - name: layout.framevisibility.amountscrollbeforeupdatevertical
9613   type: int32_t
9614   value: 2
9615   mirror: always
9617 # The number of scrollports wide to expand when tracking frame visibility.
9618 - name: layout.framevisibility.numscrollportwidths
9619   type: uint32_t
9620 #ifdef ANDROID
9621   value: 1
9622 #else
9623   value: 0
9624 #endif
9625   mirror: always
9627 # The number of scrollports high to expand when tracking frame visibility.
9628 - name: layout.framevisibility.numscrollportheights
9629   type: uint32_t
9630   value: 1
9631   mirror: always
9633 # Test only.
9634 - name: layout.dynamic-toolbar-max-height
9635   type: RelaxedAtomicInt32
9636   value: 0
9637   mirror: always
9639 # Whether outlines should include all overflowing descendants, or just the
9640 # border-box of a given element.
9642 # Historically we have included descendants but other browsers have not.
9643 - name: layout.outline.include-overflow
9644   type: bool
9645   value: false
9646   mirror: always
9648 # Enable/disable overflow/underflow events in content
9649 - name: layout.overflow-underflow.content.enabled
9650   type: bool
9651   value: @IS_NOT_EARLY_BETA_OR_EARLIER@
9652   mirror: always
9654 # Enable/disable overflow/underflow events in addon content
9655 - name: layout.overflow-underflow.content.enabled_in_addons
9656   type: bool
9657   value: true
9658   mirror: always
9660 - name: layout.visibility.min-recompute-interval-ms
9661   type: uint32_t
9662   value: 1000
9663   mirror: always
9665 # Controls double click and Alt+Arrow word selection behavior.
9666 - name: layout.word_select.eat_space_to_next_word
9667   type: bool
9668 #ifdef XP_WIN
9669   value: true
9670 #else
9671   value: false
9672 #endif
9673   mirror: always
9675 - name: layout.word_select.stop_at_punctuation
9676   type: RelaxedAtomicBool
9677   value: true
9678   mirror: always
9680 # Whether underscore should be treated as a word-breaking character for
9681 # word selection/arrow-key movement purposes.
9682 - name: layout.word_select.stop_at_underscore
9683   type: bool
9684   value: false
9685   mirror: always
9687 # Whether to draw images in CSS backgrounds if we only have a partial frame.
9688 - name: layout.display_partial_background_images
9689   type: bool
9690   value: true
9691   mirror: always
9693 # Controls whether nsRefreshDriver::IsInHighRateMode() may ever return true.
9694 - name: layout.expose_high_rate_mode_from_refreshdriver
9695   type: bool
9696   value: true
9697   mirror: always
9699 # Whether <details> is forced to be a block, see bug 1856374
9700 - name: layout.details.force-block-layout
9701   type: bool
9702   value: true
9703   mirror: always
9705 # Whether table cells can generate scroll boxes.
9706 - name: layout.tables.scrollable-cells
9707   type: bool
9708   value: @IS_NIGHTLY_BUILD@
9709   mirror: always
9711 # Whether to disable layer pixel alignment in scroll related stuff.
9712 - name: layout.scroll.disable-pixel-alignment
9713   type: RelaxedAtomicBool
9714   value: false
9715   mirror: always
9717 #---------------------------------------------------------------------------
9718 # Prefs starting with "logging."
9719 #---------------------------------------------------------------------------
9721 # If this pref is true, prefs in the logging.config branch will be cleared on
9722 # startup. This prevents unadvertedly creating huge log files that fill the disk
9723 # when forgetting to remove the logging preferences.
9724 - name: logging.config.clear_on_startup
9725   type: bool
9726   value: true
9727   mirror: never
9729 # Allow setting log modules at runtimes easily with a MOZ_LOG string.
9730 # This preference is empty by default but defined, this makes it easy to use
9731 # especially on mobile by searching for it in about:config.
9732 - name: logging.config.modules
9733   type: String
9734   value: ""
9735   mirror: never
9737 #---------------------------------------------------------------------------
9738 # Prefs starting with "mathml."
9739 #---------------------------------------------------------------------------
9741 # Whether to disable legacy names "thickmathspace", "mediummathspace",
9742 # "thickmathspace" etc for length attributes.
9743 - name: mathml.mathspace_names.disabled
9744   type: bool
9745   value: @IS_NIGHTLY_BUILD@
9746   mirror: always
9748 # Whether to disable support for stretching operators with STIXGeneral fonts.
9749 # macos still has the deprecated STIXGeneral font pre-installed.
9750 - name: mathml.stixgeneral_operator_stretching.disabled
9751   type: bool
9752 #if defined(XP_MACOSX)
9753   value: @IS_NIGHTLY_BUILD@
9754 #else
9755   value: true
9756 #endif
9757   mirror: always
9759 # Whether to disable fallback for mathvariant=italic/bold/bold-italic via
9760 # styling when lacking proper fonts for Mathematical Alphanumeric Symbols.
9761 # We expect all OSes to have relevant fonts, except Android, see bug 1789083.
9762 - name: mathml.mathvariant_styling_fallback.disabled
9763   type: bool
9764 #if defined(ANDROID)
9765   value: false
9766 #else
9767   value: true
9768 #endif
9769   mirror: always
9771 # Whether to disable the MathML3 support for the mathvariant attribute. For
9772 # MathML Core, support is restricted to the <mi> element and to value "normal".
9773 # Corresponding automatic italicization on single-char <mi> element is also
9774 # implemented via text-transform: auto when that flag is enabled.
9775 - name: mathml.legacy_mathvariant_attribute.disabled
9776   type: bool
9777   value: @IS_NIGHTLY_BUILD@
9778   mirror: always
9779   rust: true
9781 # Whether to disable forced centering of binary operators (+, =, ...).
9782 - name: mathml.centered_operators.disabled
9783   type: bool
9784   value: true
9785   mirror: always
9786   rust: true
9788 # Whether to disable extra top/bottom spacing for stretchy operators.
9789 - name: mathml.top_bottom_spacing_for_stretchy_operators.disabled
9790   type: bool
9791   value: true
9792   mirror: always
9793   rust: true
9795 #---------------------------------------------------------------------------
9796 # Prefs starting with "media."
9797 #---------------------------------------------------------------------------
9800 # This pref defines what the blocking policy would be used in blocking autoplay.
9801 # 0 : use sticky activation (default)
9802 # https://html.spec.whatwg.org/multipage/interaction.html#sticky-activation
9803 # 1 : use transient activation (the transient activation duration can be
9804 #     adjusted by the pref `dom.user_activation.transient.timeout`)
9805 # https://html.spec.whatwg.org/multipage/interaction.html#transient-activation
9806 # 2 : user input depth (allow autoplay when the play is trigged by user input
9807 #     which is determined by the user input depth)
9808 - name: media.autoplay.blocking_policy
9809   type: uint32_t
9810   value: 0
9811   mirror: always
9813 # Whether to allow autoplay on extension background pages.
9814 - name: media.autoplay.allow-extension-background-pages
9815   type: bool
9816   value: true
9817   mirror: always
9819 # Block autoplay, asking for permission by default.
9820 # 0=Allowed, 1=Blocked, 5=All Blocked
9821 - name: media.autoplay.default
9822   type: int32_t
9823   value: 1
9824   mirror: always
9826 # File-backed MediaCache size.
9827 - name: media.cache_size
9828   type: RelaxedAtomicUint32
9829   value: 512000   # Measured in KiB
9830   mirror: always
9832 # Size of file backed MediaCache while on a connection which is cellular (3G,
9833 # etc), and thus assumed to be "expensive".
9834 - name: media.cache_size.cellular
9835   type: RelaxedAtomicUint32
9836   value: 32768   # Measured in KiB
9837   mirror: always
9839 # Multiplier to change the sample rate at which input-only streams run, so as
9840 # to similate clock drift.
9841 - name: media.cubeb.input_drift_factor
9842   type: AtomicFloat
9843   mirror: always
9844   value: 1.f
9846 # Multiplier to change the sample rate at which output-only streams run, so as
9847 # to similate clock drift.
9848 - name: media.cubeb.output_drift_factor
9849   type: AtomicFloat
9850   mirror: always
9851   value: 1.f
9853 # Whether cubeb is sandboxed (AudioIPC)
9854 - name: media.cubeb.sandbox
9855   type: bool
9856   mirror: always
9857 #if defined(XP_LINUX) || defined(XP_WIN) || defined(XP_MACOSX)
9858   value: true
9859 #else
9860   value: false
9861 #endif
9863 # Whether or not to pass AUDCLNT_STREAMOPTIONS_RAW when initializing audio
9864 # streams when using WASAPI.
9865 # 0 - don't use RAW streams
9866 # 1 - use RAW streams for input streams only
9867 # 2 - use RAW streams for output streams only
9868 # 3 - use RAW streams for input and output streams
9869 #if defined (XP_WIN)
9870 - name: media.cubeb.wasapi-raw
9871   type: RelaxedAtomicUint32
9872   mirror: always
9873   value: 0
9874 #endif // XP_WIN
9876 # Whether to make the start of cubeb stream slower, and by how many
9877 # milliseconds.
9878 - name: media.cubeb.slow_stream_init_ms
9879   type: RelaxedAtomicUint32
9880   mirror: always
9881   value: 0
9883 # If a resource is known to be smaller than this size (in kilobytes), a
9884 # memory-backed MediaCache may be used; otherwise the (single shared global)
9885 # file-backed MediaCache is used.
9886 - name: media.memory_cache_max_size
9887   type: uint32_t
9888   value: 8192        # Measured in KiB
9889   mirror: always
9891 # Don't create more memory-backed MediaCaches if their combined size would go
9892 # above this absolute size limit.
9893 - name: media.memory_caches_combined_limit_kb
9894   type: uint32_t
9895   value: 524288
9896   mirror: always
9898 # Don't create more memory-backed MediaCaches if their combined size would go
9899 # above this relative size limit (a percentage of physical memory).
9900 - name: media.memory_caches_combined_limit_pc_sysmem
9901   type: uint32_t
9902   value: 5           # A percentage
9903   mirror: always
9905 # When a network connection is suspended, don't resume it until the amount of
9906 # buffered data falls below this threshold (in seconds).
9907 - name: media.cache_resume_threshold
9908   type: RelaxedAtomicUint32
9909   value: 30
9910   mirror: always
9911 - name: media.cache_resume_threshold.cellular
9912   type: RelaxedAtomicUint32
9913   value: 10
9914   mirror: always
9916 # Stop reading ahead when our buffered data is this many seconds ahead of the
9917 # current playback position. This limit can stop us from using arbitrary
9918 # amounts of network bandwidth prefetching huge videos.
9919 - name: media.cache_readahead_limit
9920   type: RelaxedAtomicUint32
9921   value: 60
9922   mirror: always
9923 - name: media.cache_readahead_limit.cellular
9924   type: RelaxedAtomicUint32
9925   value: 30
9926   mirror: always
9928 # MediaCapabilities
9929 - name: media.mediacapabilities.drop-threshold
9930   type: RelaxedAtomicInt32
9931   value: 95
9932   mirror: always
9934 - name: media.mediacapabilities.from-database
9935   type: RelaxedAtomicBool
9936   value: @IS_NIGHTLY_BUILD@
9937   mirror: always
9939 # AudioSink
9940 - name: media.resampling.enabled
9941   type: RelaxedAtomicBool
9942   value: false
9943   mirror: always
9945 # libcubeb backend implements .get_preferred_channel_layout
9946 - name: media.forcestereo.enabled
9947   type: RelaxedAtomicBool
9948 #if defined(XP_WIN) || defined(XP_DARWIN) || defined(MOZ_PULSEAUDIO)
9949   value: false
9950 #else
9951   value: true
9952 #endif
9953   mirror: always
9955 # MediaSource
9957 # Whether to enable MediaSource support.
9958 - name: media.mediasource.enabled
9959   type: RelaxedAtomicBool
9960   value: true
9961   mirror: always
9963 - name: media.mediasource.mp4.enabled
9964   type: RelaxedAtomicBool
9965   value: true
9966   mirror: always
9968 - name: media.mediasource.webm.enabled
9969   type: RelaxedAtomicBool
9970   value: true
9971   mirror: always
9973 # Check if vp9 is enabled by default in mediasource. False on Android.
9974 # If disabled, vp9 will only be enabled under some conditions:
9975 # - h264 HW decoding is not supported
9976 # - mp4 is not enabled
9977 # - Device was deemed fast enough to decode VP9 via the VP9Benchmark utility
9978 # - A VP9 HW decoder is present.
9979 - name: media.mediasource.vp9.enabled
9980   type: RelaxedAtomicBool
9981   value: @IS_NOT_ANDROID@
9982   mirror: always
9984 # Whether to enable MediaSource v2 support.
9985 - name: media.mediasource.experimental.enabled
9986   type: RelaxedAtomicBool
9987   value: false
9988   mirror: always
9990 # VideoSink
9991 - name: media.ruin-av-sync.enabled
9992   type: RelaxedAtomicBool
9993   value: false
9994   mirror: always
9996 # Encrypted Media Extensions
9997 - name: media.eme.enabled
9998   type: bool
9999 #if defined(XP_LINUX) && !defined(MOZ_WIDGET_ANDROID)
10000   # On Linux EME is visible but disabled by default. This is so that the "Play
10001   # DRM content" checkbox in the Firefox UI is unchecked by default. DRM
10002   # requires downloading and installing proprietary binaries, which users on an
10003   # open source operating systems didn't opt into. The first time a site using
10004   # EME is encountered, the user will be prompted to enable DRM, whereupon the
10005   # EME plugin binaries will be downloaded if permission is granted.
10006   value: false
10007 #else
10008   value: true
10009 #endif
10010   mirror: always
10012 # Whether we expose the functionality proposed in
10013 # https://w3c.github.io/encrypted-media/#ref-for-dom-mediakeysystemmediacapability-encryptionscheme-2
10014 # I.e. if true, apps calling navigator.requestMediaKeySystemAccess() can pass
10015 # an optional encryption scheme as part of MediaKeySystemMediaCapability
10016 # objects. If a scheme is present when we check for support, we must ensure we
10017 # support that scheme in order to provide key system access.
10018 - name: media.eme.encrypted-media-encryption-scheme.enabled
10019   type: bool
10020   value: true
10021   mirror: always
10023 # Do we need explicit approval from the application to allow access to EME?
10024 # If true, Gecko will ask for permission before allowing MediaKeySystemAccess.
10025 # At time of writing this is aimed at GeckoView, and setting this to true
10026 # outside of GeckoView or test environments will likely break EME.
10027 - name: media.eme.require-app-approval
10028   type: bool
10029   value: false
10030   mirror: always
10032 - name: media.eme.audio.blank
10033   type: RelaxedAtomicBool
10034   value: false
10035   mirror: always
10037 - name: media.eme.video.blank
10038   type: RelaxedAtomicBool
10039   value: false
10040   mirror: always
10042 - name: media.eme.chromium-api.video-shmems
10043   type: RelaxedAtomicUint32
10044   value: 6
10045   mirror: always
10047 # Is support for MediaKeys.getStatusForPolicy enabled?
10048 - name: media.eme.hdcp-policy-check.enabled
10049   type: bool
10050   value: true
10051   mirror: always
10053 - name: media.eme.max-throughput-ms
10054   type: RelaxedAtomicUint32
10055   value: 500
10056   mirror: always
10058 - name: media.clearkey.persistent-license.enabled
10059   type: bool
10060   value: false
10061   mirror: always
10063 # Are test specific clearkey key systems enabled and exposed?
10064 - name: media.clearkey.test-key-systems.enabled
10065   type: RelaxedAtomicBool
10066   value: false
10067   mirror: always
10069 - name: media.cloneElementVisually.testing
10070   type: bool
10071   value: false
10072   mirror: always
10074 # Does the GMPlugin process initialize minimal XPCOM
10075 - name: media.gmp.use-minimal-xpcom
10076   type: RelaxedAtomicBool
10077   value: true
10078   mirror: always
10080 # Does the GMPlugin process use native event processing
10081 - name: media.gmp.use-native-event-processing
10082   type: RelaxedAtomicBool
10083   value: @IS_NOT_XP_MACOSX@
10084   mirror: always
10086 #if defined(XP_LINUX) && defined(MOZ_SANDBOX)
10087   # Whether to allow, on a Linux system that doesn't support the necessary
10088   # sandboxing features, loading Gecko Media Plugins unsandboxed.  However, EME
10089   # CDMs will not be loaded without sandboxing even if this pref is changed.
10090 -   name: media.gmp.insecure.allow
10091     type: RelaxedAtomicBool
10092     value: false
10093     mirror: always
10094 #endif
10096 # (When reading the next line, know that preprocessor.py doesn't
10097 # understand parentheses, but && is higher precedence than ||.)
10098 #if defined(XP_WIN) && defined(_ARM64_) || defined(XP_MACOSX)
10099   # These prefs control whether or not we will allow x86/x64 plugins
10100   # to run on Windows ARM or Apple Silicon machines. This requires
10101   # launching the GMP child process executable in x86/x64 mode. We
10102   # expect to allow this for Widevine until an arm64 version of
10103   # Widevine and Clearkey is made available. We don't expect to need
10104   # to allow this for OpenH264.
10105   #
10106   # For Apple Silicon and OSX, it will be for universal builds and
10107   # whether or not it can use the x64 Widevine plugin.
10108   #
10109   # For Windows ARM, it will be for ARM builds and whether or not it
10110   # can use x86 Widevine or Clearkey plugins.
10112   # May a Widevine GMP x64 process be executed on ARM builds.
10113 - name: media.gmp-widevinecdm.allow-x64-plugin-on-arm64
10114   type: RelaxedAtomicBool
10115   value: true
10116   mirror: always
10118   # May an OpenH264 GMP x64 process be executed on ARM builds.
10119 - name: media.gmp-gmpopenh264.allow-x64-plugin-on-arm64
10120   type: RelaxedAtomicBool
10121   value: false
10122   mirror: always
10124   # May a Clearkey GMP x64 process be executed on ARM builds.
10125 - name: media.gmp-gmpclearkey.allow-x64-plugin-on-arm64
10126   type: RelaxedAtomicBool
10127   value: false
10128   mirror: always
10129 #endif
10131 # Specifies whether the PDMFactory can create a test decoder that just outputs
10132 # blank frames/audio instead of actually decoding. The blank decoder works on
10133 # all platforms.
10134 - name: media.use-blank-decoder
10135   type: RelaxedAtomicBool
10136   value: false
10137   mirror: always
10139 - name: media.gpu-process-decoder
10140   type: RelaxedAtomicBool
10141 #if defined(XP_WIN)
10142   value: true
10143 #else
10144   value: false
10145 #endif
10146   mirror: always
10148 # The codecs in the vendored ffmpeg copy are usually prefered to the other
10149 # codecs. This allows changing this policy for testing purposes.
10150 - name: media.prefer-non-ffvpx
10151   type: RelaxedAtomicBool
10152   value: false
10153   mirror: always
10155 - name: media.rdd-process.enabled
10156   type: RelaxedAtomicBool
10157 #if defined(XP_WIN)
10158   value: true
10159 #elif defined(XP_MACOSX)
10160   value: true
10161 #elif defined(XP_LINUX) && !defined(ANDROID)
10162   value: true
10163 #elif defined(XP_FREEBSD)
10164   value: true
10165 #elif defined(XP_OPENBSD)
10166   value: true
10167 #else
10168   value: false
10169 #endif
10170   mirror: always
10172 - name: media.rdd-retryonfailure.enabled
10173   type: RelaxedAtomicBool
10174   value: true
10175   mirror: always
10177 - name: media.rdd-process.startup_timeout_ms
10178   type: RelaxedAtomicInt32
10179   value: 5000
10180   mirror: always
10182 # Specifies how many times we restart RDD process after crash till we give up.
10183 # After first RDD restart we disable HW acceleration on Linux.
10184 - name: media.rdd-process.max-crashes
10185   type: RelaxedAtomicInt32
10186   value: 2
10187   mirror: always
10189 #ifdef MOZ_FFMPEG
10190 - name: media.rdd-ffmpeg.enabled
10191   type: RelaxedAtomicBool
10192   value: true
10193   mirror: always
10194 #endif
10197 - name: media.rdd-ffvpx.enabled
10198   type: RelaxedAtomicBool
10199 #if defined(XP_WIN)
10200   value: true
10201 #elif defined(XP_MACOSX)
10202   value: true
10203 #elif defined(XP_LINUX) && !defined(ANDROID)
10204   value: true
10205 #elif defined(XP_FREEBSD)
10206   value: true
10207 #elif defined(XP_OPENBSD)
10208   value: true
10209 #else
10210   value: false
10211 #endif
10212   mirror: always
10214 #ifdef MOZ_WMF
10215 - name: media.rdd-wmf.enabled
10216   type: RelaxedAtomicBool
10217   value: true
10218   mirror: always
10219 #endif
10221 #ifdef MOZ_APPLEMEDIA
10222 - name: media.rdd-applemedia.enabled
10223   type: RelaxedAtomicBool
10224   value: true
10225   mirror: always
10226 #endif
10228 - name: media.rdd-theora.enabled
10229   type: RelaxedAtomicBool
10230 #if defined(XP_WIN)
10231   value: true
10232 #elif defined(XP_MACOSX)
10233   value: true
10234 #elif defined(XP_LINUX) && !defined(ANDROID)
10235   value: true
10236 #elif defined(XP_FREEBSD)
10237   value: true
10238 #elif defined(XP_OPENBSD)
10239   value: true
10240 #else
10241   value: false
10242 #endif
10243   mirror: always
10245 - name: media.rdd-vorbis.enabled
10246   type: RelaxedAtomicBool
10247 #if defined(XP_WIN)
10248   value: true
10249 #elif defined(XP_MACOSX)
10250   value: true
10251 #elif defined(XP_LINUX) && !defined(ANDROID)
10252   value: true
10253 #elif defined(XP_FREEBSD)
10254   value: true
10255 #elif defined(XP_OPENBSD)
10256   value: true
10257 #else
10258   value: false
10259 #endif
10260   mirror: always
10262 - name: media.rdd-vpx.enabled
10263   type: RelaxedAtomicBool
10264 #if defined(XP_WIN)
10265   value: true
10266 #elif defined(XP_MACOSX)
10267   value: true
10268 #elif defined(XP_LINUX) && !defined(ANDROID)
10269   value: true
10270 #elif defined(XP_FREEBSD)
10271   value: true
10272 #elif defined(XP_OPENBSD)
10273   value: true
10274 #else
10275   value: false
10276 #endif
10277   mirror: always
10279 - name: media.rdd-wav.enabled
10280   type: RelaxedAtomicBool
10281 #if defined(XP_WIN)
10282   value: true
10283 #elif defined(XP_MACOSX)
10284   value: true
10285 #elif defined(XP_LINUX) && !defined(ANDROID)
10286   value: true
10287 #elif defined(XP_FREEBSD)
10288   value: true
10289 #elif defined(XP_OPENBSD)
10290   value: true
10291 #else
10292   value: false
10293 #endif
10294   mirror: always
10296 - name: media.rdd-opus.enabled
10297   type: RelaxedAtomicBool
10298 #if defined(XP_WIN)
10299   value: true
10300 #elif defined(XP_MACOSX)
10301   value: true
10302 #elif defined(XP_LINUX) && !defined(ANDROID)
10303   value: true
10304 #elif defined(XP_FREEBSD)
10305   value: true
10306 #elif defined(XP_OPENBSD)
10307   value: true
10308 #else
10309   value: false
10310 #endif
10311   mirror: always
10313 - name: media.rdd-webaudio.batch.size
10314   type: RelaxedAtomicInt32
10315   value: 100
10316   mirror: always
10318 # This pref is here to control whether we want to perform audio decoding by
10319 # using the IPC actor within the Utility process rather than the RDD process.
10320 # When it is set to true, then the utility process will take precedence over RDD
10321 # to perform audio decoding.
10322 # TODO: Enabling for Isolated Processes builds on Android
10323 - name: media.utility-process.enabled
10324   type: RelaxedAtomicBool
10325 #if defined(XP_WIN)
10326   value: true
10327 #elif defined(XP_MACOSX)
10328   value: true
10329 #elif defined(XP_LINUX) && !defined(ANDROID)
10330   value: true
10331 #elif defined(ANDROID) && !defined(MOZ_ANDROID_CONTENT_SERVICE_ISOLATED_PROCESS)
10332   value: true
10333 #elif defined(XP_FREEBSD)
10334   value: true
10335 #elif defined(XP_OPENBSD)
10336   value: true
10337 #else
10338   value: false
10339 #endif
10340   mirror: always
10342 # Specifies how many times we restart Utility process after crash till we give
10343 # up.
10344 - name: media.utility-process.max-crashes
10345   type: RelaxedAtomicInt32
10346   value: 2
10347   mirror: always
10349 #ifdef MOZ_FFMPEG
10350 - name: media.utility-ffmpeg.enabled
10351   type: RelaxedAtomicBool
10352   value: true
10353   mirror: always
10354 #endif
10356 - name: media.utility-ffvpx.enabled
10357   type: RelaxedAtomicBool
10358   value: true
10359   mirror: always
10361 #ifdef MOZ_WMF
10362 - name: media.utility-wmf.enabled
10363   type: RelaxedAtomicBool
10364   value: true
10365   mirror: always
10366 #endif
10368 #ifdef MOZ_APPLEMEDIA
10369 - name: media.utility-applemedia.enabled
10370   type: RelaxedAtomicBool
10371   value: true
10372   mirror: always
10373 #endif
10375 - name: media.utility-vorbis.enabled
10376   type: RelaxedAtomicBool
10377   value: true
10378   mirror: always
10380 - name: media.utility-wav.enabled
10381   type: RelaxedAtomicBool
10382   value: true
10383   mirror: always
10385 - name: media.utility-opus.enabled
10386   type: RelaxedAtomicBool
10387   value: true
10388   mirror: always
10390 #ifdef ANDROID
10391   # Enable the MediaCodec PlatformDecoderModule by default.
10392 -   name: media.android-media-codec.enabled
10393     type: RelaxedAtomicBool
10394     value: true
10395     mirror: always
10397   # Bug 1771196
10398   # Dont yet enable AndroidDecoderModule on Utility
10399 -   name: media.utility-android-media-codec.enabled
10400     type: RelaxedAtomicBool
10401     value: false
10402     mirror: always
10404 -   name: media.android-media-codec.preferred
10405     type: RelaxedAtomicBool
10406     value: true
10407     mirror: always
10408 #endif  # ANDROID
10410 # Now we will completely disable the ability to perform audio decoding outside
10411 # of Utility.
10412 -   name: media.allow-audio-non-utility
10413     type: RelaxedAtomicBool
10414     value: false
10415     mirror: always
10417 #ifdef MOZ_OMX
10418 -   name: media.omx.enabled
10419     type: bool
10420     value: false
10421     mirror: always
10422 #endif
10424 # Allow ffmpeg decoder to decode directly onto shmem buffer
10425 - name: media.ffmpeg.customized-buffer-allocation
10426   type: RelaxedAtomicBool
10427   value: true
10428   mirror: always
10430 #ifdef MOZ_FFMPEG
10431 -   name: media.ffmpeg.enabled
10432     type: RelaxedAtomicBool
10433   #if defined(XP_MACOSX)
10434     value: false
10435   #else
10436     value: true
10437   #endif
10438     mirror: always
10440 -   name: media.libavcodec.allow-obsolete
10441     type: bool
10442     value: false
10443     mirror: always
10444 #endif  # MOZ_FFMPEG
10446 # Allow using ffmpeg encoder
10447 -   name: media.ffmpeg.encoder.enabled
10448     type: RelaxedAtomicBool
10449 #if defined(MOZ_WIDGET_GTK) || defined(XP_WIN)
10450     value: @IS_NIGHTLY_BUILD@
10451 #else
10452     value: false
10453 #endif
10454     mirror: always
10456 # Allow using openh264 decoding with ffmpeg
10457 -   name: media.ffmpeg.allow-openh264
10458     type: RelaxedAtomicBool
10459     value: @IS_NOT_NIGHTLY_BUILD@
10460     mirror: always
10462 #ifdef MOZ_WIDGET_GTK
10463 # Use VA-API for ffmpeg video playback on Linux
10464 - name: media.ffmpeg.vaapi.enabled
10465   type: bool
10466   value: false
10467   mirror: once
10469 # Force to copy dmabuf video frames
10470 # Used for debugging/troubleshooting only
10471 # 0 - force disable
10472 # 1 - force enable
10473 # 2 - default
10474 - name: media.ffmpeg.vaapi.force-surface-zero-copy
10475   type: uint32_t
10476   value: 2
10477   mirror: once
10478 #endif # MOZ_WIDGET_GTK
10480 # Set to true in marionette tests to disable the sanity test
10481 # which would lead to unnecessary start of the RDD process.
10482 -   name: media.sanity-test.disabled
10483     type: RelaxedAtomicBool
10484     value: false
10485     mirror: always
10487 #ifdef MOZ_WMF
10489 -   name: media.wmf.enabled
10490     type: RelaxedAtomicBool
10491     value: true
10492     mirror: always
10494   # Whether DD should consider WMF-disabled a WMF failure, useful for testing.
10495 -   name: media.decoder-doctor.wmf-disabled-is-failure
10496     type: RelaxedAtomicBool
10497     value: false
10498     mirror: always
10500 -   name: media.wmf.dxva.d3d11.enabled
10501     type: RelaxedAtomicBool
10502     value: true
10503     mirror: always
10505 -   name: media.wmf.dxva.max-videos
10506     type: RelaxedAtomicUint32
10507     value: 8
10508     mirror: always
10510 -   name: media.wmf.use-nv12-format
10511     type: RelaxedAtomicBool
10512     value: true
10513     mirror: always
10515 -   name: media.wmf.zero-copy-nv12-textures
10516     type: bool
10517     value: true
10518     mirror: once
10519 # Enable hardware decoded video no copy even when it is blocked.
10520 -   name: media.wmf.zero-copy-nv12-textures-force-enabled
10521     type: bool
10522     value: false
10523     mirror: once
10525 -   name: media.wmf.force.allow-p010-format
10526     type: RelaxedAtomicBool
10527     value: false
10528     mirror: always
10530 -   name: media.wmf.use-sync-texture
10531     type: bool
10532     value: true
10533     mirror: once
10535 -   name: media.wmf.low-latency.enabled
10536     type: RelaxedAtomicBool
10537     value: true
10538     mirror: always
10540 -   name: media.wmf.skip-blacklist
10541     type: RelaxedAtomicBool
10542     value: false
10543     mirror: always
10545 -   name: media.wmf.amd.highres.enabled
10546     type: RelaxedAtomicBool
10547     value: true
10548     mirror: always
10550 -   name: media.wmf.allow-unsupported-resolutions
10551     type: RelaxedAtomicBool
10552     value: false
10553     mirror: always
10555 -   name: media.wmf.vp9.enabled
10556     type: RelaxedAtomicBool
10557     value: true
10558     mirror: always
10560 -   name: media.wmf.av1.enabled
10561     type: RelaxedAtomicBool
10562     value: true
10563     mirror: always
10565 # Using Windows Media Foundation Media Engine for encrypted playback
10566 # 0 : disable, 1 : enable for encrypted and clear,
10567 # 2 : enable for encrypted only, 3 : enable for clear only
10568 -   name: media.wmf.media-engine.enabled
10569     type: RelaxedAtomicUint32
10570 #if defined(DEV_EDITION_OR_EARLY_BETA_OR_EARLIER)
10571     value: 2
10572 #else
10573     value: 0
10574 #endif
10575     mirror: always
10577 # Testing purpose, enable media engine on channel decoder as well.
10578 -   name: media.wmf.media-engine.channel-decoder.enabled
10579     type: RelaxedAtomicBool
10580     value: false
10581     mirror: always
10583 # The amount of video raw data the engine stream will queue
10584 -   name: media.wmf.media-engine.raw-data-threshold.video
10585     type: RelaxedAtomicInt32
10586     value: 500000
10587     mirror: always
10589 # The amount of audio raw data the engine stream will queue
10590 -   name: media.wmf.media-engine.raw-data-threshold.audio
10591     type: RelaxedAtomicInt32
10592     value: 2000000
10593     mirror: always
10595 # Specifies how many times we restart MFCDM process after crash till we give up.
10596 -   name: media.wmf.media-engine.max-crashes
10597     type: RelaxedAtomicInt32
10598     value: 2
10599     mirror: always
10601 # Bypass the gfx block list check for the media engine playback.
10602 -   name: media.wmf.media-engine.bypass-gfx-blocklist
10603     type: RelaxedAtomicBool
10604     value: false
10605     mirror: always
10607 # [TEST-ONLY] Use Media Foundation Clearkey CDM for EME related testing.
10608 -   name: media.eme.wmf.clearkey.enabled
10609     type: RelaxedAtomicBool
10610     value: false
10611     mirror: always
10613 # [TEST-ONLY] use Media Foundation clearkey CDM dll to mock as an external CDM,
10614 # external CDM like Widevine and PlayReady so that we won't be interfered by
10615 # unexpected behaviors caused by the external library.
10616 -   name: media.eme.wmf.use-mock-cdm-for-external-cdms
10617     type: RelaxedAtomicBool
10618     value: false
10619     mirror: always
10621 # Enable PlayReady DRM for EME
10622 -   name: media.eme.playready.enabled
10623     type: RelaxedAtomicBool
10624 #if defined(MOZ_WMF_CDM) && defined(DEV_EDITION_OR_EARLY_BETA_OR_EARLIER)
10625     value: true
10626 #else
10627     value: false
10628 #endif
10629     mirror: always
10631 # Use IsTypeSupportedEx for PlayReady
10632 -   name: media.eme.playready.istypesupportedex
10633     type: RelaxedAtomicBool
10634     value: true
10635     mirror: always
10637 # Enable HEVC support via the windows media foundation
10638 # 0 : disable, 1 : enable for media engine and MFT,
10639 # 2 : enable for media engine only
10640 -   name: media.wmf.hevc.enabled
10641     type: RelaxedAtomicUint32
10642 #if defined(NIGHTLY_BUILD)
10643     value: 1
10644 #elif defined(MOZ_DEV_EDITION) || defined(EARLY_BETA_OR_EARLIER)
10645     value: 2
10646 #else
10647     value: 0
10648 #endif
10649     mirror: always
10651 # Enable Widevine experiment DRM for EME
10652 -   name: media.eme.widevine.experiment.enabled
10653     type: RelaxedAtomicBool
10654     value: false
10655     mirror: always
10657 # Enable origin filter for MFCDM support
10658 # 0 : disabled, 1 : enabled allowed list, 2 : enabled blocked list
10659 -   name: media.eme.mfcdm.origin-filter.enabled
10660     type: RelaxedAtomicUint32
10661 #if defined(NIGHTLY_BUILD)
10662     value: 0
10663 #else
10664     value: 1
10665 #endif
10666     mirror: always
10668 #endif  # MOZ_WMF
10670 - name: media.decoder-doctor.testing
10671   type: bool
10672   value: false
10673   mirror: always
10675 - name: media.hardware-video-decoding.enabled
10676   type: bool
10677   value: true
10678   mirror: once
10680 - name: media.hardware-video-decoding.force-enabled
10681   type: bool
10682   value: false
10683   mirror: once
10685 # Whether to check the decoder supports recycling.
10686 - name: media.decoder.recycle.enabled
10687   type: RelaxedAtomicBool
10688   value: @IS_ANDROID@
10689   mirror: always
10691 # Should MFR try to skip to the next key frame?
10692 - name: media.decoder.skip-to-next-key-frame.enabled
10693   type: RelaxedAtomicBool
10694   value: true
10695   mirror: always
10697 # When video continues later than the current media time for this period of
10698 # time, then it will trigger skip-to-next-keyframe mechanism. As this aims to
10699 # solve the drop frames issue where video decoding too slow for high
10700 # resolution videos. eg. 4k+. Therefore, the value is is determined by the
10701 # telemetry probe `video_inter_keyframe_max_ms` in the key of `AV,h>2160` which
10702 # shows that 95% video's key frame interval are less than ~5000. We use its
10703 # half value as a threashold to decide whether we should keep decoding in the
10704 # current video position or jump to the next keyframe in order to decode future
10705 # frames in advance.
10706 - name: media.decoder.skip_when_video_too_slow_ms
10707   type: RelaxedAtomicInt32
10708   value: 2500
10709   mirror: always
10711 # True if we want to decode in batches.
10712 - name: media.gmp.decoder.decode_batch
10713   type: RelaxedAtomicBool
10714   value: false
10715   mirror: always
10717 # True if we allow use of any decoders found in GMP plugins.
10718 - name: media.gmp.decoder.enabled
10719   type: RelaxedAtomicBool
10720   value: true
10721   mirror: always
10723 # True if we want to request the multithreaded GMP decoder.
10724 - name: media.gmp.decoder.multithreaded
10725   type: RelaxedAtomicBool
10726   value: false
10727   mirror: always
10729 # True if we want to try using the GMP plugin decoders first.
10730 - name: media.gmp.decoder.preferred
10731   type: RelaxedAtomicBool
10732   value: false
10733   mirror: always
10735 # True if we want to reorder frames from the decoder based on the timestamp.
10736 - name: media.gmp.decoder.reorder_frames
10737   type: RelaxedAtomicBool
10738   value: true
10739   mirror: always
10741 # True if we allow use of any encoders found in GMP plugins.
10742 - name: media.gmp.encoder.enabled
10743   type: RelaxedAtomicBool
10744   value: false
10745   mirror: always
10747 # True if we want to request the multithreaded GMP encoder.
10748 - name: media.gmp.encoder.multithreaded
10749   type: RelaxedAtomicBool
10750   value: false
10751   mirror: always
10753 # True if we want to try using the GMP plugin encoders first.
10754 - name: media.gmp.encoder.preferred
10755   type: RelaxedAtomicBool
10756   value: false
10757   mirror: always
10759 # Whether to suspend decoding of videos in background tabs.
10760 - name: media.suspend-background-video.enabled
10761   type: RelaxedAtomicBool
10762   value: true
10763   mirror: always
10765 # Delay, in ms, from time window goes to background to suspending
10766 # video decoders. Defaults to 10 seconds.
10767 - name: media.suspend-background-video.delay-ms
10768   type: RelaxedAtomicUint32
10769   value: 10000
10770   mirror: always
10772 - name: media.dormant-on-pause-timeout-ms
10773   type: RelaxedAtomicInt32
10774   value: 5000
10775   mirror: always
10777 # AudioTrack and VideoTrack support
10778 - name: media.track.enabled
10779   type: bool
10780   value: false
10781   mirror: always
10784 # This pref disables the reception of RTCP. It is used for testing.
10785 - name: media.webrtc.net.force_disable_rtcp_reception
10786   type: ReleaseAcquireAtomicBool
10787   value: false
10788   mirror: always
10790 # This pref controls whether dispatch testing-only events.
10791 - name: media.webvtt.testing.events
10792   type: bool
10793   value: false
10794   mirror: always
10796 - name: media.webspeech.synth.force_global_queue
10797   type: bool
10798   value: false
10799   mirror: always
10801 - name: media.webspeech.test.enable
10802   type: bool
10803   value: false
10804   mirror: always
10806 - name: media.webspeech.test.fake_fsm_events
10807   type: bool
10808   value: false
10809   mirror: always
10811 - name: media.webspeech.test.fake_recognition_service
10812   type: bool
10813   value: false
10814   mirror: always
10816 #ifdef MOZ_WEBSPEECH
10817 -   name: media.webspeech.recognition.enable
10818     type: bool
10819     value: false
10820     mirror: always
10821 #endif
10823 - name: media.webspeech.recognition.force_enable
10824   type: bool
10825   value: false
10826   mirror: always
10828 #ifdef MOZ_WEBSPEECH
10829 -   name: media.webspeech.synth.enabled
10830     type: bool
10831     value: true
10832     mirror: always
10833 #endif  # MOZ_WEBSPEECH
10835 - name: media.encoder.webm.enabled
10836   type: RelaxedAtomicBool
10837   value: true
10838   mirror: always
10840 - name: media.audio-max-decode-error
10841   type: uint32_t
10842 #if defined(RELEASE_OR_BETA)
10843   value: 3
10844 #else
10845   # Zero tolerance in pre-release builds to detect any decoder regression.
10846   value: 0
10847 #endif
10848   mirror: always
10850 - name: media.video-max-decode-error
10851   type: uint32_t
10852 #if defined(RELEASE_OR_BETA)
10853   value: 2
10854 #else
10855   # Zero tolerance in pre-release builds to detect any decoder regression.
10856   value: 0
10857 #endif
10858   mirror: always
10860 # Are video stats enabled? (Disabling can help prevent fingerprinting.)
10861 - name: media.video_stats.enabled
10862   type: bool
10863   value: true
10864   mirror: always
10866 # forces the number of dropped frames to 0
10867 - name: media.video.dropped_frame_stats.enabled
10868   type: bool
10869   value: true
10870   mirror: always
10872 # Opus
10873 - name: media.opus.enabled
10874   type: RelaxedAtomicBool
10875   value: true
10876   mirror: always
10878 # Wave
10879 - name: media.wave.enabled
10880   type: RelaxedAtomicBool
10881   value: true
10882   mirror: always
10884 # Ogg
10885 - name: media.ogg.enabled
10886   type: RelaxedAtomicBool
10887   value: true
10888   mirror: always
10890 # WebM
10891 - name: media.webm.enabled
10892   type: RelaxedAtomicBool
10893   value: true
10894   mirror: always
10896 # AV1
10897 - name: media.av1.enabled
10898   type: RelaxedAtomicBool
10899 #if defined(XP_WIN) && !defined(_ARM64_)
10900   value: true
10901 #elif defined(XP_MACOSX)
10902   value: true
10903 #elif defined(MOZ_WIDGET_ANDROID)
10904   value: true
10905 #elif defined(XP_UNIX)
10906   value: true
10907 #else
10908   value: false
10909 #endif
10910   mirror: always
10912 - name: media.av1.use-dav1d
10913   type: RelaxedAtomicBool
10914 #if defined(XP_WIN) && !defined(_ARM64_)
10915   value: true
10916 #elif defined(XP_MACOSX)
10917   value: true
10918 #elif defined(XP_UNIX)
10919   value: true
10920 #else
10921   value: false
10922 #endif
10923   mirror: always
10925 - name: media.av1.new-thread-count-strategy
10926   type: RelaxedAtomicBool
10927   value: false
10928   mirror: always
10930 - name: media.av1.force-thread-count
10931   type: RelaxedAtomicInt32
10932   value: 0
10933   mirror: always
10935 - name: media.flac.enabled
10936   type: RelaxedAtomicBool
10937   value: true
10938   mirror: always
10940 # Hls
10941 - name: media.hls.enabled
10942   type: RelaxedAtomicBool
10943 #if defined(ANDROID) && !defined(NIGHTLY_BUILD)
10944   value: true
10945 #else
10946   value: false
10947 #endif
10948   mirror: always
10950 # Max number of HLS players that can be created concurrently. Used only on
10951 # Android and when "media.hls.enabled" is true.
10952 #ifdef ANDROID
10953 -   name: media.hls.max-allocations
10954     type: uint32_t
10955     value: 20
10956     mirror: always
10957 #endif
10959 - name: media.mp4.enabled
10960   type: RelaxedAtomicBool
10961   value: true
10962   mirror: always
10964 - name: media.mp4.sniff_iso_brand
10965   type: RelaxedAtomicBool
10966   value: true
10967   mirror: always
10969 # Error/warning handling, Decoder Doctor.
10971 # Set to true to force demux/decode warnings to be treated as errors.
10972 - name: media.playback.warnings-as-errors
10973   type: RelaxedAtomicBool
10974   value: false
10975   mirror: always
10977 # Resume video decoding when the cursor is hovering on a background tab to
10978 # reduce the resume latency and improve the user experience.
10979 - name: media.resume-background-video-on-tabhover
10980   type: bool
10981   value: true
10982   mirror: always
10984 # Media Seamless Looping
10985 - name: media.seamless-looping
10986   type: RelaxedAtomicBool
10987   value: true
10988   mirror: always
10990 - name: media.seamless-looping-video
10991   type: RelaxedAtomicBool
10992   value: true
10993   mirror: always
10995 - name: media.autoplay.block-event.enabled
10996   type: bool
10997   value: false
10998   mirror: always
11000 - name: media.media-capabilities.screen.enabled
11001   type: RelaxedAtomicBool
11002   value: false
11003   mirror: always
11005 - name: media.benchmark.vp9.fps
11006   type: RelaxedAtomicUint32
11007   value: 0
11008   mirror: always
11010 - name: media.benchmark.vp9.threshold
11011   type: RelaxedAtomicUint32
11012   value: 150
11013   mirror: always
11015 - name: media.benchmark.vp9.versioncheck
11016   type: RelaxedAtomicUint32
11017   value: 0
11018   mirror: always
11020 - name: media.benchmark.frames
11021   type: RelaxedAtomicUint32
11022   value: 300
11023   mirror: always
11025 - name: media.benchmark.timeout
11026   type: RelaxedAtomicUint32
11027   value: 1000
11028   mirror: always
11030 - name: media.test.video-suspend
11031   type: RelaxedAtomicBool
11032   value: false
11033   mirror: always
11035 # MediaCapture prefs follow
11037 # Enables navigator.mediaDevices and getUserMedia() support. See also
11038 # media.peerconnection.enabled
11039 - name: media.navigator.enabled
11040   type: bool
11041   value: true
11042   mirror: always
11044 # This pref turns off window-focus checks on the navigator.mediaDevices methods,
11045 # for partner testing frameworks.
11046 # Prefer "focusmanager.testmode", which is already set by default for
11047 # web-platform tests.
11048 - name: media.devices.unfocused.enabled
11049   type: bool
11050   value: false
11051   mirror: always
11053 # This pref turns off [SecureContext] on the navigator.mediaDevices object, for
11054 # more compatible legacy behavior.
11055 - name: media.devices.insecure.enabled
11056   type: bool
11057   value: false
11058   mirror: always
11060 # If the above pref is also enabled, this pref enabled getUserMedia() support
11061 # in http, bypassing the instant NotAllowedError you get otherwise.
11062 - name: media.getusermedia.insecure.enabled
11063   type: bool
11064   value: false
11065   mirror: always
11067 # Enable tab sharing
11068 - name: media.getusermedia.browser.enabled
11069   type: RelaxedAtomicBool
11070   value: false
11071   mirror: always
11073 # The getDisplayMedia method is always SecureContext regardless of the above two
11074 # prefs. But it is not implemented on android, and can be turned off elsewhere.
11075 - name: media.getdisplaymedia.enabled
11076   type: bool
11077   value: @IS_NOT_ANDROID@
11078   mirror: always
11080 # The getDisplayMedia prompt uses getDisplayMedia under the hood to show previews.
11081 # This can be turned off if, e.g. on systems with known issues like X11, or if
11082 # previews are not desired.
11083 - name: media.getdisplaymedia.previews.enabled
11084   type: bool
11085   value: @IS_NOT_ANDROID@
11086   mirror: always
11088 # Turn off any cameras (but not mics) while in the background. This is desirable
11089 # on mobile.
11090 - name: media.getusermedia.camera.background.mute.enabled
11091   type: bool
11092   value: @IS_ANDROID@
11093   mirror: always
11095 # Use the libwebrtc AVFoundation camera backend on Mac by default. When
11096 # disabled, an older forked capture module is used.
11097 - name: media.getusermedia.camera.macavf.enabled
11098   type: bool
11099   value: true
11100   mirror: once
11102 # Tell the audio backend to prefer a stream adapted for voice when processing is
11103 # enabled through constraints (possibly defaults). Whether it has any effect
11104 # depends on the backend.
11105 - name: media.getusermedia.microphone.prefer_voice_stream_with_processing.enabled
11106   type: RelaxedAtomicBool
11107   value: true
11108   mirror: always
11110 # Tell the audio backend to create a voice stream for later re-use before asking
11111 # the user for microphone permissions, if approving those permissions would
11112 # result in a voice stream when created later on.
11113 - name: media.getusermedia.microphone.voice_stream_priming.enabled
11114   type: RelaxedAtomicBool
11115   value: @IS_XP_MACOSX@
11116   mirror: always
11118 # This pref turns on legacy (non-spec) exposure of camera and microphone
11119 # information from enumerateDevices and devicechange ahead of successful
11120 # getUserMedia calls. Should only be turned on to resolve web compat issues,
11121 # since doing so reveals more user fingerprinting information to trackers.
11123 # In this mode, camera and microphone device labels are exposed if the site has a
11124 # persisted permission to either kind, as well as while actively capturing either
11125 # kind (temporary and tab-specific grace-period permissions do not count).
11127 # Planned next steps: true â†’ @IS_NOT_NIGHTLY_BUILD@ â†’ false
11128 - name: media.devices.enumerate.legacy.enabled
11129   type: bool
11130   value: true
11131   mirror: always
11133 # WebRTC prefs follow
11135 # Enables auto refresh of peerconnection stats by default
11136 - name: media.aboutwebrtc.auto_refresh.peerconnection_section
11137   type: bool
11138   value: @IS_NOT_NIGHTLY_BUILD@
11139   mirror: always
11141 # Enables auto refresh of the transport connection log by default
11142 - name: media.aboutwebrtc.auto_refresh.connection_log_section
11143   type: bool
11144   value: false
11145   mirror: always
11147 # Enables auto refresh of user config by default
11148 - name: media.aboutwebrtc.auto_refresh.user_modified_config_section
11149   type: bool
11150   value: true
11151   mirror: always
11153 # Enables auto refresh of media context by default
11154 - name: media.aboutwebrtc.auto_refresh.media_ctx_section
11155   type: bool
11156   value: false
11157   mirror: always
11159 # Enables RTCPeerConnection support. Note that, when true, this pref enables
11160 # navigator.mediaDevices and getUserMedia() support as well.
11161 # See also media.navigator.enabled
11162 - name: media.peerconnection.enabled
11163   type: RelaxedAtomicBool
11164   value: true
11165   mirror: always
11167 - name: media.peerconnection.scripttransform.enabled
11168   type: RelaxedAtomicBool
11169   value: true
11170   mirror: always
11172 #ifdef MOZ_WEBRTC
11173   # Use MediaDataDecoder API for VP8/VP9 in WebRTC. This includes hardware
11174   # acceleration for decoding.
11175 -   name: media.navigator.mediadatadecoder_vpx_enabled
11176     type: RelaxedAtomicBool
11177 #if defined(NIGHTLY_BUILD) || defined(MOZ_WIDGET_GTK)
11178     value: true
11179 #else
11180     value: false
11181 #endif
11182     mirror: always
11184   # Use MediaDataDecoder API for H264 in WebRTC. This includes hardware
11185   # acceleration for decoding.
11186 -   name: media.navigator.mediadatadecoder_h264_enabled
11187     type: RelaxedAtomicBool
11188   #if defined(_ARM64_) && defined(XP_WIN)
11189     value: false
11190   #else
11191     value: true
11192   #endif
11193     mirror: always
11195 #if defined(MOZ_WIDGET_GTK)
11196   # Use hardware acceleration for VP8 decoding on Linux.
11197 -   name: media.navigator.mediadatadecoder_vp8_hardware_enabled
11198     type: RelaxedAtomicBool
11199     value: false
11200     mirror: always
11201 #endif
11203   # Interval in milliseconds at which to gather WebRTC stats for use in about:webrtc.
11204 -   name: media.aboutwebrtc.hist.poll_interval_ms
11205     type: RelaxedAtomicUint32
11206     value: 250
11207     mirror: always
11209   # History time depth in seconds to keep for webrtc:stats for use in about:webrtc.
11210 -   name: media.aboutwebrtc.hist.storage_window_s
11211     type: RelaxedAtomicUint32
11212     value: 60
11213     mirror: always
11215   # Time in minutes to retain peer connection stats after closing.
11216 -   name: media.aboutwebrtc.hist.prune_after_m
11217     type: RelaxedAtomicUint32
11218     value: 60 * 24 * 2
11219     mirror: always
11221   # Max number of closed PC stats histories to retain
11222 -   name: media.aboutwebrtc.hist.closed_stats_to_retain
11223     type: RelaxedAtomicUint32
11224     value: 8
11225     mirror: always
11227   # Gather PeerConnection stats history for display in about:webrtc. If
11228   # disabled history will only gather when about:webrtc is open. Additionally,
11229   # if disabled and when about:webrtc is not in the foreground history data
11230   # will become sparse.
11231 -   name: media.aboutwebrtc.hist.enabled
11232     type: RelaxedAtomicBool
11233 #if defined(MOZ_WIDGET_ANDROID)
11234     value: false
11235 #else
11236     value: @IS_NIGHTLY_BUILD@
11237 #endif
11238     mirror: always
11240 #endif  # MOZ_WEBRTC
11242 # HTMLMediaElement.allowedToPlay should be exposed to web content when
11243 # block autoplay rides the trains to release. Until then, Nightly only.
11244 - name: media.allowed-to-play.enabled
11245   type: bool
11246   value: @IS_NIGHTLY_BUILD@
11247   mirror: always
11249 # Is support for MediaDevices.ondevicechange enabled?
11250 - name: media.ondevicechange.enabled
11251   type: bool
11252   value: true
11253   mirror: always
11255 # Is support for HTMLMediaElement.seekToNextFrame enabled?
11256 - name: media.seekToNextFrame.enabled
11257   type: bool
11258   value: false
11259   mirror: always
11261 # Is the Audio Output Devices API enabled?
11262 - name: media.setsinkid.enabled
11263   type: bool
11264 #if defined(MOZ_WIDGET_ANDROID)
11265   value: false # bug 1473346
11266 #else
11267   value: true
11268 #endif
11269   mirror: always
11271 # Turn on this pref can enable test-only events for media element.
11272 - name: media.testing-only-events
11273   type: bool
11274   value: false
11275   mirror: always
11277 - name: media.useAudioChannelService.testing
11278   type: bool
11279   value: false
11280   mirror: always
11282 - name: media.audioFocus.management
11283   type: bool
11284 #if defined(MOZ_WIDGET_ANDROID)
11285   value: true
11286 #else
11287   value: false
11288 #endif
11289   mirror: always
11291 - name: media.hardwaremediakeys.enabled
11292   type: bool
11293   value: true
11294   mirror: always
11296 # If this pref is on, then `media.mediacontrol.stopcontrol.timer.ms` would take
11297 # effect and determine the timing to stop controlling media.
11298 - name: media.mediacontrol.stopcontrol.timer
11299   type: bool
11300   value: true
11301   mirror: always
11303 # If media is being paused after a certain period, then we would think that
11304 # media doesn't need to be controlled anymore. Therefore, that media would stop
11305 # listening to the media control key events. The value of this pref is how long
11306 # media would stop listening to the event after it's paused. The default value
11307 # is set to 24 hrs (24*60*60*1000)
11308 - name: media.mediacontrol.stopcontrol.timer.ms
11309   type: RelaxedAtomicUint32
11310   value: 86400000
11311   mirror: always
11313 # If this pref is on, we would stop controlling media after it reaches to the
11314 # end.
11315 - name: media.mediacontrol.stopcontrol.aftermediaends
11316   type: bool
11317   value: true
11318   mirror: always
11320 # We would only use media control to control media which duration is longer
11321 # than this value.
11322 - name: media.mediacontrol.eligible.media.duration.s
11323   type: AtomicFloat
11324   value: 3.0f
11325   mirror: always
11327 # Encoder creation strategy for WebRTC
11328 # 0: prefer builtin WebRTC encoder (including OpenH264 via GMP)
11329 # 1: prefer PlatformEncoderModule
11330 - name: media.webrtc.encoder_creation_strategy
11331   type: RelaxedAtomicUint32
11332 #ifdef ANDROID
11333   value: 1
11334 #else
11335   value: 0
11336 #endif
11337   mirror: always
11339 #if defined(XP_MACOSX)
11340 - name: media.webrtc.capture.allow-iosurface
11341   type: RelaxedAtomicBool
11342   value: true
11343   mirror: always
11344 #endif
11346 #if defined(XP_WIN)
11347 - name: media.webrtc.capture.allow-directx
11348   type: RelaxedAtomicBool
11349   value: true
11350   mirror: always
11352 - name: media.webrtc.capture.screen.allow-wgc
11353   type: RelaxedAtomicBool
11354   value: false
11355   mirror: always
11357 - name: media.webrtc.capture.window.allow-wgc
11358   type: RelaxedAtomicBool
11359   value: false
11360   mirror: always
11362 - name: media.webrtc.capture.wgc.allow-zero-hertz
11363   type: RelaxedAtomicBool
11364   value: false
11365   mirror: always
11366 #endif
11368 #if defined(MOZ_WIDGET_GTK)
11369 - name: media.webrtc.capture.allow-pipewire
11370   type: RelaxedAtomicBool
11371   value: true
11372   mirror: always
11374 - name: media.webrtc.camera.allow-pipewire
11375   type: bool
11376   value: false
11377   mirror: once
11378 #endif
11380 - name: media.block-autoplay-until-in-foreground
11381   type: bool
11382 #if !defined(MOZ_WIDGET_ANDROID)
11383   value: true
11384 #else
11385   value: false
11386 #endif
11387   mirror: always
11389 - name: media.webrtc.hw.h264.enabled
11390   type: bool
11391 #if defined(MOZ_WIDGET_ANDROID)
11392   value: true
11393 #else
11394   value: false
11395 #endif
11396   mirror: always
11398 - name: media.webrtc.tls_tunnel_for_all_proxy
11399   type: bool
11400   value: true
11401   mirror: always
11403  # If true, then we require explicit approval from the embedding app (ex. Fenix)
11404  # on GeckoView to know if we can allow audible, inaudible media or both kinds
11405  # of media to autoplay.
11406 - name: media.geckoview.autoplay.request
11407   type: bool
11408   value: false
11409   mirror: always
11411  # This is used in testing only, in order to skip the prompting process. This
11412  # pref works only when enabling the pref `media.geckoview.autoplay.request`.
11413  # 0=prompt as normal, 1=allow all, 2=deny all, 3=allow audible request,
11414  # 4=deny audible request, 5=allow inaudible request, 6=deny inaudible request.
11415  # 7=leave all requests pending.
11416 - name: media.geckoview.autoplay.request.testing
11417   type: uint32_t
11418   value: 0
11419   mirror: always
11421 - name: media.mediacontrol.testingevents.enabled
11422   type: bool
11423   value: false
11424   mirror: always
11426 #if defined(XP_MACOSX)
11427 - name: media.macos.screenrecording.oscheck.enabled
11428   type: bool
11429   value: true
11430   mirror: always
11431 #endif
11433 # When the playback rate of an HTMLMediaElement is greater than this value, or
11434 # lower than the inverse of this value, the audio is muted.
11435 - name: media.audio.playbackrate.muting_threshold
11436   type: uint32_t
11437   value: 8
11438   mirror: always
11440 # The interval of time in milliseconds between attempts to reopen any
11441 # previously unavailable audio device.
11442 - name: media.audio.device.retry.ms
11443   type: RelaxedAtomicInt32
11444   value: 1000
11445   mirror: always
11447 # Time-stretch algorithm single processing sequence length in milliseconds.
11448 # This determines to how long sequences the original sound is chopped in the
11449 # time-stretch algorithm.
11450 - name: media.audio.playbackrate.soundtouch_sequence_ms
11451   type: RelaxedAtomicInt32
11452   value: 10
11453   mirror: always
11455 # Time-stretch algorithm seeking window length in milliseconds for algorithm
11456 # that finds the best possible overlapping location. This determines from how
11457 # wide window the algorithm may look for an optimal joining location when mixing
11458 # the sound sequences back together.
11459 - name: media.audio.playbackrate.soundtouch_seekwindow_ms
11460   type: RelaxedAtomicInt32
11461   value: 15
11462   mirror: always
11464 # Time-stretch algorithm overlap length in milliseconds. When the chopped sound
11465 # sequences are mixed back together, to form a continuous sound stream, this
11466 # parameter defines over how long period the two consecutive sequences are let
11467 # to overlap each other.
11468 - name: media.audio.playbackrate.soundtouch_overlap_ms
11469   type: RelaxedAtomicInt32
11470   value: 8
11471   mirror: always
11473 # The duration, in milliseconds, of decoded audio to keep around in the
11474 # AudioSink ring-buffer. New decoding operations are started when this limit is
11475 # reached. The total size of the ring-buffer is slightly bigger than this.
11476 - name: media.audio.audiosink.threshold_ms
11477   type: AtomicFloat
11478 #if defined(XP_MACOSX) && defined(MOZ_AARCH64)
11479   value: 1000.0
11480 #else
11481   value: 200.0
11482 #endif
11483   mirror: always
11485 - name: media.video-wakelock
11486   type: RelaxedAtomicBool
11487   value: true
11488   mirror: always
11490 # On Mac, enables using the `<Brand> Media Plugin Helper` executable as the
11491 # GMP child process instead of the plugin-container executable.
11492 #if defined(XP_MACOSX)
11493 -   name: media.plugin_helper_process.enabled
11494     type: RelaxedAtomicBool
11495     value: true
11496     mirror: always
11497 #endif
11499 # Bug 1860492 - Deprecate and remove theora
11500 -  name: media.theora.enabled
11501    type: RelaxedAtomicBool
11502    value: @IS_NOT_NIGHTLY_BUILD@
11503    mirror: always
11505 # When this is true, the protection mask that Firefox replies to Widevine API
11506 # QueryOutputProtectionStatus is `kProtectionHDCP` when no potential capturing.
11507 - name: media.widevine.hdcp-protection-mask
11508   type: RelaxedAtomicBool
11509   value: true
11510   mirror: always
11512 #---------------------------------------------------------------------------
11513 # Prefs starting with "memory."
11514 #---------------------------------------------------------------------------
11516 - name: memory.phc.enabled
11517   type: bool
11518   value: @IS_EARLY_BETA_OR_EARLIER@
11519   mirror: always
11521 - name: memory.phc.min_ram_mb
11522   type: uint32_t
11523   value: 8000
11524   mirror: always
11526 - name: memory.phc.avg_delay.first
11527   type: uint32_t
11528   value: 65536
11529   mirror: always
11531 - name: memory.phc.avg_delay.normal
11532   type: uint32_t
11533   value: 16384
11534   mirror: always
11536 - name: memory.phc.avg_delay.page_reuse
11537   type: uint32_t
11538   value: 262144
11539   mirror: always
11541 - name: memory.phc.avg_delay.content.first
11542   type: uint32_t
11543   value: 16384
11544   mirror: always
11546 - name: memory.phc.avg_delay.content.normal
11547   type: uint32_t
11548   value: 4096
11549   mirror: always
11551 - name: memory.phc.avg_delay.content.page_reuse
11552   type: uint32_t
11553   value: 262144
11554   mirror: always
11556 #---------------------------------------------------------------------------
11557 # Prefs starting with "midi."
11558 #---------------------------------------------------------------------------
11560 - name: midi.testing
11561   type: RelaxedAtomicBool
11562   value: false
11563   mirror: always
11565 #---------------------------------------------------------------------------
11566 # Prefs starting with "mousewheel."
11567 #---------------------------------------------------------------------------
11569 # This affects how line scrolls from wheel events will be accelerated.
11570 # Factor to be multiplied for constant acceleration.
11571 - name: mousewheel.acceleration.factor
11572   type: RelaxedAtomicInt32
11573   value: 10
11574   mirror: always
11576 # This affects how line scrolls from wheel events will be accelerated.
11577 # Number of mousewheel clicks when acceleration starts.
11578 # Acceleration can be turned off if pref is set to -1.
11579 - name: mousewheel.acceleration.start
11580   type: RelaxedAtomicInt32
11581   value: -1
11582   mirror: always
11584 # Auto-dir is a feature which treats any single-wheel scroll as a scroll in the
11585 # only one scrollable direction if the target has only one scrollable
11586 # direction. For example, if the user scrolls a vertical wheel inside a target
11587 # which is horizontally scrollable but vertical unscrollable, then the vertical
11588 # scroll is converted to a horizontal scroll for that target.
11589 # Note that auto-dir only takes effect for |mousewheel.*.action|s and
11590 # |mousewheel.*.action.override_x|s whose values are 1.
11591 - name: mousewheel.autodir.enabled
11592   type: bool
11593   value: false
11594   mirror: always
11596 # When a wheel scroll is converted due to auto-dir, which side the converted
11597 # scroll goes towards is decided by one thing called "honoured target". If the
11598 # content of the honoured target horizontally starts from right to left, then
11599 # an upward scroll maps to a rightward scroll and a downward scroll maps to a
11600 # leftward scroll; otherwise, an upward scroll maps to a leftward scroll and a
11601 # downward scroll maps to a rightward scroll.
11602 # If this pref is set to false, then consider the scrolling target as the
11603 # honoured target.
11604 # If set to true, then consider the root element in the document where the
11605 # scrolling target is as the honoured target. But note that there's one
11606 # exception: for targets in an HTML document, the real root element(I.e. the
11607 # <html> element) is typically not considered as a root element, but the <body>
11608 # element is typically considered as a root element. If there is no <body>
11609 # element, then consider the <html> element instead.
11610 - name: mousewheel.autodir.honourroot
11611   type: bool
11612   value: false
11613   mirror: always
11615 - name: mousewheel.system_scroll_override.enabled
11616   type: RelaxedAtomicBool
11617 #if defined(XP_WIN) || defined(MOZ_WIDGET_GTK)
11618   value: true
11619 #else
11620   value: false
11621 #endif
11622   mirror: always
11624 # Prefs for overriding the system mouse wheel scrolling speed on
11625 # content of the web pages.  When
11626 # "mousewheel.system_scroll_override.enabled" is true and the
11627 # system scrolling speed isn't customized by the user, the content scrolling
11628 # speed is multiplied by the following factors.  The value will be used as
11629 # 1/100.  E.g., 200 means 2.00.
11630 # NOTE: Even if "mousewheel.system_scroll_override.enabled" is
11631 # true, when Gecko detects the user customized the system scrolling speed
11632 # settings, the override isn't executed.
11633 - name: mousewheel.system_scroll_override.horizontal.factor
11634   type: RelaxedAtomicInt32
11635   value: 200
11636   mirror: always
11637 - name: mousewheel.system_scroll_override.vertical.factor
11638   type: RelaxedAtomicInt32
11639   value: 200
11640   mirror: always
11642 # Mouse wheel scroll transaction is held even if the mouse cursor is moved.
11643 - name: mousewheel.transaction.ignoremovedelay
11644   type: RelaxedAtomicInt32
11645   value: 100
11646   mirror: always
11648 # Mouse wheel scroll transaction period of time (in milliseconds).
11649 - name: mousewheel.transaction.timeout
11650   type: RelaxedAtomicInt32
11651   value: 1500
11652   mirror: always
11654 # Mouse wheel scroll position is determined by GetMessagePos rather than
11655 # LPARAM msg value
11656 - name: mousewheel.ignore_cursor_position_in_lparam
11657   type: RelaxedAtomicBool
11658   value: false
11659   mirror: always
11661 # If line-height is lower than this value (in device pixels), 1 line scroll
11662 # scrolls this height.
11663 - name: mousewheel.min_line_scroll_amount
11664   type: int32_t
11665   value: 5
11666   mirror: always
11668 # Timeout period (in milliseconds) when the mouse wheel event is no longer
11669 # handled as the same series.
11670 - name: mousewheel.scroll_series_timeout
11671   type: RelaxedAtomicInt32
11672   value: 80
11673   mirror: always
11675 #---------------------------------------------------------------------------
11676 # Prefs starting with "mozilla."
11677 #---------------------------------------------------------------------------
11679 - name: mozilla.widget.raise-on-setfocus
11680   type: bool
11681   value: true
11682   mirror: once
11684 #---------------------------------------------------------------------------
11685 # Prefs starting with "network."
11686 #---------------------------------------------------------------------------
11688 # Force less-secure NTLMv1 when needed (NTLMv2 is the default).
11689 - name: network.auth.force-generic-ntlm-v1
11690   type: RelaxedAtomicBool
11691   value: false
11692   mirror: always
11694 # Sub-resources HTTP-authentication:
11695 #   0 - don't allow sub-resources to open HTTP authentication credentials
11696 #       dialogs
11697 #   1 - allow sub-resources to open HTTP authentication credentials dialogs,
11698 #       but don't allow it for cross-origin sub-resources
11699 #   2 - allow the cross-origin authentication as well.
11700 - name: network.auth.subresource-http-auth-allow
11701   type: uint32_t
11702   value: 2
11703   mirror: always
11705 # Sub-resources HTTP-authentication for cross-origin images:
11706 # - true: It is allowed to present http auth. dialog for cross-origin images.
11707 # - false: It is not allowed.
11708 # If network.auth.subresource-http-auth-allow has values 0 or 1 this pref does
11709 # not have any effect.
11710 - name: network.auth.subresource-img-cross-origin-http-auth-allow
11711   type: bool
11712   value: false
11713   mirror: always
11715 # Resources that are triggered by some non-web-content:
11716 # - true: They are allow to present http auth. dialog
11717 # - false: They are not allow to present http auth. dialog.
11718 - name: network.auth.non-web-content-triggered-resources-http-auth-allow
11719   type: bool
11720   value: false
11721   mirror: always
11723 # Whether to show anti-spoof confirmation prompts when navigating to a url
11724 # with userinfo
11725 - name: network.auth.confirmAuth.enabled
11726   type: bool
11727   value: true
11728   mirror: always
11730 # Whether to display auth prompts if X-Frame-Options header will block loading
11731 # page
11732 - name: network.auth.supress_auth_prompt_for_XFO_failures
11733   type: bool
11734   value: true
11735   mirror: always
11737 # whether to redirect the channel for auth redirects. See Bug 1820807
11738 - name: network.auth.use_redirect_for_retries
11739   type: RelaxedAtomicBool
11740   value: true
11741   mirror: always
11743 # When true, authentication challenges will be sorted even if
11744 # an authentication is already in progress. This may cause issues sometimes.
11745 - name: network.auth.sort_challenge_in_progress
11746   type: RelaxedAtomicBool
11747   value: false
11748   mirror: always
11750 # Whether to allow truncated brotli with empty output. This also fixes
11751 # throwing an erroring when receiving highly compressed brotli files when
11752 # no content type is specified (Bug 1715401). This pref can be removed after
11753 # some time (Bug 1841061)
11754 - name: network.compress.allow_truncated_empty_brotli
11755   type: RelaxedAtomicBool
11756   value: true
11757   mirror: always
11759 # See the full list of values in nsICookieService.idl.
11760 - name: network.cookie.cookieBehavior
11761   type: RelaxedAtomicInt32
11762   value: 0 # accept all cookies
11763   mirror: always
11765 # The cookieBehavior to be used in Private Browsing mode.
11766 - name: network.cookie.cookieBehavior.pbmode
11767   type: RelaxedAtomicInt32
11768   value: 0 # accept all cookies
11769   mirror: always
11771 # Changes cookieBehavior=5 to block third-party cookies by default
11772 - name: network.cookie.cookieBehavior.optInPartitioning
11773   type: bool
11774   value: false
11775   mirror: always
11777 # Changes cookieBehavior=5 to block third-party cookies in the private browsing
11778 # mode.
11779 - name: network.cookie.cookieBehavior.optInPartitioning.pbmode
11780   type: bool
11781   value: @IS_NIGHTLY_BUILD@
11782   mirror: always
11784 # Whether to support CHIPS(Cookies Having Independent Partitioned State).
11785 - name: network.cookie.CHIPS.enabled
11786   type: bool
11787   value: @IS_NIGHTLY_BUILD@
11788   mirror: always
11790 # Stale threshold for cookies in seconds.
11791 - name: network.cookie.staleThreshold
11792   type: uint32_t
11793   value: 60
11794   mirror: always
11796 - name: network.cookie.sameSite.laxByDefault
11797   type: RelaxedAtomicBool
11798   value: false
11799   mirror: always
11801 # lax-by-default 2 minutes tollerance for unsafe methods. The value is in seconds.
11802 - name: network.cookie.sameSite.laxPlusPOST.timeout
11803   type: uint32_t
11804   value: 120
11805   mirror: always
11807 # For lax-by-default cookies ignore cross-site redirects when the final
11808 # redirect is same-site again.
11809 # https://github.com/httpwg/http-extensions/issues/2104
11810 - name: network.cookie.sameSite.laxByDefault.allowBoomerangRedirect
11811   type: bool
11812   value: true
11813   mirror: always
11815 - name: network.cookie.sameSite.noneRequiresSecure
11816   type: bool
11817   value: @IS_NIGHTLY_BUILD@
11818   mirror: always
11820 - name: network.cookie.sameSite.schemeful
11821   type: bool
11822   value: false
11823   mirror: always
11825 - name: network.cookie.sameSite.crossSiteIframeSetCheck
11826   type: bool
11827   value: true
11828   mirror: always
11830 - name: network.cookie.thirdparty.sessionOnly
11831   type: bool
11832   value: false
11833   mirror: always
11835 - name: network.cookie.thirdparty.nonsecureSessionOnly
11836   type: bool
11837   value: false
11838   mirror: always
11840 # If we should not store "persistent" cookies at all, i.e., make the
11841 # "persistent" storage be like "private" storage.  This value is only read when
11842 # instantiating persistent storage for the cookie service, which usually only
11843 # happens when the cookie service singleton is created.
11844 - name: network.cookie.noPersistentStorage
11845   type: bool
11846   value: false
11847   mirror: always
11849 # If true then any cookies containing unicode will be rejected
11850 - name: network.cookie.blockUnicode
11851   type: RelaxedAtomicBool
11852   value: false
11853   mirror: always
11855 # If true cookies loaded from the sqlite DB that have a creation or
11856 # last accessed time that is in the future will be fixed and the
11857 # timestamps will be set to the current time.
11858 - name: network.cookie.fixup_on_db_load
11859   type: RelaxedAtomicBool
11860   value: true
11861   mirror: always
11863 # If true content types of multipart/x-mixed-replace cannot set a cookie
11864 - name: network.cookie.prevent_set_cookie_from_multipart
11865   type: RelaxedAtomicBool
11866   value: true
11867   mirror: always
11869 # If we should attempt to race the cache and network.
11870 - name: network.http.rcwn.enabled
11871   type: bool
11872   value: true
11873   mirror: always
11875 - name: network.http.rcwn.cache_queue_normal_threshold
11876   type: uint32_t
11877   value: 8
11878   mirror: always
11880 - name: network.http.rcwn.cache_queue_priority_threshold
11881   type: uint32_t
11882   value: 2
11883   mirror: always
11885 # We might attempt to race the cache with the network only if a resource
11886 # is smaller than this size.
11887 - name: network.http.rcwn.small_resource_size_kb
11888   type: uint32_t
11889   value: 256
11890   mirror: always
11892 - name: network.http.rcwn.min_wait_before_racing_ms
11893   type: uint32_t
11894   value: 0
11895   mirror: always
11897 - name: network.http.rcwn.max_wait_before_racing_ms
11898   type: uint32_t
11899   value: 500
11900   mirror: always
11902 # false=real referer, true=spoof referer (use target URI as referer).
11903 - name: network.http.referer.spoofSource
11904   type: bool
11905   value: false
11906   mirror: always
11908 # Check whether we need to hide referrer when leaving a .onion domain.
11909 # false=allow onion referer, true=hide onion referer (use empty referer).
11910 - name: network.http.referer.hideOnionSource
11911   type: bool
11912   value: false
11913   mirror: always
11915 # Include an origin header on non-GET and non-HEAD requests regardless of CORS.
11916 # 0=never send, 1=send when same-origin only, 2=always send.
11917 - name: network.http.sendOriginHeader
11918   type: uint32_t
11919   value: 2
11920   mirror: always
11922 # Whether to respect the redirected-tainted origin flag
11923 # https://fetch.spec.whatwg.org/#concept-request-tainted-origin
11924 - name: network.http.origin.redirectTainted
11925   type: bool
11926   value: true
11927   mirror: always
11929 # If true, cross origin fetch (or XHR) requests would be keyed
11930 # with a different cache key.
11931 - name: network.fetch.cache_partition_cross_origin
11932   type: RelaxedAtomicBool
11933   value: true
11934   mirror: always
11936 # If true, when browser code itself makes network requests, default to
11937 # omitting credentials.
11938 - name: network.fetch.systemDefaultsToOmittingCredentials
11939   type: RelaxedAtomicBool
11940   value: true
11941   mirror: always
11943 # Prefs allowing granular control of referers.
11944 # 0=don't send any, 1=send only on clicks, 2=send on image requests as well
11945 - name: network.http.sendRefererHeader
11946   type: uint32_t
11947   value: 2
11948   mirror: always
11949   do_not_use_directly: true
11951 # Whether to add urgency and incremental to request headers
11952 - name: network.http.priority_header.enabled
11953   type: RelaxedAtomicBool
11954   value: true
11955   mirror: always
11957 # The maximum allowed length for a referrer header - 4096 default.
11958 # 0 means no limit.
11959 - name: network.http.referer.referrerLengthLimit
11960   type: uint32_t
11961   value: 4096
11962   mirror: always
11964 #  0=always send, 1=send iff base domains match, 2=send iff hosts match.
11965 - name: network.http.referer.XOriginPolicy
11966   type: uint32_t
11967   value: 0
11968   mirror: always
11969   do_not_use_directly: true
11971 # 0=full URI, 1=scheme+host+port+path, 2=scheme+host+port.
11972 - name: network.http.referer.trimmingPolicy
11973   type: uint32_t
11974   value: 0
11975   mirror: always
11976   do_not_use_directly: true
11978 # 0=full URI, 1=scheme+host+port+path, 2=scheme+host+port.
11979 - name: network.http.referer.XOriginTrimmingPolicy
11980   type: uint32_t
11981   value: 0
11982   mirror: always
11983   do_not_use_directly: true
11985 # Set the default Referrer Policy; to be used unless overriden by the site.
11986 # 0=no-referrer, 1=same-origin, 2=strict-origin-when-cross-origin,
11987 # 3=no-referrer-when-downgrade.
11988 - name: network.http.referer.defaultPolicy
11989   type: uint32_t
11990   value: 2
11991   mirror: always
11993 # Set the default Referrer Policy applied to third-party trackers when the
11994 # default cookie policy is set to reject third-party trackers, to be used
11995 # unless overriden by the site.
11996 # 0=no-referrer, 1=same-origin, 2=strict-origin-when-cross-origin,
11997 # 3=no-referrer-when-downgrade.
11998 # Trim referrers from trackers to origins by default.
11999 - name: network.http.referer.defaultPolicy.trackers
12000   type: uint32_t
12001   value: 2
12002   mirror: always
12004 # Set the Private Browsing Default Referrer Policy, to be used
12005 # unless overriden by the site.
12006 # 0=no-referrer, 1=same-origin, 2=strict-origin-when-cross-origin,
12007 # 3=no-referrer-when-downgrade.
12008 - name: network.http.referer.defaultPolicy.pbmode
12009   type: uint32_t
12010   value: 2
12011   mirror: always
12013 # Set to ignore referrer policies which is less restricted than the default for
12014 # cross-site requests, including 'unsafe-url', 'no-referrer-when-downgrade' and
12015 # 'origin-when-cross-origin'.
12016 - name: network.http.referer.disallowCrossSiteRelaxingDefault
12017   type: bool
12018   value: true
12019   mirror: always
12021 # Whether we ignore less restricted referrer policies for top navigations.
12022 - name: network.http.referer.disallowCrossSiteRelaxingDefault.top_navigation
12023   type: bool
12024   value: false
12025   mirror: always
12028 # Set to ignore referrer policies which is less restricted than the default for
12029 # cross-site requests in the private browsing mode, including 'unsafe-url',
12030 # 'no-referrer-when-downgrade' and 'origin-when-cross-origin'.
12031 - name: network.http.referer.disallowCrossSiteRelaxingDefault.pbmode
12032   type: bool
12033   value: true
12034   mirror: always
12036 # Whether we ignore less restricted referrer policies for top navigations in the
12037 # private browsing mode.
12038 - name: network.http.referer.disallowCrossSiteRelaxingDefault.pbmode.top_navigation
12039   type: bool
12040   value: true
12041   mirror: always
12043 # Set the Private Browsing Default Referrer Policy applied to third-party
12044 # trackers when the default cookie policy is set to reject third-party
12045 # trackers, to be used unless overriden by the site.
12046 # 0=no-referrer, 1=same-origin, 2=strict-origin-when-cross-origin,
12047 # 3=no-referrer-when-downgrade.
12048 # No need to change this pref for trimming referrers from trackers since in
12049 # private windows we already trim all referrers to origin only.
12050 - name: network.http.referer.defaultPolicy.trackers.pbmode
12051   type: uint32_t
12052   value: 2
12053   mirror: always
12055 # Whether certain http header values should be censored out in logs.
12056 # Specifically filters out "authorization" and "proxy-authorization".
12057 - name: network.http.sanitize-headers-in-logs
12058   type: RelaxedAtomicBool
12059   value: true
12060   mirror: always
12062 # Hard code the User-Agent string's CPU architecture. This pref can be removed
12063 # after we're confident there are no webcompat problems.
12065 # Enable for:
12066 # * Android (any architecture)
12067 # * Linux (any architecture)
12068 # * Other Unix-like platforms except macOS (any architecture)
12069 - name: network.http.useragent.freezeCpu
12070   type: bool
12071 #if defined(XP_UNIX) && !defined(XP_MACOSX)
12072   value: true
12073 #else
12074   value: false
12075 #endif
12076   mirror: always
12078 # Whether or not we use Windows for SSO to Microsoft sites.
12079 - name: network.http.windows-sso.enabled
12080   type: RelaxedAtomicBool
12081   value: false
12082   mirror: always
12084 # Whether windows-sso is enabled for the default (0) container.
12085 # To enable SSO for additional containers, add a new pref like
12086 # `network.http.windows-sso.container-enabled.${containerId}` = true
12087 - name: network.http.windows-sso.container-enabled.0
12088   type: bool
12089   value: true
12090   mirror: never
12092 # The factor by which to increase the keepalive timeout when the
12093 # NS_HTTP_LARGE_KEEPALIVE flag is used for a connection
12094 - name: network.http.largeKeepaliveFactor
12095   type: RelaxedAtomicUint32
12096   value: 10
12097   mirror: always
12099 # Max size, in bytes, for received HTTP response header.
12100 - name: network.http.max_response_header_size
12101   type: RelaxedAtomicUint32
12102   value: 393216
12103   mirror: always
12105 # This preference, if true, causes all UTF-8 domain names to be normalized to
12106 # punycode.  The intention is to allow UTF-8 domain names as input, but never
12107 # generate them from punycode.
12108 - name: network.IDN_show_punycode
12109   type: RelaxedAtomicBool
12110   value: false
12111   mirror: always
12113 # If set to true, IOService.offline depends on IOService.connectivity.
12114 - name: network.offline-mirrors-connectivity
12115   type: RelaxedAtomicBool
12116   value: false
12117   mirror: always
12119 # If set to true, disallow localhost connections when offline.
12120 - name: network.disable-localhost-when-offline
12121   type: RelaxedAtomicBool
12122   value: false
12123   mirror: always
12125 # Enables the predictive service.
12126 - name: network.predictor.enabled
12127   type: bool
12128   value: true
12129   mirror: always
12131 # Set true to allow resolving proxy for localhost
12132 - name: network.proxy.allow_hijacking_localhost
12133   type: RelaxedAtomicBool
12134   value: false
12135   mirror: always
12137 # This pref will still treat localhost URLs as secure even when hijacked
12138 # during testing. This is necessary for automated testing to check that we
12139 # actually treat localhost as a secure origin.
12140 - name: network.proxy.testing_localhost_is_secure_when_hijacked
12141   type: RelaxedAtomicBool
12142   value: false
12143   mirror: always
12145 # Allow CookieJarSettings to be unblocked for channels without a document.
12146 # This is for testing only.
12147 - name: network.cookieJarSettings.unblocked_for_testing
12148   type: bool
12149   value: false
12150   mirror: always
12152 - name: network.predictor.enable-hover-on-ssl
12153   type: bool
12154   value: false
12155   mirror: always
12157 - name: network.predictor.enable-prefetch
12158   type: bool
12159   value: @IS_EARLY_BETA_OR_EARLIER@
12160   mirror: always
12162 - name: network.predictor.page-degradation.day
12163   type: int32_t
12164   value: 0
12165   mirror: always
12166 - name: network.predictor.page-degradation.week
12167   type: int32_t
12168   value: 5
12169   mirror: always
12170 - name: network.predictor.page-degradation.month
12171   type: int32_t
12172   value: 10
12173   mirror: always
12174 - name: network.predictor.page-degradation.year
12175   type: int32_t
12176   value: 25
12177   mirror: always
12178 - name: network.predictor.page-degradation.max
12179   type: int32_t
12180   value: 50
12181   mirror: always
12183 - name: network.predictor.subresource-degradation.day
12184   type: int32_t
12185   value: 1
12186   mirror: always
12187 - name: network.predictor.subresource-degradation.week
12188   type: int32_t
12189   value: 10
12190   mirror: always
12191 - name: network.predictor.subresource-degradation.month
12192   type: int32_t
12193   value: 25
12194   mirror: always
12195 - name: network.predictor.subresource-degradation.year
12196   type: int32_t
12197   value: 50
12198   mirror: always
12199 - name: network.predictor.subresource-degradation.max
12200   type: int32_t
12201   value: 100
12202   mirror: always
12204 - name: network.predictor.prefetch-rolling-load-count
12205   type: int32_t
12206   value: 10
12207   mirror: always
12209 - name: network.predictor.prefetch-min-confidence
12210   type: int32_t
12211   value: 100
12212   mirror: always
12213 - name: network.predictor.preconnect-min-confidence
12214   type: int32_t
12215   value: 90
12216   mirror: always
12217 - name: network.predictor.preresolve-min-confidence
12218   type: int32_t
12219   value: 60
12220   mirror: always
12222 - name: network.predictor.prefetch-force-valid-for
12223   type: int32_t
12224   value: 10
12225   mirror: always
12227 - name: network.predictor.max-resources-per-entry
12228   type: int32_t
12229   value: 100
12230   mirror: always
12232 # This is selected in concert with max-resources-per-entry to keep memory
12233 # usage low-ish. The default of the combo of the two is ~50k.
12234 - name: network.predictor.max-uri-length
12235   type: uint32_t
12236   value: 500
12237   mirror: always
12239 # A testing flag.
12240 - name: network.predictor.doing-tests
12241   type: bool
12242   value: false
12243   mirror: always
12245 # Indicates whether the `fetchpriority` attribute for elements which support it
12246 # (e.g. `<script>`) is enabled.
12247 - name: network.fetchpriority.enabled
12248   type: RelaxedAtomicBool
12249   value: @IS_NIGHTLY_BUILD@
12250   mirror: always
12252 # When true, the channel's urgency will be adjusted based on the
12253 # channel's nsISupportsPriority.
12254 - name: network.fetchpriority.adjust_urgency
12255   type: RelaxedAtomicBool
12256   value: true
12257   mirror: always
12259 # Adjustments to apply to the internal priority of <link rel=preload as=script
12260 # fetchpriority=low/high/auto> and equivalent Link header with respect to the
12261 # case when network.fetchpriority is disabled.
12262 # - When the flag is disabled, Gecko currently sets priority to HIGHEST.
12263 # - When the flag is enabled, it respectively maps to LOW/HIGHEST/HIGHEST.
12264 - name: network.fetchpriority.adjustments.link-preload-script.low
12265   type: int32_t
12266   value: 30
12267   mirror: always
12268 - name: network.fetchpriority.adjustments.link-preload-script.high
12269   type: int32_t
12270   value: 0
12271   mirror: always
12272 - name: network.fetchpriority.adjustments.link-preload-script.auto
12273   type: int32_t
12274   value: 0
12275   mirror: always
12277 # Adjustments to apply to the internal priority of <script type="module"
12278 # fetchpriority=low/high/auto> with respect to the case when
12279 # network.fetchpriority is disabled.
12280 # - When the flag is disabled, Gecko currently sets priority to NORMAL.
12281 # - When the flag is enabled, it respectively maps to LOW/HIGH/NORMAL.
12282 - name: network.fetchpriority.adjustments.module-script.low
12283   type: int32_t
12284   value: 10
12285   mirror: always
12286 - name: network.fetchpriority.adjustments.module-script.high
12287   type: int32_t
12288   value: -10
12289   mirror: always
12290 - name: network.fetchpriority.adjustments.module-script.auto
12291   type: int32_t
12292   value: 0
12293   mirror: always
12295 # Adjustments to apply to the internal priority of async or defer <script
12296 # fetchpriority=low/high/auto> with respect to the case when
12297 # network.fetchpriority is disabled.
12298 # - When the flag is disabled, Gecko currently sets priority to NORMAL.
12299 # - When the flag is enabled, it respectively maps to LOW/HIGH/NORMAL.
12300 - name: network.fetchpriority.adjustments.async-or-defer-script.low
12301   type: int32_t
12302   value: 10
12303   mirror: always
12304 - name: network.fetchpriority.adjustments.async-or-defer-script.high
12305   type: int32_t
12306   value: -10
12307   mirror: always
12308 - name: network.fetchpriority.adjustments.async-or-defer-script.auto
12309   type: int32_t
12310   value: 0
12311   mirror: always
12313 # Adjustments to apply to the internal priority of <script
12314 # fetchpriority=low/high/auto> inside the <head>, with respect to the case when
12315 # network.fetchpriority is disabled.
12316 # - When the flag is disabled, Gecko currently sets priority to NORMAL.
12317 # - When the flag is enabled, it respectively maps to LOW/HIGH/NORMAL.
12318 - name: network.fetchpriority.adjustments.script-in-head.low
12319   type: int32_t
12320   value: 10
12321   mirror: always
12322 - name: network.fetchpriority.adjustments.script-in-head.high
12323   type: int32_t
12324   value: -10
12325   mirror: always
12326 - name: network.fetchpriority.adjustments.script-in-head.auto
12327   type: int32_t
12328   value: 0
12329   mirror: always
12331 # Adjustments to apply to the internal priority of <script
12332 # fetchpriority=low/high/auto> (other than the scripts handled above) with
12333 # respect to the case when network.fetchpriority is disabled.
12334 # - When the flag is disabled, Gecko currently sets priority to NORMAL.
12335 # - When the flag is enabled, it respectively maps to LOW/HIGH/NORMAL.
12336 - name: network.fetchpriority.adjustments.other-script.low
12337   type: int32_t
12338   value: 10
12339   mirror: always
12340 - name: network.fetchpriority.adjustments.other-script.high
12341   type: int32_t
12342   value: -10
12343   mirror: always
12344 - name: network.fetchpriority.adjustments.other-script.auto
12345   type: int32_t
12346   value: 0
12347   mirror: always
12349 # Adjustments to apply to the internal priority of <link rel=preload as=font
12350 # fetchpriority=low/high/auto> with respect to the case when
12351 # network.fetchpriority is disabled.
12352 # - When the flag is disabled, Gecko currently sets priority to HIGH.
12353 # - When the flag is enabled, it respectively maps to LOW/HIGH/HIGH.
12354 - name: network.fetchpriority.adjustments.link-preload-font.low
12355   type: int32_t
12356   value: 20
12357   mirror: always
12358 - name: network.fetchpriority.adjustments.link-preload-font.high
12359   type: int32_t
12360   value: 0
12361   mirror: always
12362 - name: network.fetchpriority.adjustments.link-preload-font.auto
12363   type: int32_t
12364   value: 0
12365   mirror: always
12367 # Adjustments to apply to the internal priority of <link rel=preload as=fetch
12368 # fetchpriority=low/high/auto> with respect to the case when
12369 # network.fetchpriority is disabled.
12370 # - When the flag is disabled, Gecko currently sets priority to NORMAL.
12371 # - When the flag is enabled, it respectively maps to LOW/HIGH/NORMAL.
12372 - name: network.fetchpriority.adjustments.link-preload-fetch.low
12373   type: int32_t
12374   value: 10
12375   mirror: always
12376 - name: network.fetchpriority.adjustments.link-preload-fetch.high
12377   type: int32_t
12378   value: -10
12379   mirror: always
12380 - name: network.fetchpriority.adjustments.link-preload-fetch.auto
12381   type: int32_t
12382   value: 0
12383   mirror: always
12385 # Adjustments to apply to the internal priority of deferred style for
12386 # fetchpriority=low/high/auto> with respect to the case when
12387 # network.fetchpriority is disabled.
12388 # - When the flag is disabled, Gecko currently sets priority to NORMAL.
12389 # - When the flag is enabled, it respectively maps to LOW/NORMAL/NORMAL.
12390 - name: network.fetchpriority.adjustments.deferred-style.low
12391   type: int32_t
12392   value: 10
12393   mirror: always
12394 - name: network.fetchpriority.adjustments.deferred-style.high
12395   type: int32_t
12396   value: 0
12397   mirror: always
12398 - name: network.fetchpriority.adjustments.deferred-style.auto
12399   type: int32_t
12400   value: 0
12401   mirror: always
12403 # Adjustments to apply to the internal priority of <link rel=preload as=style
12404 # fetchpriority=low/high/auto> with respect to the case when
12405 # network.fetchpriority is disabled.
12406 # - When the flag is disabled, Gecko currently sets priority to HIGHEST.
12407 # - When the flag is enabled, it respectively maps to HIGH/HIGHEST/HIGHEST.
12408 - name: network.fetchpriority.adjustments.link-preload-style.low
12409   type: int32_t
12410   value: 10
12411   mirror: always
12412 - name: network.fetchpriority.adjustments.link-preload-style.high
12413   type: int32_t
12414   value: 0
12415   mirror: always
12416 - name: network.fetchpriority.adjustments.link-preload-style.auto
12417   type: int32_t
12418   value: 0
12419   mirror: always
12421 # Adjustments to apply to the internal priority of other non-deferred
12422 # stylesheet load for fetchpriority=low/high/auto with respect to the case when
12423 # network.fetchpriority is disabled.
12424 # - When the flag is disabled, Gecko currently sets priority to NORMAL.
12425 # - When the flag is enabled, it respectively maps to HIGH/HIGHEST/NORMAL.
12426 - name: network.fetchpriority.adjustments.non-deferred-style.low
12427   type: int32_t
12428   value: 0
12429   mirror: always
12430 - name: network.fetchpriority.adjustments.non-deferred-style.high
12431   type: int32_t
12432   value: -20
12433   mirror: always
12434 - name: network.fetchpriority.adjustments.non-deferred-style.auto
12435   type: int32_t
12436   value: 0
12437   mirror: always
12439 # Adjustments to apply to the internal priority of global fetch API
12440 # for fetchpriority=low/high/auto with respect to the case when
12441 # network.fetchpriority is disabled.
12442 # - When the flag is disabled, Gecko currently sets priority to NORMAL.
12443 # - When the flag is enabled, it respectively maps to LOW/HIGH/NORMAL.
12444 - name: network.fetchpriority.adjustments.global-fetch-api.low
12445   type: RelaxedAtomicInt32
12446   value: 10
12447   mirror: always
12448 - name: network.fetchpriority.adjustments.global-fetch-api.high
12449   type: RelaxedAtomicInt32
12450   value: -10
12451   mirror: always
12452 - name: network.fetchpriority.adjustments.global-fetch-api.auto
12453   type: RelaxedAtomicInt32
12454   value: 0
12455   mirror: always
12457 # Adjustments to apply to the internal priority of <link rel=preload as=images
12458 # fetchpriority=low/high/auto> and <img fetchpriority=low/high/auto> with
12459 # respect to the case when network.fetchpriority is disabled.
12460 # - When the flag is disabled, Gecko currently sets priority to LOW.
12461 # - When the flag is enabled, it respectively maps to LOW/LOW/HIGH.
12462 # The image code can currently further adjust the priority for image load, see
12463 # imgRequest::BoostPriority and AdjustPriorityForImages.
12464 - name: network.fetchpriority.adjustments.images.low
12465   type: int32_t
12466   value: 0
12467   mirror: always
12468 - name: network.fetchpriority.adjustments.images.high
12469   type: int32_t
12470   value: -20
12471   mirror: always
12472 - name: network.fetchpriority.adjustments.images.auto
12473   type: int32_t
12474   value: 0
12475   mirror: always
12477 # Adjustments to apply to the internal priority of <audio>, <track>, <video>,
12478 # or <link rel=preload as=audio/track/video> with respect to the case when
12479 # network.fetchpriority is disabled.
12480 # - When the flag is disabled, Gecko currently sets priority to NORMAL.
12481 # - When the flag is enabled, it respectively maps to LOW/LOW/HIGH.
12482 - name: network.fetchpriority.adjustments.media.low
12483   type: int32_t
12484   value: 10
12485   mirror: always
12486 - name: network.fetchpriority.adjustments.media.high
12487   type: int32_t
12488   value: 0
12489   mirror: always
12490 - name: network.fetchpriority.adjustments.media.auto
12491   type: int32_t
12492   value: 0
12493   mirror: always
12495 # Enables `<link rel="preconnect">` tag and `Link: rel=preconnect` response header
12496 # handling.
12497 - name: network.preconnect
12498   type: RelaxedAtomicBool
12499   value: true
12500   mirror: always
12502 # Enables `<link rel="modulepreload">` tag and `Link: rel=modulepreload`
12503 # response header handling.
12504 - name: network.modulepreload
12505   type: RelaxedAtomicBool
12506   value: true
12507   mirror: always
12509 # Enable 103 Early Hint status code (RFC 8297)
12510 - name: network.early-hints.enabled
12511   type: RelaxedAtomicBool
12512   value: true
12513   mirror: always
12515 # Enable sending 103 (Early Hints) responses over HTTP/1.1
12516 - name: network.early-hints.over-http-v1-1.enabled
12517   type: RelaxedAtomicBool
12518   value: true
12519   mirror: always
12521 # Enable `Link: rel=preconnect` in 103 Early Hint response.
12522 - name: network.early-hints.preconnect.enabled
12523   type: RelaxedAtomicBool
12524   value: true
12525   mirror: always
12527 # The max number of speculative connections we allow for `Link: rel=preconnect`.
12528 # When 0, the speculative connection created due to `Link: rel=preconnect` will
12529 # be limited by "network.http.speculative-parallel-limit".
12530 - name: network.early-hints.preconnect.max_connections
12531   type: uint32_t
12532   value: 10
12533   mirror: always
12535 # How long we should wait for EarlyHintPreloader to be used.
12536 # Under normal circumstances it should be used immidiately.
12537 - name: network.early-hints.parent-connect-timeout
12538   type: uint32_t
12539   value: 10000
12540   mirror: always
12542 # Whether to use the network process or not
12543 # Start a separate socket process. Performing networking on the socket process
12544 # is control by a sepparate pref
12545 # ("network.http.network_access_on_socket_process.enabled").
12546 # Changing these prefs requires a restart.
12547 - name: network.process.enabled
12548   type: RelaxedAtomicBool
12549   mirror: always
12550 #if defined(ANDROID) || defined(MOZ_THUNDERBIRD)
12551   value: false # see bug 1641427
12552 #else
12553   value: true
12554 #endif
12556 # Whether we can send OnDataAvailable to content process directly.
12557 - name: network.send_ODA_to_content_directly
12558   type: RelaxedAtomicBool
12559   value: true
12560   mirror: always
12562 # Whether we can send OnDataFinished to html5parser in content process directly
12563 - name: network.send_OnDataFinished.html5parser
12564   type: RelaxedAtomicBool
12565   value: true
12566   mirror: always
12568 # Whether we can send OnDataFinished in the content process
12569 - name: network.send_OnDataFinished
12570   type: RelaxedAtomicBool
12571   value: true
12572   mirror: always
12574 # Whether we can send OnDataFinished to content process directly.
12575 - name: network.send_OnDataFinished.nsInputStreamPump
12576   type: RelaxedAtomicBool
12577   value: true
12578   mirror: always
12580 # Whether we can send OnDataFinished to cssLoader in content process.
12581 - name: network.send_OnDataFinished.cssLoader
12582   type: RelaxedAtomicBool
12583   value: @IS_EARLY_BETA_OR_EARLIER@
12584   mirror: always
12586 # Whether we can send send OnDataFinished only after dispatching
12587 # all the progress events on the main thread
12588 - name: network.send_OnDataFinished_after_progress_updates
12589   type: RelaxedAtomicBool
12590   value: false
12591   mirror: always
12593 # Perform all network access on the socket process.
12594 # The pref requires "network.process.enabled" to be true.
12595 # Changing these prefs requires a restart.
12596 - name: network.http.network_access_on_socket_process.enabled
12597   type: RelaxedAtomicBool
12598   mirror: always
12599   value: false
12601 # Telemetry of traffic categories. Whether or not to enable HttpTrafficAnalyzer.
12602 - name: network.traffic_analyzer.enabled
12603   type: RelaxedAtomicBool
12604   value: true
12605   mirror: always
12607 # Whether DNS resolution is limited to literals and cached entries.
12608 - name: network.dns.disabled
12609   type: RelaxedAtomicBool
12610   value: false
12611   mirror: always
12613 - name: network.dns.disablePrefetchFromHTTPS
12614   type: bool
12615   value: false
12616   mirror: always
12618 # For testing purpose only: allow dns prefetch through proxies
12619 - name: network.dns.prefetch_via_proxy
12620   type: bool
12621   value: false
12622   mirror: always
12624 # Max time to shutdown the resolver threads
12625 - name: network.dns.resolver_shutdown_timeout_ms
12626   type: uint32_t
12627   value: 2000
12628   mirror: always
12630 # When true on Windows DNS resolutions for single label domains
12631 # (domains that don't contain a dot) will be resolved using the DnsQuery
12632 # API instead of PR_GetAddrInfoByName
12633 - name: network.dns.dns_query_single_label
12634   type: RelaxedAtomicBool
12635   value: false
12636   mirror: always
12638 # Use platform DNS APIs (where available) to resolve HTTPS queries
12639 - name: network.dns.native_https_query
12640   type: RelaxedAtomicBool
12641 #if defined(EARLY_BETA_OR_EARLIER) && !defined(XP_MACOSX)
12642   value: true
12643 #else
12644   value: false
12645 #endif
12646   mirror: always
12648 # DnsQuery_A is broken for HTTPS queries on Windows 10.
12649 # Once it gets fixed, we can flip this pref to enable it.
12650 # Changes might not take effect until restart.
12651 - name: network.dns.native_https_query_win10
12652   type: RelaxedAtomicBool
12653   value: false
12654   mirror: always
12656 # When true, the HTTPS query will actually call the native
12657 # platform API. When false it will return before the call
12658 # to the platform API
12659 # This pref is necessary because having a HTTPS record
12660 # could cause channels to connect to a different port,
12661 # which is not desirable in automation.
12662 - name: network.dns.native_https_query_in_automation
12663   type: RelaxedAtomicBool
12664   value: false
12665   mirror: always
12667 # When resolving a native HTTPS query with native APIs
12668 # the Android implementation has a max timeout
12669 - name: network.dns.native_https_timeout_android
12670   type: RelaxedAtomicInt32
12671   value: 20000
12672   mirror: always
12674 # When this pref is true, we copy the host name to a fresh string before
12675 # calling into getaddrinfo.
12676 - name: network.dns.copy_string_before_call
12677   type: RelaxedAtomicBool
12678   value: true
12679   mirror: always
12681 - name: network.dns.max_high_priority_threads
12682   type: RelaxedAtomicUint32
12683   value: 40
12684   mirror: always
12686 - name: network.dns.max_any_priority_threads
12687   type: RelaxedAtomicUint32
12688   value: 24
12689   mirror: always
12691 # This makes it so NS_HTTP_REFRESH_DNS is only
12692 # set on DNS resolutions when LOAD_FRESH_CONNECTION is set.
12693 # That's because we don't need to refresh DNS on
12694 # every page reload.
12695 - name: network.dns.only_refresh_on_fresh_connection
12696   type: RelaxedAtomicBool
12697   value: true
12698   mirror: always
12700 # The proxy type. See nsIProtocolProxyService.idl
12701 #     PROXYCONFIG_DIRECT   = 0
12702 #     PROXYCONFIG_MANUAL   = 1
12703 #     PROXYCONFIG_PAC      = 2
12704 #     PROXYCONFIG_WPAD     = 4
12705 #     PROXYCONFIG_SYSTEM   = 5
12706 - name: network.proxy.type
12707   type: RelaxedAtomicUint32
12708   value: 5
12709   mirror: always
12711 # Whether to use WPAD while configuring proxy with system settings
12712 - name: network.proxy.system_wpad
12713   type: bool
12714   value: false
12715   mirror: always
12717 # Whether to allow the use of WPAD while configuring proxy with system settings
12718 - name: network.proxy.system_wpad.allowed
12719   type: bool
12720   value: false
12721   mirror: always
12723 # Whether the SOCKS5 proxy should be in charge of DNS resolution. Making it a
12724 # SOCKS5h proxy by convention
12725 - name: network.proxy.socks5_remote_dns
12726   type: RelaxedAtomicBool
12727   value: true
12728   mirror: always
12730 # Whether the SOCKS4 proxy should be in charge of DNS resolution. Making it a
12731 # SOCKS4a proxy.
12732 - name: network.proxy.socks_remote_dns
12733   type: RelaxedAtomicBool
12734   value: false
12735   mirror: always
12737 # When receiving a network change event, the time (in ms) we wait to reload the
12738 # PAC url.
12739 - name: network.proxy.reload_pac_delay
12740   type: RelaxedAtomicUint32
12741   value: 2000
12742   mirror: always
12744 # When parsing "SOCKS" in PAC string, the default version of SOCKS that will be
12745 # used.
12746 - name: network.proxy.default_pac_script_socks_version
12747   type: RelaxedAtomicUint32
12748   value: 4
12749   mirror: always
12751 # Whether to force failover to direct for system requests.
12752 #ifdef MOZ_PROXY_DIRECT_FAILOVER
12753 - name: network.proxy.failover_direct
12754   type: bool
12755   value: true
12756   mirror: always
12757 #endif
12759 # Whether to allow a bypass flag to be set on httpChannel that will
12760 # prevent proxies from being used for that specific request.
12761 - name: network.proxy.allow_bypass
12762   type: bool
12763 #ifdef MOZ_PROXY_BYPASS_PROTECTION
12764   value: false
12765 #else
12766   value: true
12767 #endif
12768   mirror: always
12770 - name: network.proxy.parse_pac_on_socket_process
12771   type: RelaxedAtomicBool
12772   value: false
12773   mirror: always
12775 - name: network.proxy.detect_system_proxy_changes
12776   type: RelaxedAtomicBool
12777   value: false
12778   mirror: always
12780 # If all non-direct proxies have failed, we retry all of them in case they
12781 # are online now.
12782 - name: network.proxy.retry_failed_proxies
12783   type: RelaxedAtomicBool
12784   value: true
12785   mirror: always
12787 # Some requests during a page load are marked as "tail", mainly trackers, but not only.
12788 # This pref controls whether such requests are put to the tail, behind other requests
12789 # emerging during page loading process.
12790 - name: network.http.tailing.enabled
12791   type: bool
12792   value: true
12793   mirror: always
12795 # Whether to run proxy checks when processing Alt-Svc headers.
12796 - name: network.http.altsvc.proxy_checks
12797   type: bool
12798   value: true
12799   mirror: always
12801 - name: network.http.stale_while_revalidate.enabled
12802   type: RelaxedAtomicBool
12803   value: true
12804   mirror: always
12806 # Capacity of the above cache, in kilobytes.
12807 - name: network.ssl_tokens_cache_capacity
12808   type: RelaxedAtomicUint32
12809   value: 2048
12810   mirror: always
12812 # How many records we store per entry
12813 - name: network.ssl_tokens_cache_records_per_entry
12814   type: RelaxedAtomicUint32
12815   value: 2
12816   mirror: always
12818 # The maximum allowed length for a URL - 1MB default.
12819 - name: network.standard-url.max-length
12820   type: RelaxedAtomicUint32
12821   value: 1048576
12822   mirror: always
12824 # DNS Trusted Recursive Resolver
12825 # 0 - default off, 1 - reserved/off, 2 - TRR first, 3 - TRR only,
12826 # 4 - reserved/off, 5 off by choice
12827 - name: network.trr.mode
12828   type: RelaxedAtomicUint32
12829   value: 0
12830   mirror: always
12832 # Default global TRR provider
12833 - name: network.trr.default_provider_uri
12834   type: String
12835   value: "https://mozilla.cloudflare-dns.com/dns-query"
12836   mirror: never
12838 # If true, retry TRR for recoverable errors once.
12839 - name: network.trr.retry_on_recoverable_errors
12840   type: RelaxedAtomicBool
12841   value: true
12842   mirror: always
12844 # If true, don't fallback to native DNS upon network errors.
12845 - name: network.trr.strict_native_fallback
12846   type: RelaxedAtomicBool
12847   value: false
12848   mirror: always
12850 # If true, we'll fallback to native if the retry also times out.
12851 - name: network.trr.strict_native_fallback_allow_timeouts
12852   type: RelaxedAtomicBool
12853   value: true
12854   mirror: always
12856 # Single TRR request timeout (ms) when strict native fallback is enabled.
12857 - name: network.trr.strict_fallback_request_timeout_ms
12858   type: RelaxedAtomicUint32
12859   value: 6000
12860   mirror: always
12862 # If false, the temporary blocklisting feature is disabled.
12863 # This is useful for tests to prevent bleeding extra reqs
12864 # between tasks, since we may attempt to look up the
12865 # parent domain in the background when blocklisting a host.
12866 - name: network.trr.temp_blocklist
12867   type: RelaxedAtomicBool
12868   value: true
12869   mirror: always
12871 # TRR blocklist entry expire time (in seconds). Default is one minute.
12872 # Meant to survive basically a page load.
12873 - name: network.trr.temp_blocklist_duration_sec
12874   type: RelaxedAtomicUint32
12875   value: 60
12876   mirror: always
12878 # Single TRR request timeout, in milliseconds
12879 - name: network.trr.request_timeout_ms
12880   type: RelaxedAtomicUint32
12881   value: 1500
12882   mirror: always
12884 # Single TRR request timeout, in milliseconds for mode 3
12885 - name: network.trr.request_timeout_mode_trronly_ms
12886   type: RelaxedAtomicUint32
12887   value: 30000
12888   mirror: always
12890 # Similar to network.http.http2.ping-timeout, but this is used when the
12891 # Http/2 connection is connected to the TRR server.
12892 - name: network.trr.ping_timeout
12893   type: RelaxedAtomicUint32
12894   value: 3000
12895   mirror: always
12897 # The timeout of the TRR confirmation request
12898 - name: network.trr.confirmation_timeout_ms
12899   type: RelaxedAtomicUint32
12900   value: 6000
12901   mirror: always
12903 # The timeout of the TRR confirmation request
12904 - name: network.trr.confirmation_telemetry_enabled
12905   type: RelaxedAtomicBool
12906   value: true
12907   mirror: always
12909 # Whether to send the Accept-Language header for TRR requests
12910 - name: network.trr.send_accept-language_headers
12911   type: RelaxedAtomicBool
12912   value: false
12913   mirror: always
12915 # Whether to send an empty Accept-Encoding header for TRR requests
12916 - name: network.trr.send_empty_accept-encoding_headers
12917   type: RelaxedAtomicBool
12918   value: true
12919   mirror: always
12921 # Whether to send the User-Agent header for TRR requests
12922 - name: network.trr.send_user-agent_headers
12923   type: RelaxedAtomicBool
12924   value: false
12925   mirror: always
12927 # If we should wait for captive portal confirmation before enabling TRR
12928 - name: network.trr.wait-for-portal
12929   type: RelaxedAtomicBool
12930   value: false
12931   mirror: always
12933 # If we should wait for TRR service confirmation to complete before enabling
12934 # TRR for lookups when fallback is enabled. Confirmation is always skipped when
12935 # global mode is TRR-only (no fallback).
12936 - name: network.trr.wait-for-confirmation
12937   type: RelaxedAtomicBool
12938   value: false
12939   mirror: always
12941 # Normally when confirmation fails we wait for the confirmation to succeed
12942 # before attempting to do TRR. When this pref is true, we optimistically
12943 # assume the confirmation will succeed and might attempt TRR anyway.
12944 # If network.trr.wait-for-confirmation is true, this pref is ignored.
12945 - name: network.trr.attempt-when-retrying-confirmation
12946   type: RelaxedAtomicBool
12947   value: false
12948   mirror: always
12950 # Use GET (rather than POST)
12951 - name: network.trr.useGET
12952   type: RelaxedAtomicBool
12953   value: false
12954   mirror: always
12956 # Allow RFC1918 address in responses?
12957 - name: network.trr.allow-rfc1918
12958   type: RelaxedAtomicBool
12959   value: false
12960   mirror: always
12962 # When true, it only sends AAAA when the system has IPv6 connectivity
12963 - name: network.trr.skip-AAAA-when-not-supported
12964   type: RelaxedAtomicBool
12965   value: true
12966   mirror: always
12968 # Whether to apply split horizon mitigations when using TRR.
12969 # These include adding the DNS suffix to the excluded domains
12970 - name: network.trr.split_horizon_mitigations
12971   type: RelaxedAtomicBool
12972   value: true
12973   mirror: always
12975 # Explicitly disable ECS (EDNS Client Subnet, RFC 7871)
12976 - name: network.trr.disable-ECS
12977   type: RelaxedAtomicBool
12978   value: true
12979   mirror: always
12981 # When true, the DNS+TRR cache will be cleared when a relevant TRR pref
12982 # changes. (uri, bootstrapAddress, excluded-domains)
12983 - name: network.trr.clear-cache-on-pref-change
12984   type: RelaxedAtomicBool
12985   value: true
12986   mirror: always
12988 # After this many failed TRR requests in a row, consider TRR borked
12989 - name: network.trr.max-fails
12990   type: RelaxedAtomicUint32
12991   value: 15
12992   mirror: always
12994 # When the TRR confirmation is set to CONFIRM_FAILED due to many failures in
12995 # a row, we set a timer to retry. This has an exponential backoff up to
12996 # 64 seconds.
12997 - name: network.trr.retry-timeout-ms
12998   type: RelaxedAtomicUint32
12999   value: 125
13000   mirror: always
13002 # Retry with no TRR when the response contained only 0.0.0.0 or ::
13003 - name: network.trr.fallback-on-zero-response
13004   type: RelaxedAtomicBool
13005   value: false
13006   mirror: always
13008 # If true we parse the /etc/hosts file and exclude any host names from TRR.
13009 # Reading the file is only done once, when TRR is first enabled - this could be
13010 # soon after startup or when the pref is flipped.
13011 - name: network.trr.exclude-etc-hosts
13012   type: RelaxedAtomicBool
13013   value: true
13014   mirror: always
13016 # Whether to add padding in the doh dns queries (rfc 7830)
13017 - name: network.trr.padding
13018   type: RelaxedAtomicBool
13019   value: true
13020   mirror: always
13022 # The block size to pad to. Capped at 1024 bytes.
13023 # Setting it to 0 doesn't add additional padding, but allows the server to
13024 # respond with padding (RFC7930 Sec 4)
13025 - name: network.trr.padding.length
13026   type: RelaxedAtomicUint32
13027   value: 128
13028   mirror: always
13030 # Whether to skip the NS check for the blocked host.
13031 # Note this is used for test only.
13032 - name: network.trr.skip-check-for-blocked-host
13033   type: RelaxedAtomicBool
13034   value: false
13035   mirror: always
13037 # Whether to use the connection info that is generated asynchronously.
13038 - name: network.trr.async_connInfo
13039   type: RelaxedAtomicBool
13040   value: false
13041   mirror: always
13043 # If true, a failed TRR request that contains an extended DNS error
13044 # matching the hardFail condition in DNSPacket.cpp will not be
13045 # retried with native DNS
13046 - name: network.trr.hard_fail_on_extended_error
13047   type: RelaxedAtomicBool
13048   value: true
13049   mirror: always
13051 # The base URL of the `Learn more` button for skip reasons
13052 - name: network.trr_ui.skip_reason_learn_more_url
13053   type: String
13054   value: "https://firefox-source-docs.mozilla.org/networking/dns/trr-skip-reasons.html#"
13055   mirror: never
13057 # If true, display a warning before fallback to native
13058 - name: network.trr.display_fallback_warning
13059   type: RelaxedAtomicBool
13060   value: false
13061   mirror: always
13063 # Heuristics in this list will trigger the fallback to native warning
13064 - name: network.trr.fallback_warning_heuristic_list
13065   type: String
13066   value: "canary"
13067   mirror: never
13069 # Use Oblivious HTTP when making TRR requests.
13070 - name: network.trr.use_ohttp
13071   type: RelaxedAtomicBool
13072   value: false
13073   mirror: always
13075 # Oblivious HTTP relay URI for TRR requests.
13076 - name: network.trr.ohttp.relay_uri
13077   type: String
13078   value: ""
13079   mirror: never
13081 # URI from which to fetch the configuration for the Oblivious HTTP gateway for TRR requests.
13082 - name: network.trr.ohttp.config_uri
13083   type: String
13084   value: ""
13085   mirror: never
13087 # The URI used for the target DoH server when network.trr.use_ohttp is true
13088 - name: network.trr.ohttp.uri
13089   type: String
13090   value: ""
13091   mirror: never
13093 # Allow the network changed event to get sent when a network topology or setup
13094 # change is noticed while running.
13095 - name: network.notify.changed
13096   type: RelaxedAtomicBool
13097   value: true
13098   mirror: always
13100 # Allow network detection of IPv6 related changes (bug 1245059)
13101 - name: network.notify.IPv6
13102   type: RelaxedAtomicBool
13103 #ifdef XP_WIN
13104   value: false
13105 #else
13106   value: true
13107 #endif
13108   mirror: always
13110 # Whether to check the dnsSuffix on network changes
13111 - name: network.notify.dnsSuffixList
13112   type: RelaxedAtomicBool
13113   value: true
13114   mirror: always
13116 # Whether to check the registry for proxies on network changes that indicate
13117 # that TRR should not be used.
13118 - name: network.notify.checkForProxies
13119   type: RelaxedAtomicBool
13120   value: true
13121   mirror: always
13123 # Whether to check the registry for NRPT rules on network changes that
13124 # indicate that TRR should not be used.
13125 - name: network.notify.checkForNRPT
13126   type: RelaxedAtomicBool
13127   value: true
13128   mirror: always
13130 # Whether NotifyIpInterfaceChange should be called immediately after
13131 # registration in order to record the initial state of the network adapters.
13132 - name: network.notify.initial_call
13133   type: RelaxedAtomicBool
13134   value: true
13135   mirror: always
13137 # Whether to check for DNS resolvers
13138 - name: network.notify.resolvers
13139   type: RelaxedAtomicBool
13140   value: true
13141   mirror: always
13143 # Whether to use the rust implemented DefaultURI for unknown scheme types
13144 - name: network.url.useDefaultURI
13145   type: RelaxedAtomicBool
13146   value: false
13147   mirror: always
13149 # Allows use of a protocol exception list that will bypass defaultURI parser
13150 - name: network.url.some_schemes_bypass_defaultURI_fallback
13151   type: RelaxedAtomicBool
13152   value: true
13153   mirror: always
13155 # A list of schemes to allow for bypassing defaultURI as default
13156 # This is only used when network.url.some_schemes_bypass_defaultURI_fallback is true
13157 - name: network.url.simple_uri_schemes
13158   type: String
13159   value: ""
13160   mirror: never
13162 # The maximum allowed length for a URL - 32MB default.
13163 # If 0 that means no limit.
13164 - name: network.url.max-length
13165   type: RelaxedAtomicUint32
13166   value: 32 * 1024 * 1024
13167   mirror: always
13169   # If true, will be more strict with status code parsing
13170 - name: network.url.strict_data_url_base64_placement
13171   type: RelaxedAtomicBool
13172   value: true
13173   mirror: always
13175 - name: network.url.strict_protocol_setter
13176   type: RelaxedAtomicBool
13177   value: true
13178   mirror: always
13180 # Force remapping of remote port numbers to allow reaching local testing
13181 # servers or port forwarders listening on non-standard ports.  Note that
13182 # this is not changing the origin URL in the addressbar, only internally
13183 # the port number used.  This is intended to be used along with the
13184 # `network.dns.forceResolve` preference.
13186 # The form is:
13187 #   "80,443,808-888=8080; 563=8081"
13188 # this will remap ports for HTTP, HTTPS and the range of 808-888 included
13189 # to use port 8080, and port 563 to go to 8081.
13190 - name: network.socket.forcePort
13191   type: String
13192   value: ""
13193   mirror: never
13195 # Try and use HTTP2 when using SSL
13196 - name: network.http.http2.enabled
13197   type: RelaxedAtomicBool
13198   value: true
13199   mirror: always
13201 - name: network.http.http2.enabled.deps
13202   type: RelaxedAtomicBool
13203   value: false
13204   mirror: always
13206 - name: network.http.http2.enforce-tls-profile
13207   type: RelaxedAtomicBool
13208   value: true
13209   mirror: always
13211 - name: network.http.http2.chunk-size
13212   type: RelaxedAtomicInt32
13213   value: 16000
13214   mirror: always
13216 - name: network.http.http2.timeout
13217   type: RelaxedAtomicInt32
13218   value: 170
13219   mirror: always
13221 - name: network.http.http2.coalesce-hostnames
13222   type: RelaxedAtomicBool
13223   value: true
13224   mirror: always
13226 # When true, origin A and origin B will be coalesced if they have an overlap
13227 # in IP addresses as advertized by DNS, regardless if the existing connection
13228 # to origin A is not to an IP present in B's DNS response.
13229 # When false, an existing connection will only be reused if the
13230 # connection's remote IP is also present in B's DNS response.
13231 - name: network.http.http2.aggressive_coalescing
13232   type: RelaxedAtomicBool
13233   value: false
13234   mirror: always
13236 - name: network.http.http2.ping-threshold
13237   type: RelaxedAtomicInt32
13238   value: 58
13239   mirror: always
13241 - name: network.http.http2.ping-timeout
13242   type: RelaxedAtomicInt32
13243   value: 8
13244   mirror: always
13246 - name: network.http.http2.send-buffer-size
13247   type: RelaxedAtomicInt32
13248   value: 0
13249   mirror: always
13251 - name: network.http.http2.allow-push
13252   type: RelaxedAtomicBool
13253   value: true
13254   mirror: always
13256 - name: network.http.http2.push-allowance
13257   type: RelaxedAtomicInt32
13258   value: 131072  # 128KB
13259   mirror: always
13261 - name: network.http.http2.pull-allowance
13262   type: RelaxedAtomicInt32
13263   value: 12582912  # 12MB
13264   mirror: always
13266 - name: network.http.http2.default-concurrent
13267   type: RelaxedAtomicInt32
13268   value: 100
13269   mirror: always
13271 - name: network.http.http2.default-hpack-buffer
13272   type: RelaxedAtomicInt32
13273   value: 65536 # 64K
13274   mirror: always
13276 - name: network.http.http2.websockets
13277   type: RelaxedAtomicBool
13278   value: true
13279   mirror: always
13281 - name: network.http.http2.enable-hpack-dump
13282   type: RelaxedAtomicBool
13283   value: false
13284   mirror: always
13286 - name: network.http.http2.move_to_pending_list_after_network_change
13287   type: RelaxedAtomicBool
13288   value: true
13289   mirror: always
13291 # Enable HTTP/3
13292 - name: network.http.http3.enable
13293   type: RelaxedAtomicBool
13294   value: true
13295   mirror: always
13297 # Receive buffer size of QUIC socket
13298 - name: network.http.http3.recvBufferSize
13299   type: RelaxedAtomicInt32
13300   value: 1048576
13301   mirror: always
13303 - name: network.http.http3.enable_qlog
13304   type: RelaxedAtomicBool
13305   value: false
13306   mirror: always
13308 - name: network.http.http3.enable_0rtt
13309   type: RelaxedAtomicBool
13310   value: true
13311   mirror: always
13313 # When a h3 transaction is inserted in the pending queue, the time (ms) we wait
13314 # to create a TCP backup connection.
13315 - name: network.http.http3.backup_timer_delay
13316   type: RelaxedAtomicUint32
13317   value: 100
13318   mirror: always
13320 # The global half open sockets allowed for creating a backup connection.
13321 - name: network.http.http3.parallel_fallback_conn_limit
13322   type: RelaxedAtomicUint32
13323   value: 32
13324   mirror: always
13326 # Receive buffer size of QUIC socket
13327 - name: network.http.http3.max_data
13328   type: RelaxedAtomicUint32
13329   value: 25165824
13330   mirror: always
13332 # Receive buffer size of QUIC socket
13333 - name: network.http.http3.max_stream_data
13334   type: RelaxedAtomicUint32
13335   value: 12582912
13336   mirror: always
13338 # Enable http3 network priority as described in
13339 # <https://www.rfc-editor.org/rfc/rfc9218.html>.
13340 - name: network.http.http3.priority
13341   type: RelaxedAtomicBool
13342   value: true
13343   mirror: always
13345 # Depriorizing background tabs notifies websites when switching to or from the
13346 # tab while still loading resources for the website. On one hand it might
13347 # improve performance when switching to an tab with a website using the same
13348 # QUIC connection. On the other hand it sends more data to the website and
13349 # might be a privacy concern.
13350 - name: network.http.http3.send_background_tabs_deprioritization
13351   type: RelaxedAtomicBool
13352   value: false
13353   mirror: always
13355 - name: network.http.http3.version_negotiation.enabled
13356   type: RelaxedAtomicBool
13357   value: false
13358   mirror: always
13360 # When a Http/3 connection failed, whether to retry with a different IP address.
13361 - name: network.http.http3.retry_different_ip_family
13362   type: RelaxedAtomicBool
13363   value: @IS_EARLY_BETA_OR_EARLIER@
13364   mirror: always
13366 # This is for testing purpose. When true, nsUDPSocket::SendWithAddress will
13367 # return NS_ERROR_CONNECTION_REFUSED for address "::1".
13368 - name: network.http.http3.block_loopback_ipv6_addr
13369   type: RelaxedAtomicBool
13370   value: false
13371   mirror: always
13373 # The congestion control algorithm with which to configure neqo.
13374 # 0 => NewReno
13375 # 1 => Cubic
13376 - name: network.http.http3.cc_algorithm
13377   type: RelaxedAtomicUint32
13378   value: 1
13379   mirror: always
13380   rust: true
13382 # It represents the maximum duration that we used to accumulate
13383 # callback timeouts before we set a timer and break out of the loop.
13384 - name: network.http.http3.max_accumlated_time_ms
13385   type: RelaxedAtomicUint32
13386   value: 1
13387   mirror: always
13388   rust: true
13390 # Whether to send a Xyber768 key share in HTTP/3 TLS handshakes.
13391 # Has no effect unless security.tls.enable_kyber is true.
13392 - name: network.http.http3.enable_kyber
13393   type: RelaxedAtomicBool
13394 #ifdef ANDROID
13395   value: false
13396 #else
13397   value: @IS_NIGHTLY_BUILD@
13398 #endif
13399   mirror: always
13400   rust: true
13402 # When true, a http request will be upgraded to https when HTTPS RR is
13403 # available.
13404 - name: network.dns.upgrade_with_https_rr
13405   type: RelaxedAtomicBool
13406   value: true
13407   mirror: always
13409 # Whether to use HTTPS RR as AltSvc
13410 - name: network.dns.use_https_rr_as_altsvc
13411   type: RelaxedAtomicBool
13412   value: true
13413   mirror: always
13415 # Whether to check for NAT64 using the system resolver
13416 - name: network.connectivity-service.nat64-check
13417   type: bool
13418   value: true
13419   mirror: always
13421 # Manually enter the NAT64 prefix that will be used if IPv4 is unavailable.
13422 # The value is formatted as IPv6 with the least significant bits to be dropped.
13423 # For example, 64:ff9b:: is a common prefix. This will not disable
13424 # the NAT64 check, although the value of this pref will be prioritized.
13425 - name: network.connectivity-service.nat64-prefix
13426   type: String
13427   value: ""
13428   mirror: never
13430 # Whether to enable echconfig.
13431 - name: network.dns.echconfig.enabled
13432   type: RelaxedAtomicBool
13433   value: true
13434   mirror: always
13436 # Whether to enable echconfig for http3.
13437 - name: network.dns.http3_echconfig.enabled
13438   type: RelaxedAtomicBool
13439   value: true
13440   mirror: always
13442 # This pref needs to be worked together with network.dns.echconfig.enabled
13443 # being true and there is no record without ECHConfig.
13444 # When we try all records with ECHConfig in HTTPS RRs and still can't connect,
13445 # this pref indicate whether we can fallback to the origin server.
13446 - name: network.dns.echconfig.fallback_to_origin_when_all_failed
13447   type: RelaxedAtomicBool
13448   value: false
13449   mirror: always
13451 # When true, reset the exclusion list when all records are excluded.
13452 - name: network.dns.httpssvc.reset_exclustion_list
13453   type: RelaxedAtomicBool
13454   value: true
13455   mirror: always
13457 # If the http3 connection cannot be ready after the timeout value here, the
13458 # transaction will start another non-http3 conneciton.
13459 # Setting this value to 0 indicates this feature is disabled.
13460 - name: network.dns.httpssvc.http3_fast_fallback_timeout
13461   type: RelaxedAtomicUint32
13462   value: 50
13463   mirror: always
13465 # The TTL for negative responses of TXT and HTTPS records.
13466 - name: network.dns.negative_ttl_for_type_record
13467   type: RelaxedAtomicUint32
13468   value: 300   # 5 minutes (in seconds)
13469   mirror: always
13471 # Whether to use port prefixed QNAME for HTTPS RR
13472 - name: network.dns.port_prefixed_qname_https_rr
13473   type: RelaxedAtomicBool
13474   value: false
13475   mirror: always
13477 # Whether to use HTTPS RR and ignore NS_HTTP_DISALLOW_HTTPS_RR
13478 # This pref is only set when running tests
13479 - name: network.dns.force_use_https_rr
13480   type: RelaxedAtomicBool
13481   value: false
13482   mirror: always
13484 # This preference can be used to turn off IPv6 name lookups. See bug 68796.
13485 - name: network.dns.disableIPv6
13486   type: RelaxedAtomicBool
13487   value: false
13488   mirror: always
13490 # Whether to prefer IPv6 name lookups.
13491 - name: network.dns.preferIPv6
13492   type: RelaxedAtomicBool
13493   value: false
13494   mirror: always
13496 # Only used for testing
13497 - name: network.dns.mock_HTTPS_RR_domain
13498   type: String
13499   value: ""
13500   mirror: never
13502 # Whether to add additional record IPs to the cache
13503 - name: network.trr.add_additional_records
13504   type: RelaxedAtomicBool
13505   value: true
13506   mirror: always
13508 # When this pref is true, AddStorageEntry will return an error if the
13509 # OPEN_READONLY & OPEN_SECRETLY flags are passed and no entry exists.
13510 # If no regressions occur this pref should be removed.
13511 - name: network.cache.bug1708673
13512   type: RelaxedAtomicBool
13513   value: false
13514   mirror: always
13516 # How much progress we want to do minimum when purging under pressure.
13517 # On disk, we may see blocking I/O, so for now we keep 0 here.
13518 - name: network.cache.purge_minprogress_disk
13519   type: RelaxedAtomicUint32
13520   value: 0
13521   mirror: always
13523 # How much progress we want to do minimum when purging under pressure.
13524 # In memory, purging is cheap and memory is precious.
13525 - name: network.cache.purge_minprogress_memory
13526   type: RelaxedAtomicUint32
13527   value: 32
13528   mirror: always
13530 # When true we will dispatch a background task (separate process) to
13531 # delete the cache folder at shutdown in order to avoid shutdown hangs.
13532 - name: network.cache.shutdown_purge_in_background_task
13533   type: RelaxedAtomicBool
13534 #if defined(XP_WIN)
13535   value: true
13536 #else
13537   value: false
13538 #endif
13539   mirror: always
13541 # Number of seconds to wait for the cache folder to be renamed before
13542 # the background task forcefully exists.
13543 - name: network.cache.shutdown_purge_folder_wait_seconds
13544   type: RelaxedAtomicUint32
13545   value: 10
13546   mirror: always
13548 - name: network.cache.persist_permanent_redirects_http
13549   type: bool
13550   value: false
13551   mirror: always
13553 # This is used for a temporary workaround for a web-compat issue. If pref is
13554 # true CORS preflight requests are allowed to send client certificates.
13555 - name: network.cors_preflight.allow_client_cert
13556   type: RelaxedAtomicBool
13557   value: false
13558   mirror: always
13560 # Whether to record the telemetry event when a JAR channel is failed to load.
13561 - name: network.jar.record_failure_reason
13562   type: RelaxedAtomicBool
13563   value: @IS_EARLY_BETA_OR_EARLIER@
13564   mirror: always
13566 # nsJARInputStream::Available returns the size indicated by the archived entry
13567 # so we need a limit so we don't OOM if the archive is corrupted.
13568 - name: network.jar.max_available_size
13569   type: RelaxedAtomicUint32
13570   value: 256*1024*1024 # 256 Mb
13571   mirror: always
13573 # When decompressing an archived entry we need to allocate a buffer
13574 # large enough to hold the uncompressed entry. This pref specifies the max
13575 # size of such a buffer.
13576 # When set to 0 there is no limit.
13577 - name: network.jar.max_entry_size
13578   type: RelaxedAtomicUint32
13579   value: 256*1024*1024 # 256 Mb
13580   mirror: always
13582 # When this pref is true, we will use the HTTPS acceptable content encoding
13583 # list for trustworthy domains such as http://localhost
13584 - name: network.http.encoding.trustworthy_is_https
13585   type: RelaxedAtomicBool
13586   value: true
13587   mirror: always
13589 # Support http3 version1
13590 - name: network.http.http3.support_version1
13591   type: RelaxedAtomicBool
13592   value: true
13593   mirror: always
13595 # Disable early data on an origin if SSL_ERROR_PROTOCOL_VERSION_ALERT is received
13596 - name: network.http.early_data_disable_on_error
13597   type: RelaxedAtomicBool
13598   value: true
13599   mirror: always
13601 # Disable early data if it fails for more than this number of origins
13602 - name: network.http.early_data_max_error
13603   type: RelaxedAtomicUint32
13604   value: 5
13605   mirror: always
13607   # If true, requests will be canceled if any of the response headers values has a NUL character
13608 - name: network.http.reject_NULs_in_response_header_values
13609   type: RelaxedAtomicBool
13610   value: true
13611   mirror: always
13613   # If true, will be more strict with status code parsing
13614 - name: network.http.strict_response_status_line_parsing
13615   type: RelaxedAtomicBool
13616   value: true
13617   mirror: always
13619   # If true, remove the resumption token when 0RTT failed.
13620 - name: network.http.remove_resumption_token_when_early_data_failed
13621   type: RelaxedAtomicBool
13622   value: true
13623   mirror: always
13625   # The length of cnonce string used in HTTP digest auth.
13626 - name: network.http.digest_auth_cnonce_length
13627   type: uint32_t
13628   value: 16
13629   mirror: always
13631   # If true, HTTP response content-type headers will be parsed using the standards-compliant MimeType parser
13632 - name: network.standard_content_type_parsing.response_headers
13633   type: RelaxedAtomicBool
13634   value: true
13635   mirror: always
13637 # The maximum count that we allow socket prrocess to crash. If this count is
13638 # reached, we won't use networking over socket process.
13639 - name: network.max_socket_process_failed_count
13640   type: RelaxedAtomicUint32
13641   value: 1
13642   mirror: always
13644 - name: network.allow_redirect_to_data
13645   type: RelaxedAtomicBool
13646   value: false
13647   mirror: always
13649 - name: network.allow_raw_sockets_in_content_processes
13650   type: bool
13651   value: false
13652   mirror: once
13654 - name: network.allow_large_stack_size_for_socket_thread
13655   type: RelaxedAtomicBool
13656   value: true
13657   mirror: always
13659 # WebTransport
13660 - name: network.webtransport.enabled
13661   type: RelaxedAtomicBool
13662   value: true
13663   mirror: always
13665 # WebTransport Datagram support
13666 - name: network.webtransport.datagrams.enabled
13667   type: RelaxedAtomicBool
13668   value: true
13669   mirror: always
13671 # WebTransport Datagram size
13672 - name: network.webtransport.datagram_size
13673   type: RelaxedAtomicUint32
13674   value: 1200
13675   mirror: always
13677 # WebTransport Redirect support
13678 - name: network.webtransport.redirect.enabled
13679   type: RelaxedAtomicBool
13680   value: false
13681   mirror: always
13683 # Wifi-scan polling period, in ms, when on a mobile network.
13684 # A value of 0 indicates that no polling should be done.
13685 - name: network.wifi.scanning_period
13686   type: RelaxedAtomicUint32
13687   value: 60000
13688   mirror: always
13690 # When the Access-Control-Allow-Headers is wildcard (*), whether to allow
13691 # CORS-protected requests with the Authorization request header.
13692 - name: network.cors_preflight.authorization_covered_by_wildcard
13693   type: bool
13694   value: true
13695   mirror: always
13697 # Inner schemes that are allowed to display application/http-index-format.
13698 # Set to * to allow all schemes.
13699 - name: network.http_index_format.allowed_schemes
13700   type: String
13701   value: "file,moz-gio"
13702   mirror: never
13704 # Enable off-main-thread decompression of network streams
13705 # Note:network.decompression_off_mainthread triggered a bug, so
13706 # we switched to a new pref that can be turned off safely
13707 - name: network.decompression_off_mainthread2
13708   type: bool
13709   value: true
13710   mirror: always
13712 # Minimum content-length to use off-main-thread decompression of network streams
13713 - name: network.decompression_off_mainthread_min_size
13714   type: int32_t
13715   value: 512
13716   mirror: always
13718 #---------------------------------------------------------------------------
13719 # Prefs starting with "nglayout."
13720 #---------------------------------------------------------------------------
13722 # Enable/disable display list invalidation logging --- useful for debugging.
13723 - name: nglayout.debug.invalidation
13724   type: bool
13725   value: false
13726   mirror: always
13728 - name: nglayout.debug.disable_xul_cache
13729   type: bool
13730   value: false
13731   mirror: always
13733 - name: nglayout.initialpaint.delay
13734   type: int32_t
13735   value: 5
13736   mirror: always
13738 - name: nglayout.initialpaint.delay_in_oopif
13739   type: int32_t
13740   value: 5
13741   mirror: always
13743 #---------------------------------------------------------------------------
13744 # Prefs starting with "page_load."
13745 #---------------------------------------------------------------------------
13747 # Time in milliseconds during which certain tasks are deprioritized during
13748 # page load.
13749 - name: page_load.deprioritization_period
13750   type: RelaxedAtomicUint32
13751   value: 5000
13752   mirror: always
13754 #---------------------------------------------------------------------------
13755 # Prefs starting with "pdfjs."
13756 #---------------------------------------------------------------------------
13758 - name: pdfjs.disabled
13759   type: bool
13760   value: false
13761   mirror: always
13763 #---------------------------------------------------------------------------
13764 # Prefs starting with "permissions."
13765 #---------------------------------------------------------------------------
13767 # 1-Accept, 2-Deny, Any other value: Accept
13768 - name: permissions.default.image
13769   type: RelaxedAtomicUint32
13770   value: 1
13771   mirror: always
13773 - name: permissions.default.screen-wake-lock
13774   type: RelaxedAtomicUint32
13775   value: 1
13776   mirror: always
13778 - name: permissions.isolateBy.userContext
13779   type: RelaxedAtomicBool
13780   value: false
13781   mirror: always
13783 - name: permissions.isolateBy.privateBrowsing
13784   type: RelaxedAtomicBool
13785   value: true
13786   mirror: always
13788 #---------------------------------------------------------------------------
13789 # Prefs starting with "places."
13790 #---------------------------------------------------------------------------
13792 # Whether pages alternative frecency is enabled. This and the following related
13793 # prefs only apply at restart.
13794 - name: places.frecency.pages.alternative.featureGate
13795   type: bool
13796   value: false
13797   mirror: once
13799 - name: places.frecency.pages.alternative.highWeight
13800   type: uint32_t
13801   value: 100
13802   mirror: once
13804 - name: places.frecency.pages.alternative.mediumWeight
13805   type: uint32_t
13806   value: 50
13807   mirror: once
13809 - name: places.frecency.pages.alternative.lowWeight
13810   type: uint32_t
13811   value: 20
13812   mirror: once
13814 - name: places.frecency.pages.alternative.halfLifeDays
13815   type: uint32_t
13816   value: 30
13817   mirror: once
13819 - name: places.frecency.pages.alternative.numSampledVisits
13820   type: uint32_t
13821   value: 10
13822   mirror: once
13824 # Whether flooding prevention feature is enabled or not.
13825 - name: places.history.floodingPrevention.enabled
13826   type: bool
13827   value: @IS_NIGHTLY_BUILD@
13828   mirror: always
13830 # Maximum elapsed time betwen a user interaction and a visit before starting to
13831 # apply flooding prevention.
13832 - name: places.history.floodingPrevention.maxSecondsFromLastUserInteraction
13833   type: uint32_t
13834   value: 3
13835   mirror: always
13837 # Number of consecutive accesses to an origin in a short timeframe before
13838 # starting to restrict storing visits for it.
13839 - name: places.history.floodingPrevention.restrictionCount
13840   type: uint32_t
13841   value: 3
13842   mirror: always
13844 # Duration of the timeframe where consecutive visits to an origin should happen
13845 # before starting to restrict storing visits for it.
13846 - name: places.history.floodingPrevention.restrictionExpireSeconds
13847   type: uint32_t
13848   value: 5
13849   mirror: always
13851 #---------------------------------------------------------------------------
13852 # Prefs starting with "plain_text."
13853 #---------------------------------------------------------------------------
13855 # When false, text in plaintext documents does not wrap long lines.
13856 - name: plain_text.wrap_long_lines
13857   type: bool
13858   value: true
13859   mirror: always
13861 #---------------------------------------------------------------------------
13862 # Prefs starting with "preferences."
13863 #---------------------------------------------------------------------------
13865 - name: preferences.allow.omt-write
13866   type: bool
13867   value: true
13868   mirror: never
13870 #ifdef DEBUG
13871   # If set to true, setting a Preference matched to a `Once` StaticPref will
13872   # assert that the value matches. Such assertion being broken is a clear flag
13873   # that the Once policy shouldn't be used.
13874 -   name: preferences.check.once.policy
13875     type: bool
13876     value: false
13877     mirror: always
13879   # If set to true, StaticPrefs Once policy check will be skipped during
13880   # automation regression test. Use with care. This pref must be set back to
13881   # false as soon as specific test has completed.
13882 -   name: preferences.force-disable.check.once.policy
13883     type: bool
13884     value: false
13885     mirror: always
13886 #endif
13888 #---------------------------------------------------------------------------
13889 # Prefs starting with "print."
13890 #---------------------------------------------------------------------------
13892 # Variation fonts can't always be embedded in certain output formats
13893 # such as PDF. To work around this, draw the variation fonts using
13894 # paths instead of using font embedding.
13895 - name: print.font-variations-as-paths
13896   type: RelaxedAtomicBool
13897   value: true
13898   mirror: always
13900 # Whether we always print silently (without a print dialog).
13901 - name: print.always_print_silent
13902   type: RelaxedAtomicBool
13903   value: false
13904   mirror: always
13906 # Whether we attempt to generate links in Save As PDF output.
13907 - name: print.save_as_pdf.links.enabled
13908   type: RelaxedAtomicBool
13909   value: true
13910   mirror: always
13912 # Whether we attempt to generate and use document-internal PDF destinations.
13913 - name: print.save_as_pdf.internal_destinations.enabled
13914   type: RelaxedAtomicBool
13915   value: true
13916   mirror: always
13918 # Whether we use the CSS @page size as the paper size in PDF output.
13919 - name: print.save_as_pdf.use_page_rule_size_as_paper_size.enabled
13920   type: RelaxedAtomicBool
13921   value: @IS_NOT_ANDROID@
13922   mirror: always
13924 # The default DPI for printing.
13926 # For PDF-based output, DPI should ideally be irrelevant, but in fact it is not
13927 # for multiple reasons:
13929 #  * Layout code that tries to respect device pixels (e.g. for snapping glyph
13930 #    positions and baselines, and especially for the "GDI Classic"
13931 #    rendering-mode threshold for certain fonts).
13933 #  * The limitations of the PDF format mean that we can't natively represent
13934 #    certain effects, such as filters, in PDF output, so we need to rasterize
13935 #    the parts of the document with these applied.
13937 #  * Other rasterized things like images and such are also affected by DPI
13938 #    (both in the output, and the images we select via srcset, for example).
13940 # Therefore, using a high DPI is preferable. For now, we use 144dpi to match
13941 # physical printer output on Windows, but higher (e.g. 300dpi) might be better,
13942 # but only if it does not lead to issues such as excessive memory use.
13943 - name: print.default_dpi
13944   type: float
13945   value: 144.0f
13946   mirror: always
13948 # Whether support for monochrome printing is enabled for CUPS.
13949 - name: print.cups.monochrome.enabled
13950   type: RelaxedAtomicBool
13951   value: true
13952   mirror: always
13954 # Disabling this will no-op window.print()
13955 - name: print.enabled
13956   type: RelaxedAtomicBool
13957   value: true
13958   mirror: always
13960 # Determines if and when to center pages on a sheet horiontally when printing.
13961 # With a setting of 2, it's guaranteed that A4 on US Letter will be centered.
13962 #  0: never,
13963 #  1: always,
13964 #  2: when the ratio of sheet to page size after content scaling is near 1.0
13965 - name: print.center_page_on_sheet
13966   type: RelaxedAtomicUint32
13967   value: 2
13968   mirror: always
13970 #---------------------------------------------------------------------------
13971 # Prefs starting with "privacy."
13972 #---------------------------------------------------------------------------
13974 # Annotate trackers using the strict list. If set to false, the basic list will
13975 # be used instead.
13976 - name: privacy.annotate_channels.strict_list.enabled
13977   type: bool
13978   value: @IS_EARLY_BETA_OR_EARLIER@
13979   mirror: always
13981 # Annotate trackers using the strict list in the private browsing mode. If set
13982 # to false, the basic list will be used instead.
13983 - name: privacy.annotate_channels.strict_list.pbmode.enabled
13984   type: bool
13985   value: true
13986   mirror: always
13988 # First Party Isolation (double keying), disabled by default.
13989 - name: privacy.firstparty.isolate
13990   type: RelaxedAtomicBool
13991   value: false
13992   mirror: always
13994 # If false, two windows in the same domain with different first party domains
13995 # (top level URLs) can access resources through window.opener. This pref is
13996 # effective only when "privacy.firstparty.isolate" is true.
13997 - name: privacy.firstparty.isolate.restrict_opener_access
13998   type: RelaxedAtomicBool
13999   value: true
14000   mirror: always
14002 - name: privacy.firstparty.isolate.block_post_message
14003   type: RelaxedAtomicBool
14004   value: false
14005   mirror: always
14007 - name: privacy.firstparty.isolate.use_site
14008   type: RelaxedAtomicBool
14009   value: false
14010   mirror: always
14012 # Enforce tracking protection in all modes.
14013 - name: privacy.trackingprotection.enabled
14014   type: bool
14015   value: false
14016   mirror: always
14018 # Enforce tracking protection in Private Browsing mode.
14019 - name: privacy.trackingprotection.pbmode.enabled
14020   type: bool
14021   value: true
14022   mirror: always
14024 # Annotate channels based on the tracking protection list in all modes
14025 - name: privacy.trackingprotection.annotate_channels
14026   type: bool
14027   value: true
14028   mirror: always
14030 # Block 3rd party fingerprinting resources.
14031 - name: privacy.trackingprotection.fingerprinting.enabled
14032   type: bool
14033   value: false
14034   mirror: always
14036 # Block 3rd party cryptomining resources.
14037 - name: privacy.trackingprotection.cryptomining.enabled
14038   type: bool
14039   value: false
14040   mirror: always
14042 # Block 3rd party socialtracking resources.
14043 - name: privacy.trackingprotection.socialtracking.enabled
14044   type: bool
14045   value: false
14046   mirror: always
14048 # Consider socialtracking annotation as trackers (see ETP).
14049 - name: privacy.socialtracking.block_cookies.enabled
14050   type: bool
14051   value: true
14052   mirror: always
14054 # Block 3rd party emailtracking resources in all mode.
14055 - name: privacy.trackingprotection.emailtracking.enabled
14056   type: bool
14057   value: false
14058   mirror: always
14060 # Block 3rd party emailtracking resources in Private Browsing mode.
14061 - name: privacy.trackingprotection.emailtracking.pbmode.enabled
14062   type: bool
14063   value: true
14064   mirror: always
14066 # Collecting 3rd party emailtracking telemetry.
14067 - name: privacy.trackingprotection.emailtracking.data_collection.enabled
14068   type: bool
14069   value: true
14070   mirror: always
14072 - name: privacy.trackingprotection.testing.report_blocked_node
14073   type: RelaxedAtomicBool
14074   value: false
14075   mirror: always
14077 # Whether to spoof user locale to English (used as part of Resist
14078 # Fingerprinting).
14079 # 0 - will prompt
14080 # 1 - don't spoof
14081 # 2 - spoof
14082 - name: privacy.spoof_english
14083   type: RelaxedAtomicUint32
14084   value: 0
14085   mirror: always
14087 # Send "do not track" HTTP header, disabled by default.
14088 - name: privacy.donottrackheader.enabled
14089   type: bool
14090   value: false
14091   mirror: always
14093 # Potentially send "global privacy control" HTTP header and set navigator
14094 # property accordingly. Communicates user's desire to opt-out/in of
14095 # websites or services selling or sharing the user's information, false by
14096 # default.
14097 # true - Send the header with a value of 1 to indicate opting-out
14098 # false - Do not send header to indicate opting-in
14099 - name: privacy.globalprivacycontrol.enabled
14100   type: RelaxedAtomicBool
14101   value: false
14102   mirror: always
14104 # Controls whether or not GPC signals are sent in private browsing mode.
14105 # This can be overridden by `privacy.globalprivacycontrol.enabled` as true.
14106 - name: privacy.globalprivacycontrol.pbmode.enabled
14107   type: RelaxedAtomicBool
14108   value: false
14109   mirror: always
14111 # Controls whether or not GPC signals are sent. Meant to act as a third option
14112 # of 'undecided' by leaving the navigator property undefined and not attaching
14113 # the Sec-GPC HTTP header.
14114 - name: privacy.globalprivacycontrol.functionality.enabled
14115   type: RelaxedAtomicBool
14116   value: false
14117   mirror: always
14119 # Lower the priority of network loads for resources on the tracking protection
14120 # list.  Note that this requires the
14121 # privacy.trackingprotection.annotate_channels pref to be on in order to have
14122 # any effect.
14123 - name: privacy.trackingprotection.lower_network_priority
14124   type: bool
14125   value: @IS_NIGHTLY_BUILD@
14126   mirror: always
14128 # A subset of Resist Fingerprinting protections focused specifically on timers.
14129 # This affects the Animation API, the performance APIs, Date.getTime,
14130 # Event.timestamp, File.lastModified, audioContext.currentTime,
14131 # canvas.captureStream.currentTime.
14132 - name: privacy.reduceTimerPrecision
14133   type: RelaxedAtomicBool
14134   value: true
14135   mirror: always
14137 # If privacy.reduceTimerPrecision is false, this pref controls whether or not
14138 # to clamp all timers at a fixed 20 microsconds. It should always be enabled,
14139 # and is only specified as a pref to enable an emergency disabling in the event
14140 # of catastrophic failure.
14141 - name: privacy.reduceTimerPrecision.unconditional
14142   type: RelaxedAtomicBool
14143   value: true
14144   mirror: always
14146 # The resistFingerprinting variables are marked with 'Relaxed' memory ordering.
14147 # We don't particurally care that threads have a percently consistent view of
14148 # the values of these prefs. They are not expected to change often, and having
14149 # an outdated view is not particurally harmful. They will eventually become
14150 # consistent.
14152 # The variables will, however, be read often (specifically .microseconds on
14153 # each timer rounding) so performance is important.
14154 - name: privacy.resistFingerprinting
14155   type: RelaxedAtomicBool
14156   value: false
14157   mirror: always
14158   do_not_use_directly: true
14160 # When the .pbmode pref is on, RFP or FPP will be enabled in PBM
14161 # When the non-pbm pref is on, they will be enabled in PBM and non-PBM
14162 - name: privacy.resistFingerprinting.pbmode
14163   type: RelaxedAtomicBool
14164   value: false
14165   mirror: always
14166   do_not_use_directly: true
14168 # privacy.fingerprintingProtection enables a set of fingerprinting protections
14169 # designed to minimize breakage while maximizing protection.
14170 - name: privacy.fingerprintingProtection
14171   type: RelaxedAtomicBool
14172   value: false
14173   mirror: always
14174   do_not_use_directly: true
14176 - name: privacy.fingerprintingProtection.pbmode
14177   type: RelaxedAtomicBool
14178   value: false
14179   mirror: always
14180   do_not_use_directly: true
14182 # Disables FPP Remote settings bucket. Allows user to stop overriding
14183 # of FPP overrides
14184 - name: privacy.fingerprintingProtection.remoteOverrides.enabled
14185   type: RelaxedAtomicBool
14186   value: true
14187   mirror: always
14189 # We automatically decline canvas permission requests if they are not initiated
14190 # from user input. Just in case that breaks something, we allow the user to
14191 # revert this behavior with this obscure pref. We do not intend to support this
14192 # long term. If you do set it, to work around some broken website, please file
14193 # a bug with information so we can understand why it is needed.
14194 - name: privacy.resistFingerprinting.autoDeclineNoUserInputCanvasPrompts
14195   type: bool
14196   value: true
14197   mirror: always
14199 # This pref can be used to disable mozAddonManager entirely for fingerprinting
14200 # reasons. Someone like Tor browser will use this pref.
14201 # NOTE: We'd like this to be a "hidden" pref once StaticPrefs supports it.
14202 - name: privacy.resistFingerprinting.block_mozAddonManager
14203   type: RelaxedAtomicBool
14204   value: false
14205   mirror: always
14207 # Whether canvas extraction should result in random data. If false, canvas
14208 # extraction results in all-white, opaque pixel data.
14209 - name: privacy.resistFingerprinting.randomDataOnCanvasExtract
14210   type: RelaxedAtomicBool
14211   value: true
14212   mirror: always
14214 # The log level for browser console messages logged in RFPHelper.sys.mjs. Change to
14215 # 'All' and restart to see the messages.
14216 - name: privacy.resistFingerprinting.jsmloglevel
14217   type: String
14218   value: "Warn"
14219   mirror: never
14221 # Enable jittering the clock one precision value forward.
14222 - name: privacy.resistFingerprinting.reduceTimerPrecision.jitter
14223   type: RelaxedAtomicBool
14224   value: true
14225   mirror: always
14227 # Dynamically tune the resolution of the timer reduction for
14228 # `privacy.reduceTimerPrecision` and `privacy.resistFingerprinting`.
14229 - name: privacy.resistFingerprinting.reduceTimerPrecision.microseconds
14230   type: RelaxedAtomicUint32
14231   value: 1000
14232   mirror: always
14234 - name: privacy.resistFingerprinting.target_video_res
14235   type: uint32_t
14236   value: 480
14237   mirror: always
14239 # Enable resetting the fingerprinting randomization key daily for normal windwos.
14240 - name: privacy.resistFingerprinting.randomization.daily_reset.enabled
14241   type: RelaxedAtomicBool
14242   value: false
14243   mirror: always
14245 # Enable resetting the fingerprinting randomization key daily for private windwos.
14246 - name: privacy.resistFingerprinting.randomization.daily_reset.private.enabled
14247   type: RelaxedAtomicBool
14248   value: false
14249   mirror: always
14252 # Anti-tracking permission expiration.
14253 - name: privacy.restrict3rdpartystorage.expiration
14254   type: uint32_t
14255   value: 2592000   # 30 days (in seconds)
14256   mirror: always
14258 # Report Anti-tracking warnings to console lazily
14259 - name: privacy.restrict3rdpartystorage.console.lazy
14260   type: bool
14261   value: true
14262   mirror: always
14264 # Enable the heuristic to allow storage access for windows opened using window.open() after user interaction
14265 - name: privacy.restrict3rdpartystorage.heuristic.opened_window_after_interaction
14266   type: bool
14267   value: true
14268   mirror: always
14270 # Enable the heuristic to allow storage access for windows opened using window.open()
14271 - name: privacy.restrict3rdpartystorage.heuristic.window_open
14272   type: bool
14273   value: true
14274   mirror: always
14276 # Enable the heuristic to allow storage access for windows opened using window.open()
14277 - name: privacy.restrict3rdpartystorage.heuristic.redirect
14278   type: bool
14279   value: @IS_NOT_NIGHTLY_BUILD@
14280   mirror: always
14282 # Anti-tracking permission expiration.
14283 - name: privacy.restrict3rdpartystorage.expiration_redirect
14284   type: uint32_t
14285   value: 2592000   # 30 days (in seconds)
14286   mirror: always
14288 # Anti-tracking user-interaction expiration.
14289 - name: privacy.userInteraction.expiration
14290   type: uint32_t
14291   value: 3888000   # 45 days (in seconds)
14292   mirror: always
14294 # Anti-tracking user-interaction document interval.
14295 - name: privacy.userInteraction.document.interval
14296   type: uint32_t
14297   value: 1800   # 30 minutes (in seconds)
14298   mirror: always
14300 # Enable Anti-tracking testing. When it enables, it will notify the observers
14301 # when user-interaction permission or storage access permission is added. This
14302 # is for testing only.
14303 - name: privacy.antitracking.testing
14304   type: bool
14305   value: false
14306   mirror: always
14308 # Controls the anti-tracking webcompat features. This includes:
14309 # - All URL-Classifier and state partitioning skip lists (prefs and remote
14310 #   settings)
14311 # - Storage access heuristics (opener, redirect, etc.)
14312 # - StorageAccessAPI automatic grants (skips the prompt)
14313 # - Allowing specific tracking channels on user opt-in (e.g. facebook login
14314 #   shim).
14315 - name: privacy.antitracking.enableWebcompat
14316   type: RelaxedAtomicBool
14317   value: true
14318   mirror: always
14320 # Enable the heuristic to allow storage access for recent visited pages
14321 - name: privacy.restrict3rdpartystorage.heuristic.recently_visited
14322   type: bool
14323   value: true
14324   mirror: always
14326 # Valid time gap since last visit
14327 - name: privacy.restrict3rdpartystorage.heuristic.recently_visited_time
14328   type: uint32_t
14329   value: 600    # 10 minutes
14330   mirror: always
14332 # Recent visited pages redirection permission expiration.
14333 - name: privacy.restrict3rdpartystorage.expiration_visited
14334   type: uint32_t
14335   value: 2592000   # 30 days (in seconds)
14336   mirror: always
14338 # Maximum client-side cookie life-time cap. Measured in seconds, set to 0 to
14339 # disable.
14340 - name: privacy.documentCookies.maxage
14341   type: uint32_t
14342   value: 0
14343   mirror: always
14345 - name: privacy.window.maxInnerWidth
14346   type: int32_t
14347   value: 1000
14348   mirror: always
14350 - name: privacy.window.maxInnerHeight
14351   type: int32_t
14352   value: 1000
14353   mirror: always
14355 - name: privacy.sanitize.useOldClearHistoryDialog
14356   type: RelaxedAtomicBool
14357   value: true
14358   mirror: always
14360 - name: privacy.sanitize.sanitizeOnShutdown
14361   type: RelaxedAtomicBool
14362   value: false
14363   mirror: always
14365 - name: privacy.clearOnShutdown.cache
14366   type: RelaxedAtomicBool
14367   value: false
14368   mirror: always
14370 - name: privacy.clearOnShutdown_v2.cache
14371   type: RelaxedAtomicBool
14372   value: false
14373   mirror: always
14375 - name: privacy.dynamic_firstparty.limitForeign
14376   type: RelaxedAtomicBool
14377   value: false
14378   mirror: always
14380 - name: privacy.dynamic_firstparty.use_site
14381   type: RelaxedAtomicBool
14382   value: true
14383   mirror: always
14385 - name: privacy.partition.network_state
14386   type: RelaxedAtomicBool
14387   value: true
14388   mirror: always
14390 # Partition the OCSP cache by the partitionKey.
14391 - name: privacy.partition.network_state.ocsp_cache
14392   type: RelaxedAtomicBool
14393   value: true
14394   mirror: always
14396 # Partition the OCSP cache by the partitionKey for private browsing mode.
14397 - name: privacy.partition.network_state.ocsp_cache.pbmode
14398   type: RelaxedAtomicBool
14399   value: true
14400   mirror: always
14402 # Always partition web storage APIs except cookies.
14403 - name: privacy.partition.always_partition_third_party_non_cookie_storage
14404   type: RelaxedAtomicBool
14405   value: true
14406   mirror: always
14408 # Exclude session storage from the above preference.
14409 - name: privacy.partition.always_partition_third_party_non_cookie_storage.exempt_sessionstorage
14410   type: RelaxedAtomicBool
14411   value: false
14412   mirror: always
14414 - name: privacy.partition.bloburl_per_partition_key
14415   type: bool
14416   value: true
14417   mirror: always
14419 - name: privacy.window.name.update.enabled
14420   type: bool
14421   value: true
14422   mirror: always
14424 # By default, the network state isolation is not active when there is a proxy
14425 # setting. This pref forces the network isolation even in these scenarios.
14426 - name: privacy.partition.network_state.connection_with_proxy
14427   type: bool
14428   value: false
14429   mirror: always
14431 # Partition the service workers unconditionally when dFPI is enabled.
14432 - name: privacy.partition.serviceWorkers
14433   type: RelaxedAtomicBool
14434   value: true
14435   mirror: always
14437 # Enables / disables the strip on share feature which strips query parameters
14438 # when copying/sharing in-content links or from the url bar.
14439 - name: privacy.query_stripping.strip_on_share.enabled
14440   type: RelaxedAtomicBool
14441   value: false
14442   mirror: always
14444 # Enables / disables the URL query string stripping in normal browsing mode
14445 # which strips query parameters from loading URIs to prevent bounce (redirect)
14446 # tracking.
14447 - name: privacy.query_stripping.enabled
14448   type: RelaxedAtomicBool
14449   value: false
14450   mirror: always
14452 # Same as the pref above, but controls query stripping for private browsing
14453 # mode.
14454 - name: privacy.query_stripping.enabled.pbmode
14455   type: RelaxedAtomicBool
14456   value: false
14457   mirror: always
14459 # The list which contains query parameters that are needed to be stripped from
14460 # URIs. The query parameters are separated by a space.
14461 - name: privacy.query_stripping.strip_list
14462   type: String
14463   value: ""
14464   mirror: never
14466 # This controls if we will do the query string stripping for redirects.
14467 - name: privacy.query_stripping.redirect
14468   type: bool
14469   value: true
14470   mirror: always
14472 # the list which contains sites where should exempt from query stripping
14473 - name: privacy.query_stripping.allow_list
14474   type: String
14475   value: ""
14476   mirror: never
14478 # Main pref to enable / disable the feature.
14479 - name: privacy.bounceTrackingProtection.enabled
14480   type: bool
14481   value: true
14482   mirror: once
14484 # How long to wait for a client redirect after a navigation ends.
14485 - name: privacy.bounceTrackingProtection.clientBounceDetectionTimerPeriodMS
14486   type: uint32_t
14487   value: 10000
14488   mirror: always
14490 # How long user activations will protect a site host from storage deletion.
14491 - name: privacy.bounceTrackingProtection.bounceTrackingActivationLifetimeSec
14492   type: uint32_t
14493   value: 3888000
14494   mirror: always
14496 # How long to wait for interaction after a possible bounce tracking event before
14497 # deleting a site host's storage.
14498 - name: privacy.bounceTrackingProtection.bounceTrackingGracePeriodSec
14499   type: uint32_t
14500   value: 3600
14501   mirror: always
14503 # How often to run the bounce tracking timer algorithm  which purges bounce
14504 # tracker state periodically. Set to 0 to disable purging.
14505 - name: privacy.bounceTrackingProtection.bounceTrackingPurgeTimerPeriodSec
14506   type: uint32_t
14507   value: 3600
14508   mirror: always
14510 # Whether only bounces that access storage should be considered trackers.
14511 - name: privacy.bounceTrackingProtection.requireStatefulBounces
14512   type: bool
14513   value: true
14514   mirror: always
14516 # Enables a mode where if bounce tracking protection is enabled it classifies
14517 # but does not purge trackers. This mode is helpful for testing the feature
14518 # without risking data loss. Telemetry is still collected normally.
14519 - name: privacy.bounceTrackingProtection.enableDryRunMode
14520   type: bool
14521   value: @IS_NOT_NIGHTLY_BUILD@
14522   mirror: always
14524 # To be used in automated test environments to enable observer messages.
14525 - name: privacy.bounceTrackingProtection.enableTestMode
14526   type: bool
14527   value: false
14528   mirror: always
14530 # Whether the migration ran to import user activation flags into the BTP user
14531 # activation store. Set to false to trigger a new migration.
14532 - name: privacy.bounceTrackingProtection.hasMigratedUserActivationData
14533   type: bool
14534   value: false
14535   mirror: always
14537 #---------------------------------------------------------------------------
14538 # Prefs starting with "prompts."
14539 #---------------------------------------------------------------------------
14541 # Prompt modal type prefs
14542 # See nsIPromptService::MODAL_TYPE fields for possible values.
14544 # Insecure form submit warning.
14545 - name: prompts.modalType.insecureFormSubmit
14546   type: int32_t
14547   value: 2
14548   mirror: always
14550 # nsHttpChannelAuthProvider#ConfirmAuth anti-phishing prompts.
14551 - name: prompts.modalType.confirmAuth
14552   type: int32_t
14553   value: 2
14554   mirror: always
14556 #---------------------------------------------------------------------------
14557 # Prefs starting with "security."
14558 #---------------------------------------------------------------------------
14560 # Mochitests that need to load resource:// URIs not declared content-accessible
14561 # in manifests should set this pref.
14562 - name: security.all_resource_uri_content_accessible
14563   type: bool
14564   value: false
14565   mirror: always
14567 - name: security.bad_cert_domain_error.url_fix_enabled
14568   type: bool
14569   value: true
14570   mirror: always
14572 - name: security.csp.reporting.script-sample.max-length
14573   type: int32_t
14574   value: 40
14575   mirror: always
14577 - name: security.csp.truncate_blocked_uri_for_frame_navigations
14578   type: bool
14579   value: true
14580   mirror: always
14582 # Limit the number of CSP reports that are send in a specific timespan.
14583 - name: security.csp.reporting.limit.count
14584   type: uint32_t
14585   value: 100
14586   mirror: always
14588 # Time span in seconds for reporting limit.
14589 - name: security.csp.reporting.limit.timespan
14590   type: uint32_t
14591   value: 2
14592   mirror: always
14594 # If true, all toplevel data: URI navigations will be blocked.
14595 # Please note that manually entering a data: URI in the
14596 # URL-Bar will not be blocked when flipping this pref.
14597 - name: security.data_uri.block_toplevel_data_uri_navigations
14598   type: bool
14599   value: true
14600   mirror: always
14602 # Allowed by default so it doesn't affect Thunderbird/SeaMonkey, but
14603 # not allowed for Firefox Desktop in firefox.js
14604 - name: security.allow_parent_unrestricted_js_loads
14605   type: RelaxedAtomicBool
14606   value: true
14607   mirror: always
14609 # Allowed by default so it doesn't affect Thunderbird/SeaMonkey, but
14610 # not allowed for Firefox Desktop in firefox.js
14611 - name: security.allow_eval_with_system_principal
14612   type: RelaxedAtomicBool
14613   value: true
14614   mirror: always
14616 # Allowed by default so it doesn't affect Thunderbird/SeaMonkey, but
14617 # not allowed for Firefox Desktop in firefox.js
14618 - name: security.allow_eval_in_parent_process
14619   type: RelaxedAtomicBool
14620   value: true
14621   mirror: always
14623 # Disallowed by default, ensure not disallowed content is loaded in the parent
14624 # process.
14625 - name: security.allow_unsafe_parent_loads
14626   type: bool
14627   value: false
14628   mirror: always
14630 # Pref to block mixed scripts (fonts, plugin content, scripts, stylesheets,
14631 # iframes, websockets, XHR).
14632 - name: security.mixed_content.block_active_content
14633   type: bool
14634   value: @IS_ANDROID@
14635   mirror: always
14637 # Pref to block sub requests that happen within an object.
14638 - name: security.mixed_content.block_object_subrequest
14639   type: bool
14640   value: false
14641   mirror: always
14643 # Pref for mixed display content blocking (images, audio, video).
14644 - name: security.mixed_content.block_display_content
14645   type: bool
14646   value: false
14647   mirror: always
14649 # Prerequisite pref for mixed display content upgrading (images, audio, video).
14650 - name: security.mixed_content.upgrade_display_content
14651   type: bool
14652   value: true
14653   mirror: always
14655 # Upgrade images when the upgrading is enabled.
14656 - name: security.mixed_content.upgrade_display_content.image
14657   type: bool
14658   value: true
14659   mirror: always
14661 # Upgrade audio when the upgrading is enabled.
14662 - name: security.mixed_content.upgrade_display_content.audio
14663   type: bool
14664   value: true
14665   mirror: always
14667 # Upgrade videos when the upgrading is enabled.
14668 - name: security.mixed_content.upgrade_display_content.video
14669   type: bool
14670   value: true
14671   mirror: always
14673 # Whether strict file origin policy is in effect. "False" is traditional.
14674 - name: security.fileuri.strict_origin_policy
14675   type: RelaxedAtomicBool
14676   value: true
14677   mirror: always
14679 # The level to which we sandbox the content process. firefox.js sets the
14680 # default to different values on a per-OS basis, and has documentation
14681 # on what the defaults are and what the numbers mean.
14682 - name: security.sandbox.content.level
14683   type: int32_t
14684   value: 0
14685   mirror: always
14686   do_not_use_directly: true # Consumers should use SandboxSettings to ask.
14688 - name: security.sandbox.socket.process.level
14689   type: int32_t
14690   value: 0
14691   mirror: always
14692   do_not_use_directly: true # Consumers should use SandboxSettings to ask.
14694 # This controls the strength of the Windows GPU process sandbox.  Changes
14695 # will require restart.
14696 # For information on what the level number means, see
14697 # SetSecurityLevelForGPUProcess() in
14698 # security/sandbox/win/src/sandboxbroker/sandboxBroker.cpp
14699 - name: security.sandbox.gpu.level
14700   type: int32_t
14701 #if defined(XP_WIN)
14702   value: 1
14703 #else
14704   value: 0
14705 #endif
14706   mirror: always
14708 # Enrollment preferences for the win32k experiment, set and managed by Normandy
14709 - name: security.sandbox.content.win32k-experiment.enrollmentStatus
14710   type: uint32_t
14711   value: 0
14712   mirror: never
14714 - name: security.sandbox.content.win32k-experiment.startupEnrollmentStatus
14715   type: uint32_t
14716   value: 0
14717   mirror: never
14719 #if defined(XP_WIN) && defined(MOZ_SANDBOX)
14721   # Whether win32k is disabled for content processes.
14722   # true means win32k system calls are not permitted.
14723 -   name: security.sandbox.content.win32k-disable
14724     type: RelaxedAtomicBool
14725     value: true
14726     mirror: always
14728   # Note: win32k is currently _not_ disabled for GMP due to intermittent test
14729   # failures, where the GMP process fails very early. See bug 1449348.
14730 -   name: security.sandbox.gmp.win32k-disable
14731     type: RelaxedAtomicBool
14732     value: false
14733     mirror: always
14735   # Whether win32k is disabled for socket processes.
14736   # true means win32k system calls are not permitted.
14737 -   name: security.sandbox.socket.win32k-disable
14738     type: RelaxedAtomicBool
14739     value: true
14740     mirror: always
14742   # Whether CET User Shadow Stack compatible modules only is enabled for the
14743   # relevant process type.
14744 -   name: security.sandbox.content.shadow-stack.enabled
14745     type: RelaxedAtomicBool
14746     value: false
14747     mirror: always
14749 -   name: security.sandbox.rdd.shadow-stack.enabled
14750     type: RelaxedAtomicBool
14751     value: true
14752     mirror: always
14754 -   name: security.sandbox.socket.shadow-stack.enabled
14755     type: RelaxedAtomicBool
14756     value: true
14757     mirror: always
14759 -   name: security.sandbox.gpu.shadow-stack.enabled
14760     type: RelaxedAtomicBool
14761     value: true
14762     mirror: always
14764 -   name: security.sandbox.gmp.shadow-stack.enabled
14765     type: RelaxedAtomicBool
14766     value: true
14767     mirror: always
14769   # Whether a Low Privilege AppContainer (LPAC) is enabled for the relevant
14770   # process type.
14772 #if defined(MOZ_WMF_MEDIA_ENGINE)
14773 -   name: security.sandbox.utility-wmf-cdm.lpac.enabled
14774     type: RelaxedAtomicBool
14775     value: true
14776     mirror: always
14777 #endif
14779   # Whether Arbitrary Code Guard is enabled for the RDD process.
14780 -   name: security.sandbox.rdd.acg.enabled
14781     type: RelaxedAtomicBool
14782     value: true
14783     mirror: always
14785 #ifdef MOZ_WMF
14786   # Whether Arbitrary Code Guard is enabled for the utility WMF audio decoder
14787   # process.
14789 -   name: security.sandbox.utility-wmf.acg.enabled
14790     type: RelaxedAtomicBool
14791     value: true
14792     mirror: always
14793 #endif  // MOZ_WMF
14795   # This controls the depth of stack trace that is logged when Windows sandbox
14796   # logging is turned on. This is only currently available for the content
14797   # process because the only other sandbox (for GMP) has too strict a policy to
14798   # allow stack tracing. This does not require a restart to take effect.
14799 -   name: security.sandbox.windows.log.stackTraceDepth
14800     type: RelaxedAtomicUint32
14801     value: 0
14802     mirror: always
14803 #endif
14805 #if defined(XP_LINUX) && defined(MOZ_SANDBOX)
14806   # Run content processes in headless mode and disallow
14807   # connections to the X server.  Requires:
14808   # * `webgl.out-of-process` (or else WebGL breaks)
14809   # Changing it requires a restart because sandbox policy information
14810   # dependent on it is cached.  See bug 1640345 for details.
14811 - name: security.sandbox.content.headless
14812   type: bool
14813   value: true
14814   mirror: once
14815 #endif
14817 # Pref to show warning when submitting from secure to insecure.
14818 - name: security.warn_submit_secure_to_insecure
14819   type: bool
14820   value: true
14821   mirror: always
14823 # Hardware Origin-bound Second Factor Support
14824 - name: security.webauth.webauthn
14825   type: bool
14826   value: true
14827   mirror: always
14829 # WebAuthn CTAP2 support
14830 - name: security.webauthn.ctap2
14831   type: RelaxedAtomicBool
14832   value: true
14833   mirror: always
14834   rust: true
14836 # WebAuthn JSON serialization methods
14837 - name: security.webauthn.enable_json_serialization_methods
14838   type: RelaxedAtomicBool
14839   value: true
14840   mirror: always
14842 # WebAuthn conditional mediation
14843 - name: security.webauthn.enable_conditional_mediation
14844   type: RelaxedAtomicBool
14845   value: true
14846   mirror: always
14848 # Dispatch WebAuthn requests to virtual authenticators (mutually exclusive
14849 # with and webauthn_enable_usbtoken)
14850 - name: security.webauth.webauthn_enable_softtoken
14851   type: RelaxedAtomicBool
14852   value: false
14853   mirror: always
14854   rust: true
14856 # residentKey support when using Android platform API
14857 - name: security.webauthn.webauthn_enable_android_fido2.residentkey
14858   type: RelaxedAtomicBool
14859   value: true
14860   mirror: always
14862 # Dispatch WebAuthn requests to the macOS platform API
14863 - name: security.webauthn.enable_macos_passkeys
14864   type: RelaxedAtomicBool
14865   value: true
14866   mirror: always
14868 # Dispatch WebAuthn requests to authenticator-rs
14869 - name: security.webauth.webauthn_enable_usbtoken
14870   type: RelaxedAtomicBool
14871   value: @IS_NOT_ANDROID@
14872   mirror: always
14873   rust: true
14875 # Skip direct attestation consent prompts (for tests).
14876 - name: security.webauth.webauthn_testing_allow_direct_attestation
14877   type: RelaxedAtomicBool
14878   value: false
14879   mirror: always
14880   rust: true
14882 # Show the Windows Passkey settings link in about:preferences. This is
14883 # set to true if we find that webauthn.dll is sufficiently recent.
14884 - name: security.webauthn.show_ms_settings_link
14885   type: RelaxedAtomicBool
14886   value: false
14887   mirror: always
14889 # Block Worker/SharedWorker scripts with wrong MIME type.
14890 - name: security.block_Worker_with_wrong_mime
14891   type: bool
14892   value: true
14893   mirror: always
14895 # Block the execution of scripts using a wrong type as defined by the file extension
14896 # (OS) mapping when loaded via the file:// protocol.
14897 - name: security.block_fileuri_script_with_wrong_mime
14898   type: bool
14899   value: false
14900   mirror: always
14902 # Cancel outgoing requests from SystemPrincipal:
14903 # but only with scheme http(s) and contentpolicytype subdocument
14904 - name: security.disallow_privileged_https_subdocuments_loads
14905   type: bool
14906   value: true
14907   mirror: always
14909 # but only with scheme data and contentpolicytype subdocument
14910 - name: security.disallow_privileged_data_subdocuments_loads
14911   type: bool
14912   value: true
14913   mirror: always
14915 # Cancel outgoing requests from SystemPrincipal:
14916 # but only with scheme http(s) and contentpolicytype stylesheet
14917 - name: security.disallow_privileged_https_stylesheet_loads
14918   type: bool
14919   value: true
14920   mirror: always
14922 # Cancel outgoing requests from SystemPrincipal:
14923 # but only with scheme http(s) and contentpolicytype script
14924 - name: security.disallow_privileged_https_script_loads
14925   type: bool
14926   value: true
14927   mirror: always
14929 # Cancel outgoing requests from SystemPrincipal:
14930 # where there is no finalURI.
14931 - name: security.disallow_privileged_no_finaluri_loads
14932   type: bool
14933   value: true
14934   mirror: always
14936 # Cancel outgoing requests from privileged about pages:
14937 # but only with scheme http(s) and contentpolicytype script
14938 - name: security.disallow_privilegedabout_remote_script_loads
14939   type: bool
14940   value: true
14941   mirror: always
14943 # Enable preloaded static key pins by default.
14944 - name: security.cert_pinning.enforcement_level
14945   type: RelaxedAtomicUint32
14946   value: 1
14947   mirror: always
14948   do_not_use_directly: true
14950 # OCSP fetching behavior:
14951 # 0: do not fetch OCSP
14952 # 1: fetch OCSP for DV and EV certificates
14953 # 2: fetch OCSP only for EV certificates
14954 - name: security.OCSP.enabled
14955   type: RelaxedAtomicUint32
14956 #ifdef ANDROID
14957   value: 2
14958 #else
14959   value: 1
14960 #endif
14961   mirror: always
14964 # Whether or not OCSP is required.
14965 # true => hard-fail (if an OCSP request times out, stop the connection)
14966 # false => soft-fail (if an OCSP request times out, continue the connection)
14967 - name: security.OCSP.require
14968   type: RelaxedAtomicBool
14969   value: false
14970   mirror: always
14972 # How many milliseconds to wait for an OCSP response before assuming it failed
14973 # (when fetching for soft-fail).
14974 - name: security.OCSP.timeoutMilliseconds.soft
14975   type: RelaxedAtomicUint32
14976 #ifdef RELEASE_OR_BETA
14977   value: 2000
14978 #else
14979   value: 1000
14980 #endif
14981   mirror: always
14983 # How many milliseconds to wait for an OCSP response before assuming it failed
14984 # (when fetching for hard-fail).
14985 - name: security.OCSP.timeoutMilliseconds.hard
14986   type: RelaxedAtomicUint32
14987   value: 10000
14988   mirror: always
14990 # Whether or not to enable OCSP must-staple (in other words, TLS-feature with
14991 # status request).
14992 - name: security.ssl.enable_ocsp_must_staple
14993   type: RelaxedAtomicBool
14994   value: true
14995   mirror: always
14997 # Whether or not to enable OCSP stapling.
14998 - name: security.ssl.enable_ocsp_stapling
14999   type: RelaxedAtomicBool
15000   value: true
15001   mirror: always
15003 # This is checked at startup to see if NSS should be initialized without the
15004 # user's certificate and key databases.
15005 - name: security.nocertdb
15006   type: bool
15007   value: false
15008   mirror: once
15010 # Whether or not to import and trust third party root certificates from the OS.
15011 - name: security.enterprise_roots.enabled
15012   type: RelaxedAtomicBool
15013   value: true
15014   mirror: always
15016 - name: security.intermediate_preloading_healer.enabled
15017   type: RelaxedAtomicBool
15018   value: @IS_NOT_ANDROID@
15019   mirror: always
15021 - name: security.intermediate_preloading_healer.timer_interval_ms
15022   type: RelaxedAtomicUint32
15023   value: 300000
15024   mirror: always
15026 # If true, attempt to load the osclientcerts PKCS#11 module at startup on a
15027 # background thread. This module allows Firefox to use client certificates
15028 # stored in OS certificate storage. Currently only available for Windows and
15029 # macOS.
15030 - name: security.osclientcerts.autoload
15031   type: RelaxedAtomicBool
15032   value: true
15033   mirror: always
15035 # If true, assume tokens accessed via osclientcerts implement RSA-PSS. If a
15036 # given token does not support RSA-PSS, users may see the error
15037 # 'SEC_ERROR_PKCS11_GENERAL_ERROR' if a server indicates it will accept an
15038 # RSA-PSS signature in the client's certificate verify message.
15039 # Setting this to false may allow such connections to succeed, if the server
15040 # also accepts RSA-PKCS1 signatures.
15041 - name: security.osclientcerts.assume_rsa_pss_support
15042   type: RelaxedAtomicBool
15043   value: true
15044   mirror: always
15046 - name: security.pki.cert_short_lifetime_in_days
15047   type: RelaxedAtomicUint32
15048   value: 10
15049   mirror: always
15051 # security.pki.netscape_step_up_policy controls how the platform handles the
15052 # id-Netscape-stepUp OID in extended key usage extensions of CA certificates.
15053 # 0: id-Netscape-stepUp is always considered equivalent to id-kp-serverAuth
15054 # 1: it is considered equivalent when the notBefore is before 23 August 2016
15055 # 2: similarly, but for 23 August 2015
15056 # 3: it is never considered equivalent
15057 - name: security.pki.netscape_step_up_policy
15058   type: RelaxedAtomicUint32
15059 #ifdef RELEASE_OR_BETA
15060   value: 1
15061 #else
15062   value: 2
15063 #endif
15064   mirror: always
15066 # Configures Certificate Transparency support mode:
15067 # 0: Fully disabled.
15068 # 1: Only collect telemetry. CT qualification checks are not performed.
15069 - name: security.pki.certificate_transparency.mode
15070   type: RelaxedAtomicUint32
15071   value: 0
15072   mirror: always
15074 # 0: Disable CRLite entirely.
15075 # 1: Consult CRLite but only collect telemetry.
15076 # 2: Consult CRLite and enforce both "Revoked" and "Not Revoked" results.
15077 # 3: Consult CRLite and enforce "Not Revoked" results, but defer to OCSP for "Revoked".
15078 - name: security.pki.crlite_mode
15079   type: RelaxedAtomicUint32
15080   value: 3
15081   mirror: always
15083 - name: security.tls.version.min
15084   type: RelaxedAtomicUint32
15085   value: 3
15086   mirror: always
15088 - name: security.tls.version.max
15089   type: RelaxedAtomicUint32
15090   value: 4
15091   mirror: always
15093 - name: security.tls.version.enable-deprecated
15094   type: RelaxedAtomicBool
15095   value: false
15096   mirror: always
15098 - name: security.tls.version.fallback-limit
15099   type: RelaxedAtomicUint32
15100   value: 4
15101   mirror: always
15103 # Turn off post-handshake authentication for TLS 1.3 by default,
15104 # until the incompatibility with HTTP/2 is resolved:
15105 # https://tools.ietf.org/html/draft-davidben-http2-tls13-00
15106 - name: security.tls.enable_post_handshake_auth
15107   type: RelaxedAtomicBool
15108   value: false
15109   mirror: always
15111 # Probability of GREASEing a TLS connection with ECH (0-100)
15112 # 0 means never GREASE, 100 means always GREASE
15113 - name: security.tls.ech.grease_probability
15114   type: RelaxedAtomicUint32
15115   value: 100
15116   mirror: always
15118 # Whether to apply ECH GREASE settings to HTTP3/QUIC connections
15119 - name: security.tls.ech.grease_http3
15120   type: RelaxedAtomicBool
15121   value: true
15122   mirror: always
15124 # Whether to retry connections without ECH Grease
15125 - name: security.tls.ech.disable_grease_on_fallback
15126   type: RelaxedAtomicBool
15127   value: false
15128   mirror: always
15130 # ECH GREASE Padding target (1-255)
15131 - name: security.tls.ech.grease_size
15132   type: RelaxedAtomicUint32
15133   value: 100
15134   mirror: always
15136 # Whether to apply GREASE settings to HTTP3/QUIC connections
15137 - name: security.tls.grease_http3_enable
15138   type: RelaxedAtomicBool
15139   value: false
15140   mirror: always
15141   rust: true
15143 - name: security.tls.hello_downgrade_check
15144   type: RelaxedAtomicBool
15145   value: true
15146   mirror: always
15148 - name: security.tls.enable_delegated_credentials
15149   type: RelaxedAtomicBool
15150   value: true
15151   mirror: always
15153 - name: security.tls.enable_0rtt_data
15154   type: RelaxedAtomicBool
15155   value: true
15156   mirror: always
15158 - name: security.tls.enable_kyber
15159   type: RelaxedAtomicBool
15160 #ifdef ANDROID
15161   value: false
15162 #else
15163   value: @IS_NIGHTLY_BUILD@
15164 #endif
15165   mirror: always
15166   rust: true
15168 - name: security.tls.client_hello.send_p256_keyshare
15169   type: RelaxedAtomicBool
15170   value: true
15171   mirror: always
15172   rust: true
15174 - name: security.tls.enable_certificate_compression_zlib
15175   type: RelaxedAtomicBool
15176   value: @IS_NIGHTLY_BUILD@
15177   mirror: always
15179 - name: security.tls.enable_certificate_compression_brotli
15180   type: RelaxedAtomicBool
15181   value: @IS_NIGHTLY_BUILD@
15182   mirror: always
15184 - name: security.ssl.treat_unsafe_negotiation_as_broken
15185   type: RelaxedAtomicBool
15186   value: false
15187   mirror: always
15189 - name: security.ssl.require_safe_negotiation
15190   type: RelaxedAtomicBool
15191   value: false
15192   mirror: always
15194 - name: security.ssl.enable_false_start
15195   type: RelaxedAtomicBool
15196   value: true
15197   mirror: always
15199 - name: security.ssl.enable_alpn
15200   type: RelaxedAtomicBool
15201   value: true
15202   mirror: always
15204 - name: security.ssl.disable_session_identifiers
15205   type: RelaxedAtomicBool
15206   value: false
15207   mirror: always
15209 - name: security.ssl3.ecdhe_rsa_aes_128_gcm_sha256
15210   type: RelaxedAtomicBool
15211   value: true
15212   mirror: always
15214 - name: security.ssl3.ecdhe_ecdsa_aes_128_gcm_sha256
15215   type: RelaxedAtomicBool
15216   value: true
15217   mirror: always
15219 - name: security.ssl3.ecdhe_ecdsa_chacha20_poly1305_sha256
15220   type: RelaxedAtomicBool
15221   value: true
15222   mirror: always
15224 - name: security.ssl3.ecdhe_rsa_chacha20_poly1305_sha256
15225   type: RelaxedAtomicBool
15226   value: true
15227   mirror: always
15229 - name: security.ssl3.ecdhe_ecdsa_aes_256_gcm_sha384
15230   type: RelaxedAtomicBool
15231   value: true
15232   mirror: always
15234 - name: security.ssl3.ecdhe_rsa_aes_256_gcm_sha384
15235   type: RelaxedAtomicBool
15236   value: true
15237   mirror: always
15239 - name: security.ssl3.ecdhe_rsa_aes_128_sha
15240   type: RelaxedAtomicBool
15241   value: true
15242   mirror: always
15244 - name: security.ssl3.ecdhe_ecdsa_aes_128_sha
15245   type: RelaxedAtomicBool
15246   value: @IS_NOT_EARLY_BETA_OR_EARLIER@
15247   mirror: always
15249 - name: security.ssl3.ecdhe_rsa_aes_256_sha
15250   type: RelaxedAtomicBool
15251   value: true
15252   mirror: always
15254 - name: security.ssl3.ecdhe_ecdsa_aes_256_sha
15255   type: RelaxedAtomicBool
15256   value: @IS_NOT_EARLY_BETA_OR_EARLIER@
15257   mirror: always
15259 - name: security.ssl3.dhe_rsa_aes_128_sha
15260   type: RelaxedAtomicBool
15261   value: false
15262   mirror: always
15264 - name: security.ssl3.dhe_rsa_aes_256_sha
15265   type: RelaxedAtomicBool
15266   value: false
15267   mirror: always
15269 - name: security.ssl3.rsa_aes_128_sha
15270   type: RelaxedAtomicBool
15271   value: true
15272   mirror: always
15274 - name: security.ssl3.rsa_aes_256_sha
15275   type: RelaxedAtomicBool
15276   value: true
15277   mirror: always
15279 - name: security.ssl3.rsa_aes_128_gcm_sha256
15280   type: RelaxedAtomicBool
15281   value: true
15282   mirror: always
15284 - name: security.ssl3.rsa_aes_256_gcm_sha384
15285   type: RelaxedAtomicBool
15286   value: true
15287   mirror: always
15289 - name: security.ssl3.deprecated.rsa_des_ede3_sha
15290   type: RelaxedAtomicBool
15291   value: true
15292   mirror: always
15294 - name: security.tls13.aes_128_gcm_sha256
15295   type: RelaxedAtomicBool
15296   value: true
15297   mirror: always
15299 - name: security.tls13.chacha20_poly1305_sha256
15300   type: RelaxedAtomicBool
15301   value: true
15302   mirror: always
15304 - name: security.tls13.aes_256_gcm_sha384
15305   type: RelaxedAtomicBool
15306   value: true
15307   mirror: always
15309 #---------------------------------------------------------------------------
15310 # Prefs starting with "signon."
15311 #---------------------------------------------------------------------------
15312 - name: signon.usernameOnlyForm.enabled
15313   type: bool
15314   value: true
15315   mirror: always
15317 #---------------------------------------------------------------------------
15318 # Prefs starting with "slider."
15319 #---------------------------------------------------------------------------
15321 # Scrollbar snapping region.
15322 # - 0: off
15323 # - 1 and higher: slider thickness multiple
15324 - name: slider.snapMultiplier
15325   type: int32_t
15326 #ifdef XP_WIN
15327   value: 6
15328 #else
15329   value: 0
15330 #endif
15331   mirror: always
15333 #---------------------------------------------------------------------------
15334 # Prefs starting with "storage."
15335 #---------------------------------------------------------------------------
15337 # Whether to use a non-exclusive VFS.
15338 # By default we use the unix-excl VFS, for the following reasons:
15339 # 1. It improves compatibility with NFS shares, whose implementation
15340 #    is incompatible with SQLite's locking requirements (reliable fcntl), and
15341 #    in particular with WAL journaling.
15342 #    Bug 433129 attempted to automatically identify such file-systems,
15343 #    but a reliable way was not found and the fallback locking is slower than
15344 #    POSIX locking, so we do not want to do it by default.
15345 # 2. It allows wal mode to avoid the memory mapped -shm file, reducing the
15346 #    likelihood of SIGBUS failures when disk space is exhausted.
15347 # 3. It provides some protection from third party database tampering while a
15348 #    connection is open.
15349 # Note there's no win32-excl VFS, so this has no effect on Windows.
15350 - name: storage.sqlite.exclusiveLock.enabled
15351   type: RelaxedAtomicBool
15352   value: @IS_NOT_ANDROID@
15353   mirror: always
15355 #---------------------------------------------------------------------------
15356 # Prefs starting with "svg."
15357 #---------------------------------------------------------------------------
15359 # This pref controls whether the 'context-fill' and 'context-stroke' keywords
15360 # can be used in SVG-as-an-image in the content processes to use the fill/
15361 # stroke specified on the element that embeds the image. (These keywords are
15362 # always enabled in the chrome process, regardless of this pref.) Also, these
15363 # keywords are currently not part of any spec, which is partly why we disable
15364 # them for web content.
15365 - name: svg.context-properties.content.enabled
15366   type: RelaxedAtomicBool
15367   value: false
15368   mirror: always
15370 # This pref controls whether the `prefers-color-scheme` value of SVG images
15371 # reacts to the embedder `color-scheme` in content.
15372 - name: svg.embedder-prefers-color-scheme.content.enabled
15373   type: RelaxedAtomicBool
15374   value: true
15375   mirror: always
15377 # Enables the 'context-fill' and 'context-stroke' keywords for particular
15378 # domains. We expect this list to be Mozilla-controlled properties, since the
15379 # 'context-*' keywords are not part of any spec. We expect to remove this
15380 # preference and the 'context-` keyword support entirely in the
15381 # not-too-distant future when a standardized alternative ships. This preference
15382 # is _not_ for allowing web content to use these keywords. For performance
15383 # reasons, the list of domains in this preference should remain short in
15384 # length.
15385 - name: svg.context-properties.content.allowed-domains
15386   type: String
15387   value: ""
15388   mirror: never
15390 # Is support for the new getBBox method from SVG 2 enabled?
15391 # See https://svgwg.org/svg2-draft/single-page.html#types-SVGBoundingBoxOptions
15392 - name: svg.new-getBBox.enabled
15393   type: bool
15394   value: false
15395   mirror: always
15397 # Whether SVGGraphicsElement.nearestViewportElement and SVGGraphicsElement.farthestViewportElement are enabled.
15398 - name: svg.nearestAndFarthestViewportElement.enabled
15399   type: bool
15400   value: @IS_NOT_EARLY_BETA_OR_EARLIER@
15401   mirror: always
15403 # Whether SVGAElement.text is enabled.
15404 - name: svg.SVGAElement.text.enabled
15405   type: bool
15406   value: false
15407   mirror: always
15409 # Tweak which elements are allowed in <svg:use> subtrees, and in which
15410 # circumstances. See RemoveForbiddenNodes in SVGUseElement.cpp for the spec
15411 # text.
15413 # - 0: Don't restrict ever.
15414 # - 1: Restrict only cross-document.
15415 # - 2/other: restrict always.
15417 # We allow the behavior to be configurable via this pref. Our chosen default
15418 # value forbids non-graphical content in <svg:use> clones of cross-document
15419 # elements. This is a compromise between our more-permissive pre-existing
15420 # behavior (which SVG 2 seems to call for, and maps to pref value 0) and the
15421 # behavior of other UAs (which SVG 1.1 seems to call for, and maps to pref
15422 # value 2).
15423 - name: svg.use-element.graphics-element-restrictions
15424   type: int32_t
15425   value: 1
15426   mirror: always
15428 # Whether to restrict <svg:use> element recursion levels.
15430 # - 0: Don't restrict ever.
15431 # - 1: Restrict everywhere
15432 # - 2/other: Restrict only in the parent process.
15434 - name: svg.use-element.recursive-clone-limit.enabled
15435   type: int32_t
15436   value: 2
15437   mirror: always
15439 # What is the recursion limit for svg use element cloning if enabled.
15440 - name: svg.use-element.recursive-clone-limit
15441   type: uint32_t
15442   value: 8
15443   mirror: always
15445 # Whether <svg:use> with a data: URL as href is allowed
15446 - name: svg.use-element.data-url-href.allowed
15447   type: bool
15448   value: false
15449   mirror: always
15451 #---------------------------------------------------------------------------
15452 # Prefs starting with "telemetry."
15453 #---------------------------------------------------------------------------
15455 - name: telemetry.number_of_site_origin.min_interval
15456   type: uint32_t
15457   value: 300000
15458   mirror: always
15460 - name: telemetry.fog.test.localhost_port
15461   type: RelaxedAtomicInt32
15462   value: 0
15463   mirror: always
15464   rust: true
15466 - name: telemetry.fog.test.activity_limit
15467   type: RelaxedAtomicInt32
15468   value: 120
15469   mirror: always
15470   rust: true
15472 - name: telemetry.fog.test.inactivity_limit
15473   type: RelaxedAtomicInt32
15474   value: 1200
15475   mirror: always
15476   rust: true
15478 - name: telemetry.fog.artifact_build
15479   type: RelaxedAtomicBool
15480   value: false
15481   mirror: always
15483 #---------------------------------------------------------------------------
15484 # Prefs starting with "test."
15485 #---------------------------------------------------------------------------
15487 - name: test.events.async.enabled
15488   type: RelaxedAtomicBool
15489   value: false
15490   mirror: always
15492 - name: test.mousescroll
15493   type: RelaxedAtomicBool
15494   value: false
15495   mirror: always
15497 #---------------------------------------------------------------------------
15498 # Prefs starting with "thread."
15499 #---------------------------------------------------------------------------
15501 # If control tasks aren't enabled, they get medium high priority.
15502 - name: threads.control_event_queue.enabled
15503   type: RelaxedAtomicBool
15504   value: true
15505   mirror: always
15507 # If the service is available, set threads to low-power mode when in the background.
15508 - name: threads.use_low_power.enabled
15509   type: RelaxedAtomicBool
15510   value: @IS_NIGHTLY_BUILD@
15511   mirror: always
15514 # If the process priority is set to background, put the main thread in the background.
15515 # Currently off by default.
15516 - name: threads.lower_mainthread_priority_in_background.enabled
15517   type: bool
15518   value: @IS_NIGHTLY_BUILD@
15519   mirror: always
15521 #---------------------------------------------------------------------------
15522 # Prefs starting with "timer."
15523 #---------------------------------------------------------------------------
15525 # Since our timestamp on macOS does not increment while the system is asleep, we
15526 # should ignore sleep/wake notifications to make timer thread process timers.
15527 - name: timer.ignore_sleep_wake_notifications
15528   type: RelaxedAtomicBool
15529 #ifdef XP_MACOSX
15530   value: true
15531 #else
15532   value: false
15533 #endif
15534   mirror: always
15536 # Amount of time by which it is always acceptable to delay the firing of a timer.
15537 # Any timer may be delayed by up to this amount in order to enable timers to be
15538 # bundled together for efficiency.
15539 - name: timer.minimum_firing_delay_tolerance_ms
15540   type: AtomicFloat
15541   value: 1.0
15542   mirror: always
15544 # Maximum amount of time by which it is ever acceptable to delay the firing of a timer.
15545 # Setting this to zero will effectively disable timer coalescing.
15546 - name: timer.maximum_firing_delay_tolerance_ms
15547   type: AtomicFloat
15548   value: 10000.0
15549   mirror: always
15551 #ifdef XP_WIN
15552   # Controls whether or not TimerThread will automatically increase the Windows timer
15553   # resolution when appropriate conditions are met.
15554 -   name: timer.auto_increase_timer_resolution
15555     type: RelaxedAtomicBool
15556 #ifdef NIGHTLY_BUILD
15557     value: true
15558 #else
15559     value: false
15560 #endif
15561     mirror: always
15562 #endif
15564 #---------------------------------------------------------------------------
15565 # Prefs starting with "toolkit."
15566 #---------------------------------------------------------------------------
15568 # Makes removeDirectory background task wait for the given milliseconds before removal.
15569 - name: toolkit.background_tasks.remove_directory.testing.sleep_ms
15570   type: RelaxedAtomicUint32
15571   value: 0
15572   mirror: always
15574 # Returns true if BHR is disabled.
15575 - name: toolkit.content-background-hang-monitor.disabled
15576   type: bool
15577   value: false
15578   mirror: always
15580 - name: toolkit.scrollbox.smoothScroll
15581   type: RelaxedAtomicBool
15582   value: true
15583   mirror: always
15585 - name: toolkit.scrollbox.horizontalScrollDistance
15586   type: RelaxedAtomicInt32
15587   value: 5
15588   mirror: always
15590 - name: toolkit.scrollbox.verticalScrollDistance
15591   type: RelaxedAtomicInt32
15592   value: 3
15593   mirror: always
15595 # The maximum overlap between pages when scrolling with
15596 # page-up/page-down/spacebar, as a percentage of scrollport size.
15597 - name: toolkit.scrollbox.pagescroll.maxOverlapPercent
15598   type: RelaxedAtomicInt32
15599   value: 10
15600   mirror: always
15602 # The maximum overlap between pages when scrolling with
15603 # page-up/page-down/spacebar, in lines.
15604 - name: toolkit.scrollbox.pagescroll.maxOverlapLines
15605   type: RelaxedAtomicInt32
15606   value: 2
15607   mirror: always
15609 # The lateWriteChecksStage and fastShutdownStage below represent the stage
15610 # of shutdown after which we (for lateWriteChecksStage) crash / gather
15611 # telemetry data on file writes, or (for fastShutdownStage) we call _exit(0).
15612 # Higher values are earlier during shutdown, and the full enumeration can
15613 # be found in AppShutdown.h in the AppShutdownPhase enum.
15614 - name: toolkit.shutdown.lateWriteChecksStage
15615   type: int32_t
15616 #ifdef MOZ_CODE_COVERAGE
15617   value: 0
15618 #else
15619   value: 2
15620 #endif
15621   mirror: always
15623 # See the comment above toolkit.shutdown.lateWriteChecksStage. A higher value
15624 # for this pref means we call _exit(0) earlier during shutdown.
15625 - name: toolkit.shutdown.fastShutdownStage
15626   type: int32_t
15627 #if !defined(DEBUG) && !defined(MOZ_ASAN) && !defined(MOZ_TSAN) && !defined(MOZ_CODE_COVERAGE) && !defined(MOZ_VALGRIND) && !defined(MOZ_PROFILE_GENERATE) && !defined(JS_STRUCTURED_SPEW)
15628   value: 1
15629 #else
15630   value: 0
15631 #endif
15632   mirror: always
15634 # Sending each remote accumulation immediately places undue strain on the IPC
15635 # subsystem. Batch the remote accumulations for a period of time before sending
15636 # them all at once. This value was chosen as a balance between data timeliness
15637 # and performance (see bug 1218576).
15638 - name: toolkit.telemetry.ipcBatchTimeout
15639   type: uint32_t
15640   value: 2000
15641   mirror: always
15643 - name: toolkit.telemetry.testing.overrideProductsCheck
15644   type: RelaxedAtomicBool
15645   value: false
15646   mirror: always
15648 #---------------------------------------------------------------------------
15649 # Prefs starting with "ui."
15650 #---------------------------------------------------------------------------
15652 - name: ui.key.generalAccessKey
15653   type: int32_t
15654   value: -1
15655   mirror: always
15657 # Use 17 for Ctrl, 18 for Alt, 91 or 224 for Meta, 0 for none.
15658 - name: ui.key.accelKey
15659   type: uint32_t
15660 #ifdef XP_MACOSX
15661   value: 224
15662 #else
15663   value: 17
15664 #endif
15665   mirror: always
15667 # See above for the key codes to use.
15668 - name: ui.key.menuAccessKey
15669   type: uint32_t
15670 #ifdef XP_MACOSX
15671   value: 0
15672 #else
15673   value: 18
15674 #endif
15675   mirror: always
15677 # Only used if generalAccessKey is -1.
15678 - name: ui.key.chromeAccess
15679   type: int32_t
15680 #ifdef XP_MACOSX
15681   # 0 = disabled, 1 = Shift, 2 = Ctrl, 4 = Alt, 3 =  ctrl+shift, 8 = Meta
15682   value: 2
15683 #else
15684   # 0 = disabled, 1 = Shift, 2 = Ctrl, 4 = Alt, 5 =  Alt+Shift, 8 = Win
15685   value: 4
15686 #endif
15687   mirror: always
15689 # Only used if generalAccessKey is -1.
15690 - name: ui.key.contentAccess
15691   type: int32_t
15692 #ifdef XP_MACOSX
15693   # 0 = disabled, 1 = Shift, 2 = Ctrl, 4 = Alt, 3 = ctrl+shift, 8 = Meta
15694   value: 6
15695 #else
15696   # 0 = disabled, 1 = Shift, 2 = Ctrl, 4 = Alt, 5 =  Alt+Shift, 8 = Win
15697   value: 5
15698 #endif
15699   mirror: always
15701 #ifdef XP_WIN
15702 - name: ui.key.layout.load_when_first_needed
15703   type: bool
15704   value: @IS_EARLY_BETA_OR_EARLIER@
15705   mirror: always
15706 #endif
15708 # Does the access key by itself focus the menu bar?
15709 - name: ui.key.menuAccessKeyFocuses
15710   type: bool
15711 #if defined(XP_WIN) || defined(MOZ_WIDGET_GTK)
15712   # On Windows and Linux, we now default to showing the menu bar only when alt
15713   # is pressed.
15714   value: true
15715 #else
15716   value: false
15717 #endif
15718   mirror: always
15720 # Whether native key bindings in the environment or builtin shortcut key
15721 # definitions in Gecko are used first in <input> and <textarea>
15722 - name: ui.key.textcontrol.prefer_native_key_bindings_over_builtin_shortcut_key_definitions
15723   type: bool
15724   value: true
15725   mirror: always
15727 #ifdef MOZ_WIDGET_GTK
15728 # Only GtkTextView (native multiline text viewer/editor) supports "select-all"
15729 # signal so that we cannot know "select-all" key bindings only with GtkEntry.
15730 # When this pref is set to true, if a key combination does not cause any
15731 # signals in GtkEntry, try to check the key combination is mapped to
15732 # "select-all" in GtkTextView or not.  If it's mapped to other commands, they
15733 # are just ignored.
15734 - name: ui.key.use_select_all_in_single_line_editor
15735   type: bool
15736   value: true
15737   mirror: always
15738 #endif
15740 # Duration of timeout of incremental search in menus (ms).  0 means infinite.
15741 - name: ui.menu.incremental_search.timeout
15742   type: uint32_t
15743   value: 1000
15744   mirror: always
15746 # If true, all popups won't hide automatically on blur
15747 - name: ui.popup.disable_autohide
15748   type: RelaxedAtomicBool
15749   value: false
15750   mirror: always
15752 # Negate scroll, true will make the mouse scroll wheel move the screen the
15753 # same direction as with most desktops or laptops.
15754 - name: ui.scrolling.negate_wheel_scroll
15755   type: RelaxedAtomicBool
15756   value: @IS_ANDROID@
15757   mirror: always
15759 # Delay in milliseconds for tooltips
15760 - name: ui.tooltip.delay_ms
15761   type: uint32_t
15762   value: 500
15763   mirror: always
15765 # If the user puts a finger down on an element and we think the user might be
15766 # executing a pan gesture, how long do we wait before tentatively deciding the
15767 # gesture is actually a tap and activating the target element?
15768 - name: ui.touch_activation.delay_ms
15769   type: int32_t
15770   value: 100
15771   mirror: always
15773 # If the user has clicked an element, how long do we keep the :active state
15774 # before it is cleared.
15775 - name: ui.touch_activation.duration_ms
15776   type: int32_t
15777   value: 50
15778   mirror: always
15780 # Prevent system colors from being exposed to CSS or canvas.
15781 - name: ui.use_standins_for_native_colors
15782   type: RelaxedAtomicBool
15783   value: false
15784   mirror: always
15786 # Whether context menus should only appear on mouseup instead of mousedown,
15787 # on OSes where they normally appear on mousedown (macOS, *nix).
15788 # Note: ignored on Windows (context menus always use mouseup).
15789 - name: ui.context_menus.after_mouseup
15790   type: bool
15791   value: false
15792   mirror: always
15794 # Whether click-hold context menus are enabled.
15795 - name: ui.click_hold_context_menus
15796   type: RelaxedAtomicBool
15797   value: false
15798   mirror: always
15800 # How long to wait for a drag gesture before displaying click-hold context menu,
15801 # in milliseconds.
15802 - name: ui.click_hold_context_menus.delay
15803   type: RelaxedAtomicInt32
15804   value: 500
15805   mirror: always
15807 # When enabled, the touch.radius and mouse.radius prefs allow events to be
15808 # dispatched to nearby elements that are sensitive to the event. See
15809 # PositionedEventTargeting.cpp. The 'mm' prefs define a rectangle around the
15810 # nominal event target point within which we will search for suitable elements.
15811 # 'visitedWeight' is a percentage weight; a value > 100 makes a visited link be
15812 # treated as further away from the event target than it really is, while a
15813 # value < 100 makes a visited link be treated as closer to the event target
15814 # than it really is.
15816 - name: ui.touch.radius.enabled
15817   type: bool
15818   value: @IS_ANDROID@
15819   mirror: always
15821 - name: ui.touch.radius.topmm
15822   type: uint32_t
15823 #ifdef ANDROID
15824   value: 2
15825 #else
15826   value: 12
15827 #endif
15828   mirror: always
15830 - name: ui.touch.radius.rightmm
15831   type: uint32_t
15832 #ifdef ANDROID
15833   value: 3
15834 #else
15835   value: 8
15836 #endif
15837   mirror: always
15839 - name: ui.touch.radius.bottommm
15840   type: uint32_t
15841 #ifdef ANDROID
15842   value: 2
15843 #else
15844   value: 4
15845 #endif
15846   mirror: always
15848 - name: ui.touch.radius.leftmm
15849   type: uint32_t
15850 #ifdef ANDROID
15851   value: 3
15852 #else
15853   value: 8
15854 #endif
15855   mirror: always
15857 - name: ui.touch.radius.visitedWeight
15858   type: uint32_t
15859   value: 120
15860   mirror: always
15862 - name: ui.mouse.radius.enabled
15863   type: bool
15864   value: @IS_ANDROID@
15865   mirror: always
15867 - name: ui.mouse.radius.topmm
15868   type: uint32_t
15869 #ifdef ANDROID
15870   value: 2
15871 #else
15872   value: 12
15873 #endif
15874   mirror: always
15876 - name: ui.mouse.radius.rightmm
15877   type: uint32_t
15878 #ifdef ANDROID
15879   value: 3
15880 #else
15881   value: 8
15882 #endif
15883   mirror: always
15885 - name: ui.mouse.radius.bottommm
15886   type: uint32_t
15887 #ifdef ANDROID
15888   value: 2
15889 #else
15890   value: 4
15891 #endif
15892   mirror: always
15894 - name: ui.mouse.radius.leftmm
15895   type: uint32_t
15896 #ifdef ANDROID
15897   value: 3
15898 #else
15899   value: 8
15900 #endif
15901   mirror: always
15903 - name: ui.mouse.radius.visitedWeight
15904   type: uint32_t
15905   value: 120
15906   mirror: always
15908 - name: ui.mouse.radius.reposition
15909   type: bool
15910   value: @IS_ANDROID@
15911   mirror: always
15913 # When true, the ui.mouse.radius.* prefs will only affect simulated mouse
15914 # events generated by touch input. When false, the prefs will be used for all
15915 # mouse events.
15916 - name: ui.mouse.radius.inputSource.touchOnly
15917   type: bool
15918   value: true
15919   mirror: always
15921 # When true, selection is not collapsed at the right click point if there is a
15922 # non-collapsed selection.
15923 - name: ui.mouse.right_click.collapse_selection.stop_if_non_collapsed_selection
15924   type: bool
15925   value: true
15926   mirror: always
15928 # When true, selection is not collapsed at the right click point if the clicked
15929 # node is not editable.
15930 - name: ui.mouse.right_click.collapse_selection.stop_if_non_editable_node
15931   type: bool
15932   value: false
15933   mirror: always
15935 # When true, the caret is not moved to the right click point in focused editable
15936 # content.
15937 - name: ui.mouse.right_click.move_caret.stop_if_in_focused_editable_node
15938   type: bool
15939   value: false
15940   mirror: always
15942 #---------------------------------------------------------------------------
15943 # Prefs starting with "urlclassifier."
15944 #---------------------------------------------------------------------------
15946 # Update server response timeout for Safe Browsing.
15947 - name: urlclassifier.update.response_timeout_ms
15948   type: uint32_t
15949   value: 30000
15950   mirror: always
15952 # Download update timeout for Safe Browsing.
15953 - name: urlclassifier.update.timeout_ms
15954   type: uint32_t
15955   value: 90000
15956   mirror: always
15958 #---------------------------------------------------------------------------
15959 # Prefs starting with "view_source."
15960 #---------------------------------------------------------------------------
15962 - name: view_source.editor.external
15963   type: bool
15964   value: false
15965   mirror: always
15967 - name: view_source.wrap_long_lines
15968   type: bool
15969   value: @IS_ANDROID@
15970   mirror: always
15972 - name: view_source.syntax_highlight
15973   type: bool
15974   value: true
15975   mirror: always
15977 - name: view_source.tab_size
15978   type: int32_t
15979   value: 4
15980   mirror: always
15982 #---------------------------------------------------------------------------
15983 # Prefs starting with "webgl." (for pref access from Worker threads)
15984 #---------------------------------------------------------------------------
15986 - name: webgl.1.allow-core-profiles
15987   type: RelaxedAtomicBool
15988 #ifdef XP_MACOSX
15989   value: true
15990 #else
15991   value: false
15992 #endif
15993   mirror: always
15995 - name: webgl.angle.force-d3d11
15996   type: RelaxedAtomicBool
15997   value: false
15998   mirror: always
16000 - name: webgl.angle.try-d3d11
16001   type: RelaxedAtomicBool
16002 #ifdef XP_WIN
16003   value: true
16004 #else
16005   value: false
16006 #endif
16007   mirror: always
16009 - name: webgl.angle.force-warp
16010   type: RelaxedAtomicBool
16011   value: false
16012   mirror: always
16014 - name: webgl.auto-flush
16015   type: RelaxedAtomicBool
16016   value: true
16017   mirror: always
16019 - name: webgl.auto-flush.gl
16020   type: RelaxedAtomicBool
16021   value: false
16022   mirror: always
16024 - name: webgl.can-lose-context-in-foreground
16025   type: RelaxedAtomicBool
16026   value: true
16027   mirror: always
16029 - name: webgl.cgl.multithreaded
16030   type: RelaxedAtomicBool
16031   value: true
16032   mirror: always
16034 - name: webgl.colorspaces.prototype
16035   type: RelaxedAtomicBool
16036   value: false
16037   mirror: always
16039 - name: webgl.debug.incomplete-tex-color
16040   type: RelaxedAtomicUint32
16041   value: 0
16042   mirror: always
16044 - name: webgl.default-antialias
16045   type: RelaxedAtomicBool
16046   value: @IS_NOT_ANDROID@
16047   mirror: always
16049 - name: webgl.default-no-alpha
16050   type: RelaxedAtomicBool
16051   value: false
16052   mirror: always
16054 - name: webgl.disable-angle
16055   type: RelaxedAtomicBool
16056   value: false
16057   mirror: always
16059 - name: webgl.disable-wgl
16060   type: RelaxedAtomicBool
16061   value: false
16062   mirror: always
16064 - name: webgl.dxgl.enabled
16065   type: RelaxedAtomicBool
16066 #ifdef XP_WIN
16067   value: true
16068 #else
16069   value: false
16070 #endif
16071   mirror: always
16073 - name: webgl.dxgl.needs-finish
16074   type: RelaxedAtomicBool
16075   value: false
16076   mirror: always
16078 - name: webgl.disable-fail-if-major-performance-caveat
16079   type: RelaxedAtomicBool
16080   value: true
16081   mirror: always
16083 - name: webgl.disable-DOM-blit-uploads
16084   type: RelaxedAtomicBool
16085 #if defined(MOZ_AARCH64) && defined(XP_MACOSX)
16086   value: true
16087 #else
16088   value: false
16089 #endif
16090   mirror: always
16092 - name: webgl.disabled
16093   type: RelaxedAtomicBool
16094   value: false
16095   mirror: always
16097 - name: webgl.enable-debug-renderer-info
16098   type: RelaxedAtomicBool
16099   value: true
16100   mirror: always
16102 - name: webgl.enable-draft-extensions
16103   type: RelaxedAtomicBool
16104   value: false
16105   mirror: always
16107 - name: webgl.enable-privileged-extensions
16108   type: RelaxedAtomicBool
16109   value: false
16110   mirror: always
16112 - name: webgl.enable-renderer-query
16113   type: RelaxedAtomicBool
16114   value: true
16115   mirror: always
16117 - name: webgl.enable-surface-texture
16118   type: RelaxedAtomicBool
16119   value: true
16120   mirror: always
16122 - name: webgl.enable-webgl2
16123   type: RelaxedAtomicBool
16124   value: true
16125   mirror: always
16127 - name: webgl.fake-verts.max
16128   type: RelaxedAtomicUint32
16129   value: 10*1000*1000  # 10M as vec4 is count*4*4 = 160MB
16130   mirror: always
16132 # Only works on Mac for now.
16133 - name: webgl.forbid-hardware
16134   type: RelaxedAtomicBool
16135   value: false
16136   mirror: always
16138 # Only works on Mac for now.
16139 - name: webgl.forbid-software
16140   type: RelaxedAtomicBool
16141   value: true  # It's generally better to encourage fallback to e.g. canvas2d.
16142   mirror: always
16144 - name: webgl.force-enabled
16145   type: RelaxedAtomicBool
16146   value: false
16147   mirror: always
16149 - name: webgl.force-index-validation
16150   type: RelaxedAtomicInt32
16151   value: 0
16152   mirror: always
16154 - name: webgl.gl_khr_no_error
16155   type: RelaxedAtomicBool
16156 #ifdef XP_WIN
16157   value: false
16158 #elif defined(MOZ_WIDGET_GTK)
16159   # Bug 1862039 - All versions of Mesa as of Nov 2023 have issues with
16160   # GL_CONTEXT_FLAG_NO_ERROR_BIT. We should aspire to reenable it at
16161   # some point when the bugs are fixed.
16162   # See also https://gitlab.freedesktop.org/mesa/mesa/-/issues/10062
16163   value: false
16164 #else
16165   value: true
16166 #endif
16167   mirror: always
16169 - name: webgl.lose-context-on-memory-pressure
16170   type: RelaxedAtomicBool
16171   value: false
16172   mirror: always
16174 - name: webgl.max-contexts
16175   type: RelaxedAtomicUint32
16176   value: 1000
16177   mirror: always
16179 - name: webgl.max-contexts-per-principal
16180   type: RelaxedAtomicUint32
16181   value: 300
16182   mirror: always
16184 - name: webgl.max-size-per-texture-mib
16185   type: RelaxedAtomicUint32
16186   value: 1024
16187   mirror: always
16189 - name: webgl.max-vert-ids-per-draw
16190   type: RelaxedAtomicUint32
16191   value: 30*1000*1000
16192   mirror: always
16194 - name: webgl.max-warnings-per-context
16195   type: RelaxedAtomicUint32
16196   value: 32
16197   mirror: always
16199 - name: webgl.min_capability_mode
16200   type: RelaxedAtomicBool
16201   value: false
16202   mirror: always
16204 - name: webgl.msaa-force
16205   type: RelaxedAtomicBool
16206   value: false
16207   mirror: always
16209 - name: webgl.msaa-samples
16210   type: RelaxedAtomicUint32
16211   value: 4
16212   mirror: always
16214 - name: webgl.out-of-process
16215   type: RelaxedAtomicBool
16216   value: true
16217   mirror: always
16219 - name: webgl.out-of-process.worker
16220   type: RelaxedAtomicBool
16221   value: true
16222   mirror: always
16224 - name: webgl.out-of-process.force
16225   type: RelaxedAtomicBool
16226   value: false
16227   mirror: always
16229 - name: webgl.out-of-process.shmem-size
16230   type: RelaxedAtomicUint32
16231   value: 100000 # 100KB
16232   mirror: always
16234 - name: webgl.out-of-process.async-present
16235   type: RelaxedAtomicBool
16236   value: true
16237   mirror: always
16239 # Forces async present to wait for a sync, even while using remote textures.
16240 - name: webgl.out-of-process.async-present.force-sync
16241   type: RelaxedAtomicBool
16242   value: false
16243   mirror: always
16245 #if defined(MOZ_WIDGET_ANDROID)
16246 - name: webgl.out-of-process.enable-ahardwarebuffer
16247   type: bool
16248   value: false
16249   mirror: once
16250 #endif
16252 # Override the blocklist to assume that GL is threadsafe.
16253 - name: webgl.threadsafe-gl.force-enabled
16254   type: bool
16255   value: false
16256   mirror: once
16258 # Override the blocklist to assume that GL is not threadsafe.
16259 - name: webgl.threadsafe-gl.force-disabled
16260   type: bool
16261   value: false
16262   mirror: once
16264 - name: webgl.use-canvas-render-thread
16265   type: bool
16266   value: true
16267   mirror: once
16269 - name: webgl.override-unmasked-renderer
16270   type: DataMutexString
16271   value: ""
16272   mirror: always
16274 - name: webgl.override-unmasked-vendor
16275   type: DataMutexString
16276   value: ""
16277   mirror: always
16279 - name: webgl.power-preference-override
16280   type: RelaxedAtomicInt32
16281   value: 0
16282   mirror: always
16284 - name: webgl.prefer-16bpp
16285   type: RelaxedAtomicBool
16286   value: false
16287   mirror: always
16289 - name: webgl.sanitize-unmasked-renderer
16290   type: RelaxedAtomicBool
16291   value: true
16292   mirror: always
16294 - name: webgl.allow-immediate-queries
16295   type: RelaxedAtomicBool
16296   value: false
16297   mirror: always
16299 - name: webgl.allow-fb-invalidation
16300   type: RelaxedAtomicBool
16301   value: false
16302   mirror: always
16305 - name: webgl.perf.max-warnings
16306   type: RelaxedAtomicInt32
16307   value: 0
16308   mirror: always
16310 - name: webgl.perf.max-acceptable-fb-status-invals
16311   type: RelaxedAtomicInt32
16312   value: 0
16313   mirror: always
16315 - name: webgl.perf.spew-frame-allocs
16316   type: RelaxedAtomicBool
16317   value: true
16318   mirror: always
16320 #---------------------------------------------------------------------------
16321 # Prefs starting with "widget."
16322 #---------------------------------------------------------------------------
16324 # Whether the non-native theme should always use system colors. Useful mostly
16325 # for testing forced colors mode.
16326 - name: widget.non-native-theme.always-high-contrast
16327   type: RelaxedAtomicBool
16328   value: false
16329   mirror: always
16331 # The style of scrollbars to use. Here are the current options:
16333 #   0: Default platform scrollbar style.
16334 #   1: macOS scrollbars
16335 #   2: GTK scrollbars
16336 #   3: Android scrollbars
16337 #   4: Windows 10 scrollbars
16338 #   5: Windows 11 scrollbars
16340 # Note that switching to non-default scrollbars is experimental and other
16341 # scrollbar-related prefs may interfere with the experience. For example,
16342 # setting the GTK thumb size may have no effect when using non-GTK scrollbars
16343 # on GTK.
16344 - name: widget.non-native-theme.scrollbar.style
16345   type: uint32_t
16346   value: 0
16347   mirror: always
16349 # An override that allows to override the default platform size. The size in CSS
16350 # pixels at full zoom of the minimum scrollbar width.
16351 - name: widget.non-native-theme.scrollbar.size.override
16352   type: uint32_t
16353   value: 0
16354   mirror: always
16356 # Whether we should use themed values for dark scrollbars.
16357 - name: widget.non-native-theme.scrollbar.dark-themed
16358   type: RelaxedAtomicBool
16359   value: true
16360   mirror: always
16362 # Whether the active thumb color should always use the themed colors, even if
16363 # dark scrollbars are in use.
16364 - name: widget.non-native-theme.scrollbar.active-always-themed
16365   type: RelaxedAtomicBool
16366   value: true
16367   mirror: always
16369 # Whether we use the Windows CSS scrollbar sizes, or the scrollbar sizes
16370 # defined above.
16371 - name: widget.non-native-theme.win.scrollbar.use-system-size
16372   type: bool
16373   value: true
16374   mirror: always
16376 # Whether Windows 11 scrollbars are always drawn with the thinner "overlay"
16377 # scrollbar style.
16378 - name: widget.non-native-theme.win11.scrollbar.force-overlay-style
16379   type: bool
16380   value: false
16381   mirror: always
16383 # The amount of space that the thumb should fill the scrollbar, from zero to
16384 # one.
16385 - name: widget.non-native-theme.gtk.scrollbar.thumb-size
16386   type: float
16387   value: 0.75
16388   mirror: always
16390 # The minimum size of the scroll thumb, in the scrollbar direction.
16391 - name: widget.non-native-theme.gtk.scrollbar.thumb-cross-size
16392   type: uint32_t
16393   value: 40
16394   mirror: always
16396 # Whether the thumb should be rounded for the non-native scrollbars.
16397 - name: widget.non-native-theme.gtk.scrollbar.round-thumb
16398   type: bool
16399   value: true
16400   mirror: always
16402 # Whether buttons shouldn't be suppressed for non-native scrollbars.
16403 - name: widget.non-native-theme.gtk.scrollbar.allow-buttons
16404   type: bool
16405   value: false
16406   mirror: always
16408 # Whether we should use the default accent color or the theme-provided one for
16409 # content (e.g. for form controls and CSS system colors).
16411 # Turned off on Windows, for now (we always use the default blue-ish
16412 # accent-color there). We might want to turn this on there, though it's worth
16413 # thinking on what the behavior should be for grey-ish accent colors (which are
16414 # a thing on Windows and can cause confusion with things like disabled form
16415 # controls). Maybe it's just fine.
16416 - name: widget.non-native-theme.use-theme-accent
16417   type: RelaxedAtomicBool
16418 #if defined(XP_WIN) && !defined(MOZ_THUNDERBIRD)
16419   value: false
16420 #else
16421   value: true
16422 #endif
16423   mirror: always
16425 # Preference to disable dark scrollbar implementation.
16426 # This is mainly for testing because dark scrollbars have to be semi-
16427 # transparent, but many reftests expect scrollbars to look identical
16428 # among different backgrounds.
16429 # However, some users may want to disable this as well.
16430 - name: widget.disable-dark-scrollbar
16431   type: bool
16432   value: false
16433   mirror: always
16435 - name: widget.disable_file_pickers
16436   type: RelaxedAtomicBool
16437   value: false
16438   mirror: always
16440 - name: widget.window-transforms.disabled
16441   type: RelaxedAtomicBool
16442   value: false
16443   mirror: always
16445 #ifdef XP_MACOSX
16447 # Whether to shift by the menubar height on fullscreen mode.
16448 # 0: never
16449 # 1: always
16450 # 2: auto (tries to detect when it is needed)
16451 - name: widget.macos.shift-by-menubar-on-fullscreen
16452   type: RelaxedAtomicUint32
16453   value: 2
16454   mirror: always
16456 - name: widget.macos.native-context-menus
16457   type: RelaxedAtomicBool
16458   value: true
16459   mirror: always
16461 - name: widget.macos.titlebar-blend-mode.behind-window
16462   type: RelaxedAtomicBool
16463   value: false
16464   mirror: always
16465 #endif
16467 # Whether native GTK global menubar support is enabled.
16468 # Disabled because there are some minor bugs and it needs deeper integration
16469 # with the front-end.
16470 - name: widget.gtk.global-menu.enabled
16471   type: RelaxedAtomicBool
16472   value: false
16473   mirror: always
16475 # Whether GTK global menubar support is enabled using wayland's experimental
16476 # dbus_annotation protocol:
16477 # https://gitlab.freedesktop.org/wayland/wayland-protocols/-/merge_requests/52
16478 # Disabled until it has a final shape and it is available in compositors.
16479 - name: widget.gtk.global-menu.wayland.enabled
16480   type: RelaxedAtomicBool
16481   value: false
16482   mirror: always
16484 # Whether native GTK context menus are enabled.
16485 # Disabled because at the very least there's missing custom icon support.
16486 - name: widget.gtk.native-context-menus
16487   type: RelaxedAtomicBool
16488   value: false
16489   mirror: always
16491 # Whether we use overlay scrollbars on GTK.
16492 - name: widget.gtk.overlay-scrollbars.enabled
16493   type: RelaxedAtomicBool
16494   value: true
16495   mirror: always
16497 # Whether we hide the pointer while typing on Linux
16498 - name: widget.gtk.hide-pointer-while-typing.enabled
16499   type: RelaxedAtomicBool
16500   value: true
16501   mirror: always
16503 # Whether we honor the scrollbar colors from the gtk theme.
16504 - name: widget.gtk.theme-scrollbar-colors.enabled
16505   type: bool
16506   value: true
16507   mirror: always
16509 # Whether libadwaita colors are used rather than the default ones.
16510 - name: widget.gtk.libadwaita-colors.enabled
16511   type: bool
16512   value: true
16513   mirror: always
16515 # Whether to use gtk titlebar actions for middle click instead of Firefox
16516 # build in one
16517 - name: widget.gtk.titlebar-action-middle-click-enabled
16518   type: bool
16519   value: false
16520   mirror: always
16522 # Whether to ignore middle click events on widget level.
16523 - name: widget.gtk.middle-click-enabled
16524   type: bool
16525   value: true
16526   mirror: always
16528 # Whether we enable rounded bottom corners on GTK by default.
16530 # The implementation is a bit hacky (see details in bug 1850827) so behind a
16531 # pref for emergency purposes.
16532 - name: widget.gtk.rounded-bottom-corners.enabled
16533   type: bool
16534   value: false
16535   mirror: always
16536   rust: true
16538 # Whether non-native titlebar buttons are enabled for lightweight themes.
16539 - name: widget.gtk.non-native-titlebar-buttons.enabled
16540   type: RelaxedAtomicBool
16541   value: true
16542   mirror: always
16544 # Whether selection colors for the non-system theme get passed from the system
16545 # GTK theme.
16546 - name: widget.gtk.alt-theme.selection
16547   type: bool
16548   value: true
16549   mirror: always
16551 # Whether form control accent colors for the non-system theme get passed from
16552 # the system GTK theme.
16553 - name: widget.gtk.alt-theme.accent
16554   type: bool
16555   value: true
16556   mirror: always
16558 # Whether the scrollbar thumb active color from the non-system theme gets
16559 # passed from the system GTK theme.
16560 - name: widget.gtk.alt-theme.scrollbar_active
16561   type: bool
16562   value: true
16563   mirror: always
16565 # Whether we should try to grab the pointer on popups.
16566 #  0: Never
16567 #  1: Always
16568 #  2: Auto (depending on the system)
16569 - name: widget.gtk.grab-pointer
16570   type: int32_t
16571   value: 2
16572   mirror: always
16574 # Whether we should try ignore bogus leave-notify events from the window
16575 # manager.
16576 #  0: Never
16577 #  1: Always
16578 #  2: Auto (depending on the system)
16579 - name: widget.gtk.ignore-bogus-leave-notify
16580   type: int32_t
16581   value: 2
16582   mirror: always
16584 # Whether to use gtk legacy cursor API.
16585 - name: widget.gtk.legacy-cursors.enabled
16586   type: bool
16587   value: false
16588   mirror: always
16590 # Whether to use gtk high contrast themes to disable content styling like on
16591 # windows high contrast mode.
16592 - name: widget.content.gtk-high-contrast.enabled
16593   type: bool
16594   value: true
16595   mirror: always
16597 #ifdef MOZ_WAYLAND
16598 - name: widget.wayland.fractional-scale.enabled
16599   type: bool
16600   value: false
16601   mirror: once
16603 # Use opaque region for MozContainer wl_surface
16604 - name: widget.wayland.opaque-region.enabled
16605   type: bool
16606   value: true
16607   mirror: once
16609 # Use frame callback based vsync
16610 - name: widget.wayland.vsync.enabled
16611   type: bool
16612   value: true
16613   mirror: once
16615 # Whether to keep firing vsync at layout.throttled_frame_rate after we've been
16616 # occluded.
16617 - name: widget.wayland.vsync.keep-firing-at-idle
16618   type: bool
16619   value: false
16620   mirror: always
16621 #endif
16623 #ifdef MOZ_WIDGET_GTK
16624 # Whether to use DMABuf backend.
16625 - name: widget.dmabuf.enabled
16626   type: bool
16627   value: true
16628   mirror: once
16630 # Whether to override the DMABuf blocklist.
16631 - name: widget.dmabuf.force-enabled
16632   type: bool
16633   value: false
16634   mirror: once
16636 #ifdef NIGHTLY_BUILD
16637 # Keep those pref hidden on non-nightly builds to avoid people accidentally
16638 # turning it on.
16640 # Use DMABuf for content textures.
16641 # For testing purposes only.
16642 - name: widget.dmabuf-textures.enabled
16643   type: RelaxedAtomicBool
16644   value: false
16645   mirror: always
16646 #endif
16648 # Use DMABuf backend for WebGL.
16649 - name: widget.dmabuf-webgl.enabled
16650   type: RelaxedAtomicBool
16651   value: true
16652   mirror: always
16654 # Use gdk_window_move_to_rect to move Wayland popups when available.
16655 - name: widget.wayland.use-move-to-rect
16656   type: bool
16657   value: true
16658   mirror: once
16660 # The time we should spend on a DBUS call to the FileManager1 interface before
16661 # giving up and trying an alternative method.
16663 # -1 for the default system timeout, INT_MAX for "infinite time".
16665 # This happens right now on the main thread so 1 second should be enough, we
16666 # should consider moving it to a background task and just use the default
16667 # timeout.
16668 - name: widget.gtk.file-manager-show-items-timeout-ms
16669   type: int32_t
16670   value: 1000
16671   mirror: always
16673 # The timeout we should spend on a DBUS call to the Settings proxy before
16674 # giving up.
16676 # -1 for the default system timeout, INT_MAX for "infinite time".
16678 # This runs just once, but during startup, so make sure it doesn't take too
16679 # long. Three seconds should be way more than enough, and if we don't get the
16680 # reply on time then the only potential issue is that we use a light instead of
16681 # dark interface or vice versa.
16682 - name: widget.gtk.settings-portal-timeout-ms
16683   type: int32_t
16684   value: 3000
16685   mirror: always
16687 # Whether to use gtk portal for the file picker.
16688 #  - 0: never
16689 #  - 1: always
16690 #  - 2: auto (true for flatpak or GTK_USE_PORTAL=1, false otherwise)
16691 - name: widget.use-xdg-desktop-portal.file-picker
16692   type: int32_t
16693   value: 2
16694   mirror: always
16696 # Whether to use gtk portal for the mime handler.
16697 #  - 0: never
16698 #  - 1: always
16699 #  - 2: auto (for now only true for flatpak, see bug 1516290)
16700 - name: widget.use-xdg-desktop-portal.mime-handler
16701   type: int32_t
16702   value: 2
16703   mirror: always
16705 # Whether to try to use XDG portal for settings / look-and-feel information.
16706 # https://flatpak.github.io/xdg-desktop-portal/#gdbus-org.freedesktop.portal.Settings
16707 #  - 0: never
16708 #  - 1: always
16709 #  - 2: auto
16710 - name: widget.use-xdg-desktop-portal.settings
16711   type: int32_t
16712   value: 2
16713   mirror: always
16715 # Whether to use XDG portal for geolocation.
16716 # https://flatpak.github.io/xdg-desktop-portal/#gdbus-org.freedesktop.portal.Location
16717 #  - 0: never
16718 #  - 1: always
16719 #  - 2: auto
16720 - name: widget.use-xdg-desktop-portal.location
16721   type: int32_t
16722   value: 2
16723   mirror: always
16724 # Whether to use XDG portal for opening to a file.
16725 # https://flatpak.github.io/xdg-desktop-portal/#gdbus-org.freedesktop.portal.OpenURI
16726 #  - 0: never
16727 #  - 1: always
16728 #  - 2: auto (true for flatpak or GTK_USE_PORTAL=1, false otherwise)
16729 - name: widget.use-xdg-desktop-portal.open-uri
16730   type: int32_t
16731   value: 2
16732   mirror: always
16733 #endif
16735 #ifdef XP_WIN
16736 # WindowsUIUtils::Share to wait for user action on Windows share dialog
16737 # `true` means the promise resolves when user completes or cancels the share
16738 # action. This can be unsafe since selecting copy action fires no DataPackage
16739 # event as of 21H1.
16740 # `false` means the promise resolves when the share data is passed to
16741 # DataPackage.
16742 # This affects the behavior of `navigator.share()`.
16743 - name: widget.windows.share.wait_action.enabled
16744   type: bool
16745   value: false
16746   mirror: always
16748 - name: widget.windows.window_occlusion_tracking.enabled
16749   type: bool
16750   value: true
16751   mirror: always
16753 # Whether overlay scrollbars respect the system settings.
16754 # Note that these can be overridden by the ui.useOverlayScrollbars pref.
16755 - name: widget.windows.overlay-scrollbars.enabled
16756   type: bool
16757   value: true
16758   mirror: always
16760 # Whether we allow accessing the UWP system color pallete.
16761 - name: widget.windows.uwp-system-colors.enabled
16762   type: bool
16763   value: true
16764   mirror: always
16766 # Whether we use the accent color for highlight as some other UWP apps do.
16768 # false for now since it can cause some contrast-with-background issues
16769 # specially with grey accents, see bug 1776588.
16770 - name: widget.windows.uwp-system-colors.highlight-accent
16771   type: bool
16772   value: false
16773   mirror: always
16775 - name: widget.windows.window_occlusion_tracking_display_state.enabled
16776   type: bool
16777   value: false
16778   mirror: always
16780 - name: widget.windows.window_occlusion_tracking_session_lock.enabled
16781   type: bool
16782   value: true
16783   mirror: always
16785 # Whether to give explorer.exe a delated nudge to recalculate the fullscreenness
16786 # of a window after maximizing it.
16787 - name: widget.windows.fullscreen_remind_taskbar
16788   type: RelaxedAtomicBool
16789   value: true
16790   mirror: always
16792 # Whether to open the Windows file and folder pickers "remotely" (in a utility
16793 # process) or "locally" (in the main process).
16795 # Valid values:
16796 #  *  0: auto (possibly release-channel-dependent)
16797 #  *  1: remotely, falling back to locally
16798 #  *  2: remotely, no fallback
16799 #  * -1: locally, no fallback
16800 - name: widget.windows.utility_process_file_picker
16801   type: RelaxedAtomicInt32
16802   value: 0
16803   mirror: always
16805 # The number of messages of each type to keep for display in
16806 # about:windows-messages
16807 - name: widget.windows.messages_to_log
16808   type: RelaxedAtomicUint32
16809   value: 6
16810   mirror: always
16812 # Whether to flush the Ole clipboard synchronously.
16813 # Possible values are:
16814 #  * 0: never
16815 #  * 1: always
16816 #  * 2 (or others): when needed
16817 - name: widget.windows.sync-clipboard-flush
16818   type: uint32_t
16819   value: 2
16820   mirror: always
16822 # Whether to apply a hack (adjusting the window height by -1px and back again)
16823 # upon first entering fullscreen intended to work around a bug exhibited under
16824 # on some Windows 11 machines under some configurations. (See bug 1763981.)
16826 # Semantics:
16827 #  * 0: never
16828 #  * 1: always
16829 #  * 2: auto
16830 - name: widget.windows.apply-dwm-resize-hack
16831   type: RelaxedAtomicInt32
16832   value: 2
16833   mirror: always
16834 #endif
16836 # Whether to disable SwipeTracker (e.g. swipe-to-nav).
16837 - name: widget.disable-swipe-tracker
16838   type: bool
16839   value: false
16840   mirror: always
16842 # Various metrics to control SwipeTracker.
16843 - name: widget.swipe.velocity-twitch-tolerance
16844   type: float
16845   value: 0.0000001f
16846   mirror: always
16848 - name: widget.swipe.success-velocity-contribution
16849   type: float
16850   value: 0.05f
16851   mirror: always
16853 # When using pixel deltas for pan input, how many pixels do we consider a whole
16854 # swipe?
16856 # The values for this pref are derived from trial and error in an effort to
16857 # match the existing behavior on the respective platforms.
16858 - name: widget.swipe.pixel-size
16859   type: float
16860 #if defined(XP_MACOSX)
16861   value: 550.0f
16862 #else
16863   value: 1100.0f
16864 #endif
16865   mirror: always
16867 # When using page deltas for pan input, how many pages do we consider a whole
16868 # swipe navigation?
16870 # This is only relevant for GTK which is as of right now the only platform
16871 # which supports page-based pan gestures.
16872 - name: widget.swipe.page-size
16873   type: float
16874   value: 40.0f
16875   mirror: always
16877 - name: widget.transparent-windows
16878   type: bool
16879   value: true
16880   mirror: once
16882 # Whether the clipboard cached are used while getting system clipboard data.
16883 - name: widget.clipboard.use-cached-data.enabled
16884   type: bool
16885 #if defined(XP_MACOSX)
16886   value: true
16887 #else
16888   value: false
16889 #endif
16890   mirror: always
16892 # Whether to render in to a child SurfaceControl rather than directly into the SurfaceView
16893 - name: widget.android.use-surfacecontrol
16894   type: bool
16895   value: false
16896   mirror: once
16898 #ifdef ANDROID
16899 # A threshold value for double click by mouse.
16900 - name: widget.double-click.threshold
16901   type: RelaxedAtomicInt32
16902   value: 4
16903   mirror: always
16905 # A timeout value for double click by mouse.
16906 - name: widget.double-click.timeout
16907   type: RelaxedAtomicInt32
16908   value: 500
16909   mirror: always
16911 # A min time value for double click by mouse.
16912 - name: widget.double-click.min
16913   type: RelaxedAtomicInt32
16914   value: 40
16915   mirror: always
16916 #endif
16918 #---------------------------------------------------------------------------
16919 # Prefs starting with "zoom."
16920 #---------------------------------------------------------------------------
16922 - name: zoom.maxPercent
16923   type: uint32_t
16924 #ifdef ANDROID
16925   value: 400
16926 #else
16927   value: 500
16928 #endif
16929   mirror: always
16931 - name: zoom.minPercent
16932   type: uint32_t
16933 #ifdef ANDROID
16934   value: 20
16935 #else
16936   value: 30
16937 #endif
16938   mirror: always
16940 #---------------------------------------------------------------------------
16941 # End of prefs
16942 #---------------------------------------------------------------------------