Backed out 4 changesets (bug 1356686) for causing build bustages @ netwerk/protocol...
[gecko.git] / modules / libpref / init / StaticPrefList.yaml
blob43f8b1ea3ceeb623dcf031f23030e8008581acee
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 #ifdef ANDROID
176 #define IS_ANDROID true
177 #define IS_NOT_ANDROID false
178 #else
179 #define IS_ANDROID false
180 #define IS_NOT_ANDROID true
181 #endif
183 #ifdef XP_WIN
184 #define IS_XP_WIN true
185 #define IS_NOT_XP_WIN false
186 #else
187 #define IS_XP_WIN false
188 #define IS_NOT_XP_WIN true
189 #endif
191 #ifdef XP_MACOSX
192 #define IS_XP_MACOSX true
193 #define IS_NOT_XP_MACOSX false
194 #else
195 #define IS_XP_MACOSX false
196 #define IS_NOT_XP_MACOSX true
197 #endif
199 #---------------------------------------------------------------------------
200 # Prefs starting with "accessibility."
201 #---------------------------------------------------------------------------
203 - name: accessibility.accesskeycausesactivation
204   type: bool
205   value: true
206   mirror: always
208 - name: accessibility.monoaudio.enable
209   type: RelaxedAtomicBool
210   value: false
211   mirror: always
213 - name: accessibility.browsewithcaret
214   type: RelaxedAtomicBool
215   value: false
216   mirror: always
218 - name: accessibility.AOM.enabled
219   type: bool
220   value: false
221   mirror: always
223 - name: accessibility.ARIAElementReflection.enabled
224   type: bool
225   value: @IS_NIGHTLY_BUILD@
226   mirror: always
228 # Whether form controls and images should be focusable with mouse, in content
229 # documents.
231 # This matches historical macOS / Safari behavior.
233 #  * 0: never
234 #  * 1: always
235 #  * 2: on content documents
236 - name: accessibility.mouse_focuses_formcontrol
237   type: int32_t
238 #ifdef XP_MACOSX
239   value: 2
240 #else
241   value: 1
242 #endif
243   mirror: always
245 # Whether to enable support for the UI Automation API on Windows.
246 - name: accessibility.uia.enable
247   type: bool
248   value: false
249   mirror: always
251 # Whether to avoid accessibility activation on Windows shortly after clipboard
252 # copy.
254 # Possible values are:
255 #  * 0: never
256 #  * 1: always
257 #  * 2 (or others): when needed
258 - name: accessibility.windows.suppress-after-clipboard-copy
259   type: uint32_t
260   value: 2
261   mirror: always
263 # Whether to avoid accessibility activation on Windows shortly after max button
264 # hit-test for the "snap layout" feature.
266 # Possible values are:
267 #  * 0: never
268 #  * 1: always
269 #  * 2 (or others): when needed
270 - name: accessibility.windows.suppress-for-snap-layout
271   type: uint32_t
272   value: 2
273   mirror: always
275 #---------------------------------------------------------------------------
276 # Prefs starting with "alerts."
277 #---------------------------------------------------------------------------
279 # Whether to use platform-specific backends for showing desktop notifications.
280 # If no such backend is available, or if the pref is false, then XUL
281 # notifications are used.
282 - name: alerts.useSystemBackend
283   type: bool
284   value: true
285   mirror: always
287 #if defined(XP_WIN)
288  # On Windows, a COM Surrogate notification server receives notification events
289  # and can relaunch the application after it has been closed.
290 - name: alerts.useSystemBackend.windows.notificationserver.enabled
291   type: bool
292   value: true
293   mirror: never
294 #endif
296 #ifdef ANDROID
297   #---------------------------------------------------------------------------
298   # Prefs starting with "android."
299   #---------------------------------------------------------------------------
301   # On Android, we want an opaque background to be visible under the page,
302   # so layout should not force a default background.
303 -   name: android.widget_paints_background
304     type: RelaxedAtomicBool
305     value: true
306     mirror: always
308 -   name: android.touch_resampling.enabled
309     type: RelaxedAtomicBool
310     value: true
311     mirror: always
313 #endif
315 #---------------------------------------------------------------------------
316 # Prefs starting with "apz."
317 # The apz prefs are explained in AsyncPanZoomController.cpp
318 #---------------------------------------------------------------------------
320 # amount we zoom in for a double tap gesture if we couldn't find any content
321 # based rect to zoom to
322 - name: apz.doubletapzoom.defaultzoomin
323   type: AtomicFloat
324   value: 1.2f
325   mirror: always
327 - name: apz.scrollbarbuttonrepeat.enabled
328   type: RelaxedAtomicBool
329   value: true
330   mirror: always
332 # After a user has executed a pan gesture, we may receive momentum phase pan
333 # gestures from the OS. This specifies how long we should wait following the
334 # pan end gesture for possible momentum phase pan gestures before sending the
335 # TransformEnd notification.
336 - name: apz.scrollend-event.content.delay_ms
337   type: RelaxedAtomicInt32
338   value: 100
339   mirror: always
341 - name: apz.wr.activate_all_scroll_frames
342   type: RelaxedAtomicBool
343   value: false
344   mirror: always
346 - name: apz.wr.activate_all_scroll_frames_when_fission
347   type: RelaxedAtomicBool
348   value: true
349   mirror: always
351 - name: apz.prefer_jank_minimal_displayports
352   type: RelaxedAtomicBool
353   value: true
354   mirror: always
356 - name: apz.allow_double_tap_zooming
357   type: RelaxedAtomicBool
358   value: true
359   mirror: always
361 - name: apz.mac.enable_double_tap_zoom_touchpad_gesture
362   type: RelaxedAtomicBool
363   value: true
364   mirror: always
366 - name: apz.allow_immediate_handoff
367   type: RelaxedAtomicBool
368   value: false
369   mirror: always
371 - name: apz.allow_zooming
372   type: RelaxedAtomicBool
373   value: true
374   mirror: always
376 - name: apz.max_zoom
377   type: AtomicFloat
378   value: 10.0f
379   mirror: always
381 - name: apz.min_zoom
382   type: AtomicFloat
383   value: 0.25f
384   mirror: always
386 - name: apz.allow_zooming_out
387   type: RelaxedAtomicBool
388   value: false
389   mirror: always
391 - name: apz.android.chrome_fling_physics.friction
392   type: AtomicFloat
393   value: 0.015f
394   mirror: always
396 - name: apz.android.chrome_fling_physics.inflexion
397   type: AtomicFloat
398   value: 0.35f
399   mirror: always
401 - name: apz.android.chrome_fling_physics.stop_threshold
402   type: AtomicFloat
403   value: 0.1f
404   mirror: always
406 - name: apz.autoscroll.enabled
407   type: RelaxedAtomicBool
408   value: true
409   mirror: always
411 - name: apz.axis_lock.breakout_angle
412   type: AtomicFloat
413   value: float(M_PI / 8.0)    # 22.5 degrees
414   mirror: always
415   include: <cmath>
417 - name: apz.axis_lock.breakout_threshold
418   type: AtomicFloat
419   value: 1.0f / 32.0f
420   mirror: always
422 - name: apz.axis_lock.direct_pan_angle
423   type: AtomicFloat
424   value: float(M_PI / 3.0)    # 60 degrees
425   mirror: always
426   include: <cmath>
428 - name: apz.axis_lock.lock_angle
429   type: AtomicFloat
430   value: float(M_PI / 6.0)    # 30 degrees
431   mirror: always
432   include: <cmath>
434 # Whether to lock touch scrolling to one axis at a time. When a new
435 # axis lock mode is added, the APZCAxisLockCompatTester GTest shoud
436 # be updated to include the lock mode value.
437 # 0 = FREE (No locking at all)
438 # 1 = STANDARD (Once locked, remain locked until scrolling ends)
439 # 2 = STICKY (Allow lock to be broken, with hysteresis)
440 # 3 = DOMINANT_AXIS (Only allow movement on one axis at a time, only
441 #     applies to touchpad scrolling)
442 - name: apz.axis_lock.mode
443   type: RelaxedAtomicInt32
444 #if defined(XP_MACOSX)
445   value: 3
446 #else
447   value: 2
448 #endif
449   mirror: always
451 - name: apz.content_response_timeout
452   type: RelaxedAtomicInt32
453   value: 400
454   mirror: always
456 - name: apz.danger_zone_x
457   type: RelaxedAtomicInt32
458   value: 50
459   mirror: always
461 - name: apz.danger_zone_y
462   type: RelaxedAtomicInt32
463   value: 100
464   mirror: always
466 - name: apz.disable_for_scroll_linked_effects
467   type: RelaxedAtomicBool
468   value: false
469   mirror: always
471 - name: apz.displayport_expiry_ms
472   type: RelaxedAtomicUint32
473   value: 15000
474   mirror: always
476 - name: apz.drag.enabled
477   type: RelaxedAtomicBool
478   value: true
479   mirror: always
481 - name: apz.drag.initial.enabled
482   type: RelaxedAtomicBool
483   value: true
484   mirror: always
486 - name: apz.drag.touch.enabled
487   type: RelaxedAtomicBool
488   value: true
489   mirror: always
491 - name: apz.enlarge_displayport_when_clipped
492   type: RelaxedAtomicBool
493   value: @IS_ANDROID@
494   mirror: always
496 # Test only.
497 - name: apz.fixed-margin-override.enabled
498   type: RelaxedAtomicBool
499   value: false
500   mirror: always
502 # Test only.
503 - name: apz.fixed-margin-override.bottom
504   type: RelaxedAtomicInt32
505   value: 0
506   mirror: always
508 # Test only.
509 - name: apz.fixed-margin-override.top
510   type: RelaxedAtomicInt32
511   value: 0
512   mirror: always
514 - name: apz.fling_accel_base_mult
515   type: AtomicFloat
516   value: 1.0f
517   mirror: always
519 - name: apz.fling_accel_supplemental_mult
520   type: AtomicFloat
521   value: 1.0f
522   mirror: always
524 - name: apz.fling_accel_min_fling_velocity
525   type: AtomicFloat
526   value: 1.5f
527   mirror: always
529 - name: apz.fling_accel_min_pan_velocity
530   type: AtomicFloat
531   value: 0.8f
532   mirror: always
534 - name: apz.fling_accel_max_pause_interval_ms
535   type: RelaxedAtomicInt32
536   value: 50
537   mirror: always
539 - name: apz.fling_curve_function_x1
540   type: float
541   value: 0.0f
542   mirror: once
544 - name: apz.fling_curve_function_x2
545   type: float
546   value: 1.0f
547   mirror: once
549 - name: apz.fling_curve_function_y1
550   type: float
551   value: 0.0f
552   mirror: once
554 - name: apz.fling_curve_function_y2
555   type: float
556   value: 1.0f
557   mirror: once
559 - name: apz.fling_curve_threshold_inches_per_ms
560   type: AtomicFloat
561   value: -1.0f
562   mirror: always
564 - name: apz.fling_friction
565   type: AtomicFloat
566   value: 0.002f
567   mirror: always
569 - name: apz.fling_min_velocity_threshold
570   type: AtomicFloat
571   value: 0.5f
572   mirror: always
574 - name: apz.fling_stop_on_tap_threshold
575   type: AtomicFloat
576   value: 0.05f
577   mirror: always
579 - name: apz.fling_stopped_threshold
580   type: AtomicFloat
581   value: 0.01f
582   mirror: always
584 - name: apz.touch_acceleration_factor_x
585   type: float
586   value: 1.0f
587   mirror: always
589 - name: apz.touch_acceleration_factor_y
590   type: float
591   value: 1.0f
592   mirror: always
594 # new scrollbar code for desktop zooming
595 - name: apz.force_disable_desktop_zooming_scrollbars
596   type: RelaxedAtomicBool
597   value: false
598   mirror: always
600 #ifdef MOZ_WIDGET_GTK
601 -   name: apz.gtk.kinetic_scroll.enabled
602     type: RelaxedAtomicBool
603     value: true
604     mirror: always
606 -   name: apz.gtk.pangesture.enabled
607     type: RelaxedAtomicBool
608     value: true
609     mirror: always
611 # Mode to use when receiving pan gesture input.
613 #  * 0: Auto mode (uses the default behavior, subject to change).
614 #  * 1: Page mode: Uses gtk deltas as a percentage of the page size to scroll. This mode matches:
616 #    https://gitlab.gnome.org/GNOME/gtk/blob/c734c7e9188b56f56c3a504abee05fa40c5475ac/gtk/gtkrange.c#L3063-3074
618 #  * 2: Pixel mode: Uses gtk deltas as a fixed pixel multiplier. This mode matches e.g. GNOME web.
620 #    https://webkit-search.igalia.com/webkit/rev/215039ef09d6bfd6e088175bfe30788d95b9705d/Source/WebKit/Shared/gtk/WebEventFactory.cpp#265-296
621 #    (multiplied then by pixelsPerLineStep which in GNOME-web is 40).
622 -   name: apz.gtk.pangesture.delta_mode
623     type: uint32_t
624     value: 0
625     mirror: always
627 -   name: apz.gtk.pangesture.page_delta_mode_multiplier
628     type: float
629     value: 1.0f
630     mirror: always
632 -   name: apz.gtk.pangesture.pixel_delta_mode_multiplier
633     type: float
634     value: 40.0f
635     mirror: always
637 -   name: apz.gtk.touchpad_pinch.enabled
638     type: RelaxedAtomicBool
639     value: true
640     mirror: always
642 -   name: apz.gtk.touchpad_pinch.three_fingers.enabled
643     type: RelaxedAtomicBool
644     value: false
645     mirror: always
646 #endif
648 - name: apz.keyboard.enabled
649   type: bool
650   value: @IS_NOT_ANDROID@
651   mirror: once
653 - name: apz.keyboard.passive-listeners
654   type: RelaxedAtomicBool
655   value: @IS_NOT_ANDROID@
656   mirror: always
658 - name: apz.max_tap_time
659   type: RelaxedAtomicInt32
660   value: 300
661   mirror: always
663 - name: apz.max_velocity_inches_per_ms
664   type: AtomicFloat
665   value: -1.0f
666   mirror: always
668 - name: apz.max_velocity_queue_size
669   type: uint32_t
670   value: 5
671   mirror: once
673 - name: apz.min_skate_speed
674   type: AtomicFloat
675   value: 1.0f
676   mirror: always
678 - name: apz.minimap.enabled
679   type: RelaxedAtomicBool
680   value: false
681   mirror: always
683 - name: apz.mvm.force-enabled
684   type: RelaxedAtomicBool
685   value: true
686   mirror: always
688 - name: apz.one_touch_pinch.enabled
689   type: RelaxedAtomicBool
690   value: @IS_ANDROID@
691   mirror: always
693 - name: apz.overscroll.enabled
694   type: RelaxedAtomicBool
695 #if defined(XP_MACOSX) || defined(XP_WIN)
696   value: true
697 #else
698   value: false
699 #endif
700   mirror: always
702 # The "test async scroll offset" (used via reftest-async-scroll
703 # or nsIDOMWindowUtils.setAsyncScrollOffset()) can be used to
704 # trigger overscroll. Used for tests only.
705 - name: apz.overscroll.test_async_scroll_offset.enabled
706   type: RelaxedAtomicBool
707   value: false
708   mirror: always
710 - name: apz.overscroll.min_pan_distance_ratio
711   type: AtomicFloat
712   value: 1.0f
713   mirror: always
715 - name: apz.overscroll.stop_distance_threshold
716   type: AtomicFloat
717   value: 5.0f
718   mirror: always
720 - name: apz.overscroll.spring_stiffness
721   type: AtomicFloat
722   value: 200
723   mirror: always
725 - name: apz.overscroll.damping
726   type: AtomicFloat
727   value: 1.1
728   mirror: always
730 - name: apz.overscroll.max_velocity
731   type: AtomicFloat
732   value: 10
733   mirror: always
735 - name: apz.paint_skipping.enabled
736   type: RelaxedAtomicBool
737   value: true
738   mirror: always
740 # Fetch displayport updates early from the message queue.
741 - name: apz.pinch_lock.mode
742   type: RelaxedAtomicInt32
743   value: 2
744   mirror: always
746 - name: apz.pinch_lock.scroll_lock_threshold
747   type: AtomicFloat
748   value: 1.0f / 16.0f   # 1/16 inches
749   mirror: always
751 - name: apz.pinch_lock.span_breakout_threshold
752   type: AtomicFloat
753   value: 1.0f / 32.0f   # 1/32 inches
754   mirror: always
756 - name: apz.pinch_lock.span_lock_threshold
757   type: AtomicFloat
758   value: 1.0f / 32.0f   # 1/32 inches
759   mirror: always
761 - name: apz.pinch_lock.buffer_max_age
762   type: int32_t
763   value: 80   # milliseconds
764   mirror: once
766 - name: apz.popups.enabled
767   type: RelaxedAtomicBool
768   value: true
769   mirror: always
771 # Whether to print the APZC tree for debugging.
772 - name: apz.printtree
773   type: RelaxedAtomicBool
774   value: false
775   mirror: always
777 - name: apz.record_checkerboarding
778   type: RelaxedAtomicBool
779   value: @IS_NIGHTLY_BUILD@
780   mirror: always
782 - name: apz.second_tap_tolerance
783   type: AtomicFloat
784   value: 0.5f
785   mirror: always
787 # If this is true, APZ fully recalculates the scroll thumb size and
788 # position in the compositor. This leads to the size and position
789 # being more accurate in scenarios such as async zooming.
790 - name: apz.scrollthumb.recalc
791   type: RelaxedAtomicBool
792   value: true
793   mirror: always
795 - name: apz.test.fails_with_native_injection
796   type: RelaxedAtomicBool
797   value: false
798   mirror: always
800 - name: apz.test.logging_enabled
801   type: RelaxedAtomicBool
802   value: false
803   mirror: always
805 - name: apz.touch_move_tolerance
806   type: AtomicFloat
807   value: 0.1f
808   mirror: always
810 - name: apz.touch_start_tolerance
811   type: AtomicFloat
812   value: 0.1f
813   mirror: always
815 - name: apz.velocity_bias
816   type: AtomicFloat
817   value: 0.0f
818   mirror: always
820 - name: apz.velocity_relevance_time_ms
821   type: RelaxedAtomicUint32
822   value: 100
823   mirror: always
825 - name: apz.windows.force_disable_direct_manipulation
826   type: RelaxedAtomicBool
827   value: false
828   mirror: always
830 - name: apz.windows.use_direct_manipulation
831   type: RelaxedAtomicBool
832   value: true
833   mirror: always
835 - name: apz.windows.check_for_pan_gesture_conversion
836   type: RelaxedAtomicBool
837   value: true
838   mirror: always
840 - name: apz.x_skate_highmem_adjust
841   type: AtomicFloat
842   value: 0.0f
843   mirror: always
845 - name: apz.x_skate_size_multiplier
846   type: AtomicFloat
847   value: 1.25f
848   mirror: always
850 - name: apz.x_stationary_size_multiplier
851   type: AtomicFloat
852   value: 1.5f
853   mirror: always
855 - name: apz.y_skate_highmem_adjust
856   type: AtomicFloat
857   value: 0.0f
858   mirror: always
860 - name: apz.y_skate_size_multiplier
861   type: AtomicFloat
862 #if defined(MOZ_WIDGET_ANDROID)
863   value: 1.5f
864 #else
865   value: 3.5f
866 #endif
867   mirror: always
869 - name: apz.y_stationary_size_multiplier
870   type: AtomicFloat
871 #if defined(MOZ_WIDGET_ANDROID)
872   value: 1.5f
873 #else
874   value: 3.5f
875 #endif
876   mirror: always
878 - name: apz.zoom_animation_duration_ms
879   type: RelaxedAtomicInt32
880 #if defined(MOZ_WIDGET_ANDROID)
881   value: 250
882 #else
883   value: 350
884 #endif
885   mirror: always
887 - name: apz.scale_repaint_delay_ms
888   type: RelaxedAtomicInt32
889   value: 500
890   mirror: always
892 # Whether to use rounded external scroll offsets.
893 - name: apz.rounded_external_scroll_offset
894   type: bool
895   value: false
896   mirror: always
898 #---------------------------------------------------------------------------
899 # Prefs starting with "beacon."
900 #---------------------------------------------------------------------------
902 # Is support for Navigator.sendBeacon enabled?
903 - name: beacon.enabled
904   type: bool
905   value: true
906   mirror: always
908 #---------------------------------------------------------------------------
909 # Prefs starting with "bidi."
910 #---------------------------------------------------------------------------
912 # Whether delete and backspace should immediately delete characters not
913 # visually adjacent to the caret, or adjust the visual position of the caret
914 # on the first keypress and delete the character on a second keypress
915 - name: bidi.edit.delete_immediately
916   type: bool
917   value: true
918   mirror: always
920 # Bidi caret movement style:
921 # 0 = logical
922 # 1 = visual
923 # 2 = visual, but logical during selection
924 - name: bidi.edit.caret_movement_style
925   type: int32_t
926 #if !defined(XP_LINUX) && defined(NIGHTLY_BUILD)
927   value: 1
928 #else
929   value: 2 # See Bug 1638240
930 #endif
931   mirror: always
933 # Bidi numeral style:
934 # 0 = nominalnumeralBidi *
935 # 1 = regularcontextnumeralBidi
936 # 2 = hindicontextnumeralBidi
937 # 3 = arabicnumeralBidi
938 # 4 = hindinumeralBidi
939 # 5 = persiancontextnumeralBidi
940 # 6 = persiannumeralBidi
941 - name: bidi.numeral
942   type: RelaxedAtomicUint32
943   value: 0
944   mirror: always
946 # Bidi text type
947 # 1 = charsettexttypeBidi *
948 # 2 = logicaltexttypeBidi
949 # 3 = visualtexttypeBidi
950 - name: bidi.texttype
951   type: RelaxedAtomicUint32
952   value: 1
953   mirror: always
955 # Bidi direction
956 # 1 = directionLTRBidi *
957 # 2 = directionRTLBidi
958 - name: bidi.direction
959   type: RelaxedAtomicUint32
960   value: 1
961   mirror: always
963 # Setting this pref to |true| forces Bidi UI menu items and keyboard shortcuts
964 # to be exposed, and enables the directional caret hook. By default, only
965 # expose it for bidi-associated system locales.
966 - name: bidi.browser.ui
967   type: bool
968   value: false
969   mirror: always
971 #---------------------------------------------------------------------------
972 # Prefs starting with "browser."
973 #---------------------------------------------------------------------------
975 - name: browser.active_color
976   type: String
977   value: "#EE0000"
978   mirror: never
980 - name: browser.active_color.dark
981   type: String
982   value: "#FF6666"
983   mirror: never
985 - name: browser.anchor_color
986   type: String
987   value: "#0000EE"
988   mirror: never
990 # If you change this, you probably also want to change
991 # nsXPLookAndFeel::GenericDarkColor for MozNativehyperlinktext.
992 - name: browser.anchor_color.dark
993   type: String
994   value: "#8C8CFF"
995   mirror: never
997 # See http://dev.w3.org/html5/spec/forms.html#attr-fe-autofocus
998 - name: browser.autofocus
999   type: bool
1000   value: true
1001   mirror: always
1003 - name: browser.cache.disk.enable
1004   type: RelaxedAtomicBool
1005   value: true
1006   mirror: always
1008 - name: browser.cache.memory.enable
1009   type: RelaxedAtomicBool
1010   value: true
1011   mirror: always
1013 # Limit of recent metadata we keep in memory for faster access, in KB.
1014 - name: browser.cache.disk.metadata_memory_limit
1015   type: RelaxedAtomicUint32
1016   value: 250   # 0.25 MB
1017   mirror: always
1019 # Does the user want smart-sizing?
1020 - name: browser.cache.disk.smart_size.enabled
1021   type: RelaxedAtomicBool
1022   value: true
1023   mirror: always
1025 # Disk cache capacity in kilobytes. It's used only when
1026 # browser.cache.disk.smart_size.enabled == false
1027 - name: browser.cache.disk.capacity
1028   type: RelaxedAtomicUint32
1029   value: 256000
1030   mirror: always
1032 # -1 = determine dynamically, 0 = none, n = memory capacity in kilobytes.
1033 - name: browser.cache.memory.capacity
1034   type: RelaxedAtomicInt32
1035   value: -1
1036   mirror: always
1038 # When smartsizing is disabled we could potentially fill all disk space by
1039 # cache data when the disk capacity is not set correctly. To avoid that we
1040 # check the free space every time we write some data to the cache. The free
1041 # space is checked against two limits. Once the soft limit is reached we start
1042 # evicting the least useful entries, when we reach the hard limit writing to
1043 # the entry fails.
1044 - name: browser.cache.disk.free_space_soft_limit
1045   type: RelaxedAtomicUint32
1046   value: 5 * 1024   # 5MB
1047   mirror: always
1049 - name: browser.cache.disk.free_space_hard_limit
1050   type: RelaxedAtomicUint32
1051   value: 1024    # 1MB
1052   mirror: always
1054 # The number of chunks we preload ahead of read. One chunk currently has
1055 # 256kB.
1056 - name: browser.cache.disk.preload_chunk_count
1057   type: RelaxedAtomicUint32
1058   value: 4    # 1 MB of read ahead
1059   mirror: always
1061 # Max-size (in KB) for entries in disk cache. Set to -1 for no limit.
1062 # (Note: entries bigger than 1/8 of disk-cache are never cached)
1063 - name: browser.cache.disk.max_entry_size
1064   type: RelaxedAtomicUint32
1065   value: 50 * 1024    # 50 MB
1066   mirror: always
1068 # Max-size (in KB) for entries in memory cache. Set to -1 for no limit.
1069 # (Note: entries bigger than than 90% of the mem-cache are never cached.)
1070 - name: browser.cache.memory.max_entry_size
1071   type: RelaxedAtomicInt32
1072   value: 5 * 1024
1073   mirror: always
1075 # Memory limit (in kB) for new cache data not yet written to disk. Writes to
1076 # the cache are buffered and written to disk on background with low priority.
1077 # With a slow persistent storage these buffers may grow when data is coming
1078 # fast from the network. When the amount of unwritten data is exceeded, new
1079 # writes will simply fail. We have two buckets, one for important data
1080 # (priority) like html, css, fonts and js, and one for other data like images,
1081 # video, etc.
1082 # Note: 0 means no limit.
1083 - name: browser.cache.disk.max_chunks_memory_usage
1084   type: RelaxedAtomicUint32
1085   value: 40 * 1024
1086   mirror: always
1087 - name: browser.cache.disk.max_priority_chunks_memory_usage
1088   type: RelaxedAtomicUint32
1089   value: 40 * 1024
1090   mirror: always
1093 # Number of seconds the cache spends writing pending data and closing files
1094 # after shutdown has been signalled. Past that time data is not written and
1095 # files are left open for the OS to clean up.
1096 - name: browser.cache.max_shutdown_io_lag
1097   type: RelaxedAtomicUint32
1098   value: 2
1099   mirror: always
1101 # After the max_shutdown_io_lag has passed, we will attempt to cancel
1102 # blocking IO (on windows). The CacheIOThread may pick up more blocking
1103 # tasks so we want to cancel those too. The main thread will be woken
1104 # up every shutdown_io_time_between_cancellations_ms to cancel the IO
1105 # on the other thread.
1106 - name: browser.cache.shutdown_io_time_between_cancellations_ms
1107   type: RelaxedAtomicUint32
1108   value: 5
1109   mirror: always
1111 # A percentage limit for media content type in the disk cache. When some entries
1112 # need to be evicted and media is over the limit, it's evicted first.
1113 - name: browser.cache.disk.content_type_media_limit
1114   type: RelaxedAtomicInt32
1115   value: 50
1116   mirror: always
1118 # How often to validate document in cache
1119 #   0 = once-per-session,
1120 #   1 = each-time,
1121 #   2 = never,
1122 #   3 = when-appropriate/automatically
1123 - name: browser.cache.check_doc_frequency
1124   type: RelaxedAtomicUint32
1125   value: 3
1126   mirror: always
1128 # Compression level for cached JavaScript bytecode
1129 #   0 = do not compress,
1130 #   1 = minimal compression,
1131 #   9 = maximal compression
1132 - name: browser.cache.jsbc_compression_level
1133   type: RelaxedAtomicUint32
1134   value: 0
1135   mirror: always
1137 # Whether tooltips are enabled.
1138 - name: browser.chrome.toolbar_tips
1139   type: bool
1140   value: true
1141   mirror: always
1143 # Whether tooltips are hidden on keydown.
1144 #  0: never
1145 #  1: always
1146 #  2: only on non-modifier keys
1147 - name: browser.chrome.toolbar_tips.hide_on_keydown
1148   type: uint32_t
1149 #if defined(XP_WIN)
1150   value: 0
1151 #else
1152   value: 2
1153 #endif
1154   mirror: always
1156 # DLP agent name, for display in the browser
1157 - name: browser.contentanalysis.agent_name
1158   type: String
1159   value: "A DLP agent"
1160   mirror: never
1162 # (optional) The organization name that the DLP agent should have. If this is
1163 # non-empty and the DLP agent is not signed with this organization name,
1164 # Firefox will fail the connection.
1165 - name: browser.contentanalysis.client_signature
1166   type: String
1167   value: ""
1168   mirror: never
1170 # Content analysis by external applications, e.g. data-loss prevention apps
1171 - name: browser.contentanalysis.enabled
1172   type: bool
1173   value: false
1174   mirror: never
1176 # Whether content analysis should allow content if there is a problem communicating
1177 # with the agent.
1178 - name: browser.contentanalysis.default_allow
1179   type: bool
1180   value: false
1181   mirror: never
1183 # Is the IPC pipe to the DLP tool specific to the user or to the system?
1184 - name: browser.contentanalysis.is_per_user
1185   type: bool
1186   value: true
1187   mirror: never
1189 # Path name of pipe used to connect to a configured DLP agent.
1190 - name: browser.contentanalysis.pipe_path_name
1191   type: String
1192   value: "path_user"
1193   mirror: never
1195 # Space-separated list of regexs that are compared to URLs of resources
1196 # being checked by content-analysis.  Resources that match are not checked
1197 # and are always permitted.
1198 - name: browser.contentanalysis.allow_url_regex_list
1199   type: String
1200   value: ""
1201   mirror: never
1203 # Space-separated list of regexs that are compared to URLs of resources
1204 # being checked by content-analysis.  Resources that match are not checked
1205 # and are always denied.
1206 - name: browser.contentanalysis.deny_url_regex_list
1207   type: String
1208   value: ""
1209   mirror: never
1211 # Should CA ignore the system setting and use silent notifications?
1212 - name: browser.contentanalysis.silent_notifications
1213   type: bool
1214   value: false
1215   mirror: always
1217 # Time (secs) after which content analysis operations are considered timed-out
1218 - name: browser.contentanalysis.agent_timeout
1219   type: uint32_t
1220   value: 30
1221   mirror: always
1223 # Should Firefox show a notification or dialog when content analysis blocks
1224 # access?
1225 - name: browser.contentanalysis.show_blocked_result
1226   type: bool
1227   value: true
1228   mirror: always
1230 # Content blocking for Enhanced Tracking Protection
1231 - name: browser.contentblocking.database.enabled
1232   type: bool
1233   value: false
1234   mirror: always
1236 # How many recent block/unblock actions per origins we remember in the
1237 # Content Blocking log for each top-level window.
1238 - name: browser.contentblocking.originlog.length
1239   type: uint32_t
1240   value: 32
1241   mirror: always
1243 # Min font device pixel size at which to turn on high quality.
1244 - name: browser.display.auto_quality_min_font_size
1245   type: RelaxedAtomicUint32
1246   value: 20
1247   mirror: always
1249 - name: browser.display.background_color
1250   type: String
1251   value: "#FFFFFF"
1252   mirror: never
1254 - name: browser.display.background_color.dark
1255   type: String
1256   value: "#1C1B22"
1257   mirror: never
1259 # This preference is a bit confusing because we use the opposite
1260 # string value in the colors dialog to indicate to users how FF HCM
1261 # will behave.
1262 # With resect to document colors, these values mean:
1263 # 0 = "default" = always, except in high contrast mode
1264 # 1 = "always"
1265 # 2 = "never"
1267 # On windows, we set this to 0, which means FF HCM will mirror OS HCM.
1268 # Everywhere else, we set this to 1, disabling FF HCM.
1269 - name: browser.display.document_color_use
1270   type: RelaxedAtomicUint32
1271 #if defined(XP_WIN)
1272   value: 0
1273 #else
1274   value: 1
1275 #endif
1276   mirror: always
1277   rust: true
1279 # 0 = always native
1280 # 1 = never native
1281 # other = default
1282 - name: browser.display.windows.non_native_menus
1283   type: RelaxedAtomicUint32
1284   value: 2
1285   mirror: always
1286   rust: true
1288 # This pref dictates whether or not backplates and background images
1289 # are to be drawn, when in high-contrast mode:
1290 #   false: do not draw backplates or render background images
1291 #   true: render background images and draw backplates
1292 # This condition is only considered when high-contrast mode is enabled
1293 # in Firefox, ie. when the user has:
1294 #   (1) mUseAccessibilityMode set to true (Widows high-contrast mode is on)
1295 #       AND browser.display.document_color_use set to 0
1296 #       (only with high-contrast themes) OR
1297 #   (2) browser.display.document_color_use set to 2 (always)
1298 - name: browser.display.permit_backplate
1299   type: RelaxedAtomicBool
1300   value: true
1301   mirror: always
1302   rust: true
1304 # Whether we should suppress the background-image of the canvas (the root
1305 # frame) if we're in forced colors mode.
1307 # This is important because some sites use background-image with a plain color
1308 # and it causes undesirable results in high-contrast mode.
1310 # See bug 1614921 for example.
1311 - name: browser.display.suppress_canvas_background_image_on_forced_colors
1312   type: bool
1313   value: true
1314   mirror: always
1316 - name: browser.display.foreground_color
1317   type: String
1318   value: "#000000"
1319   mirror: never
1321 - name: browser.display.foreground_color.dark
1322   type: String
1323   value: "#FBFBFE"
1324   mirror: never
1326 # Determines the behavior of OS zoom settings.
1328 #   0: doesn't affect rendering at all
1329 #   1: affects full zoom (dpi, effectively).
1330 #   2: affects text zoom.
1332 # Default is (1): Historical behavior on Linux, matches other browsers on
1333 # Windows, and generally creates more consistent rendering.
1334 - name: browser.display.os-zoom-behavior
1335   type: RelaxedAtomicInt32
1336   value: 1
1337   mirror: always
1338   rust: true
1340 # Whether focus rings are always shown by default.
1342 # This is the initial value of nsWindowRoot::mShowFocusRings, but it can be
1343 # overridden by system preferences.
1344 - name: browser.display.show_focus_rings
1345   type: bool
1346   value: false
1347   mirror: always
1349 # Enable showing image placeholders while image is loading or when image is broken.
1350 - name: browser.display.show_image_placeholders
1351   type: bool
1352   value: true
1353   mirror: always
1355 # Whether we should always enable focus rings after focus was moved by keyboard.
1357 # This behavior matches both historical and GTK / Windows focus behavior.
1359 # :focus-visible is intended to provide better heuristics than this.
1360 - name: browser.display.always_show_rings_after_key_focus
1361   type: bool
1362   value: false
1363   mirror: always
1365 # In theory: 0 = never, 1 = quick, 2 = always, though we always just use it as
1366 # a bool!
1367 - name: browser.display.use_document_fonts
1368   type: RelaxedAtomicInt32
1369   value: 1
1370   mirror: always
1371   rust: true
1373 # font-family names for which we'll override use_document_fonts=0, and always
1374 # use the specified font.
1375 # This is to support ligature-icon fonts, which render literal strings like
1376 # "arrow_drop_down" with an icon, even when use_document_fonts is disabled.
1377 # If an author provides & uses such a font, and we decline to use it, we'll end
1378 # up rendering these literal strings where the author intended an icon, which
1379 # can cause all sorts of overlapping/unreadable content.
1380 - name: browser.display.use_document_fonts.icon_font_allowlist
1381   type: String
1382   value: >-
1383     Material Icons,
1384     Material Icons Extended,
1385     Material Icons Outlined,
1386     Material Icons Round,
1387     Material Icons Sharp,
1388     Material Icons Two Tone,
1389     Google Material Icons,
1390     Material Symbols Outlined,
1391     Material Symbols Round,
1392     Material Symbols Rounded,
1393     Material Symbols Sharp
1394   mirror: never
1396 - name: browser.display.use_system_colors
1397   type: RelaxedAtomicBool
1398 #ifdef XP_WIN
1399   value: true
1400 #else
1401   value: false
1402 #endif
1403   mirror: always
1405 - name: browser.dom.window.dump.enabled
1406   type: RelaxedAtomicBool
1407   value: @IS_NOT_MOZILLA_OFFICIAL@
1408   mirror: always
1410 # See bug 1738574
1411 - name: browser.download.start_downloads_in_tmp_dir
1412   type: bool
1413   value: false
1414   mirror: always
1416 # See bug 1747343
1417 - name: browser.download.always_ask_before_handling_new_types
1418   type: bool
1419   value: false
1420   mirror: always
1422 # See bug 1731668
1423 - name: browser.download.enable_spam_prevention
1424   type: bool
1425   value: false
1426   mirror: always
1428 # See bug 1772569
1429 - name: browser.download.open_pdf_attachments_inline
1430   type: bool
1431   value: false
1432   mirror: always
1434 # See bug 1811830
1435 - name: browser.download.force_save_internally_handled_attachments
1436   type: bool
1437   value: false
1438   mirror: always
1440 - name: browser.download.sanitize_non_media_extensions
1441   type: bool
1442   value: true
1443   mirror: always
1445 # Image document's automatic image sizing.
1446 - name: browser.enable_automatic_image_resizing
1447   type: bool
1448   value: true
1449   mirror: always
1451 # Image document's click-to-resize.
1452 - name: browser.enable_click_image_resizing
1453   type: bool
1454   value: @IS_NOT_ANDROID@
1455   mirror: always
1457 - name: browser.find.ignore_ruby_annotations
1458   type: bool
1459   value: true
1460   mirror: always
1462 #if defined(XP_MACOSX)
1463 # Whether pressing Esc will exit fullscreen.
1464 - name: browser.fullscreen.exit_on_escape
1465   type: bool
1466   value: true
1467   mirror: always
1468 #endif
1470 # The max url length we'll store in history.
1472 # The default value is mostly a guess based on various facts:
1474 # * IE didn't support urls longer than 2083 chars
1475 # * Sitemaps protocol used to support a maximum of 2048 chars
1476 # * Various SEO guides suggest to not go over 2000 chars
1477 # * Various apps/services are known to have issues over 2000 chars
1478 # * RFC 2616 - HTTP/1.1 suggests being cautious about depending
1479 #   on URI lengths above 255 bytes
1481 - name: browser.history.maxUrlLength
1482   type: uint32_t
1483   value: 2000
1484   mirror: always
1486 # Max size of push/replaceState data parameter
1487 - name: browser.history.maxStateObjectSize
1488   type: int32_t
1489   value: 16777216
1490   mirror: always
1492 # True to collect wireframes upon navigations / pushState
1493 - name: browser.history.collectWireframes
1494   type: bool
1495   value: false
1496   mirror: always
1498 # The minimum area for a rect to be included in a wireframe, in CSS pixels.
1500 # The current value of 50 is pretty arbitrary, and will be tuned as we refine
1501 # and test the wireframing capability.
1502 - name: browser.history.wireframeAreaThreshold
1503   type: uint32_t
1504   value: 50
1505   mirror: always
1507 #if defined(XP_WIN) || defined(XP_LINUX)
1508   # Notify TabUnloader or send the memory pressure if the memory resource
1509   # notification is signaled AND the available commit space is lower than
1510   # this value.
1511 -   name: browser.low_commit_space_threshold_mb
1512     type: RelaxedAtomicUint32
1513     value: 200
1514     mirror: always
1515 #endif
1517 #ifdef XP_LINUX
1518   # On Linux we also check available memory in comparison to total memory,
1519   # and use this percent value (out of 100) to determine if we are in a
1520   # low memory scenario.
1521 -   name: browser.low_commit_space_threshold_percent
1522     type: RelaxedAtomicUint32
1523     value: 5
1524     mirror: always
1525 #endif
1527 # Render animations and videos as a solid color
1528 - name: browser.measurement.render_anims_and_video_solid
1529   type: RelaxedAtomicBool
1530   value: false
1531   mirror: always
1533 - name: browser.navigation.requireUserInteraction
1534   type: bool
1535   value: false
1536   mirror: always
1538 # Indicates if about:newtab shows content (enabled) or just blank.
1539 - name: browser.newtabpage.enabled
1540   type: bool
1541   value: true
1542   mirror: always
1544 # Open PDFs in Edge with the --app flag if it is the default.
1545 - name: browser.pdf.launchDefaultEdgeAsApp
1546   type: bool
1547   value: true
1548   mirror: always
1550 # Maximium delay between keystrokes that will be considered typing (milliseconds).
1551 - name: browser.places.interactions.typing_timeout_ms
1552   type: RelaxedAtomicUint32
1553   value: 3000
1554   mirror: always
1556 # Maximum delay between scroll input events that will be considered a scrolling interaction (milliseconds).
1557 - name: browser.places.interactions.scrolling_timeout_ms
1558   type: RelaxedAtomicUint32
1559   value: 5000
1560   mirror: always
1562 # Number of seconds till the sponsored session is timeout.
1563 - name: browser.places.sponsoredSession.timeoutSecs
1564   type: RelaxedAtomicUint32
1565   value: 3600
1566   mirror: always
1568 # Whether to start the private browsing mode at application startup
1569 - name: browser.privatebrowsing.autostart
1570   type: bool
1571   value: false
1572   mirror: always
1574 # Force usage of in-memory (rather than file on disk) media cache for video streaming when private browsing
1575 - name: browser.privatebrowsing.forceMediaMemoryCache
1576   type: bool
1577   value: false
1578   mirror: always
1580 # Communicates the toolbar color to platform (for e.g., prefers-color-scheme).
1582 # Returns whether the toolbar is dark (0), light (1), or system (2). The
1583 # theming code overrides it if appropriate.
1584 - name: browser.theme.toolbar-theme
1585   type: RelaxedAtomicUint32
1586   value: 2
1587   mirror: always
1589 # Communicates the preferred content theme color to platform (for e.g.,
1590 # prefers-color-scheme).
1592 # dark (0), light (1), system (2), or toolbar (3).
1594 # Default to "toolbar", the theming code sets it appropriately.
1595 - name: browser.theme.content-theme
1596   type: RelaxedAtomicUint32
1597   value: 2
1598   mirror: always
1599   rust: true
1601 # Whether the firefox titlebar respects the
1602 # -moz-windows-accent-color-in-titlebar setting on the tab strip.
1603 - name: browser.theme.windows.accent-color-in-tabs.enabled
1604   type: RelaxedAtomicBool
1605   value: false
1606   mirror: always
1607   rust: true
1609 # Blocked plugin content
1610 - name: browser.safebrowsing.blockedURIs.enabled
1611   type: bool
1612   value: true
1613   mirror: always
1615 # Malware protection
1616 - name: browser.safebrowsing.malware.enabled
1617   type: bool
1618   value: true
1619   mirror: always
1621 # Phishing protection
1622 - name: browser.safebrowsing.phishing.enabled
1623   type: bool
1624   value: true
1625   mirror: always
1627 # Maximum size for an array to store the safebrowsing prefixset.
1628 - name: browser.safebrowsing.prefixset_max_array_size
1629   type: RelaxedAtomicUint32
1630   value: 512*1024
1631   mirror: always
1633 # SessionStore prefs
1634 # Maximum number of bytes of DOMSessionStorage data we collect per origin.
1635 - name: browser.sessionstore.dom_storage_limit
1636   type: uint32_t
1637   value: 2048
1638   mirror: always
1640 # Maximum number of characters of form field data per field we collect.
1641 - name: browser.sessionstore.dom_form_limit
1642   type: uint32_t
1643   value: 1024*1024*2
1644   mirror: always
1646 # Maximum number of characters of form data we collect per origin.
1647 - name: browser.sessionstore.dom_form_max_limit
1648   type: uint32_t
1649   value: 1024*1024*50
1650   mirror: always
1652 # Minimal interval between two save operations in milliseconds (while the user is active).
1653 - name: browser.sessionstore.interval
1654   type: RelaxedAtomicUint32
1655   value: 15000
1656   mirror: always
1658 # Disable collection of data for session store using the native collector code,
1659 # instead use the older implementation that's not compatible with session
1660 # history in the parent (and thus Fission).
1661 - name: browser.sessionstore.disable_platform_collection
1662   type: bool
1663 #if defined(MOZ_THUNDERBIRD)
1664   value: true
1665 #else
1666   value: false
1667 #endif
1668   mirror: once
1669   do_not_use_directly: true
1671 # Causes SessionStore to ignore non-final update messages from
1672 # browser tabs that were not caused by a flush from the parent.
1673 # This is a testing flag and should not be used by end-users.
1674 - name: browser.sessionstore.debug.no_auto_updates
1675   type: RelaxedAtomicBool
1676   value: false
1677   mirror: always
1679 # Whether we should draw the tabs on top of the titlebar.
1681 # no (0), yes (1), or default (2), which is true everywhere except Linux.
1682 - name: browser.tabs.inTitlebar
1683   type: int32_t
1684   value: 2
1685   mirror: always
1687 # If set, use DocumentChannel to directly initiate loads entirely
1688 # from parent-process BrowsingContexts
1689 - name: browser.tabs.documentchannel.parent-controlled
1690   type: bool
1691   value: false
1692   mirror: always
1694 # Testing-only pref which makes data: URIs be loaded in a "web" content process
1695 # instead of within a process based on the URI's loader.
1696 - name: browser.tabs.remote.dataUriInDefaultWebProcess
1697   type: bool
1698   value: false
1699   mirror: always
1701 # Testing-only pref to force system-triggered about:blank loads to not change
1702 # content processes. This is used for performance tests which load an
1703 # about:blank document between navigations for historical reasons to avoid
1704 # unnecessary process switches.
1705 - name: browser.tabs.remote.systemTriggeredAboutBlankAnywhere
1706   type: bool
1707   value: false
1708   mirror: always
1710 # Testing-only pref to cause PBrowser creation for a specific BrowsingContext to
1711 # fail, to test the errored codepath.
1712 - name: browser.tabs.remote.testOnly.failPBrowserCreation.enabled
1713   type: bool
1714   value: false
1715   mirror: always
1717 - name: browser.tabs.remote.force-paint
1718   type: bool
1719   value: true
1720   mirror: always
1722 # When this pref is enabled document loads with a mismatched
1723 # Cross-Origin-Embedder-Policy header will fail to load
1724 - name: browser.tabs.remote.useCrossOriginEmbedderPolicy
1725   type: RelaxedAtomicBool
1726   value: true
1727   mirror: always
1729 # This pref makes `credentialless` a valid value for
1730 # Cross-Origin-Embedder-Policy header
1731 - name: browser.tabs.remote.coep.credentialless
1732   type: RelaxedAtomicBool
1733 #if defined(ANDROID)
1734   value: @IS_NIGHTLY_BUILD@
1735 #else
1736   value: true
1737 #endif
1738   mirror: always
1739   do_not_use_directly: true
1741 # When this pref is enabled top level loads with a mismatched
1742 # Cross-Origin-Opener-Policy header will be loaded in a separate process.
1743 - name: browser.tabs.remote.useCrossOriginOpenerPolicy
1744   type: RelaxedAtomicBool
1745   value: true
1746   mirror: always
1748 # When this pref is enabled then we use a separate content process for
1749 # top-level load of file:// URIs
1750 - name: browser.tabs.remote.separateFileUriProcess
1751   type: RelaxedAtomicBool
1752 #if !defined(ANDROID)
1753   value: true
1754 #else
1755   value: false
1756 #endif
1757   mirror: always
1759 # Pref to control whether we use a separate privileged content process
1760 # for certain mozilla webpages (which are listed in the pref
1761 # browser.tabs.remote.separatedMozillaDomains).
1762 - name: browser.tabs.remote.separatePrivilegedMozillaWebContentProcess
1763   type: bool
1764   value: false
1765   mirror: always
1767 # Whether or not process selection for subframes will prefer re-using an
1768 # existing content process over creating a new one. Enabling this pref should
1769 # reduce the number of processes allocated for non-first-party domains if
1770 # dom.ipc.processCount.webIsolated > 1.
1771 - name: browser.tabs.remote.subframesPreferUsed
1772   type: bool
1773   value: true
1774   mirror: always
1776 # When this pref is enabled, opaque response is only allowed to enter the
1777 # content process if it's a response for media (audio, image, video), CSS, or
1778 # JavaScript.
1779 - name: browser.opaqueResponseBlocking
1780   type: RelaxedAtomicBool
1781 #if defined(ANDROID)
1782   value: false
1783 #else
1784   value: true
1785 #endif
1786   mirror: always
1788 # When this pref is enabled, the JS validator will be enabled for
1789 # ORB.
1790 - name: browser.opaqueResponseBlocking.javascriptValidator
1791   type: bool
1792   value: true
1793   mirror: always
1795 # This pref controls how filtering of opaque responses for calls to `Window.fetch`.
1796 # (and similar) is performed in the parent process. This is intended to make sure
1797 # that data that would be filtered in a content process never actually reaches that
1798 # content process.
1799 # See https://fetch.spec.whatwg.org/#concept-filtered-response-opaque
1800 #   0) Don't filter in the parent process at all, and let content processes handle
1801 #      opaque filtering. Regardless of if ORB is enabled or not. N.B. that if ORB
1802 #      is enabled opaque responses will be blocked.
1803 #   1) If ORB is enabled, in the parent process, filter the responses that ORB allows.
1804 #      N.B. any responses ORB doesn't allow will not send data to a content process
1805 #      since they will return a NetworkError. If the request is allowed by ORB, the
1806 #      internal response will be intact and sent to the content process as is.
1807 #   2) If ORB is enabled, in the parent process, filter the responses that ORB blocks,
1808 #      when they were issued by `Window.fetch` (and similar).
1809 #   3) Filter all responses in the parent, regardless of if ORB is enabled or not.
1810 #      This means that opaque responses coming from `Window.fetch` won't even be
1811 #      considered for being blocked by ORB.
1812 - name: browser.opaqueResponseBlocking.filterFetchResponse
1813   type: uint32_t
1814   value: 2
1815   mirror: always
1816   do_not_use_directly: true
1818 # This pref controls how exceptions to opaque response blocking for the media MIME types
1819 # `audio/*` and `video/*` are handled. This is because step 8 in the spec that performs
1820 # audio or video type pattern matching cannot handle certain MIME types (yet).
1821 # See https://whatpr.org/fetch/1442.html#orb-algorithm
1822 #   0) No exceptions
1823 #   1) Some exceptions, explicitly hard coded in `IsOpaqueSafeListedSpecBreakingMIMEType`
1824 #   2) Allow all MIME types beginning with `audio/*` or `video/*`.
1825 - name: browser.opaqueResponseBlocking.mediaExceptionsStrategy
1826   type: uint32_t
1827   value: 1
1828   mirror: always
1829   do_not_use_directly: true
1831 # When true, zooming will be enabled on all sites, even ones that declare
1832 # user-scalable=no.
1833 - name: browser.ui.zoom.force-user-scalable
1834   type: RelaxedAtomicBool
1835   value: false
1836   mirror: always
1838 - name: browser.viewport.desktopWidth
1839   type: RelaxedAtomicInt32
1840   value: 980
1841   mirror: always
1843 - name: browser.visited_color
1844   type: String
1845   value: "#551A8B"
1846   mirror: never
1848 # If you change this, you probably also want to change
1849 # nsXPLookAndFeel::GenericDarkColor for MozNativevisitedhyperlinktext.
1850 - name: browser.visited_color.dark
1851   type: String
1852   value: "#FFADFF"
1853   mirror: never
1855 # When true, soft reloads (including location.reload())
1856 # will only froce validate the top level document, subresources will
1857 # be loaded normally as-if users normally navigated to the page.
1858 - name: browser.soft_reload.only_force_validate_top_level_document
1859   type: bool
1860   value: true
1861   mirror: always
1863 # Whether or not to save and restore zoom levels on a per-site basis.
1864 - name: browser.zoom.siteSpecific
1865   type: bool
1866   value: @IS_NOT_ANDROID@
1867   mirror: always
1869 #---------------------------------------------------------------------------
1870 # Prefs starting with "channelclassifier."
1871 #---------------------------------------------------------------------------
1873 - name: channelclassifier.allowlist_example
1874   type: bool
1875   value: false
1876   mirror: always
1878 #---------------------------------------------------------------------------
1879 # Prefs starting with "clipboard."
1880 #---------------------------------------------------------------------------
1882 # Clipboard behavior.
1883 - name: clipboard.autocopy
1884   type: bool
1885 #if !defined(ANDROID) && !defined(XP_MACOSX) && defined(XP_UNIX)
1886   value: true
1887 #else
1888   value: false
1889 #endif
1890   mirror: always
1892 #ifdef XP_WIN
1893   # allow to copy clipboard data to Clipboard History/Cloud
1894   # (used on sensitive data in about:logins and Private Browsing)
1895 -   name: clipboard.copyPrivateDataToClipboardCloudOrHistory
1896     type: bool
1897     value: false
1898     mirror: always
1900   # Whether to put a file promise onto the clipboard when copying images on Windows
1901 -   name: clipboard.imageAsFile.enabled
1902     type: bool
1903     value: @IS_NOT_EARLY_BETA_OR_EARLIER@
1904     mirror: always
1905 #endif
1907 #---------------------------------------------------------------------------
1908 # Prefs starting with "consoleservice."
1909 #---------------------------------------------------------------------------
1911 #if defined(ANDROID)
1912   # Disable sending console to logcat on release builds.
1913 -   name: consoleservice.logcat
1914     type: RelaxedAtomicBool
1915     value: @IS_NOT_RELEASE_OR_BETA@
1916     mirror: always
1917 #endif
1919 #---------------------------------------------------------------------------
1920 # Prefs starting with "content."
1921 #---------------------------------------------------------------------------
1923 - name: content.cors.disable
1924   type: bool
1925   value: false
1926   mirror: always
1928 # Back off timer notification after count.
1929 # -1 means never.
1930 - name: content.notify.backoffcount
1931   type: int32_t
1932   value: -1
1933   mirror: always
1935 # Notification interval in microseconds.
1936 # The notification interval has a dramatic effect on how long it takes to
1937 # initially display content for slow connections. The current value
1938 # provides good incremental display of content without causing an increase
1939 # in page load time. If this value is set below 1/10 of a second it starts
1940 # to impact page load performance.
1941 # See bugzilla bug 72138 for more info.
1942 - name: content.notify.interval
1943   type: int32_t
1944   value: 120000
1945   mirror: always
1947 # Do we notify based on time?
1948 - name: content.notify.ontimer
1949   type: bool
1950   value: true
1951   mirror: always
1953 # How many times to deflect in interactive mode.
1954 - name: content.sink.interactive_deflect_count
1955   type: int32_t
1956   value: 0
1957   mirror: always
1959 # How many times to deflect in perf mode.
1960 - name: content.sink.perf_deflect_count
1961   type: int32_t
1962   value: 200
1963   mirror: always
1965 # Parse mode for handling pending events.
1966 # 0 = don't check for pending events
1967 # 1 = don't deflect if there are pending events
1968 # 2 = bail if there are pending events
1969 - name: content.sink.pending_event_mode
1970   type: int32_t
1971 #ifdef XP_WIN
1972   value: 1
1973 #else
1974   value: 0
1975 #endif
1976   mirror: always
1978 # How often to probe for pending events. 1 = every token.
1979 - name: content.sink.event_probe_rate
1980   type: int32_t
1981   value: 1
1982   mirror: always
1984 # How long to stay off the event loop in interactive mode (microseconds).
1985 - name: content.sink.interactive_parse_time
1986   type: int32_t
1987   value: 3000
1988   mirror: always
1990 # How long to stay off the event loop in perf mode.
1991 - name: content.sink.perf_parse_time
1992   type: int32_t
1993   value: 30000
1994   mirror: always
1996 #  How long to be in interactive mode after an event.
1997 - name: content.sink.interactive_time
1998   type: uint32_t
1999   value: 750000
2000   mirror: always
2002 # How long to stay in perf mode after initial loading.
2003 - name: content.sink.initial_perf_time
2004   type: uint32_t
2005   value: 2000000
2006   mirror: always
2008 # Should we switch between perf-mode and interactive-mode?
2009 # 0 = Switch
2010 # 1 = Interactive mode
2011 # 2 = Perf mode
2012 - name: content.sink.enable_perf_mode
2013   type: int32_t
2014   value: 0
2015   mirror: always
2017 #---------------------------------------------------------------------------
2018 # Prefs starting with "converter."
2019 #---------------------------------------------------------------------------
2021 # Whether we include ruby annotation in the text despite whether it
2022 # is requested. This was true because we didn't explicitly strip out
2023 # annotations. Set false by default to provide a better behavior, but
2024 # we want to be able to pref-off it if user doesn't like it.
2025 - name: converter.html2txt.always_include_ruby
2026   type: bool
2027   value: false
2028   mirror: always
2030 #---------------------------------------------------------------------------
2031 # Prefs starting with "cookiebanners."
2032 #---------------------------------------------------------------------------
2034 # Controls the cookie banner handling mode in normal browsing.
2035 # 0: Disables all cookie banner handling.
2036 # 1: Reject-all if possible, otherwise do nothing.
2037 # 2: Reject-all if possible, otherwise accept-all.
2038 - name: cookiebanners.service.mode
2039   type: uint32_t
2040   value: 0
2041   mirror: always
2043 # When set to true, cookie banners are detected and detection events are
2044 # dispatched, but they will not be handled. Requires the service to be enabled
2045 # for the desired mode via pref cookiebanners.service.mode*
2046 - name: cookiebanners.service.detectOnly
2047   type: bool
2048   value: false
2049   mirror: always
2051 # Controls the cookie banner handling mode in private browsing. Same mode
2052 # options as the normal browsing pref above.
2053 - name: cookiebanners.service.mode.privateBrowsing
2054   type: uint32_t
2055   value: 0
2056   mirror: always
2058 # Enables use of global CookieBannerRules, which apply to all sites. This is
2059 # used for click rules that can handle common Consent Management Providers
2060 # (CMP).
2061 # Enabling this (when the cookie handling feature is enabled) may negatively
2062 # impact site performance since it requires us to run rule-defined query
2063 # selectors for every page.
2064 - name: cookiebanners.service.enableGlobalRules
2065   type: bool
2066   value: true
2067   mirror: always
2069 # Whether global rules are allowed to run in sub-frames. Running query selectors
2070 # in every sub-frame may negatively impact performance, but is required for some
2071 # CMPs.
2072 - name: cookiebanners.service.enableGlobalRules.subFrames
2073   type: bool
2074   value: true
2075   mirror: always
2077 # Enables the cookie banner cookie injector. The cookie banner cookie injector
2078 # depends on the `cookiebanners.service.mode` pref above.
2079 - name: cookiebanners.cookieInjector.enabled
2080   type: bool
2081   value: true
2082   mirror: always
2084 # By default, how many seconds in the future cookies should expire after they
2085 # have been injected. Defaults to 12 months. Individual cookie rules may
2086 # override this.
2087 - name: cookiebanners.cookieInjector.defaultExpiryRelative
2088   type: uint32_t
2089   value: 31536000
2090   mirror: always
2092 # How many times per site and site load to check for cookie banners after which
2093 # the mechanism is considered on cooldown for the site in the current browsing
2094 # session. If the threshold is set to zero, banner clicking won't be considered
2095 # as being on cooldown regardless of how many times the site is loaded. The
2096 # maximum value for the retry is 255, any value over than that will be capped.
2097 - name: cookiebanners.bannerClicking.maxTriesPerSiteAndSession
2098   type: uint32_t
2099   value: 3
2100   mirror: always
2102 #---------------------------------------------------------------------------
2103 # Prefs starting with "datareporting."
2104 #---------------------------------------------------------------------------
2106 - name: datareporting.healthreport.uploadEnabled
2107   type: RelaxedAtomicBool
2108   value: false
2109   mirror: always
2110   rust: true
2112 #---------------------------------------------------------------------------
2113 # Prefs starting with "device."
2114 #---------------------------------------------------------------------------
2116 # Is support for the device sensors API enabled?
2117 - name: device.sensors.enabled
2118   type: bool
2119   value: true
2120   mirror: always
2122 # KaiOS-only, see https://bugzilla.mozilla.org/show_bug.cgi?id=1699707#c10
2123 - name: device.sensors.ambientLight.enabled
2124   type: bool
2125   value: false
2126   mirror: always
2128 - name: device.sensors.motion.enabled
2129   type: bool
2130   value: true
2131   mirror: always
2133 - name: device.sensors.orientation.enabled
2134   type: bool
2135   value: true
2136   mirror: always
2138 # KaiOS-only, see https://bugzilla.mozilla.org/show_bug.cgi?id=1699707#c10
2139 - name: device.sensors.proximity.enabled
2140   type: bool
2141   value: false
2142   mirror: always
2144 - name: device.sensors.test.events
2145   type: bool
2146   value: false
2147   mirror: always
2149 #---------------------------------------------------------------------------
2150 # Prefs starting with "devtools."
2151 #---------------------------------------------------------------------------
2153 - name: devtools.console.stdout.chrome
2154   type: RelaxedAtomicBool
2155   value: @IS_NOT_MOZILLA_OFFICIAL@
2156   mirror: always
2158 - name: devtools.console.stdout.content
2159   type: RelaxedAtomicBool
2160   value: false
2161   mirror: always
2163 #---------------------------------------------------------------------------
2164 # Prefs starting with "docshell."
2165 #---------------------------------------------------------------------------
2167 # Used to indicate whether session history listeners should be notified
2168 # about content viewer eviction. Used only for testing.
2169 - name: docshell.shistory.testing.bfevict
2170   type: bool
2171   value: false
2172   mirror: always
2174 # If true, pages with an opener won't be bfcached.
2175 - name: docshell.shistory.bfcache.require_no_opener
2176   type: bool
2177   value: @IS_ANDROID@
2178   mirror: always
2180 # If true, page with beforeunload or unload event listeners can be bfcached.
2181 - name: docshell.shistory.bfcache.allow_unload_listeners
2182   type: bool
2183   value: @IS_ANDROID@
2184   mirror: always
2186 # If true, page with beforeunload event listeners can be bfcached.
2187 # This only works when sessionHistoryInParent is enabled.
2188 - name: docshell.shistory.bfcache.ship_allow_beforeunload_listeners
2189   type: bool
2190   value: true
2191   mirror: always
2193 #---------------------------------------------------------------------------
2194 # Prefs starting with "dom."
2195 #---------------------------------------------------------------------------
2197 # Allow cut/copy
2198 - name: dom.allow_cut_copy
2199   type: bool
2200   value: true
2201   mirror: always
2203 # Checks if offscreen animation throttling is enabled.
2204 - name: dom.animations.offscreen-throttling
2205   type: bool
2206   value: true
2207   mirror: always
2209 # Is support for composite operations from the Web Animations API enabled?
2210 - name: dom.animations-api.compositing.enabled
2211   type: bool
2212   value: true
2213   mirror: always
2215 # Is support for timelines from the Web Animations API enabled?
2216 - name: dom.animations-api.timelines.enabled
2217   type: bool
2218   value: true
2219   mirror: always
2221 # Is support for Navigator.getBattery enabled?
2222 - name: dom.battery.enabled
2223   type: bool
2224   value: true
2225   mirror: always
2227 # Block multiple external protocol URLs in iframes per single event.
2228 - name: dom.block_external_protocol_in_iframes
2229   type: bool
2230   value: true
2231   mirror: always
2233 # Block sandboxed BrowsingContexts from navigating to external protocols.
2234 - name: dom.block_external_protocol_navigation_from_sandbox
2235   type: bool
2236   value: true
2237   mirror: always
2239 # Block Insecure downloads from Secure Origins
2240 - name: dom.block_download_insecure
2241   type: bool
2242   value: true
2243   mirror: always
2245 # Block multiple window.open() per single event.
2246 - name: dom.block_multiple_popups
2247   type: bool
2248   value: true
2249   mirror: always
2251 # The maximum number of popup that is allowed to be opened. Set to -1 for no
2252 # limit.
2253 - name: dom.popup_maximum
2254   type: int32_t
2255   value: 20
2256   mirror: always
2258 # Whether window.location.reload() and window.history.go(0) should be blocked
2259 # when called directly from a window resize event handler.
2261 # This used to be necessary long ago to prevent terrible UX when using stuff
2262 # like TypeAheadFind (bug 258917), but it also causes compat issues on mobile
2263 # (bug 1570566).
2264 - name: dom.block_reload_from_resize_event_handler
2265   type: bool
2266   value: false
2267   mirror: always
2269   # Enable CacheAPI in private browsing mode with encryption
2270 - name: dom.cache.privateBrowsing.enabled
2271   type: RelaxedAtomicBool
2272   value: true
2273   mirror: always
2275 # Exposes window.caches and skips SecureContext check.
2276 # dom.serviceWorkers.testing.enabled also includes the same effect.
2277 - name: dom.caches.testing.enabled
2278   type: RelaxedAtomicBool
2279   value: false
2280   mirror: always
2282 # Disable capture attribute for input elements; only supported on GeckoView.
2283 - name: dom.capture.enabled
2284   type: bool
2285   value: false
2286   mirror: always
2288 # HTML specification says the level should be 5
2289 # https://html.spec.whatwg.org/#timer-initialisation-steps
2290 - name: dom.clamp.timeout.nesting.level
2291   type: uint32_t
2292   value: 5
2293   mirror: once
2295 # Disable custom highlight API; implementation pending.
2296 - name: dom.customHighlightAPI.enabled
2297   type: RelaxedAtomicBool
2298   value: @IS_NIGHTLY_BUILD@
2299   mirror: always
2300   rust: true
2302 # Allow control characters appear in composition string.
2303 # When this is false, control characters except
2304 # CHARACTER TABULATION (horizontal tab) are removed from
2305 # both composition string and data attribute of compositionupdate
2306 # and compositionend events.
2307 - name: dom.compositionevent.allow_control_characters
2308   type: bool
2309   value: false
2310   mirror: always
2312 # Compression Streams (CompressionStream/DecompressionStream)
2313 - name: dom.compression_streams.enabled
2314   type: RelaxedAtomicBool
2315   value: true
2316   mirror: always
2318 # Is support for CSSPseudoElement enabled?
2319 - name: dom.css_pseudo_element.enabled
2320   type: bool
2321   value: false
2322   mirror: always
2324 # After how many seconds we allow external protocol URLs in iframe when not in
2325 # single events
2326 - name: dom.delay.block_external_protocol_in_iframes
2327   type: uint32_t
2328   value: 10   # in seconds
2329   mirror: always
2331 # Whether the above pref has any effect at all.
2332 # Make sure cases like bug 1795380 work before trying to turn this off. See
2333 # bug 1680721 for some other context that might be relevant.
2334 - name: dom.delay.block_external_protocol_in_iframes.enabled
2335   type: bool
2336   value: true
2337   mirror: always
2339 # Only propagate the open window click permission if the setTimeout() is equal
2340 # to or less than this value.
2341 - name: dom.disable_open_click_delay
2342   type: int32_t
2343   value: 1000
2344   mirror: always
2346 - name: dom.disable_open_during_load
2347   type: bool
2348   value: false
2349   mirror: always
2351 - name: dom.disable_beforeunload
2352   type: bool
2353   value: false
2354   mirror: always
2356 - name: dom.require_user_interaction_for_beforeunload
2357   type: bool
2358   value: true
2359   mirror: always
2361 # Enable/disable Gecko specific edit commands
2362 - name: dom.document.edit_command.contentReadOnly.enabled
2363   type: bool
2364   value: @IS_NOT_EARLY_BETA_OR_EARLIER@
2365   mirror: always
2367 - name: dom.document.edit_command.insertBrOnReturn.enabled
2368   type: bool
2369   value: @IS_NOT_EARLY_BETA_OR_EARLIER@
2370   mirror: always
2372 # If set this to true, `Document.execCommand` may be performed nestedly.
2373 # Otherwise, nested calls just return false.
2374 - name: dom.document.exec_command.nested_calls_allowed
2375   type: bool
2376   value: false
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: bool
2402   value: false
2403   mirror: always
2405 # Whether CustomStateSet is enabled
2406 - name: dom.element.customstateset.enabled
2407   type: RelaxedAtomicBool
2408   value: false
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: @IS_EARLY_BETA_OR_EARLIER@
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 # Whether to expose test interfaces of various sorts
2641 - name: dom.expose_test_interfaces
2642   type: bool
2643   value: false
2644   mirror: always
2646 - name: dom.fetchObserver.enabled
2647   type: RelaxedAtomicBool
2648   value: false
2649   mirror: always
2651 # Allow the content process to create a File from a path. This is allowed just
2652 # on parent process, on 'file' Content process, or for testing.
2653 - name: dom.file.createInChild
2654   type: RelaxedAtomicBool
2655   value: false
2656   mirror: always
2658 # Support @autocomplete values for form autofill feature.
2659 - name: dom.forms.autocomplete.formautofill
2660   type: bool
2661   value: false
2662   mirror: always
2664 # Only trusted submit event could trigger form submission.
2665 - name: dom.forms.submit.trusted_event_only
2666   type: bool
2667   value: false
2668   mirror: always
2670 # This pref just controls whether we format the number with grouping separator
2671 # characters when the internal value is set or updated. It does not stop the
2672 # user from typing in a number and using grouping separators.
2673 - name: dom.forms.number.grouping
2674   type: bool
2675   value: false
2676   mirror: always
2678 # Whether the spin buttons will always appear, or if they
2679 # will only appear when the input is focused or hovered.
2680 - name: dom.forms.number.hide_spin_buttons_when_no_hover_or_focus
2681   type: bool
2682   value: @IS_NIGHTLY_BUILD@
2683   mirror: always
2685 # Whether the Gamepad API is enabled
2686 - name: dom.gamepad.enabled
2687   type: bool
2688   value: true
2689   mirror: always
2691 # Is Gamepad Extension API enabled?
2692 - name: dom.gamepad.extensions.enabled
2693   type: bool
2694   value: true
2695   mirror: always
2697 # Is LightIndicator API enabled in Gamepad Extension API?
2698 - name: dom.gamepad.extensions.lightindicator
2699   type: bool
2700   value: false
2701   mirror: always
2703 # Is MultiTouch API enabled in Gamepad Extension API?
2704 - name: dom.gamepad.extensions.multitouch
2705   type: bool
2706   value: false
2707   mirror: always
2709 # Is Gamepad vibrate haptic feedback function enabled?
2710 - name: dom.gamepad.haptic_feedback.enabled
2711   type: bool
2712   value: true
2713   mirror: always
2715 - name: dom.gamepad.non_standard_events.enabled
2716   type: bool
2717   value: @IS_NOT_RELEASE_OR_BETA@
2718   mirror: always
2720 - name: dom.gamepad.test.enabled
2721   type: RelaxedAtomicBool
2722   value: false
2723   mirror: always
2725 # W3C draft ImageCapture API
2726 - name: dom.imagecapture.enabled
2727   type: bool
2728   value: false
2729   mirror: always
2731 # The root margin for image lazy loading, defined as four (value, percentage)
2732 # pairs.
2733 - name: dom.image-lazy-loading.root-margin.top
2734   type: float
2735   value: 600
2736   mirror: always
2738 - name: dom.image-lazy-loading.root-margin.top.percentage
2739   type: bool
2740   value: false
2741   mirror: always
2743 - name: dom.image-lazy-loading.root-margin.bottom
2744   type: float
2745   value: 600
2746   mirror: always
2748 - name: dom.image-lazy-loading.root-margin.bottom.percentage
2749   type: bool
2750   value: false
2751   mirror: always
2753 - name: dom.image-lazy-loading.root-margin.left
2754   type: float
2755   value: 600
2756   mirror: always
2758 - name: dom.image-lazy-loading.root-margin.left.percentage
2759   type: bool
2760   value: false
2761   mirror: always
2763 - name: dom.image-lazy-loading.root-margin.right
2764   type: float
2765   value: 600
2766   mirror: always
2768 - name: dom.image-lazy-loading.root-margin.right.percentage
2769   type: bool
2770   value: false
2771   mirror: always
2773 # Enable indexedDB in private browsing mode with encryption
2774 - name: dom.indexedDB.privateBrowsing.enabled
2775   type: RelaxedAtomicBool
2776   value: true
2777   mirror: always
2779 # A pref that is used to slow down connection idle maintenance for testing
2780 # purposes.
2781 - name: dom.indexedDB.connectionIdleMaintenance.pauseOnConnectionThreadMs
2782   type: RelaxedAtomicUint32
2783   value: 0
2784   mirror: always
2786 # Whether or not indexedDB test mode is enabled.
2787 - name: dom.indexedDB.testing
2788   type: RelaxedAtomicBool
2789   value: false
2790   mirror: always
2792 # Whether or not indexedDB experimental features are enabled.
2793 - name: dom.indexedDB.experimental
2794   type: RelaxedAtomicBool
2795   value: false
2796   mirror: always
2798 # Whether or not indexedDB preprocessing is enabled.
2799 - name: dom.indexedDB.preprocessing
2800   type: RelaxedAtomicBool
2801   value: false
2802   mirror: always
2804 # Whether innerWidth / innerHeight return rounded or fractional sizes.
2806 # NOTE(emilio): Fractional sizes are not web-compatible, see the regressions
2807 # from bug 1676843, but we want to expose the fractional sizes (probably in
2808 # another API) one way or another, see [1], so we're keeping the code for the
2809 # time being.
2811 # [1]: https://github.com/w3c/csswg-drafts/issues/5260
2812 - name: dom.innerSize.rounded
2813   type: bool
2814   value: true
2815   mirror: always
2817 # Whether we conform to Input Events Level 1 or Input Events Level 2.
2818 # true:  conforming to Level 1
2819 # false: conforming to Level 2
2820 - name: dom.input_events.conform_to_level_1
2821   type: bool
2822   value: true
2823   mirror: always
2825 # Whether we allow BrowsingContextGroup to suspend input events
2826 - name: dom.input_events.canSuspendInBCG.enabled
2827   type: bool
2828   value: false
2829   mirror: always
2831 # The minimum number of ticks after page navigation
2832 # that need to occur before user input events are allowed to be handled.
2833 - name: dom.input_events.security.minNumTicks
2834   type: uint32_t
2835   value: 3
2836   mirror: always
2838 # The minimum elapsed time (in milliseconds) after page navigation
2839 # for user input events are allowed to be handled.
2840 - name: dom.input_events.security.minTimeElapsedInMS
2841   type: uint32_t
2842   value: 100
2843   mirror: always
2845 # By default user input handling delay is disabled (mostly) for testing ,
2846 # this is used for forcefully enable it for certain tests.
2847 - name: dom.input_events.security.isUserInputHandlingDelayTest
2848   type: bool
2849   value: false
2850   mirror: always
2852 # The maximum time (milliseconds) we reserve for handling input events in each
2853 # frame.
2854 - name: dom.input_event_queue.duration.max
2855   type: uint32_t
2856   value: 8
2857   mirror: always
2859 # Enable not moving the cursor to end when a text input or textarea has .value
2860 # set to the value it already has.  By default, enabled.
2861 - name: dom.input.skip_cursor_move_for_same_value_set
2862   type: bool
2863   value: true
2864   mirror: always
2866 # How often to check for CPOW timeouts (ms). CPOWs are only timed
2867 # out by the hang monitor.
2868 - name: dom.ipc.cpow.timeout
2869   type: uint32_t
2870   value: 500
2871   mirror: always
2873 #ifdef MOZ_ENABLE_FORKSERVER
2874 - name: dom.ipc.forkserver.enable
2875   type: bool
2876   value: false
2877   mirror: once
2878 #endif
2880 #ifdef MOZ_WIDGET_GTK
2882 # Avoid the use of GTK in content processes if possible, by running
2883 # them in headless mode, to conserve resources (e.g., connections to
2884 # the X server).  See the usage in `ContentParent.cpp` for the full
2885 # definition of "if possible".
2887 # This does not affect sandbox policies; content processes may still
2888 # dynamically connect to the display server for, e.g., WebGL.
2889 - name: dom.ipc.avoid-gtk
2890   type: bool
2891   value: true
2892   mirror: always
2893 #endif
2895 # Whether or not to collect a paired minidump when force-killing a
2896 # content process.
2897 - name: dom.ipc.tabs.createKillHardCrashReports
2898   type: bool
2899   value: @IS_NOT_RELEASE_OR_BETA@
2900   mirror: once
2902 # Enable e10s hang monitoring (slow script checking and plugin hang detection).
2903 - name: dom.ipc.processHangMonitor
2904   type: bool
2905   value: true
2906   mirror: once
2908 # Whether we report such process hangs
2909 - name: dom.ipc.reportProcessHangs
2910   type: RelaxedAtomicBool
2911 # Don't report hangs in DEBUG builds. They're too slow and often a
2912 # debugger is attached.
2913 #ifdef DEBUG
2914   value: false
2915 #else
2916   value: true
2917 #endif
2918   mirror: always
2920 # Process launch delay (in milliseconds).
2921 - name: dom.ipc.processPrelaunch.delayMs
2922   type: uint32_t
2923 # This number is fairly arbitrary ... the intention is to put off
2924 # launching another app process until the last one has finished
2925 # loading its content, to reduce CPU/memory/IO contention.
2926   value: 1000
2927   mirror: always
2929 - name: dom.ipc.processPrelaunch.startupDelayMs
2930   type: uint32_t
2931 # delay starting content processes for a short time after browser start
2932 # to provide time for the UI to come up
2933   value: 1000
2934   mirror: always
2936 # Process preallocation cache
2937 # Only used in fission; in e10s we use 1 always
2938 - name: dom.ipc.processPrelaunch.fission.number
2939   type: uint32_t
2940   value: 3
2941   mirror: always
2943 # Limit preallocated processes below this memory size (in MB)
2944 - name: dom.ipc.processPrelaunch.lowmem_mb
2945   type: uint32_t
2946   value: 4096
2947   mirror: always
2949 - name: dom.ipc.processPriorityManager.enabled
2950   type: bool
2951   value: true
2952   mirror: always
2954 - name: dom.ipc.processPriorityManager.testMode
2955   type: bool
2956   value: false
2957   mirror: always
2959 - name: dom.ipc.processPriorityManager.backgroundPerceivableGracePeriodMS
2960   type: uint32_t
2961 #if defined(MOZ_WIDGET_ANDROID) && defined(NIGHTLY_BUILD)
2962   value: 3000
2963 #else
2964   value: 0
2965 #endif
2966   mirror: always
2968 - name: dom.ipc.processPriorityManager.backgroundGracePeriodMS
2969   type: uint32_t
2970 #if defined(MOZ_WIDGET_ANDROID) && defined(NIGHTLY_BUILD)
2971   value: 3000
2972 #else
2973   value: 0
2974 #endif
2975   mirror: always
2977 #ifdef XP_WIN
2978 - name: dom.ipc.processPriorityManager.backgroundUsesEcoQoS
2979   type: bool
2980   value: false
2981   mirror: always
2982 #endif
2984 # Support for input type=month, type=week. By default, disabled.
2985 - name: dom.forms.datetime.others
2986   type: bool
2987   value: @IS_ANDROID@
2988   mirror: always
2990 - name: dom.forms.always_allow_pointer_events.enabled
2991   type: bool
2992   value: true
2993   mirror: always
2995 # Is support for key events and focus events on disabled elements enabled?
2996 - name: dom.forms.always_allow_key_and_focus_events.enabled
2997   type: bool
2998   value: @IS_EARLY_BETA_OR_EARLIER@
2999   mirror: always
3001 # Whether to disable only the descendants or the parent fieldset element too
3002 # Note that this still allows it to be selected by `:disable`.
3003 - name: dom.forms.fieldset_disable_only_descendants.enabled
3004   type: bool
3005   value: @IS_EARLY_BETA_OR_EARLIER@
3006   mirror: always
3008 # Whether to allow or disallow web apps to cancel `beforeinput` events caused
3009 # by MozEditableElement#setUserInput() which is used by autocomplete, autofill
3010 # and password manager.
3011 - name: dom.input_event.allow_to_cancel_set_user_input
3012   type: bool
3013   value: false
3014   mirror: always
3016 # How long a content process can take before closing its IPC channel
3017 # after shutdown is initiated.  If the process exceeds the timeout,
3018 # we fear the worst and kill it.
3019 - name: dom.ipc.tabs.shutdownTimeoutSecs
3020   type: RelaxedAtomicUint32
3021 #if !defined(DEBUG) && !defined(MOZ_ASAN) && !defined(MOZ_VALGRIND) && !defined(MOZ_TSAN)
3022   value: 20
3023 #else
3024   value: 0
3025 #endif
3026   mirror: always
3028 # Whether a native event loop should be used in the content process.
3029 - name: dom.ipc.useNativeEventProcessing.content
3030   type: RelaxedAtomicBool
3031 #if defined(XP_WIN) || defined(XP_MACOSX)
3032   value: false
3033 #else
3034   value: true
3035 #endif
3036   mirror: always
3038 # If this is true, TextEventDispatcher dispatches keydown and keyup events
3039 # even during composition (keypress events are never fired during composition
3040 # even if this is true).
3041 - name: dom.keyboardevent.dispatch_during_composition
3042   type: bool
3043   value: true
3044   mirror: always
3046 # Enable/disable KeyboardEvent.initKeyEvent function
3047 - name: dom.keyboardevent.init_key_event.enabled
3048   type: bool
3049   value: false
3050   mirror: always
3052 # Enable/disable KeyboardEvent.initKeyEvent function in addons even if it's
3053 # disabled.
3054 - name: dom.keyboardevent.init_key_event.enabled_in_addons
3055   type: bool
3056   value: @IS_NOT_NIGHTLY_BUILD@
3057   mirror: always
3059 # If this is true, keypress events for non-printable keys are dispatched only
3060 # for event listeners of the system event group in web content.
3061 - name: dom.keyboardevent.keypress.dispatch_non_printable_keys_only_system_group_in_content
3062   type: bool
3063   value: true
3064   mirror: always
3066 # If this is true, "keypress" event's keyCode value and charCode value always
3067 # become same if the event is not created/initialized by JS.
3068 - name: dom.keyboardevent.keypress.set_keycode_and_charcode_to_same_value
3069   type: bool
3070   value: true
3071   mirror: always
3073 # Whether "W3C Web Manifest" processing is enabled
3074 - name: dom.manifest.enabled
3075   type: bool
3076   value: true
3077   mirror: always
3079 # Enable mapped array buffer by default.
3080 - name: dom.mapped_arraybuffer.enabled
3081   type: bool
3082   value: true
3083   mirror: always
3085 # Autoplay Policy Detection https://w3c.github.io/autoplay/
3086 - name: dom.media.autoplay-policy-detection.enabled
3087   type: RelaxedAtomicBool
3088   value: true
3089   mirror: always
3091 # WebCodecs API
3092 - name: dom.media.webcodecs.enabled
3093   type: RelaxedAtomicBool
3094   value: @IS_NIGHTLY_BUILD@
3095   mirror: always
3097 # Number of seconds of very quiet or silent audio before considering the audio
3098 # inaudible.
3099 - name: dom.media.silence_duration_for_audibility
3100   type: AtomicFloat
3101   value: 2.0f
3102   mirror: always
3104 # Inform mozjemalloc that the foreground content processes can keep more dirty
3105 # pages in memory.
3106 - name: dom.memory.foreground_content_processes_have_larger_page_cache
3107   type: bool
3108   value: true
3109   mirror: always
3111 # Enable meta-viewport support in remote APZ-enabled frames.
3112 - name: dom.meta-viewport.enabled
3113   type: RelaxedAtomicBool
3114   value: false
3115   mirror: always
3117 # Timeout clamp in ms for timeouts we clamp.
3118 - name: dom.min_timeout_value
3119   type: RelaxedAtomicInt32
3120   value: 4
3121   mirror: always
3123 # Timeout clamp in ms for background windows.
3124 - name: dom.min_background_timeout_value
3125   type: int32_t
3126   value: 1000
3127   mirror: always
3129 # Timeout clamp in ms for background windows when throttling isn't enabled.
3130 - name: dom.min_background_timeout_value_without_budget_throttling
3131   type: int32_t
3132   value: 1000
3133   mirror: always
3135 # Are missing-property use counters for certain DOM attributes enabled?
3136 - name: dom.missing_prop_counters.enabled
3137   type: bool
3138   value: true
3139   mirror: always
3141 # Whether we disable triggering mutation events for changes to style
3142 # attribute via CSSOM.
3143 # NOTE: This preference is used in unit tests. If it is removed or its default
3144 # value changes, please update test_sharedMap_static_prefs.js accordingly.
3145 - name: dom.mutation-events.cssom.disabled
3146   type: bool
3147   value: true
3148   mirror: always
3150 # Limit of location change caused by content scripts in a time span per
3151 # BrowsingContext. This includes calls to History and Location APIs.
3152 - name: dom.navigation.locationChangeRateLimit.count
3153   type: uint32_t
3154   value: 200
3155   mirror: always
3157 # Time span in seconds for location change rate limit.
3158 - name: dom.navigation.locationChangeRateLimit.timespan
3159   type: uint32_t
3160   value: 10
3161   mirror: always
3163 # Whether to allow <object> and <embed> element loads to be retargeted to an
3164 # external application or download.
3165 - name: dom.navigation.object_embed.allow_retargeting
3166   type: bool
3167   value: false
3168   mirror: always
3170 # Network Information API
3171 # This feature is not available on Firefox desktop. It exposes too much
3172 # user information. Let's be consistent and disable it on Android.
3173 # But let's keep it around in case it becomes necessary for webcompat
3174 # reasons
3175 # https://bugzilla.mozilla.org/show_bug.cgi?id=1637922
3176 - name: dom.netinfo.enabled
3177   type: RelaxedAtomicBool
3178   value: false
3179   mirror: always
3181 # Whether we should open noopener links in a new process.
3182 - name: dom.noopener.newprocess.enabled
3183   type: bool
3184   value: true
3185   mirror: always
3187 # Whether we shouldn't show an error page for unknown protocols (and should
3188 # show a console warning instead).
3189 - name: dom.no_unknown_protocol_error.enabled
3190   type: bool
3191   value: true
3192   mirror: always
3194 # Whether origin trials are enabled.
3195 - name: dom.origin-trials.enabled
3196   type: bool
3197   value: true
3198   mirror: always
3200 # Whether we use the test key to verify tokens.
3201 - name: dom.origin-trials.test-key.enabled
3202   type: bool
3203   value: false
3204   mirror: always
3206 # Origin trial state for "TestTrial".
3207 # 0: normal, 1: always-enabled, 2: always-disabled
3208 - name: dom.origin-trials.test-trial.state
3209   type: RelaxedAtomicInt32
3210   value: 0
3211   mirror: always
3213 # Origin trial state for COEP: Credentialless.
3214 # 0: normal, 1: always-enabled, 2: always-disabled
3215 - name: dom.origin-trials.coep-credentialless.state
3216   type: RelaxedAtomicInt32
3217   value: 0
3218   mirror: always
3220 # Is support for Window.paintWorklet enabled?
3221 - name: dom.paintWorklet.enabled
3222   type: bool
3223   value: false
3224   mirror: always
3226 # Enable/disable the PaymentRequest API
3227 - name: dom.payments.request.enabled
3228   type: bool
3229   value: false
3230   mirror: always
3232 # Whether a user gesture is required to call PaymentRequest.prototype.show().
3233 - name: dom.payments.request.user_interaction_required
3234   type: bool
3235   value: true
3236   mirror: always
3238 # Time in milliseconds for PaymentResponse to wait for
3239 # the Web page to call complete().
3240 - name: dom.payments.response.timeout
3241   type: uint32_t
3242   value: 5000
3243   mirror: always
3245 # Enable printing performance marks/measures to log
3246 - name: dom.performance.enable_user_timing_logging
3247   type: RelaxedAtomicBool
3248   value: false
3249   mirror: always
3251 # Enable notification of performance timing
3252 - name: dom.performance.enable_notify_performance_timing
3253   type: bool
3254   value: false
3255   mirror: always
3257 # Is support for PerformanceTiming.timeToContentfulPaint enabled?
3258 - name: dom.performance.time_to_contentful_paint.enabled
3259   type: bool
3260   value: false
3261   mirror: always
3263 # Is support for PerformanceTiming.timeToDOMContentFlushed enabled?
3264 - name: dom.performance.time_to_dom_content_flushed.enabled
3265   type: bool
3266   value: false
3267   mirror: always
3269 # Is support for PerformanceTiming.timeToFirstInteractive enabled?
3270 - name: dom.performance.time_to_first_interactive.enabled
3271   type: bool
3272   value: false
3273   mirror: always
3275 # Is support for PerformanceTiming.timeToNonBlankPaint enabled?
3276 - name: dom.performance.time_to_non_blank_paint.enabled
3277   type: bool
3278   value: false
3279   mirror: always
3281 # Is support for Permissions.revoke enabled?
3282 - name: dom.permissions.revoke.enable
3283   type: bool
3284   value: false
3285   mirror: always
3287 # Is support for Element.requestPointerLock enabled?
3288 # This is added for accessibility purpose. When user has no way to exit
3289 # pointer lock (e.g. no keyboard available), they can use this pref to
3290 # disable the Pointer Lock API altogether.
3291 - name: dom.pointer-lock.enabled
3292   type: bool
3293   value: true
3294   mirror: always
3296 # re-SAB: Whether to allow postMessage of a SharedArrayBuffer if various
3297 # preconditions related to COOP and COEP are met
3298 - name: dom.postMessage.sharedArrayBuffer.withCOOP_COEP
3299   type: bool
3300   value: true
3301   mirror: once
3303 # Overridden in all.js on RELEASE_OR_BETA in order to add the locked attribute.
3304 - name: dom.postMessage.sharedArrayBuffer.bypassCOOP_COEP.insecure.enabled
3305   type: RelaxedAtomicBool
3306   value: false
3307   mirror: always
3309 # This currently only affects XHTML. For XUL the cache is always allowed.
3310 - name: dom.prototype_document_cache.enabled
3311   type: bool
3312   value: true
3313   mirror: always
3315 # Push
3316 - name: dom.push.enabled
3317   type: RelaxedAtomicBool
3318   value: true
3319   mirror: always
3321 # This enables the SVGPathSeg APIs
3322 - name: dom.svg.pathSeg.enabled
3323   type: bool
3324   value: false
3325   mirror: always
3327 # Preference that is primarily used for testing of problematic file paths.
3328 # It can also be used for switching between different storage directories, but
3329 # such feature is not officially supported.
3330 - name: dom.quotaManager.storageName
3331   type: String
3332   value: "storage"
3333   mirror: never
3335 # An upper limit for the "age" of an origin. Any origin which is older than the
3336 # threshold is considered as unaccessed. That doesn't necessarily mean that
3337 # such origins will be immediatelly archived. They will be archived only when
3338 # dom.quotaManager.checkQuotaInfoLoadTime is true and loading of quota info
3339 # takes a long time (dom.quotaManager.longQuotaInfoLoadTimeThresholdMs is used
3340 # to decide what is a long quota info load time).
3341 - name: dom.quotaManager.unaccessedForLongTimeThresholdSec
3342   type: RelaxedAtomicUint32
3343   value: 33696000 # 13 months
3344   mirror: always
3346 # Should we try to load origin information from the cache?
3347 # See bug 1563023 for more details.
3348 - name: dom.quotaManager.loadQuotaFromCache
3349   type: RelaxedAtomicBool
3350   value: true
3351   mirror: always
3353 # Should we check build ID as part of the cache validation?
3354 # When enabled, the cache is invalidated on any upgrade (or downgrade),
3355 # ensuring that changes in how quota usage is calculated can't cause
3356 # inconsistencies at the cost of a slower initialization. Currently, this
3357 # should only be set to false in tests using a packaged profile that inherently
3358 # includes a build id different from the building running the tests. In the
3359 # future this may be set to false if we are confident that we have sufficiently
3360 # thorough schema versioning.
3361 - name: dom.quotaManager.caching.checkBuildId
3362   type: RelaxedAtomicBool
3363   value: true
3364   mirror: always
3366 # Should we check quota info load time and eventually archive some unaccessed
3367 # origins if loading of quota info takes a long time ?
3368 - name: dom.quotaManager.checkQuotaInfoLoadTime
3369   type: RelaxedAtomicBool
3370   value: true
3371   mirror: always
3373 # An upper limit for quota info load time, anything which takes longer than the
3374 # threshold is considered as long quota info load time.
3375 - name: dom.quotaManager.longQuotaInfoLoadTimeThresholdMs
3376   type: RelaxedAtomicUint32
3377   value: 21000 # 21 seconds
3378   mirror: always
3380 # Preference that users can set to override temporary storage smart limit
3381 # calculation.
3382 - name: dom.quotaManager.temporaryStorage.fixedLimit
3383   type: RelaxedAtomicInt32
3384   value: -1
3385   mirror: always
3387 # A pref that is used to enable testing features.
3388 - name: dom.quotaManager.testing
3389   type: SequentiallyConsistentAtomicBool
3390   value: false
3391   mirror: always
3393 #if defined(XP_WIN)
3394   # Preference that is used to set nsILocalFileWin::useDOSDevicePathSyntax
3395   # attribute for all local file instances created by QuotaManager and its
3396   # clients. The value of this preference is cached so changing the preference
3397   # during runtime has no effect.
3398   # See bug 1626846 for setting this to false by default.
3399 -   name: dom.quotaManager.useDOSDevicePathSyntax
3400     type: RelaxedAtomicBool
3401     value: true
3402     mirror: always
3403     do_not_use_directly: true
3405   # Preference that is used to enable the hack for overrriding xFullPathname in
3406   # QuotaVFS.
3407 -   name: dom.quotaManager.overrideXFullPathname
3408     type: RelaxedAtomicBool
3409     value: true
3410     mirror: always
3411 #elif defined(XP_UNIX)
3412   # Preference that is used to enable the overriding of Unix xFullPathname
3413   # implementation in QuotaVFS.
3414 -   name: dom.quotaManager.overrideXFullPathnameUnix
3415     type: RelaxedAtomicBool
3416     value: true
3417     mirror: always
3418 #endif
3420 # How many times we should retry directory removal or renaming if access was
3421 # denied?
3422 - name: dom.quotaManager.directoryRemovalOrRenaming.maxRetries
3423   type: RelaxedAtomicUint32
3424 #ifdef XP_WIN
3425   value: 10
3426 #else
3427   value: 0
3428 #endif
3429   mirror: always
3431 # How long we should wait between retries (in milliseconds)?
3432 - name: dom.quotaManager.directoryRemovalOrRenaming.delayMs
3433   type: RelaxedAtomicUint32
3434   value: 200
3435   mirror: always
3437 #ifdef MOZ_BACKGROUNDTASKS
3438 # Use a Background Task to delete files at shutdown.
3439 - name: dom.quotaManager.backgroundTask.enabled
3440   type: bool
3441 #ifdef XP_MACOSX
3442 # Needs to figure out how to prevent bug 1827486.
3443   value: false
3444 #else
3445   value: true
3446 #endif
3447   mirror: never
3448 #endif
3450 # Use to control to dump CheckedUnsafePtr creation stack and assignment stacks.
3451 - name: dom.checkedUnsafePtr.dumpStacks.enabled
3452   type: RelaxedAtomicBool
3453   value: false
3454   mirror: always
3456 # Determines within what distance of a tick mark, in pixels, dragging an input
3457 # range range will snap the range's value to that tick mark. By default, this is
3458 # half the default width of the range thumb.
3459 - name: dom.range_element.magnet_effect_threshold
3460   type: float
3461   value: 10.0f
3462   mirror: always
3464 # Reporting API.
3465 - name: dom.reporting.enabled
3466   type: RelaxedAtomicBool
3467   value: false
3468   mirror: always
3470 - name: dom.reporting.testing.enabled
3471   type: RelaxedAtomicBool
3472   value: false
3473   mirror: always
3475 - name: dom.reporting.featurePolicy.enabled
3476   type: RelaxedAtomicBool
3477   value: false
3478   mirror: always
3480 - name: dom.reporting.crash.enabled
3481   type: RelaxedAtomicBool
3482   value: false
3483   mirror: always
3485 - name: dom.reporting.header.enabled
3486   type: RelaxedAtomicBool
3487   value: false
3488   mirror: always
3490 # In seconds. The timeout to remove not-active report-to endpoints.
3491 - name: dom.reporting.cleanup.timeout
3492   type: uint32_t
3493   value: 3600
3494   mirror: always
3496 # Any X seconds the reports are dispatched to endpoints.
3497 - name: dom.reporting.delivering.timeout
3498   type: uint32_t
3499   value: 5
3500   mirror: always
3502 # How many times the delivering of a report should be tried.
3503 - name: dom.reporting.delivering.maxFailures
3504   type: uint32_t
3505   value: 3
3506   mirror: always
3508 # How many reports should be stored in the report queue before being delivered.
3509 - name: dom.reporting.delivering.maxReports
3510   type: uint32_t
3511   value: 100
3512   mirror: always
3514 # Enable Screen Orientation lock
3515 - name: dom.screenorientation.allow-lock
3516   type: bool
3517   value: @IS_NIGHTLY_BUILD@
3518   mirror: always
3520 # Enable Screen Wake Lock API
3521 - name: dom.screenwakelock.enabled
3522   type: bool
3523   value: @IS_EARLY_BETA_OR_EARLIER@
3524   mirror: always
3526 # Whether to enable the JavaScript start-up cache. This causes one of the first
3527 # execution to record the bytecode of the JavaScript function used, and save it
3528 # in the existing cache entry. On the following loads of the same script, the
3529 # bytecode would be loaded from the cache instead of being generated once more.
3530 - name: dom.script_loader.bytecode_cache.enabled
3531   type: bool
3532   value: true
3533   mirror: always
3535 # Ignore the heuristics of the bytecode cache, and always record on the first
3536 # visit. (used for testing purposes).
3538 # Choose one strategy to use to decide when the bytecode should be encoded and
3539 # saved. The following strategies are available right now:
3540 #   * -2 : (reader mode) The bytecode cache would be read, but it would never
3541 #          be saved.
3542 #   * -1 : (eager mode) The bytecode would be saved as soon as the script is
3543 #          seen for the first time, independently of the size or last access
3544 #          time.
3545 #   *  0 : (default) The bytecode would be saved in order to minimize the
3546 #          page-load time.
3548 # Other values might lead to experimental strategies. For more details, have a
3549 # look at: ScriptLoader::ShouldCacheBytecode function.
3550 - name: dom.script_loader.bytecode_cache.strategy
3551   type: int32_t
3552   value: 0
3553   mirror: always
3555 # Select which parse/delazification strategy should be used while parsing
3556 # scripts off-main-thread. (see CompileOptions.h, DelazificationOption enum)
3558 #   0: On-demand only. Delazification will be triggered only on the main thread
3559 #      before the execution of the function.
3561 #   1: Compare on-demand delazification (= 0) with concurrent depth-first
3562 #      delazification (= 2).
3564 #   2: Depth-first. Delazify all functions off-thread in the order of appearance
3565 #      in the source.
3567 #   3: Large-first. Delazify all functions off-thread starting with the largest
3568 #      functions first, and the smallest as the last one to be delazified, where
3569 #      the size of function is measured in bytes between the start to the end of
3570 #      the function.
3572 # 255: Parse everything eagerly, from the first parse. All functions are parsed
3573 #      at the same time as the top-level of a file.
3574 - name: dom.script_loader.delazification.strategy
3575   type: uint32_t
3576   value: 255
3577   mirror: always
3579 # Maximum total size after which the delazification strategy, specified by
3580 # `dom.script_loader.delazification.strategy`, is no longer applied, and the
3581 # on-demand strategy is used by default.
3583 # -1 disable the threshold, and delazification strategy is applied to all
3584 # scripts.
3586 # Default value is 10MB for utf8 scripts.
3587 - name: dom.script_loader.delazification.max_size
3588   type: int32_t
3589   value: 10485760
3590   mirror: always
3592 # Minimum memory, in GB, required to enable delazification strategy, specified
3593 # by `dom.script_loader.delazification.strategy`. Otherwise, the on-demand
3594 # delazification strategy is used.
3595 - name: dom.script_loader.delazification.min_mem
3596   type: int32_t
3597   value: 2
3598   mirror: always
3600 # Enable  speculative off main thread parsing of external scripts as
3601 # soon as they are fetched.
3602 - name: dom.script_loader.external_scripts.speculative_omt_parse.enabled
3603   type: bool
3604   value: true
3605   mirror: always
3607 # Speculatively compile non parser inserted scripts
3608 - name: dom.script_loader.external_scripts.speculate_non_parser_inserted.enabled
3609   type: bool
3610   value: false
3611   mirror: always
3613 # Speculatively compile async scripts
3614 - name: dom.script_loader.external_scripts.speculate_async.enabled
3615   type: bool
3616   value: false
3617   mirror: always
3619 # Speculatively compile link preload scripts
3620 - name: dom.script_loader.external_scripts.speculate_link_preload.enabled
3621   type: bool
3622   value: false
3623   mirror: always
3625 - name: dom.securecontext.allowlist_onions
3626   type: bool
3627   value: false
3628   mirror: always
3630 # This pref enables the featurePolicy header support.
3631 - name: dom.security.featurePolicy.header.enabled
3632   type: bool
3633   value: false
3634   mirror: always
3636 - name: dom.security.featurePolicy.experimental.enabled
3637   type: bool
3638   value: false
3639   mirror: always
3641 # Expose the 'featurePolicy' attribute in document and HTMLIFrameElement
3642 - name: dom.security.featurePolicy.webidl.enabled
3643   type: bool
3644   value: false
3645   mirror: always
3647 # Perform IPC based Principal vetting in ContentParent
3648 - name: dom.security.enforceIPCBasedPrincipalVetting
3649   type: RelaxedAtomicBool
3650   value: true
3651   mirror: always
3653 # For testing purposes only: Flipping this pref to true allows
3654 # to skip the allowlist for about: pages and do not ship with a
3655 # CSP and NS_ASSERT right away.
3656 - name: dom.security.skip_about_page_csp_allowlist_and_assert
3657   type: RelaxedAtomicBool
3658   value: false
3659   mirror: always
3661 # For testing purposes only: Flipping this pref to true allows
3662 # to skip the assertion that every about page ships with a CSP.
3663 - name: dom.security.skip_about_page_has_csp_assert
3664   type: RelaxedAtomicBool
3665   value: false
3666   mirror: always
3668 # For testing purposes only: Flipping this pref to true allows
3669 # to skip the assertion that HTML fragments (e.g. innerHTML) can
3670 # not be used within chrome code or about: pages.
3671 - name: dom.security.skip_html_fragment_assertion
3672   type: RelaxedAtomicBool
3673   value: false
3674   mirror: always
3676 # For testing purposes only; Flipping this pref to true allows
3677 # to skip the assertion that remote scripts can not be loaded
3678 # in system privileged contexts.
3679 - name: dom.security.skip_remote_script_assertion_in_system_priv_context
3680   type: RelaxedAtomicBool
3681   value: false
3682   mirror: always
3684 # If and only if true, support for Trusted Types
3685 # (https://w3c.github.io/trusted-types/dist/spec/) is enabled.
3686 - name: dom.security.trusted_types.enabled
3687   type: RelaxedAtomicBool
3688   value: False
3689   mirror: always
3691 # If true, all content requests will get upgraded to HTTPS://
3692 # (some Firefox functionality requests, like OCSP will not be affected)
3693 - name: dom.security.https_only_mode
3694   type: RelaxedAtomicBool
3695   value: false
3696   mirror: always
3698 # If true, all content requests in Private Browsing Mode will get
3699 # upgraded to HTTPS://. (If dom.security.https_only_mode is set
3700 # to true then this pref has no effect)
3701 - name: dom.security.https_only_mode_pbm
3702   type: RelaxedAtomicBool
3703   value: false
3704   mirror: always
3706 # If true, sends http background request for top-level sites to
3707 # counter long timeouts.
3708 - name: dom.security.https_only_mode_send_http_background_request
3709   type: RelaxedAtomicBool
3710   value: true
3711   mirror: always
3713 # Time limit, in milliseconds, before sending the http background
3714 # request for HTTPS-Only and HTTPS-First
3715 - name: dom.security.https_only_fire_http_request_background_timer_ms
3716   type: RelaxedAtomicUint32
3717   value: 3000
3718   mirror: always
3720 # If true, tries to break upgrade downgrade cycles where https-only tries
3721 # to upgrad ethe connection, but the website tries to downgrade again.
3722 - name: dom.security.https_only_mode_break_upgrade_downgrade_endless_loop
3723   type: RelaxedAtomicBool
3724   value: true
3725   mirror: always
3727 # If true, when checking if it's upgrade downgrade cycles, the URI path will be
3728 # also checked.
3729 - name: dom.security.https_only_check_path_upgrade_downgrade_endless_loop
3730   type: RelaxedAtomicBool
3731   value: true
3732   mirror: always
3734 # If true and HTTPS-only mode is enabled, requests
3735 # to local IP addresses are also upgraded
3736 - name: dom.security.https_only_mode.upgrade_local
3737   type: RelaxedAtomicBool
3738   value: false
3739   mirror: always
3741 # If true and HTTPS-only mode is enabled, requests
3742 # to .onion hosts are also upgraded
3743 - name: dom.security.https_only_mode.upgrade_onion
3744   type: RelaxedAtomicBool
3745   value: false
3746   mirror: always
3748 # WARNING: Don't ever update that pref manually! It is only used
3749 # for telemetry purposes and allows to reason about retention of
3750 # the pref dom.security.https_only_mode from above.
3751 - name: dom.security.https_only_mode_ever_enabled
3752   type: RelaxedAtomicBool
3753   value: false
3754   mirror: always
3756 # WARNING: Don't ever update that pref manually! It is only used
3757 # for telemetry purposes and allows to reason about retention of
3758 # the pref dom.security.https_only_mode_pbm from above.
3759 - name: dom.security.https_only_mode_ever_enabled_pbm
3760   type: RelaxedAtomicBool
3761   value: false
3762   mirror: always
3764 # If true checks for secure www connections when https fails
3765 # and gives the user suggestions on the error page
3766 - name: dom.security.https_only_mode_error_page_user_suggestions
3767   type: RelaxedAtomicBool
3768   value: false
3769   mirror: always
3771 # If true, top-level request will get upgraded to HTTPS and
3772 # downgraded again if the request failed.
3773 - name: dom.security.https_first
3774   type: RelaxedAtomicBool
3775   value: false
3776   mirror: always
3778 # If true, top-level requests in Private Browsing Mode will get
3779 # upgraded to HTTPS. (If dom.security.https_first
3780 # is set to true then this pref has no effect)
3781 - name: dom.security.https_first_pbm
3782   type: RelaxedAtomicBool
3783   value: true
3784   mirror: always
3786 # If true, top-level requests that are initiated from the address
3787 # bar and with an empty scheme get upgraded to HTTPS
3788 # with a fallback
3789 - name: dom.security.https_first_schemeless
3790   type: RelaxedAtomicBool
3791   value: @IS_EARLY_BETA_OR_EARLIER@
3792   mirror: always
3794 - name: dom.security.unexpected_system_load_telemetry_enabled
3795   type: bool
3796   value: true
3797   mirror: always
3799 # pref controls `Sanitizer` API being exposed
3800 # https://wicg.github.io/sanitizer-api/
3801 - name: dom.security.sanitizer.enabled
3802   type: bool
3803   value: false
3804   mirror: always
3806 # Pref that controls the Element.setHTML API idenpendetly of the sanitizer
3807 # API.
3808 - name: dom.security.setHTML.enabled
3809   type: bool
3810   value: false
3811   mirror: always
3813 # Logs elements and attributes removed by the Sanitizer API to the console.
3814 - name: dom.security.sanitizer.logging
3815   type: bool
3816   value: false
3817   mirror: always
3819 # pref controls `identity` credentials being exposed
3820 - name: dom.security.credentialmanagement.identity.enabled
3821   type: bool
3822   value: false
3823   mirror: always
3825 # pref controls `identity` credential UI for testing. When true, UI is not shown and
3826 # the first option in the account and provider lists are chosen
3827 - name: dom.security.credentialmanagement.identity.select_first_in_ui_lists
3828   type: bool
3829   value: false
3830   mirror: always
3832 # pref controls `identity` credential platform behavior for testing. When true,
3833 # the .well-known file check is not performed.
3834 - name: dom.security.credentialmanagement.identity.test_ignore_well_known
3835   type: bool
3836   value: false
3837   mirror: always
3839 # pref controls whether we should delay identity credential rejections at all
3840 - name: dom.security.credentialmanagement.identity.reject_delay.enabled
3841   type: bool
3842   value: true
3843   mirror: always
3845 # pref controls how long we should delay identity credential rejections if enabled
3846 - name: dom.security.credentialmanagement.identity.reject_delay.duration_ms
3847   type: uint32_t
3848   value: 120000
3849   mirror: always
3851 # SetDocumentURI security option, enforces origin check
3852 - name: dom.security.setdocumenturi
3853   type: bool
3854   value: @IS_EARLY_BETA_OR_EARLIER@
3855   mirror: always
3857 # Whether or not selection events on text controls are enabled.
3858 - name: dom.select_events.textcontrols.selectionchange.enabled
3859   type: bool
3860   value: true
3861   mirror: always
3863 - name: dom.select_events.textcontrols.selectstart.enabled
3864   type: bool
3865   value: false
3866   mirror: always
3868 - name: dom.select.showPicker.enabled
3869   type: bool
3870   value: true
3871   mirror: always
3873 - name: dom.send_after_paint_to_content
3874   type: bool
3875   value: false
3876   mirror: always
3878 - name: dom.separate_event_queue_for_post_message.enabled
3879   type: bool
3880   value: true
3881   mirror: always
3883 - name: dom.arena_allocator.enabled
3884   type: bool
3885   value: true
3886   mirror: once
3888 - name: dom.serviceWorkers.enabled
3889   type: RelaxedAtomicBool
3890   value: true
3891   mirror: always
3893 - name: dom.serviceWorkers.navigationPreload.enabled
3894   type: RelaxedAtomicBool
3895   value: true
3896   mirror: always
3898 # Mitigates ServiceWorker navigation faults by bypassing the ServiceWorker on
3899 # navigation faults.  This is more extensive than just resetting interception
3900 # because we also mark the page as uncontrolled so that subresources will not
3901 # go to the ServiceWorker either.
3902 - name: dom.serviceWorkers.mitigations.bypass_on_fault
3903   type: bool
3904   value: true
3905   mirror: always
3907 # Additional ServiceWorker navigation mitigation control to unregister the
3908 # ServiceWorker after multiple faults are encountered. The mitigation is
3909 # disabled when this is set to zero, otherwise this is the number of faults that
3910 # need to occur for a specific ServiceWorker before it will be unregistered.
3911 - name: dom.serviceWorkers.mitigations.navigation_fault_threshold
3912   type: uint32_t
3913   value: 3
3914   mirror: always
3916 # This is the group usage head room for service workers.
3917 # The quota usage mitigation algorithm uses this preference to determine if the
3918 # origin or also group data should be cleared or not.
3919 # The default value is 400 MiB.
3920 - name: dom.serviceWorkers.mitigations.group_usage_headroom_kb
3921   type: uint32_t
3922   value: 400 * 1024
3923   mirror: always
3925 - name: dom.serviceWorkers.testing.enabled
3926   type: RelaxedAtomicBool
3927   value: false
3928   mirror: always
3930 # Whether ServiceWorkerManager should persist the service worker
3931 # registered by temporary installed extension (only meant to be used
3932 # for testing purpose, to make it easier to test some particular scenario
3933 # with a temporary installed addon, which doesn't need to be signed to be
3934 # installed on release channel builds).
3935 - name: dom.serviceWorkers.testing.persistTemporarilyInstalledAddons
3936   type: RelaxedAtomicBool
3937   value: false
3938   mirror: always
3940 - name: dom.storage.enabled
3941   type: RelaxedAtomicBool
3942   value: true
3943   mirror: always
3945 # ReadableStream.from(asyncIterable)
3946 - name: dom.streams.from.enabled
3947   type: RelaxedAtomicBool
3948   value: true
3949   mirror: always
3951 - name: dom.workers.pFetch.enabled
3952   type: RelaxedAtomicBool
3953   value: true
3954   mirror: always
3956 - name: dom.workers.importScripts.enforceStrictMimeType
3957   type: RelaxedAtomicBool
3958   value: true
3959   mirror: always
3961 # Is support for modules (new Worker(..., {type: "module"})) enabled for workers?
3962 - name: dom.workers.modules.enabled
3963   type: RelaxedAtomicBool
3964   value: true
3965   mirror: always
3967 - name: dom.workers.serialized-sab-access
3968   type: RelaxedAtomicBool
3969   value: false
3970   mirror: always
3972 # Enable stronger diagnostics on worker shutdown.
3973 # If this is true, we will potentially run an extra GCCC when a  worker should
3974 # exit its DoRunLoop but holds any WorkerRef and we will MOZ_DIAGNOSTIC_ASSERT
3975 # when during that extra GCCC such a WorkerRef is freed.
3976 - name: dom.workers.GCCC_on_potentially_last_event
3977   type: RelaxedAtomicBool
3978 #if defined(FUZZING) || defined(DEBUG)
3979   value: true
3980 #else
3981   value: false
3982 #endif
3983   mirror: always
3985 - name: dom.sitepermsaddon-provider.enabled
3986   type: bool
3987   value: @IS_NOT_ANDROID@
3988   mirror: always
3990 # Whether automatic storage access granting heuristics should be turned on.
3991 - name: dom.storage_access.auto_grants
3992   type: bool
3993   value: true
3994   mirror: always
3996 - name: dom.storage_access.auto_grants.delayed
3997   type: bool
3998   value: true
3999   mirror: always
4001 # Storage-access API.
4002 - name: dom.storage_access.enabled
4003   type: bool
4004   value: true
4005   mirror: always
4007 # Forward-Declared Storage-access API.
4008 - name: dom.storage_access.forward_declared.enabled
4009   type: bool
4010   value: false
4011   mirror: always
4013 # How long the Forward-Declared Storage-access API allows between pair requests
4014 # in seconds
4015 - name: dom.storage_access.forward_declared.lifetime
4016   type: uint32_t
4017   value: 15 * 60
4018   mirror: always
4020 # The maximum number of origins that a given third-party tracker is allowed
4021 # to have concurrent access to before the user is presented with a storage
4022 # access prompt.  Only effective when the auto_grants pref is turned on.
4023 - name: dom.storage_access.max_concurrent_auto_grants
4024   type: int32_t
4025   value: 5
4026   mirror: always
4028 - name: dom.storage_access.frame_only
4029   type: bool
4030   value: true
4031   mirror: always
4033 # Only grant storage access to secure contexts.
4034 - name: dom.storage_access.dont_grant_insecure_contexts
4035   type: RelaxedAtomicBool
4036   value: true
4037   mirror: always
4039 # Whether the File System API is enabled
4040 - name: dom.fs.enabled
4041   type: RelaxedAtomicBool
4042   value: true
4043   mirror: always
4045 # Whether the WritableFileStream is enabled or disabled.
4046 - name: dom.fs.writable_file_stream.enabled
4047   type: RelaxedAtomicBool
4048   value: true
4049   mirror: always
4051 # LocalStorage data limit as determined by summing up the lengths of all string
4052 # keys and values. This is consistent with the legacy implementation and other
4053 # browser engines. This value should really only ever change in unit testing
4054 # where being able to lower it makes it easier for us to test certain edge
4055 # cases. Measured in KiBs.
4056 - name: dom.storage.default_quota
4057   type: RelaxedAtomicUint32
4058   # Only allow relatively small amounts of data since performance of the
4059   # synchronous IO is very bad. We are enforcing simple per-origin quota only.
4060   value: 5 * 1024
4061   mirror: always
4063 # Per-site quota for legacy LocalStorage implementation.
4064 - name: dom.storage.default_site_quota
4065   type: RelaxedAtomicUint32
4066   value: 25 * 1024
4067   mirror: always
4069 # Whether or not the unsupported legacy implemenation should be enabled. Please
4070 # don't advertise this pref as a way for disabling LSNG. This pref is intended
4071 # for internal testing only and will be removed in near future. Accidental
4072 # disabling of LSNG can lead to a data loss in a combination with disabled
4073 # shadow writes. Disabling of shadow writes is the initial step towards
4074 # removing legacy implementation and will be done soon.
4075 - name: dom.storage.enable_unsupported_legacy_implementation
4076   type: RelaxedAtomicBool
4077   value: false
4078   mirror: always
4079   do_not_use_directly: true
4081 # The amount of snapshot peak usage which is attempted to be pre-incremented
4082 # during snapshot creation.
4083 - name: dom.storage.snapshot_peak_usage.initial_preincrement
4084   type: RelaxedAtomicUint32
4085   value: 16384
4086   mirror: always
4088 # The amount of snapshot peak usage which is attempted to be pre-incremented
4089 # during snapshot creation if the LocalStorage usage was already close to the
4090 # limit (a fallback for dom.storage.snapshot_peak_usage.initial_preincrement).
4091 - name: dom.storage.snapshot_peak_usage.reduced_initial_preincrement
4092   type: RelaxedAtomicUint32
4093   value: 4096
4094   mirror: always
4096 # The amount of snapshot peak usage which is attempted to be pre-incremented
4097 # beyond the specific values which are subsequently requested after snapshot
4098 # creation.
4099 - name: dom.storage.snapshot_peak_usage.gradual_preincrement
4100   type: RelaxedAtomicUint32
4101   value: 4096
4102   mirror: always
4104 # The amount of snapshot peak usage which is attempted to be pre-incremented
4105 # beyond the specific values which are subsequently requested after snapshot
4106 # creation if the LocalStorage total usage was already close to the limit
4107 # (a fallback for dom.storage.snapshot_peak_usage.gradual_preincrement).
4108 - name: dom.storage.snapshot_peak_usage.reduced_gradual_preincrement
4109   type: RelaxedAtomicUint32
4110   value: 1024
4111   mirror: always
4113 # How long between a snapshot becomes idle and when we actually finish the
4114 # snapshot. This preference is only used when "dom.storage.snapshot_reusing"
4115 # is true.
4116 - name: dom.storage.snapshot_idle_timeout_ms
4117   type: uint32_t
4118   value: 5000
4119   mirror: always
4121 # Is support for Storage test APIs enabled?
4122 - name: dom.storage.testing
4123   type: bool
4124   value: false
4125   mirror: always
4127 # For area and anchor elements with target=_blank and no rel set to
4128 # opener/noopener.
4129 - name: dom.targetBlankNoOpener.enabled
4130   type: bool
4131   value: true
4132   mirror: always
4134 # Is support for Selection.GetRangesForInterval enabled?
4135 - name: dom.testing.selection.GetRangesForInterval
4136   type: bool
4137   value: false
4138   mirror: always
4140 - name: dom.testing.structuredclonetester.enabled
4141   type: RelaxedAtomicBool
4142   value: false
4143   mirror: always
4145 - name: dom.testing.sync-content-blocking-notifications
4146   type: bool
4147   value: false
4148   mirror: always
4150 # To enable TestUtils interface on WPT
4151 - name: dom.testing.testutils.enabled
4152   type: RelaxedAtomicBool
4153   value: false
4154   mirror: always
4156 - name: dom.textMetrics.actualBoundingBox.enabled
4157   type: RelaxedAtomicBool
4158   value: true
4159   mirror: always
4161 - name: dom.textMetrics.baselines.enabled
4162   type: RelaxedAtomicBool
4163   value: true
4164   mirror: always
4166 - name: dom.textMetrics.emHeight.enabled
4167   type: RelaxedAtomicBool
4168   value: true
4169   mirror: always
4171 - name: dom.textMetrics.fontBoundingBox.enabled
4172   type: RelaxedAtomicBool
4173   value: true
4174   mirror: always
4176 # Time (in ms) that it takes to regenerate 1ms.
4177 - name: dom.timeout.background_budget_regeneration_rate
4178   type: int32_t
4179   value: 100
4180   mirror: always
4182 # Time (in ms) that it takes to regenerate 1ms.
4183 - name: dom.timeout.foreground_budget_regeneration_rate
4184   type: int32_t
4185   value: 1
4186   mirror: always
4188 # Maximum value (in ms) for the background budget. Only valid for
4189 # values greater than 0.
4190 - name: dom.timeout.background_throttling_max_budget
4191   type: int32_t
4192   value: 50
4193   mirror: always
4195 # Maximum value (in ms) for the foreground budget. Only valid for
4196 # values greater than 0.
4197 - name: dom.timeout.foreground_throttling_max_budget
4198   type: int32_t
4199   value: -1
4200   mirror: always
4202 # The maximum amount a timeout can be delayed by budget throttling.
4203 - name: dom.timeout.budget_throttling_max_delay
4204   type: int32_t
4205   value: 15000
4206   mirror: always
4208 # Turn on budget throttling by default.
4209 - name: dom.timeout.enable_budget_timer_throttling
4210   type: bool
4211   value: true
4212   mirror: always
4214 # Should we defer timeouts and intervals while loading a page.  Released
4215 # on Idle or when the page is loaded.
4216 - name: dom.timeout.defer_during_load
4217   type: bool
4218   value: true
4219   mirror: always
4221 # Maximum amount of time in milliseconds consecutive setTimeout()/setInterval()
4222 # callback are allowed to run before yielding the event loop.
4223 - name: dom.timeout.max_consecutive_callbacks_ms
4224   type: uint32_t
4225   value: 4
4226   mirror: always
4228 # Maximum deferral time for setTimeout/Interval in milliseconds
4229 - name: dom.timeout.max_idle_defer_ms
4230   type: uint32_t
4231   value: 10*1000
4232   mirror: always
4234 # Delay in ms from document load until we start throttling background timeouts.
4235 - name: dom.timeout.throttling_delay
4236   type: int32_t
4237   value: 30000
4238   mirror: always
4240 # UDPSocket API
4241 - name: dom.udpsocket.enabled
4242   type: bool
4243   value: false
4244   mirror: always
4246 # Whether to dump worker use counters
4247 - name: dom.use_counters.dump.worker
4248   type: RelaxedAtomicBool
4249   value: false
4250   mirror: always
4252 # Whether to dump document use counters
4253 - name: dom.use_counters.dump.document
4254   type: bool
4255   value: false
4256   mirror: always
4258 # Whether to dump page use counters
4259 - name: dom.use_counters.dump.page
4260   type: bool
4261   value: false
4262   mirror: always
4264 # Time limit, in milliseconds, for user gesture transient activation.
4265 - name: dom.user_activation.transient.timeout
4266   type: uint32_t
4267   value: 5000
4268   mirror: always
4270 # Whether to treat the clicks on scrollbars as user interaction with web content.
4271 - name: dom.user_activation.ignore_scrollbars
4272   type: bool
4273   value: true
4274   mirror: always
4276 # Whether to shim a Components object on untrusted windows.
4277 - name: dom.use_components_shim
4278   type: bool
4279   value: @IS_NOT_NIGHTLY_BUILD@
4280   mirror: always
4282 - name: dom.vibrator.enabled
4283   type: bool
4284   value: true
4285   mirror: always
4287 - name: dom.vibrator.max_vibrate_ms
4288   type: RelaxedAtomicUint32
4289   value: 10000
4290   mirror: always
4292 - name: dom.vibrator.max_vibrate_list_len
4293   type: RelaxedAtomicUint32
4294   value: 128
4295   mirror: always
4297 # Is support for WebVR APIs enabled?
4298 # Disabled everywhere, but not removed.
4299 - name: dom.vr.enabled
4300   type: RelaxedAtomicBool
4301   value: false
4302   mirror: always
4304 # Should VR sessions always be reported as supported, without first
4305 # checking for VR runtimes?  This will prevent permission prompts
4306 # from being suppressed on machines without VR runtimes and cause
4307 # navigator.xr.isSessionSupported to always report that immersive-vr
4308 # is supported.
4309 - name: dom.vr.always_support_vr
4310   type: RelaxedAtomicBool
4311   value: false
4312   mirror: always
4314 # Should AR sessions always be reported as supported, without first
4315 # checking for AR runtimes?  This will prevent permission prompts
4316 # from being suppressed on machines without AR runtimes and cause
4317 # navigator.xr.isSessionSupported to always report that immersive-ar
4318 # is supported.
4319 - name: dom.vr.always_support_ar
4320   type: RelaxedAtomicBool
4321   value: false
4322   mirror: always
4324 # It is often desirable to automatically start vr presentation when
4325 # a user puts on the VR headset.  This is done by emitting the
4326 # Window.vrdisplayactivate event when the headset's sensors detect it
4327 # being worn.  This can result in WebVR content taking over the headset
4328 # when the user is using it outside the browser or inadvertent start of
4329 # presentation due to the high sensitivity of the proximity sensor in some
4330 # headsets, so it is off by default.
4331 - name: dom.vr.autoactivate.enabled
4332   type: RelaxedAtomicBool
4333   value: false
4334   mirror: always
4336 # Minimum number of milliseconds that the browser will wait before
4337 # attempting to poll again for connected VR controllers.  The browser
4338 # will not attempt to poll for VR controllers until it needs to use them.
4339 - name: dom.vr.controller.enumerate.interval
4340   type: RelaxedAtomicInt32
4341   value: 1000
4342   mirror: always
4344 # The threshold value of trigger inputs for VR controllers.
4345 - name: dom.vr.controller_trigger_threshold
4346   type: AtomicFloat
4347   value: 0.1f
4348   mirror: always
4350 # Minimum number of milliseconds that the browser will wait before
4351 # attempting to poll again for connected VR displays.  The browser
4352 # will not attempt to poll for VR displays until it needs to use
4353 # them, such as when detecting a WebVR site.
4354 - name: dom.vr.display.enumerate.interval
4355   type: RelaxedAtomicInt32
4356   value: 5000
4357   mirror: always
4359 # The number of milliseconds since last frame start before triggering a new
4360 # frame. When content is failing to submit frames on time or the lower level
4361 # VR platform APIs are rejecting frames, it determines the rate at which RAF
4362 # callbacks will be called.
4363 - name: dom.vr.display.rafMaxDuration
4364   type: RelaxedAtomicUint32
4365   value: 50
4366   mirror: always
4368 # Minimum number of milliseconds the browser will wait before attempting
4369 # to re-start the VR service after an enumeration returned no devices.
4370 - name: dom.vr.external.notdetected.timeout
4371   type: RelaxedAtomicInt32
4372   value: 60000
4373   mirror: always
4375 # Minimum number of milliseconds the browser will wait before attempting
4376 # to re-start the VR service after a VR API (eg, OpenVR or Oculus)
4377 # requests that we shutdown and unload its libraries.
4378 # To ensure that we don't interfere with VR runtime software auto-updates,
4379 # we will not attempt to re-load the service until this timeout has elapsed.
4380 - name: dom.vr.external.quit.timeout
4381   type: RelaxedAtomicInt32
4382   value: 10000
4383   mirror: always
4385 # Minimum number of milliseconds that the VR session will be kept
4386 # alive after the browser and content no longer are using the
4387 # hardware.  If a VR multitasking environment, this should be set
4388 # very low or set to 0.
4389 - name: dom.vr.inactive.timeout
4390   type: RelaxedAtomicInt32
4391   value: 5000
4392   mirror: always
4394 # Maximum number of milliseconds the browser will wait for content to call
4395 # VRDisplay.requestPresent after emitting vrdisplayactivate during VR
4396 # link traversal.  This prevents a long running event handler for
4397 # vrdisplayactivate from later calling VRDisplay.requestPresent, which would
4398 # result in a non-responsive browser in the VR headset.
4399 - name: dom.vr.navigation.timeout
4400   type: RelaxedAtomicInt32
4401   value: 5000
4402   mirror: always
4404 # Oculus device
4405 - name: dom.vr.oculus.enabled
4406   type: RelaxedAtomicBool
4407 #if defined(HAVE_64BIT_BUILD) && !defined(ANDROID)
4408   # We are only enabling WebVR by default on 64-bit builds (Bug 1384459).
4409   value: true
4410 #else
4411   # On Android, this pref is irrelevant.
4412   value: false
4413 #endif
4414   mirror: always
4416 # When enabled, Oculus sessions may be created with the ovrInit_Invisible
4417 # flag if a page is using tracking but not presenting.  When a page
4418 # begins presenting VR frames, the session will be re-initialized without
4419 # the flag.  This eliminates the "Firefox not responding" warnings in
4420 # the headset, but might not be compatible with all versions of the Oculus
4421 # runtime.
4422 - name: dom.vr.oculus.invisible.enabled
4423   type: RelaxedAtomicBool
4424   value: true
4425   mirror: always
4427 # Minimum number of milliseconds after content has stopped VR presentation
4428 # before the Oculus session is re-initialized to an invisible / tracking
4429 # only mode.  If this value is too high, users will need to wait longer
4430 # after stopping WebVR presentation before automatically returning to the
4431 # Oculus home interface.  (They can immediately return to the Oculus Home
4432 # interface through the Oculus HUD without waiting this duration)
4433 # If this value is too low, the Oculus Home interface may be visible
4434 # momentarily during VR link navigation.
4435 - name: dom.vr.oculus.present.timeout
4436   type: RelaxedAtomicInt32
4437   value: 500
4438   mirror: always
4440 # OpenVR device
4441 - name: dom.vr.openvr.enabled
4442   type: RelaxedAtomicBool
4443 #if !defined(HAVE_64BIT_BUILD) && !defined(ANDROID)
4444   # We are only enabling WebVR by default on 64-bit builds (Bug 1384459).
4445   value: false
4446 #elif defined(XP_WIN) || defined(XP_MACOSX)
4447   # We enable OpenVR by default for Windows and macOS.
4448   value: true
4449 #else
4450   # See Bug 1310663 (Linux).  On Android, this pref is irrelevant.
4451   value: false
4452 #endif
4453   mirror: always
4455 # OSVR device
4456 - name: dom.vr.osvr.enabled
4457   type: RelaxedAtomicBool
4458   value: false
4459   mirror: always
4461 # Pose prediction reduces latency effects by returning future predicted HMD
4462 # poses to callers of the WebVR API.  This currently only has an effect for
4463 # Oculus Rift on SDK 0.8 or greater.
4464 - name: dom.vr.poseprediction.enabled
4465   type: RelaxedAtomicBool
4466   value: true
4467   mirror: always
4469 # Enable a separate process for VR module.
4470 - name: dom.vr.process.enabled
4471   type: bool
4472 #if defined(XP_WIN)
4473   value: true
4474 #else
4475   value: false
4476 #endif
4477   mirror: once
4479 - name: dom.vr.process.startup_timeout_ms
4480   type: int32_t
4481   value: 5000
4482   mirror: once
4484 # Puppet device, used for simulating VR hardware within tests and dev tools.
4485 - name: dom.vr.puppet.enabled
4486   type: RelaxedAtomicBool
4487   value: false
4488   mirror: always
4490 # Starting VR presentation is only allowed within a user gesture or event such
4491 # as VRDisplayActivate triggered by the system. dom.vr.require-gesture allows
4492 # this requirement to be disabled for special cases such as during automated
4493 # tests or in a headless kiosk system.
4494 - name: dom.vr.require-gesture
4495   type: RelaxedAtomicBool
4496   value: true
4497   mirror: always
4499 # Is support for WebXR APIs enabled?
4500 - name: dom.vr.webxr.enabled
4501   type: RelaxedAtomicBool
4502   value: false
4503   mirror: always
4505 # Points in the native bounds geometry are required to be quantized
4506 # sufficiently to prevent fingerprinting. The WebXR spec suggests
4507 # quantizing to the nearest 5 centimeters.
4508 - name: dom.vr.webxr.quantization
4509   type: AtomicFloat
4510   value: 0.05f
4511   mirror: always
4513 #ifdef XP_WIN
4514   # Control firing WidgetMouseEvent by handling Windows pointer messages or
4515   # mouse messages.
4516 -   name: dom.w3c_pointer_events.dispatch_by_pointer_messages
4517     type: bool
4518     value: true
4519     mirror: always
4521 -   name: dom.w3c_pointer_events.scroll_by_pen.enabled
4522     type: bool
4523     value: true
4524     mirror: always
4525 #endif
4527 # If the value is >= 0, it will be used for max touch points in child processes.
4528 - name: dom.maxtouchpoints.testing.value
4529   type: int32_t
4530   value: -1
4531   mirror: always
4533 # Maximum value of navigator.hardwareConcurrency.
4534 - name: dom.maxHardwareConcurrency
4535   type: RelaxedAtomicUint32
4536 #ifdef NIGHTLY_BUILD
4537   value: 128
4538 #else
4539   value: 16
4540 #endif
4541   mirror: always
4543 # W3C pointer events draft.
4544 - name: dom.w3c_pointer_events.implicit_capture
4545   type: bool
4546   value: true
4547   mirror: always
4549 - name: dom.w3c_pointer_events.getcoalescedevents_only_in_securecontext
4550   type: bool
4551   value: @IS_NIGHTLY_BUILD@
4552   mirror: always
4554 # In case Touch API is enabled, this pref controls whether to support
4555 # ontouch* event handlers, document.createTouch, document.createTouchList and
4556 # document.createEvent("TouchEvent").
4557 - name: dom.w3c_touch_events.legacy_apis.enabled
4558   type: bool
4559   value: @IS_ANDROID@
4560   mirror: always
4562 # W3C touch events
4563 # 0 - disabled, 1 - enabled, 2 - autodetect
4564 # Autodetection is currently only supported on Windows and GTK3 (and assumed on
4565 # Android).
4566 - name: dom.w3c_touch_events.enabled
4567   type: int32_t
4568 #if defined(XP_MACOSX)
4569   value: 0
4570 #else
4571   value: 2
4572 #endif
4573   mirror: always
4575 # Is support for the Web Audio API enabled?
4576 - name: dom.webaudio.enabled
4577   type: bool
4578   value: true
4579   mirror: always
4581 - name: dom.webkitBlink.dirPicker.enabled
4582   type: RelaxedAtomicBool
4583   value: @IS_NOT_ANDROID@
4584   mirror: always
4586 # NOTE: This preference is used in unit tests. If it is removed or its default
4587 # value changes, please update test_sharedMap_static_prefs.js accordingly.
4588 - name: dom.webcomponents.shadowdom.report_usage
4589   type: bool
4590   value: false
4591   mirror: always
4593 # Is support for Declarative ShadowDOM enabled?
4594 - name: dom.webcomponents.shadowdom.declarative.enabled
4595   type: bool
4596   value: true
4597   mirror: always
4599 # Is support for the Web GPU API enabled?
4600 - name: dom.webgpu.enabled
4601   type: RelaxedAtomicBool
4602   value: @IS_NIGHTLY_BUILD@
4603   mirror: always
4605 # Is support for the Web GPU API enabled on DOM workers?
4606 - name: dom.webgpu.workers.enabled
4607   type: RelaxedAtomicBool
4608   value: false
4609   mirror: always
4611 # Are WebGPU indirect draws/dispatches enabled?
4612 - name: dom.webgpu.indirect-dispatch.enabled
4613   type: RelaxedAtomicBool
4614   value: false
4615   mirror: always
4617 # Comma-separated list of wgpu backend names to permit in WebGPU adapters.
4619 # If non-empty, this is parsed by `wgpu_core::instance::parse_backends_from_comma_list` to
4620 # produce a `wgpu_types::Backends` bitset used to create a `wgpu_core::hub::Global`. As of
4621 # 2023-3-22, recognized names are:
4623 #     "vulkan" | "vk" => Backends::VULKAN,
4624 #     "dx12" | "d3d12" => Backends::DX12,
4625 #     "dx11" | "d3d11" => Backends::DX11,
4626 #     "metal" | "mtl" => Backends::METAL,
4627 #     "opengl" | "gles" | "gl" => Backends::GL,
4628 #     "webgpu" => Backends::BROWSER_WEBGPU,
4629 - name: dom.webgpu.wgpu-backend
4630   type: DataMutexString
4631   value: ""
4632   mirror: always
4633   rust: true
4635 - name: dom.webgpu.swap-chain.external-texture-dx12
4636   type: RelaxedAtomicBool
4637   value: false
4638   mirror: always
4639   rust: true
4641 # For testing purposes, crash if we don't get a hardware adapter.
4642 - name: dom.webgpu.testing.assert-hardware-adapter
4643   type: RelaxedAtomicBool
4644   value: false
4645   mirror: always
4646   rust: true
4648 # Whether to pass labels to the hardware abstraction layer. This is only useful when
4649 # inspecting a WebGPU workload in a GPU debugging tool like renderdoc. Enabling it
4650 # exposes poorly tested driver API surfaces so it should not be enabled by default.
4651 - name: dom.webgpu.hal-labels
4652   type: bool
4653   value: false
4654   mirror: once
4655   rust: true
4657 # Is support for HTMLInputElement.webkitEntries enabled?
4658 - name: dom.webkitBlink.filesystem.enabled
4659   type: bool
4660   value: @IS_NOT_ANDROID@
4661   mirror: always
4663 # Whether the WebMIDI API is enabled
4664 - name: dom.webmidi.enabled
4665   type: bool
4666   value: @IS_NOT_ANDROID@
4667   mirror: always
4669 # midi permission is addon-gated
4670 - name: dom.webmidi.gated
4671   type: bool
4672   value: true
4673   mirror: always
4675 - name: dom.webnotifications.allowcrossoriginiframe
4676   type: RelaxedAtomicBool
4677   value: false
4678   mirror: always
4680 - name: dom.webnotifications.enabled
4681   type: RelaxedAtomicBool
4682   value: true
4683   mirror: always
4685 - name: dom.webnotifications.privateBrowsing.enableDespiteLimitations
4686   type: RelaxedAtomicBool
4687   value: false
4688   mirror: always
4690 - name: dom.webnotifications.requireuserinteraction
4691   type: RelaxedAtomicBool
4692   value: true
4693   mirror: always
4695 - name: dom.webnotifications.requireinteraction.enabled
4696   type: RelaxedAtomicBool
4697 #if defined(XP_WIN)
4698   value: true
4699 #else
4700   value: @IS_NIGHTLY_BUILD@
4701 #endif
4702   mirror: always
4704 - name: dom.webnotifications.silent.enabled
4705   type: RelaxedAtomicBool
4706   value: @IS_NIGHTLY_BUILD@
4707   mirror: always
4709 - name: dom.webnotifications.vibrate.enabled
4710   type: RelaxedAtomicBool
4711 #if defined(MOZ_WIDGET_ANDROID)
4712   value: @IS_NIGHTLY_BUILD@
4713 #else
4714   value: false
4715 #endif
4716   mirror: always
4718 # Is support for Window.event enabled?
4719 - name: dom.window.event.enabled
4720   type: bool
4721   value: true
4722   mirror: always
4724 - name: dom.window.clientinformation.enabled
4725   type: bool
4726   value: true
4727   mirror: always
4729 # Whether Window.sizeToContent() is enabled.
4730 - name: dom.window.sizeToContent.enabled
4731   type: bool
4732   value: false
4733   mirror: always
4735 - name: dom.worker.canceling.timeoutMilliseconds
4736   type: RelaxedAtomicUint32
4737   value: 30000    # 30 seconds
4738   mirror: always
4740 - name: dom.worker.use_medium_high_event_queue
4741   type: RelaxedAtomicBool
4742   value: true
4743   mirror: always
4745 # Enables the dispatching of console log events from worker threads to the
4746 # main-thread.
4747 - name: dom.worker.console.dispatch_events_to_main_thread
4748   type: RelaxedAtomicBool
4749   value: true
4750   mirror: always
4752 - name: dom.workers.testing.enabled
4753   type: RelaxedAtomicBool
4754   value: false
4755   mirror: always
4757 # WebIDL test prefs.
4758 - name: dom.webidl.test1
4759   type: bool
4760   value: true
4761   mirror: always
4762 - name: dom.webidl.test2
4763   type: bool
4764   value: true
4765   mirror: always
4767 # WebShare API - exposes navigator.share()
4768 - name: dom.webshare.enabled
4769   type: bool
4770 #ifdef XP_WIN
4771   value: @IS_EARLY_BETA_OR_EARLIER@
4772 #else
4773   value: false
4774 #endif
4775   mirror: always
4777 # WebShare API - allows WebShare without user interaction (for tests only).
4778 - name: dom.webshare.requireinteraction
4779   type: bool
4780   value: true
4781   mirror: always
4783 # Hide the confirm dialog when a POST request is reloaded.
4784 - name: dom.confirm_repost.testing.always_accept
4785   type: bool
4786   value: false
4787   mirror: always
4789 # Whether we should suspend inactive tabs or not
4790 - name: dom.suspend_inactive.enabled
4791   type: bool
4792   value: @IS_ANDROID@
4793   mirror: always
4795 # The following three prefs control the maximum script run time before slow
4796 # script warning.
4798 # Controls the time that a content script can run before showing a
4799 # notification.
4800 - name: dom.max_script_run_time
4801   type: int32_t
4802   value: 10
4803   mirror: always
4805 # Controls whether we want to wait for user input before surfacing notifying
4806 # the parent process about a long-running script.
4807 - name: dom.max_script_run_time.require_critical_input
4808   type: bool
4809 # On desktop, we don't want to annoy the user with a notification if they're
4810 # not interacting with the browser. On Android however, we automatically
4811 # terminate long-running scripts, so we want to make sure we don't get in the
4812 # way of that by waiting for input.
4813 #if defined(MOZ_WIDGET_ANDROID)
4814   value: false
4815 #else
4816   value: true
4817 #endif
4818   mirror: always
4820 # Controls if a content script will be aborted on child process shutdown.
4821 - name: dom.abort_script_on_child_shutdown
4822   type: bool
4823   value: true
4824   mirror: always
4826 - name: dom.max_chrome_script_run_time
4827   type: int32_t
4828   value: 0
4829   mirror: always
4831 - name: dom.max_ext_content_script_run_time
4832   type: int32_t
4833   value: 5
4834   mirror: always
4836 # Let Resize Observer report the size of all fragments, and not just the
4837 # first one, as per CSSWG resolution:
4838 # https://github.com/w3c/csswg-drafts/issues/3673#issuecomment-467221565
4839 - name: dom.resize_observer.support_fragments
4840   type: bool
4841   value: false
4842   mirror: always
4844 # <iframe loading="lazy">
4845 - name: dom.iframe_lazy_loading.enabled
4846   type: RelaxedAtomicBool
4847   value: true
4848   mirror: always
4850 # Whether allowing using <tab> to move focus to root elements
4851 - name: dom.disable_tab_focus_to_root_element
4852   type: bool
4853   value: @IS_NIGHTLY_BUILD@
4854   mirror: always
4856 #---------------------------------------------------------------------------
4857 # Prefs starting with "editor"
4858 #---------------------------------------------------------------------------
4860 # Default background color of HTML editor.  This is referred only when
4861 # "editor.use_custom_colors" is set to `true`.
4862 - name: editor.background_color
4863   type: String
4864   value: "#FFFFFF"
4865   mirror: never
4867 # Whether HTMLEditor consides block or inline element with computed style or
4868 # only with the default style of HTML definition.
4869 - name: editor.block_inline_check.use_computed_style
4870   type: bool
4871   value: true
4872   mirror: always
4874 # Delay to mask last input character in password fields.
4875 # If negative value, to use platform's default behavior.
4876 # If 0, no delay to mask password.
4877 # Otherwise, password fields unmask last input character(s) during specified
4878 # time (in milliseconds).
4879 - name: editor.password.mask_delay
4880   type: int32_t
4881   value: -1
4882   mirror: always
4884 # Set to true when you test mask_delay of password editor.  If this is set
4885 # to true, "MozLastInputMasked" is fired when last input characters are
4886 # masked by timeout.
4887 - name: editor.password.testing.mask_delay
4888   type: bool
4889   value: false
4890   mirror: always
4892 # How line breakers are treated in single line editor:
4893 # * 0: Only remove the leading and trailing newlines.
4894 # * 1: Remove the first newline and all characters following it.
4895 # * 2: Replace newlines with spaces (default of Firefox).
4896 # * 3: Remove newlines from the string.
4897 # * 4: Replace newlines with commas (default of Thunderbird).
4898 # * 5: Collapse newlines and surrounding white space characters and
4899 #      remove them from the string.
4900 # Other values are treated as 1.
4901 - name: editor.singleLine.pasteNewlines
4902   type: int32_t
4903   value: 2
4904   mirror: always
4906 # Whether user pastes should be truncated.
4907 - name: editor.truncate_user_pastes
4908   type: bool
4909   value: true
4910   mirror: always
4912 # When this is set to `true`, "editor.background_color" must be set, then,
4913 # the value is treated as default background color of the HTML editor.
4914 # If `false` and "browser.display.use_system_colors" is set to `true`,
4915 # "browser.display.background_color" is used instead.
4916 # Otherwise, no color is used as default background color.
4917 # This pref is for Thunderbird and SeaMonkey.
4918 - name: editor.use_custom_colors
4919   type: bool
4920   value: false
4921   mirror: always
4923 # If this is set to `true`, CSS mode of style editor is enabled by default
4924 # unless it's a mail editor.
4925 # This pref is for Thunderbird and SeaMonkey.
4926 - name: editor.use_css
4927   type: bool
4928   value: false
4929   mirror: always
4931 # Whether enabling blink compatible white-space normalizer or keep using
4932 # Gecko's traditional white-space normalizer.
4933 - name: editor.white_space_normalization.blink_compatible
4934   type: bool
4935   value: false
4936   mirror: always
4938 # General prefs for editor, indicating whether Gecko-specific editing UI is
4939 # enabled by default. Those UIs are not implemented by any other browsers.  So,
4940 # only Firefox users can change some styles with them. This means that Firefox
4941 # users may get unexpected result of some web apps if they assume that users
4942 # cannot change such styles.
4943 - name: editor.resizing.enabled_by_default
4944   type: bool
4945   value: false
4946   mirror: always
4947 - name: editor.inline_table_editing.enabled_by_default
4948   type: bool
4949   value: false
4950   mirror: always
4951 - name: editor.positioning.enabled_by_default
4952   type: bool
4953   value: false
4954   mirror: always
4956 # Controls if a double click word selection also deletes one adjacent whitespace
4957 # (if feasible). This mimics native behaviour on MacOS.
4958 - name: editor.word_select.delete_space_after_doubleclick_selection
4959   type: bool
4960 #ifdef XP_MACOSX
4961   value: true
4962 #else
4963   value: false
4964 #endif
4965   mirror: always
4967 #---------------------------------------------------------------------------
4968 # Prefs starting with "extensions."
4969 #---------------------------------------------------------------------------
4971 # Pref that enforces the use of web_accessible_resources for content loads.
4972 # This behavior is default for MV3.  The pref controls this for MV2.
4973 - name: extensions.content_web_accessible.enabled
4974   type: bool
4975   value: false
4976   mirror: always
4978 # Whether the InstallTrigger implementation should be enabled (or hidden and
4979 # none of its methods available).
4980 - name: extensions.InstallTriggerImpl.enabled
4981   type: bool
4982   value: false
4983   mirror: always
4985 # Whether the InstallTrigger implementation should be enabled (or completely
4986 # hidden), separate from InstallTriggerImpl because InstallTrigger is improperly
4987 # used also for UA detection.
4988 - name: extensions.InstallTrigger.enabled
4989   type: bool
4990   value: @IS_NOT_EARLY_BETA_OR_EARLIER@
4991   mirror: always
4994 # Whether the background.service_worker in the extension manifest.json file
4995 # is enabled.
4996 # all.js locks the pref to false when MOZ_WEBEXT_WEBIDL_ENABLED is false.
4997 - name: extensions.backgroundServiceWorker.enabled
4998   type: bool
4999   value: false
5000   mirror: once
5002 # Maximum number of misspelled words in a text.
5003 - name: extensions.spellcheck.inline.max-misspellings
5004   type: int32_t
5005   value: 500
5006   mirror: always
5008 # Whether the extensions can register a service worker on its own.
5009 # NOTE: WebExtensions Framework ability to register a background service worker
5010 # is not controlled by this pref, only the extension code ability to use
5011 # navigator.serviceWorker.register is locked behind this pref.
5012 - name: extensions.serviceWorkerRegister.allowed
5013   type: bool
5014   value: false
5015   mirror: always
5017 # Temporary pref to allow reverting the fix to bug 1853409.
5018 # TODO bug 1856071: Remove this pref.
5019 # When true, extensions can run content scripts in about:blank documents that
5020 # have a null principal. When false, extensions require permissions to all URLs.
5021 - name: extensions.script_about_blank_without_permission
5022   type: bool
5023   value: false
5024   mirror: always
5026 # Legacy behavior on filterResponse calls on intercepted sw script requests.
5027 - name: extensions.filterResponseServiceWorkerScript.disabled
5028   type: bool
5029   value: false
5030   mirror: always
5032 # This pref governs whether we run webextensions in a separate process (true)
5033 # or the parent/main process (false)
5034 - name: extensions.webextensions.remote
5035   type: RelaxedAtomicBool
5036   value: false
5037   mirror: always
5039 # Whether to expose the MockExtensionAPI test interface in tests.
5040 # The interface MockExtensionAPI doesn't represent a real extension API,
5041 # it is only available in test and does include a series of cases useful
5042 # to test the API request handling without tying the unit test to a
5043 # specific WebExtensions API.
5044 - name: extensions.webidl-api.expose_mock_interface
5045   type: RelaxedAtomicBool
5046   value: false
5047   mirror: always
5049 # Whether to allow acccess to AddonManager to developer sites for testing
5050 # NOTE: We'd like this to be a "hidden" pref once StaticPrefs supports it.
5051 - name: extensions.webapi.testing
5052   type: RelaxedAtomicBool
5053   value: false
5054   mirror: always
5056 # Automation-only pref to allow AddonManager over insecure protocols.
5057 # NOTE: We'd like this to be a "hidden" pref once StaticPrefs supports it.
5058 - name: extensions.webapi.testing.http
5059   type: RelaxedAtomicBool
5060   value: false
5061   mirror: always
5063 # Whether to expose the AddonManager web API.
5064 - name: extensions.webapi.enabled
5065   type: RelaxedAtomicBool
5066   value: @IS_NOT_ANDROID@
5067   mirror: always
5069 #---------------------------------------------------------------------------
5070 # Prefs starting with "fission."
5071 #---------------------------------------------------------------------------
5073 # Whether to enable Fission in new windows by default.
5074 # IMPORTANT: This preference should *never* be checked directly, since any
5075 # session can contain a mix of Fission and non-Fission windows. Instead,
5076 # callers should check whether the relevant nsILoadContext has the
5077 # `useRemoteSubframes` flag set.
5078 # Callers which cannot use `useRemoteSubframes` must use
5079 # `Services.appinfo.fissionAutostart` or `mozilla::FissionAutostart()` to check
5080 # whether fission is enabled by default.
5081 - name: fission.autostart
5082   type: bool
5083   value: @IS_NOT_ANDROID@
5084   mirror: never
5086 # This pref has no effect within fission windows, it only controls the
5087 # behaviour within non-fission windows. If true, preserve browsing contexts
5088 # between process swaps.
5089 - name: fission.preserve_browsing_contexts
5090   type: bool
5091   value: true
5092   mirror: always
5094 # Disable storing the session history in the parent process, and accessing it
5095 # over IPC from the child processes.
5096 - name: fission.disableSessionHistoryInParent
5097   type: bool
5098   value: @IS_ANDROID@
5099   mirror: once
5100   do_not_use_directly: true
5102 # If session history is stored in the parent process, enable bfcache for it.
5103 - name: fission.bfcacheInParent
5104   type: bool
5105   value: true
5106   mirror: always
5107   do_not_use_directly: true
5109 # Allow renaming of processes from Private Windows to the eTLD+1 on nightly
5110 # Setting this pref creates a privacy leak, but helps greatly with
5111 # debugging.
5112 - name: fission.processPrivateWindowSiteNames
5113   type: bool
5114   value: false
5115   mirror: always
5117 # Allow renaming of process names to the eTLD+1 on all versions, NOT
5118 # including processes from Private Windows
5119 # Setting this pref creates a privacy leak, but helps greatly with
5120 # debugging
5121 - name: fission.processSiteNames
5122   type: bool
5123   value: false
5124   mirror: always
5126 # Allow showing of current profile along with process names, NOT
5127 # including processes from Private Windows
5128 # Setting this pref creates a privacy leak, but helps greatly with
5129 # debugging
5130 - name: fission.processProfileName
5131   type: bool
5132   value: false
5133   mirror: always
5135 # If true, allow process-switching documents loaded by <object> and <embed>
5136 # elements into a remote process.
5137 # NOTE: This pref has no impact outside of windows with the
5138 # `useRemoteSubframes` flag set.
5139 - name: fission.remoteObjectEmbed
5140   type: bool
5141   value: true
5142   mirror: always
5144 # The strategy used to control how sites are isolated into separate processes
5145 # when Fisison is enabled. This pref has no effect if Fission is disabled.
5146 # See the `WebContentIsolationStrategy` enum in `ProcessIsolation.cpp`.
5147 - name: fission.webContentIsolationStrategy
5148   type: uint32_t
5149   value: 1
5150   mirror: always
5152 # Time in seconds before a site loaded with the Cross-Origin-Opener-Policy
5153 # header is no longer considered high-value and isolated in the "highValueCOOP"
5154 # configuration.
5155 - name: fission.highValue.coop.expiration
5156   type: uint32_t
5157   value: 2592000   # 30 days (in seconds)
5158   mirror: always
5160 # Time in seconds before a site are considered high-value by the login detection
5161 # service is no longer considered high-value and isolated in the "highValueHasSavedLogin"
5162 # or "highValueIsLoggedIn" configuration.
5163 - name: fission.highValue.login.expiration
5164   type: uint32_t
5165   value: 2592000   # 30 days (in seconds)
5166   mirror: always
5168 # If true, capture login attemp, and add "highValueIsLoggedIn" permission to
5169 # the permission manager no matter whether fission is enabled and
5170 # WebContentIsolationStrateg is set to IsolateHighvalue.
5171 - name: fission.highValue.login.monitor
5172   type: bool
5173   value: @IS_ANDROID@
5174   mirror: always
5176 # If true, do not send blocklisted preference values to the subprocess
5177 - name: fission.omitBlocklistedPrefsInSubprocesses
5178   type: RelaxedAtomicBool
5179   value: true
5180   mirror: always
5182 # If true, crash when a blocklisted preference is accessed in a subprocess
5183 - name: fission.enforceBlocklistedPrefsInSubprocesses
5184   type: RelaxedAtomicBool
5185   value: @IS_EARLY_BETA_OR_EARLIER@
5186   mirror: always
5188 #---------------------------------------------------------------------------
5189 # Prefs starting with "font."
5190 #---------------------------------------------------------------------------
5192 # A value greater than zero enables font size inflation for
5193 # pan-and-zoom UIs, so that the fonts in a block are at least the size
5194 # that, if a block's width is scaled to match the device's width, the
5195 # fonts in the block are big enough that at most the pref value ems of
5196 # text fit in *the width of the device*.
5198 # When both this pref and the next are set, the larger inflation is used.
5199 - name: font.size.inflation.emPerLine
5200   type: uint32_t
5201   value: 0
5202   mirror: always
5204 # A value greater than zero enables font size inflation for
5205 # pan-and-zoom UIs, so that if a block's width is scaled to match the
5206 # device's width, the fonts in a block are at least the given font size.
5207 # The value given is in twips, i.e., 1/20 of a point, or 1/1440 of an inch.
5209 # When both this pref and the previous are set, the larger inflation is used.
5210 - name: font.size.inflation.minTwips
5211   type: uint32_t
5212   value: 0
5213   mirror: always
5215 # In products with multi-mode pan-and-zoom and non-pan-and-zoom UIs,
5216 # this pref forces font inflation to always be enabled in all modes.
5217 # That is, any heuristics used to detect pan-and-zoom
5218 # vs. non-pan-and-zoom modes are disabled and all content is treated
5219 # as pan-and-zoom mode wrt font inflation.
5221 # This pref has no effect if font inflation is not enabled through
5222 # either of the prefs above.  It has no meaning in single-mode UIs.
5223 - name: font.size.inflation.forceEnabled
5224   type: bool
5225   value: false
5226   mirror: always
5228 # In products with multi-mode pan-and-zoom and non-pan-and-zoom UIs,
5229 # this pref disables font inflation in master-process contexts where
5230 # existing heuristics can't be used determine enabled-ness.
5232 # This pref has no effect if font inflation is not enabled through
5233 # either of the prefs above.  The "forceEnabled" pref above overrides
5234 # this pref.
5235 - name: font.size.inflation.disabledInMasterProcess
5236   type: bool
5237   value: false
5238   mirror: always
5240 # Defines the font size inflation mapping intercept parameter.
5242 # Font size inflation computes a minimum font size, m, based on
5243 # other preferences (see font.size.inflation.minTwips and
5244 # font.size.inflation.emPerLine, above) and the width of the
5245 # frame in which the text resides. Using this minimum, a specified
5246 # font size, s, is mapped to an inflated font size, i, using an
5247 # equation that varies depending on the value of the font size
5248 # inflation mapping intercept parameter, P.
5250 # If the intercept parameter is negative, then the following mapping
5251 # function is used:
5253 # i = m + s
5255 # If the intercept parameter is non-negative, then the mapping function
5256 # is a function such that its graph meets the graph of i = s at the
5257 # point where both i and s are (1 + P/2) * m for values of s that are
5258 # large enough. This means that when s=0, i is always equal to m.
5259 - name: font.size.inflation.mappingIntercept
5260   type: int32_t
5261   value: 1
5262   mirror: always
5264 # Since the goal of font size inflation is to avoid having to
5265 # repeatedly scroll side to side to read a block of text, and there are
5266 # a number of page layouts where a relatively small chunk of text is
5267 # better off not being inflated according to the same algorithm we use
5268 # for larger chunks of text, we want a threshold for an amount of text
5269 # that triggers font size inflation.  This preference controls that
5270 # threshold.
5272 # It controls the threshold used within an *approximation* of the
5273 # number of lines of text we use.  In particular, if we assume that
5274 # each character (collapsing collapsible whitespace) has a width the
5275 # same as the em-size of the font (when, normally, it's actually quite
5276 # a bit smaller on average), this preference gives the percentage of a
5277 # number of lines of text we'd need to trigger inflation.  This means
5278 # that a percentage of 100 means that we'd need a number of characters
5279 # (we know the font size and the width) equivalent to one line of
5280 # square text (which is actually a lot less than a real line of text).
5282 # A value of 0 means there's no character length threshold.
5283 - name: font.size.inflation.lineThreshold
5284   type: uint32_t
5285   value: 400
5286   mirror: always
5288 # This controls the percentage that fonts will be inflated, if font
5289 # size inflation is enabled. Essentially, if we have a specified font
5290 # size, s, and an inflated font size, i, this specifies that the ratio
5291 # i/s * 100 should never exceed the value of this preference. In order
5292 # for this preference to have any effect, its value must be greater
5293 # than 100, since font inflation can never decrease the ratio i/s.
5294 - name: font.size.inflation.maxRatio
5295   type: uint32_t
5296   value: 0
5297   mirror: always
5299 #---------------------------------------------------------------------------
5300 # Prefs starting with "full-screen-api."
5301 #---------------------------------------------------------------------------
5303 - name: full-screen-api.enabled
5304   type: bool
5305   value: true
5306   mirror: always
5308 - name: full-screen-api.allow-trusted-requests-only
5309   type: bool
5310   value: true
5311   mirror: always
5313 - name: full-screen-api.mouse-event-allow-left-button-only
5314   type: bool
5315   value: true
5316   mirror: always
5318 - name: full-screen-api.exit-on.windowOpen
5319   type: bool
5320   value: true
5321   mirror: always
5323 - name: full-screen-api.exit-on.windowRaise
5324   type: bool
5325   value: true
5326   mirror: always
5328 - name: full-screen-api.pointer-lock.enabled
5329   type: bool
5330   value: true
5331   mirror: always
5333 # whether to prevent the top level widget from going fullscreen
5334 - name: full-screen-api.ignore-widgets
5335   type: bool
5336   value: false
5337   mirror: always
5339 #---------------------------------------------------------------------------
5340 # Prefs starting with "fuzzing.". It's important that these can only be
5341 # checked in fuzzing builds (when FUZZING is defined), otherwise you could
5342 # enable the fuzzing stuff on your regular build which would be bad :)
5343 #---------------------------------------------------------------------------
5345 #ifdef FUZZING
5346 -   name: fuzzing.enabled
5347     type: bool
5348 #ifdef FUZZING_SNAPSHOT
5349     value: true
5350 #else
5351     value: false
5352 #endif
5353     mirror: always
5355 -   name: fuzzing.necko.enabled
5356     type: RelaxedAtomicBool
5357     value: false
5358     mirror: always
5360 -   name: fuzzing.necko.http3
5361     type: RelaxedAtomicBool
5362     value: false
5363     mirror: always
5364     rust: true
5366 # This configures a virtual authenticator for WebAuthn. The value encodes the
5367 # arguments to the WebDriver "Add Virtual Authenticator" extension command.
5368 # Bits 0, 1, 2, and 3 encode "is_user_verified", "is_user_consenting",
5369 # "has_user_verification", and "has_resident_key" in that order. Bit 5 encodes
5370 # the transport, either "usb" (0) or "internal" (1). Bits 6 and 7 encode the
5371 # protocol, either "ctap1/u2f" (1), "ctap2" (2), or "ctap2_1" (3). Note that
5372 # the valid protocol values are non-zero---an authenticator will not be
5373 # configured if this pref is set to zero. Changing this pref requires
5374 # a restart.
5375 - name: fuzzing.webauthn.authenticator_config
5376   type: RelaxedAtomicUint32
5377   value: 0
5378   mirror: always
5379   rust: true
5380 #endif
5382 #---------------------------------------------------------------------------
5383 # Prefs starting with "general."
5384 #---------------------------------------------------------------------------
5386 - name: general.aboutConfig.enable
5387   type: bool
5388   value: true
5389   mirror: always
5391 # Limits the depth of recursive conversion of data when opening
5392 # a content to view.  This is mostly intended to prevent infinite
5393 # loops with faulty converters involved.
5394 - name: general.document_open_conversion_depth_limit
5395   type: uint32_t
5396   value: 20
5397   mirror: always
5399 - name: general.smoothScroll
5400   type: RelaxedAtomicBool
5401   value: true
5402   mirror: always
5404 # This pref and general.smoothScroll.stopDecelerationWeighting determine
5405 # the timing function.
5406 - name: general.smoothScroll.currentVelocityWeighting
5407   type: AtomicFloat
5408   value: 0.25
5409   mirror: always
5411 # To connect consecutive scroll events into a continuous flow, the animation's
5412 # duration should be longer than scroll events intervals (or else the scroll
5413 # will stop before the next event arrives - we're guessing the next interval
5414 # by averaging recent intervals).
5415 # This defines how much longer the duration is compared to the events
5416 # interval (percentage).
5417 - name: general.smoothScroll.durationToIntervalRatio
5418   type: RelaxedAtomicInt32
5419   value: 200
5420   mirror: always
5422 - name: general.smoothScroll.lines
5423   type: RelaxedAtomicBool
5424   value: true
5425   mirror: always
5427 - name: general.smoothScroll.lines.durationMaxMS
5428   type: RelaxedAtomicInt32
5429   value: 150
5430   mirror: always
5432 - name: general.smoothScroll.lines.durationMinMS
5433   type: RelaxedAtomicInt32
5434   value: 150
5435   mirror: always
5437 - name: general.smoothScroll.mouseWheel
5438   type: RelaxedAtomicBool
5439   value: true
5440   mirror: always
5442 - name: general.smoothScroll.mouseWheel.durationMaxMS
5443   type: RelaxedAtomicInt32
5444   value: 200
5445   mirror: always
5447 - name: general.smoothScroll.mouseWheel.durationMinMS
5448   type: RelaxedAtomicInt32
5449   value: 50
5450   mirror: always
5452 - name: general.smoothScroll.other
5453   type: RelaxedAtomicBool
5454   value: true
5455   mirror: always
5457 - name: general.smoothScroll.other.durationMaxMS
5458   type: RelaxedAtomicInt32
5459   value: 150
5460   mirror: always
5462 - name: general.smoothScroll.other.durationMinMS
5463   type: RelaxedAtomicInt32
5464   value: 150
5465   mirror: always
5467 - name: general.smoothScroll.pages
5468   type: RelaxedAtomicBool
5469   value: true
5470   mirror: always
5472 - name: general.smoothScroll.pages.durationMaxMS
5473   type: RelaxedAtomicInt32
5474   value: 150
5475   mirror: always
5477 - name: general.smoothScroll.pages.durationMinMS
5478   type: RelaxedAtomicInt32
5479   value: 150
5480   mirror: always
5482 - name: general.smoothScroll.scrollbars
5483   type: RelaxedAtomicBool
5484   value: true
5485   mirror: always
5487 - name: general.smoothScroll.scrollbars.durationMaxMS
5488   type: RelaxedAtomicInt32
5489   value: 150
5490   mirror: always
5492 - name: general.smoothScroll.scrollbars.durationMinMS
5493   type: RelaxedAtomicInt32
5494   value: 150
5495   mirror: always
5497 - name: general.smoothScroll.pixels
5498   type: RelaxedAtomicBool
5499   value: true
5500   mirror: always
5502 - name: general.smoothScroll.pixels.durationMaxMS
5503   type: RelaxedAtomicInt32
5504   value: 150
5505   mirror: always
5507 - name: general.smoothScroll.pixels.durationMinMS
5508   type: RelaxedAtomicInt32
5509   value: 150
5510   mirror: always
5512 # This pref and general.smoothScroll.currentVelocityWeighting determine
5513 # the timing function.
5514 - name: general.smoothScroll.stopDecelerationWeighting
5515   type: AtomicFloat
5516   value: 0.4f
5517   mirror: always
5519 # Alternative smooth scroll physics. ("MSD" = Mass-Spring-Damper)
5520 - name: general.smoothScroll.msdPhysics.enabled
5521   type: RelaxedAtomicBool
5522   value: @IS_NIGHTLY_BUILD@
5523   mirror: always
5525 - name: general.smoothScroll.msdPhysics.continuousMotionMaxDeltaMS
5526   type: RelaxedAtomicInt32
5527   value: 120
5528   mirror: always
5530 - name: general.smoothScroll.msdPhysics.motionBeginSpringConstant
5531   type: RelaxedAtomicInt32
5532   value: 1250
5533   mirror: always
5535 - name: general.smoothScroll.msdPhysics.slowdownMinDeltaMS
5536   type: RelaxedAtomicInt32
5537   value: 12
5538   mirror: always
5540 - name: general.smoothScroll.msdPhysics.slowdownMinDeltaRatio
5541   type: AtomicFloat
5542   value: 1.3f
5543   mirror: always
5545 - name: general.smoothScroll.msdPhysics.slowdownSpringConstant
5546   type: RelaxedAtomicInt32
5547   value: 2000
5548   mirror: always
5550 - name: general.smoothScroll.msdPhysics.regularSpringConstant
5551   type: RelaxedAtomicInt32
5552   value: 1000
5553   mirror: always
5555 #---------------------------------------------------------------------------
5556 # Prefs starting with "geo."
5557 #---------------------------------------------------------------------------
5559 # Is support for Navigator.geolocation enabled?
5560 - name: geo.enabled
5561   type: bool
5562   value: true
5563   mirror: always
5565 # Time, in milliseconds, to wait for the location provider to spin up.
5566 - name: geo.timeout
5567   type: int32_t
5568   value: 6000
5569   mirror: always
5571 #ifdef MOZ_ENABLE_DBUS
5572 # Whether to use Geoclue location provider (if available on the system).
5573 - name: geo.provider.use_geoclue
5574   type: bool
5575   value: true
5576   mirror: always
5578 # Whether to always provide high location accuracy, even if site
5579 # doesn't actually request this level of accuracy.
5580 # Almost no site correctly requests high accuracy so force it by default
5581 # for compatibility with other geolocation providers.
5582 - name: geo.provider.geoclue.always_high_accuracy
5583   type: bool
5584   value: true
5585   mirror: always
5586 #endif
5588 #---------------------------------------------------------------------------
5589 # Prefs starting with "gfx."
5590 #---------------------------------------------------------------------------
5592 # Allow 24-bit colour when the hardware supports it.
5593 - name: gfx.android.rgb16.force
5594   type: bool
5595   value: false
5596   mirror: once
5598 - name: gfx.apitrace.enabled
5599   type: bool
5600   value: false
5601   mirror: once
5603 - name: gfx.blithelper.precision
5604   type: RelaxedAtomicUint32
5605   value: 2 # { 0: lowp, 1: mediump, 2: highp }
5606   mirror: always
5608 - name: gfx.blithelper.lut-size.rgb.b
5609   type: RelaxedAtomicUint32
5610   value: 15
5611   mirror: always
5612 - name: gfx.blithelper.lut-size.rgb.g
5613   type: RelaxedAtomicUint32
5614   value: 31
5615   mirror: always
5616 - name: gfx.blithelper.lut-size.rgb.r
5617   type: RelaxedAtomicUint32
5618   value: 31
5619   mirror: always
5621 - name: gfx.blithelper.lut-size.ycbcr.cb
5622   type: RelaxedAtomicUint32
5623   value: 15
5624   mirror: always
5625 - name: gfx.blithelper.lut-size.ycbcr.cr
5626   type: RelaxedAtomicUint32
5627   value: 31
5628   mirror: always
5629 - name: gfx.blithelper.lut-size.ycbcr.y
5630   type: RelaxedAtomicUint32
5631   value: 31
5632   mirror: always
5634 # Nb: we ignore this pref on release and beta.
5635 - name: gfx.blocklist.all
5636   type: int32_t
5637   value: 0
5638   mirror: once
5640 #if defined(XP_DARWIN)
5641 - name: gfx.cairo_quartz_cg_layer.enabled
5642   type: bool
5643   value: true
5644   mirror: always
5645 #endif
5647 - name: gfx.canvas.accelerated
5648   type: bool
5649 #if defined(XP_MACOSX) || defined(XP_LINUX) && !defined(ANDROID)
5650   value: true
5651 #elif defined(MOZ_WIDGET_ANDROID)
5652   value: true
5653 #else
5654   value: false
5655 #endif
5656   mirror: always
5658 # Whether to attempt to enable Accelerated Canvas2D regardless of blocklisting.
5659 - name: gfx.canvas.accelerated.force-enabled
5660   type: bool
5661   value: false
5662   mirror: always
5664 - name: gfx.canvas.accelerated.async-present
5665   type: RelaxedAtomicBool
5666   value: true
5667   mirror: always
5669 - name: gfx.canvas.accelerated.cache-items
5670   type: RelaxedAtomicUint32
5671   value: 2048
5672   mirror: always
5674 - name: gfx.canvas.accelerated.cache-size
5675   type: RelaxedAtomicUint32
5676   value: 256
5677   mirror: always
5679 - name: gfx.canvas.accelerated.reserve-empty-cache
5680   type: RelaxedAtomicUint32
5681   value: 36
5682   mirror: always
5684 - name: gfx.canvas.accelerated.max-draw-target-count
5685   type: RelaxedAtomicUint32
5686   value: 200
5687   mirror: always
5689 - name: gfx.canvas.accelerated.max-size
5690   type: RelaxedAtomicInt32
5691   value: 8192
5692   mirror: always
5694 - name: gfx.canvas.accelerated.min-size
5695   type: RelaxedAtomicInt32
5696   value: 128
5697   mirror: always
5699 - name: gfx.canvas.accelerated.max-surface-size
5700   type: RelaxedAtomicUint32
5701   value: 5280
5702   mirror: always
5704 - name: gfx.canvas.accelerated.shared-page-size
5705   type: RelaxedAtomicUint32
5706   value: 1024
5707   mirror: always
5709 # The minimum number of frames before acting on performance profile info
5710 - name: gfx.canvas.accelerated.profile-frames
5711   type: RelaxedAtomicUint32
5712   value: 10
5713   mirror: always
5715 # The ratio of failed frames to total frames when to fall back from acceleration
5716 - name: gfx.canvas.accelerated.profile-fallback-ratio
5717   type: AtomicFloat
5718   value: 0.3
5719   mirror: always
5721 # The ratio of cache misses at which to fail a profile frame
5722 - name: gfx.canvas.accelerated.profile-cache-miss-ratio
5723   type: AtomicFloat
5724   value: 0.66
5725   mirror: always
5727 # The maximum size of the GPU path cache in MB.
5728 - name: gfx.canvas.accelerated.gpu-path-size
5729   type: RelaxedAtomicUint32
5730   value: 4
5731   mirror: always
5733 # The maximum allowed complexity of a GPU path.
5734 - name: gfx.canvas.accelerated.gpu-path-complexity
5735   type: RelaxedAtomicUint32
5736   value: 4000
5737   mirror: always
5739 # Whether to accelerate stroked paths by converting them to fill paths.
5740 - name: gfx.canvas.accelerated.stroke-to-fill-path
5741   type: RelaxedAtomicBool
5742   value: false
5743   mirror: always
5745 # Whether to use aa-stroke to accelerate stroked paths.
5746 - name: gfx.canvas.accelerated.aa-stroke.enabled
5747   type: RelaxedAtomicBool
5748   value: true
5749   mirror: always
5751 # Draws an indicator if acceleration is used.
5752 - name: gfx.canvas.accelerated.debug
5753   type: RelaxedAtomicBool
5754   value: false
5755   mirror: always
5757 # 0x7fff is the maximum supported xlib surface size and is more than enough for canvases.
5758 - name: gfx.canvas.max-size
5759   type: RelaxedAtomicInt32
5760   value: 0x7fff
5761   mirror: always
5763 - name: gfx.canvas.remote
5764   type: bool
5765 #if defined(XP_WIN)
5766   value: true
5767 #else
5768   value: false
5769 #endif
5770   mirror: once
5772 - name: gfx.canvas.remote.allow-in-parent
5773   type: bool
5774   value: false
5775   mirror: once
5777 # Whether OffscreenCanvas can use remote canvas
5778 - name: gfx.canvas.remote.allow-offscreen
5779   type: RelaxedAtomicBool
5780   value: true
5781   mirror: always
5783 # How many worker threads spawned for remote canvas
5784 #  -1 - Calculate based on processor cores
5785 #   0 - No worker threads spawned, will do work on CanvasRenderThread
5786 #  >0 - Create worker thread pool with given size
5787 - name: gfx.canvas.remote.worker-threads
5788   type: int32_t
5789 #if defined(XP_WIN)
5790   value: -1
5791 #else
5792   value: 0
5793 #endif
5794   mirror: once
5796 # Default size of the shmem buffers used for recording
5797 - name: gfx.canvas.remote.default-buffer-size
5798   type: RelaxedAtomicUint32
5799   value: 32 * 1024
5800   mirror: always
5802 # Maximum number of Default size shmem buffers to use
5803 - name: gfx.canvas.remote.max_default_buffers
5804   type: RelaxedAtomicUint32
5805   value: 256
5806   mirror: always
5808 # How many times to spin before waiting in remote canvas
5809 - name: gfx.canvas.remote.max-spin-count
5810   type: RelaxedAtomicUint32
5811   value: 500
5812   mirror: always
5814 # How long to wait in milliseconds for the next event while in a transaction
5815 - name: gfx.canvas.remote.event-timeout-ms
5816   type: RelaxedAtomicUint32
5817   value: 2
5818   mirror: always
5820 # How many times we have a spare buffer before we drop one
5821 - name: gfx.canvas.remote.drop-buffer-limit
5822   type: RelaxedAtomicUint32
5823   value: 100
5824   mirror: always
5826 # Delay in milliseconds to drop buffers when there have been no non-empty transactions
5827 - name: gfx.canvas.remote.drop-buffer-milliseconds
5828   type: RelaxedAtomicUint32
5829   value: 10000
5830   mirror: always
5832 - name: gfx.canvas.willreadfrequently.enabled
5833   type: bool
5834 #if defined(XP_WIN)
5835   value: false
5836 #else
5837   value: true
5838 #endif
5839   mirror: once
5842 - name: gfx.color_management.display_profile
5843   type: DataMutexString
5844   value: ""
5845   mirror: always # But be warned: We cache the result.
5847 - name: gfx.color_management.force_srgb
5848   type: RelaxedAtomicBool
5849   value: false
5850   mirror: always
5852 - name: gfx.color_management.native_srgb
5853   type: RelaxedAtomicBool
5854 #if defined(XP_MACOSX)
5855   value: true
5856 #else
5857   value: false
5858 #endif
5859   mirror: always
5861 - name: gfx.color_management.enablev4
5862   type: RelaxedAtomicBool
5863   value: true
5864   mirror: always
5866 # 0 = Off, 1 = Full, 2 = Tagged Images Only.
5867 # See CMSMode in gfx/thebes/gfxPlatform.h.
5868 - name: gfx.color_management.mode
5869   type: RelaxedAtomicInt32
5870   value: 2
5871   mirror: always
5873 # The zero default here should match QCMS_INTENT_DEFAULT from qcms.h
5874 - name: gfx.color_management.rendering_intent
5875   type: RelaxedAtomicInt32
5876   value: 0
5877   mirror: always
5879 - name: gfx.color_management.rec709_gamma_as_srgb
5880   type: RelaxedAtomicBool
5881   value: true # Tragic backwards compat.
5882   mirror: always
5884 - name: gfx.color_management.rec2020_gamma_as_rec709
5885   type: RelaxedAtomicBool
5886   value: true # Match naive behavior, but hopefully we can stop soon!
5887   mirror: always
5889 # Whether GL contexts can be migrated to a different GPU (to match the one the
5890 # OS is using for composition).
5892 # 0 = force disable migration
5893 # 1 = use migration where in safe configurations (the default)
5894 # 2 = force enable migration (for testing)
5895 - name: gfx.compositor.gpu-migration
5896   type: RelaxedAtomicInt32
5897   value: 1
5898   mirror: always
5900 - name: gfx.core-animation.tint-opaque
5901   type: RelaxedAtomicBool
5902   value: false
5903   mirror: always
5905 #ifdef XP_DARWIN
5906   # Create specialized video-only layers for video content in
5907   # fullscreen windows. Consistently works well on Apple Silicon,
5908   # some issues remain on Intel hardware.
5909 -   name: gfx.core-animation.specialize-video
5910     type: RelaxedAtomicBool
5911 #if defined(MOZ_AARCH64)
5912     value: true
5913 #else
5914     value: false
5915 #endif
5916     mirror: always
5917 #endif
5919 #if defined(XP_DARWIN) && defined(NIGHTLY_BUILD)
5920   # Spoof the timing of the video sample instead of marking the untimed
5921   # sample to be displayed immediately.
5922 -   name: gfx.core-animation.specialize-video.spoof-timing
5923     type: RelaxedAtomicBool
5924     value: false
5925     mirror: always
5927   # Check that the sample has a color space and if it doesn't, log that
5928   # and supply the default color space from the main display.
5929 -   name: gfx.core-animation.specialize-video.check-color-space
5930     type: RelaxedAtomicBool
5931     value: false
5932     mirror: always
5934   # Log properties of the video surface, buffer, and format.
5935 -   name: gfx.core-animation.specialize-video.log
5936     type: RelaxedAtomicBool
5937     value: false
5938     mirror: always
5939 #endif
5941 #ifdef XP_DARWIN
5942 -   name: gfx.core-animation.low-power-telemetry-frames
5943     type: int32_t
5944     value: 600
5945     mirror: once
5946 #endif
5948 #if defined(MOZ_WIDGET_ANDROID)
5949   # Overrides the glClear color used when the surface origin is not (0, 0)
5950   # Used for drawing a border around the content.
5951 -   name: gfx.compositor.override.clear-color.r
5952     type: AtomicFloat
5953     value: 0.0f
5954     mirror: always
5956 -   name: gfx.compositor.override.clear-color.g
5957     type: AtomicFloat
5958     value: 0.0f
5959     mirror: always
5961 -   name: gfx.compositor.override.clear-color.b
5962     type: AtomicFloat
5963     value: 0.0f
5964     mirror: always
5966 -   name: gfx.compositor.override.clear-color.a
5967     type: AtomicFloat
5968     value: 0.0f
5969     mirror: always
5970 #endif  # defined(MOZ_WIDGET_ANDROID)
5972 - name: gfx.content.always-paint
5973   type: RelaxedAtomicBool
5974   value: false
5975   mirror: always
5977 # Size in megabytes
5978 - name: gfx.content.skia-font-cache-size
5979   type: int32_t
5980   value: 5
5981   mirror: once
5983 - name: gfx.device-reset.limit
5984   type: int32_t
5985   value: 10
5986   mirror: once
5988 - name: gfx.device-reset.threshold-ms
5989   type: int32_t
5990   value: -1
5991   mirror: once
5994 # Whether to disable the automatic detection and use of direct2d.
5995 - name: gfx.direct2d.disabled
5996   type: bool
5997   value: false
5998   mirror: once
6000 # Whether to attempt to enable Direct2D regardless of automatic detection or
6001 # blacklisting.
6002 - name: gfx.direct2d.force-enabled
6003   type: bool
6004   value: false
6005   mirror: once
6007 - name: gfx.direct2d.target-independent-rasterization.disabled
6008   type: bool
6009   value: false
6010   mirror: once
6012 - name: gfx.direct3d11.reuse-decoder-device
6013   type: bool
6014   value: true
6015   mirror: once
6016 # Enable reuse decoder device even when it is blocked.
6017 - name: gfx.direct3d11.reuse-decoder-device-force-enabled
6018   type: bool
6019   value: false
6020   mirror: once
6022 - name: gfx.direct3d11.allow-keyed-mutex
6023   type: RelaxedAtomicBool
6024   value: true
6025   mirror: always
6027 - name: gfx.direct3d11.use-double-buffering
6028   type: RelaxedAtomicBool
6029   value: false
6030   mirror: always
6032 - name: gfx.direct3d11.enable-debug-layer
6033   type: bool
6034   value: false
6035   mirror: once
6037 - name: gfx.direct3d11.break-on-error
6038   type: bool
6039   value: false
6040   mirror: once
6042 - name: gfx.direct3d11.sleep-on-create-device
6043   type: int32_t
6044   value: 0
6045   mirror: once
6047 # Rate by which the frame rate is divided. I.e. at a number higher than 1 we
6048 # will only refresh every <x> frames.
6049 - name: gfx.display.frame-rate-divisor
6050   type: RelaxedAtomicInt32
6051   value: 1
6052   mirror: always
6054 - name: gfx.display.max-frame-rate
6055   type: RelaxedAtomicInt32
6056   value: 0
6057   mirror: always
6059 # Whether to preserve color bitmap tables in fonts (bypassing OTS).
6060 # Currently these are supported only on platforms where we use Freetype
6061 # to render fonts (Linux/Gtk and Android).
6062 - name: gfx.downloadable_fonts.keep_color_bitmaps
6063   type: RelaxedAtomicBool
6064   value: false
6065   mirror: always
6067 # Whether to validate OpenType variation tables in fonts.
6068 - name: gfx.downloadable_fonts.validate_variation_tables
6069   type: RelaxedAtomicBool
6070   value: true
6071   mirror: always
6073 # Whether OTS validation should be applied to OpenType Layout (OTL) tables.
6074 - name: gfx.downloadable_fonts.otl_validation
6075   type: RelaxedAtomicBool
6076   value: @IS_NOT_RELEASE_OR_BETA@
6077   mirror: always
6079 - name: gfx.e10s.font-list.shared
6080   type: bool
6081   value: true
6082   mirror: once
6084 # Do we fire a notification about missing fonts, so the front-end can decide
6085 # whether to try and do something about it (e.g. download additional fonts)?
6086 - name: gfx.missing_fonts.notify
6087   type: RelaxedAtomicBool
6088   value: false
6089   mirror: always
6091 #if !defined(MOZ_WIDGET_ANDROID)
6092 - name: gfx.egl.prefer-gles.enabled
6093   type: bool
6094 #if defined(MOZ_WIDGET_GTK) && defined(MOZ_AARCH64)
6095   value: true
6096 #else
6097   value: false
6098 #endif
6099   mirror: once
6100 #endif
6102 # [Windows] Whether registry FontSubstitutes entries are used unconditionally,
6103 # or only if the original font is not available.
6104 #if defined(XP_WIN)
6105 - name: gfx.windows-font-substitutes.always
6106   type: bool
6107   value: false
6108   mirror: once
6109 #endif
6111 - name: gfx.font-list-omt.enabled
6112   type: bool
6113 #if defined(XP_MACOSX)
6114   value: true
6115 #else
6116   value: false
6117 #endif
6118   mirror: once
6120 # [Android] OPPO, realme and OnePlus device seem to crash when using Font
6121 # Match API. We turn off this feature on these devices. Set true if you want to
6122 # turn on it at force.
6123 #if defined(MOZ_WIDGET_ANDROID)
6124 - name: gfx.font-list.use_font_match_api.force-enabled
6125   type: bool
6126   value: false
6127   mirror: once
6128 #endif
6130 # Whether to load fonts (e.g. Twemoji Mozilla) bundled with the application:
6131 #  -1 - Auto behavior based on OS version (currently, disables loading on
6132 #       "low-memory" Android devices)
6133 #   0 - Skip loading any bundled fonts
6134 #   1 - Always load bundled fonts
6135 - name: gfx.bundled-fonts.activate
6136   type: int32_t
6137   value: -1
6138   mirror: once
6140 - name: gfx.font_loader.delay
6141   type: RelaxedAtomicUint32
6142 #if defined(XP_WIN)
6143   value: 60000
6144 #else
6145   value: 8000
6146 #endif
6147   mirror: always
6149 # Disable antialiasing of Ahem, for use in tests.
6150 - name: gfx.font_rendering.ahem_antialias_none
6151   type: RelaxedAtomicBool
6152   value: false
6153   mirror: always
6155 #if defined(XP_DARWIN)
6156   # Set to true to revert from HarfBuzz AAT shaping to the old Core Text
6157   # backend.
6158 -   name: gfx.font_rendering.coretext.enabled
6159     type: RelaxedAtomicBool
6160     value: false
6161     mirror: always
6162 #endif
6164 - name: gfx.font_rendering.colr_v1.enabled
6165   type: RelaxedAtomicBool
6166   value: true
6167   mirror: always
6169 - name: gfx.font_rendering.opentype_svg.enabled
6170   type: RelaxedAtomicBool
6171   value: true
6172   mirror: always
6173   rust: true
6175 - name: gfx.font_rendering.fallback.async
6176   type: RelaxedAtomicBool
6177   value: true
6178   mirror: always
6180 # whether to always search all font cmaps during system font fallback
6181 - name: gfx.font_rendering.fallback.always_use_cmaps
6182   type: RelaxedAtomicBool
6183   value: false
6184   mirror: always
6186 # whether to do font fallback for codepoints with General Category = Unassigned
6187 - name: gfx.font_rendering.fallback.unassigned_chars
6188   type: RelaxedAtomicBool
6189   value: false
6190   mirror: always
6192 #ifdef MOZ_WIDGET_GTK
6193 -   name: gfx.font_rendering.fontconfig.max_generic_substitutions
6194     type: RelaxedAtomicUint32
6195     value: 3
6196     mirror: always
6197 #endif
6199 #if defined(XP_WIN)
6200 # Whether the DirectWrite bold simulation should be used when a bold font-weight
6201 # is requested but no bold face available in the family. This renders poorly with
6202 # some third-party fonts, so by default we disable it for webfonts and allow it
6203 # only with locally-installed fonts.
6204 # Values:
6205 #   0 - never use DWrite bold simulation; always multi-strike instead
6206 #   1 - use DWrite bold for installed fonts, multi-strike for webfont resources
6207 #   2 - use DWrite bold for all fonts
6208 - name: gfx.font_rendering.directwrite.bold_simulation
6209   type: RelaxedAtomicUint32
6210   value: 1
6211   mirror: always
6212 #endif
6214 - name: gfx.font_rendering.graphite.enabled
6215   type: RelaxedAtomicBool
6216   value: true
6217   mirror: always
6219 # Cache shaped word results
6220 - name: gfx.font_rendering.wordcache.charlimit
6221   type: RelaxedAtomicUint32
6222   value: 32
6223   mirror: always
6225 # Cache shaped word results
6226 - name: gfx.font_rendering.wordcache.maxentries
6227   type: RelaxedAtomicUint32
6228   value: 10000
6229   mirror: always
6231 # The level of logging:
6232 # - 0: no logging;
6233 # - 1: adds errors;
6234 # - 2: adds warnings;
6235 # - 3 or 4: adds debug logging.
6236 # If you set the value to 4, you will also need to set the environment
6237 # variable MOZ_LOG to gfx:4. See mozilla/Logging.h for details.
6238 - name: gfx.logging.level
6239   type: RelaxedAtomicInt32
6240   value: mozilla::gfx::LOG_DEFAULT
6241   mirror: always
6242   include: mozilla/gfx/LoggingConstants.h
6244 - name: gfx.logging.crash.length
6245   type: uint32_t
6246   value: 16
6247   mirror: once
6249 # The maximums here are quite conservative, we can tighten them if problems show up.
6250 - name: gfx.logging.texture-usage.enabled
6251   type: bool
6252   value: false
6253   mirror: once
6255 - name: gfx.logging.peak-texture-usage.enabled
6256   type: bool
6257   value: false
6258   mirror: once
6260 - name: gfx.logging.slow-frames.enabled
6261   type: bool
6262   value: false
6263   mirror: once
6265 # Use gfxPlatform::MaxAllocSize instead of the pref directly.
6266 - name: gfx.max-alloc-size
6267   type: int32_t
6268   value: (int32_t)0x7FFFFFFF
6269   mirror: once
6270   do_not_use_directly: true
6272 # Use gfxPlatform::MaxTextureSize instead of the pref directly.
6273 - name: gfx.max-texture-size
6274   type: int32_t
6275   value: (int32_t)32767
6276   mirror: once
6277   do_not_use_directly: true
6279 # Enable OffscreenCanvas everywhere.
6280 - name: gfx.offscreencanvas.enabled
6281   type: RelaxedAtomicBool
6282   value: true
6283   mirror: always
6285 - name: gfx.offscreencanvas.shared-provider
6286   type: RelaxedAtomicBool
6287   value: true
6288   mirror: always
6290 - name: gfx.offscreencanvas.snapshot-timeout-ms
6291   type: int32_t
6292   value: 10000
6293   mirror: always
6295 - name: gfx.omta.background-color
6296   type: bool
6297   value: true
6298   mirror: always
6300 - name: gfx.partialpresent.force
6301   type: RelaxedAtomicInt32
6302   value: 0
6303   mirror: always
6305 # SwapInterval
6306 - name: gfx.swap-interval.glx
6307   type: RelaxedAtomicBool
6308   value: true
6309   mirror: always
6311 - name: gfx.swap-interval.egl
6312   type: RelaxedAtomicBool
6313   mirror: always
6314 #ifdef MOZ_WIDGET_ANDROID
6315   value: true
6316 #else
6317   value: false
6318 #endif
6321 # Log severe performance warnings to the error console and profiles.
6322 # This should be use to quickly find which slow paths are used by test cases.
6323 - name: gfx.perf-warnings.enabled
6324   type: RelaxedAtomicBool
6325   value: false
6326   mirror: always
6328 #ifdef MOZ_X11
6329 # Whether to force using GLX over EGL.
6330 - name: gfx.x11-egl.force-disabled
6331   type: bool
6332   value: false
6333   mirror: once
6335 # Whether to force using EGL over GLX.
6336 - name: gfx.x11-egl.force-enabled
6337   type: bool
6338   value: false
6339   mirror: once
6341 - name: gfx.x11.glx_sgi_video_sync
6342   type: bool
6343   value: false
6344   mirror: once
6345 #endif
6347 - name: gfx.testing.device-fail
6348   type: RelaxedAtomicBool
6349   value: false
6350   mirror: always
6352 - name: gfx.testing.device-reset
6353   type: RelaxedAtomicInt32
6354   value: 0
6355   mirror: always
6357 - name: gfx.text.disable-aa
6358   type: bool
6359   value: false
6360   mirror: once
6362 - name: gfx.text.subpixel-position.force-enabled
6363   type: bool
6364   value: false
6365   mirror: once
6367 - name: gfx.text.subpixel-position.force-disabled
6368   type: bool
6369   value: false
6370   mirror: once
6372 - name: gfx.use-iosurface-textures
6373   type: bool
6374   value: false
6375   mirror: once
6377 - name: gfx.use-mutex-on-present
6378   type: bool
6379   value: false
6380   mirror: once
6382 # Use SurfaceTextures as preferred backend for TextureClient/Host.
6383 - name: gfx.use-surfacetexture-textures
6384   type: bool
6385   value: false
6386   mirror: once
6388 - name: gfx.vsync.compositor.unobserve-count
6389   type: int32_t
6390   value: 10
6391   mirror: once
6393 - name: gfx.vsync.force-disable-waitforvblank
6394   type: RelaxedAtomicBool
6395   value: false
6396   mirror: always
6398 - name: gfx.will-change.ignore-opacity
6399   type: RelaxedAtomicBool
6400   value: true
6401   mirror: always
6403 # Should we override the blocklist to enable WebGPU?
6404 - name: gfx.webgpu.ignore-blocklist
6405   type: bool
6406   value: false
6407   mirror: once
6409 # Whether to use the WebRender hardware backend
6410 - name: gfx.webrender.all
6411   type: bool
6412   value: false
6413   mirror: once
6415 #ifdef XP_WIN
6416 - name: gfx.webrender.force-angle
6417   type: bool
6418   value: true
6419   mirror: once
6420 #endif
6422 # WebRender is not enabled when there is no GPU process on window when
6423 # WebRender uses ANGLE. It is for avoiding that WebGL and WebRender use ANGLE
6424 # at once. But there is a case that we want to enable WebRender for testing.
6425 #ifdef XP_WIN
6426 - name: gfx.webrender.enabled-no-gpu-process-with-angle-win
6427   type: bool
6428   value: true
6429   mirror: once
6430 #endif
6432 - name: gfx.webrender.svg-images
6433   type: RelaxedAtomicBool
6434   value: true
6435   mirror: always
6437 - name: gfx.webrender.svg-shapes
6438   type: RelaxedAtomicBool
6439   value: true
6440   mirror: always
6442 - name: gfx.webrender.debug.blob.paint-flashing
6443   type: RelaxedAtomicBool
6444   value: false
6445   mirror: always
6447 - name: gfx.webrender.debug.enable-capture
6448   type: bool
6449   value: false
6450   mirror: once
6452 - name: gfx.webrender.debug.dl.dump-parent
6453   type: RelaxedAtomicBool
6454   value: false
6455   mirror: always
6457 - name: gfx.webrender.debug.dl.dump-content
6458   type: RelaxedAtomicBool
6459   value: false
6460   mirror: always
6462 - name: gfx.webrender.debug.dl.dump-content-serialized
6463   type: RelaxedAtomicBool
6464   value: false
6465   mirror: always
6467 #ifdef MOZ_WIDGET_GTK
6468 - name: gfx.webrender.reject-software-driver
6469   type: bool
6470   value: true
6471   mirror: once
6472 #endif
6474 - name: gfx.webrender.debug.highlight-painted-layers
6475   type: RelaxedAtomicBool
6476   value: false
6477   mirror: always
6479 - name: gfx.webrender.late-scenebuild-threshold
6480   type: RelaxedAtomicInt32
6481   value: 4
6482   mirror: always
6484 - name: gfx.webrender.max-filter-ops-per-chain
6485   type: RelaxedAtomicUint32
6486   value: 64
6487   mirror: always
6489 - name: gfx.webrender.batching.lookback
6490   type: uint32_t
6491   value: 10
6492   mirror: always
6494 - name: gfx.webrender.blob-tile-size
6495   type: uint32_t
6496   value: 256
6497   mirror: always
6499 - name: gfx.webrender.batched-upload-threshold
6500   type: int32_t
6501 #if defined(MOZ_WIDGET_ANDROID)
6502   value: 262144
6503 #else
6504   value: 65536
6505 #endif
6506   mirror: always
6508 - name: gfx.webrender.compositor
6509   type: bool
6510 #if defined(XP_WIN) || defined(XP_MACOSX)
6511   value: true
6512 #else
6513   value: false
6514 #endif
6515   mirror: once
6517 - name: gfx.webrender.scissored-cache-clears.enabled
6518   type: bool
6519   value: true
6520   mirror: once
6522 - name: gfx.webrender.scissored-cache-clears.force-enabled
6523   type: bool
6524   value: false
6525   mirror: once
6527 - name: gfx.webrender.compositor.force-enabled
6528   type: bool
6529   value: false
6530   mirror: once
6532 - name: gfx.webrender.compositor.max_update_rects
6533   type: uint32_t
6534   value: 1
6535   mirror: once
6537 - name: gfx.webrender.compositor.surface-pool-size
6538   type: uint32_t
6539   value: 25
6540   mirror: once
6542 # Number of damage rects we can give to the compositor for a new frame with
6543 # partial present. This controls whether partial present is used or not.
6544 - name: gfx.webrender.max-partial-present-rects
6545   type: uint32_t
6546 #if defined(XP_WIN) || defined(MOZ_WIDGET_ANDROID) || defined(MOZ_WIDGET_GTK)
6547   value: 1
6548 #else
6549   value: 0
6550 #endif
6551   mirror: once
6553 # Whether or not we can reuse the buffer contents using the GL buffer age
6554 # extension, if supported by the platform. This requires partial present
6555 # to be used.
6556 - name: gfx.webrender.allow-partial-present-buffer-age
6557   type: bool
6558   value: true
6559   mirror: once
6561 # Whether or not we should force partial present on.
6562 - name: gfx.webrender.force-partial-present
6563   type: bool
6564   value: false
6565   mirror: once
6567 - name: gfx.webrender.enable-gpu-markers
6568   type: bool
6569 #ifdef DEBUG
6570   value: true
6571 #else
6572   value: false
6573 #endif
6574   mirror: once
6576 - name: gfx.webrender.enable-item-cache
6577   type: bool
6578   value: true
6579   mirror: once
6581 # Whether or not to fallback from WebRender to Software WebRender.
6582 - name: gfx.webrender.fallback.software
6583   type: bool
6584   value: true
6585   mirror: once
6587 #ifdef XP_WIN
6588   # Whether to use an overlay of hardware decoded video with DirectComposition
6589 -   name: gfx.webrender.dcomp-video-hw-overlay-win
6590     type: bool
6591     value: true
6592     mirror: once
6593   # Enable hardware decoded video overlay even when it is blocked.
6594 -   name: gfx.webrender.dcomp-video-hw-overlay-win-force-enabled
6595     type: bool
6596     value: false
6597     mirror: once
6598   # Whether to use a yuv video overlay layers with DirectComposition
6599 -   name: gfx.webrender.dcomp-video-yuv-overlay-win
6600     type: bool
6601     value: false
6602     mirror: once
6603 -   name: gfx.webrender.dcomp-video-vp-scaling-win
6604     type: bool
6605     value: true
6606     mirror: once
6607   # Whether to use virtual surfaces, as opposed to each tile owning a surface.
6608 -   name: gfx.webrender.dcomp-use-virtual-surfaces
6609     type: bool
6610     value: true
6611     mirror: once
6612   # Whether to use an overlay of software decoded video with DirectComposition
6613 -   name: gfx.webrender.dcomp-video-sw-overlay-win
6614     type: bool
6615     value: true
6616     mirror: once
6617   # Enable software decoded video overlay even when it is blocked.
6618 -   name: gfx.webrender.dcomp-video-sw-overlay-win-force-enabled
6619     type: bool
6620     value: false
6621     mirror: once
6622 -   name: gfx.webrender.dcomp-video-check-slow-present
6623     type: RelaxedAtomicBool
6624     value: true
6625     mirror: always
6626   # Force triple buffering in overlay's video swap chain
6627 -   name: gfx.webrender.dcomp-video-force-triple-buffering
6628     type: RelaxedAtomicBool
6629     value: false
6630     mirror: always
6631 -   name: gfx.webrender.dcomp-video-swap-chain-present-interval-0
6632     type: RelaxedAtomicBool
6633     value: false
6634     mirror: always
6635 -   name: gfx.video.convert-yuv-to-nv12.image-host-win
6636     type: RelaxedAtomicBool
6637     value: true
6638     mirror: always
6639 #endif
6641 # Whether or not fallback to Software WebRender requires the GPU process.
6642 - name: gfx.webrender.fallback.software.requires-gpu-process
6643   type: bool
6644   value: false
6645   mirror: once
6647 - name: gfx.webrender.program-binary-disk
6648   type: bool
6649 #if defined(XP_WIN) || defined(ANDROID)
6650   value: true
6651 #else
6652   value: false
6653 #endif
6654   mirror: once
6656 - name: gfx.webrender.use-optimized-shaders
6657   type: bool
6658   value: true
6659   mirror: once
6661 - name: gfx.webrender.precache-shaders
6662   type: bool
6663   value: false
6664   mirror: once
6666 # When gl debug message is a high severity message, forwward it to gfx critical
6667 # note.
6668 - name: gfx.webrender.gl-debug-message-critical-note
6669   type: bool
6670 #if defined(XP_WIN) && defined(NIGHTLY_BUILD)
6671   value: true
6672 #else
6673   value: false
6674 #endif
6675   mirror: once
6677 # Enable printing gl debug messages
6678 - name: gfx.webrender.gl-debug-message-print
6679   type: bool
6680   value: false
6681   mirror: once
6683 #ifdef NIGHTLY_BUILD
6684   # Keep this pref hidden on non-nightly builds to avoid people accidentally
6685   # turning it on.
6686 - name: gfx.webrender.panic-on-gl-error
6687   type: bool
6688   value: false
6689   mirror: once
6690 #endif
6692 #ifdef XP_WIN
6693   # Enables display of performance debugging counters when DirectComposition
6694   # is used.
6695   # Performance counters are displayed on the top-right corner of the screen.
6696 -   name: gfx.webrender.debug.dcomp-counter
6697     type: RelaxedAtomicBool
6698     value: false
6699     mirror: always
6700   # Enables highlighting redraw regions of DCompositionVisual
6701 -   name: gfx.webrender.debug.dcomp-redraw-regions
6702     type: RelaxedAtomicBool
6703     value: false
6704     mirror: always
6705 #endif
6707 #ifdef XP_DARWIN
6708   # Files show up in $HOME/Desktop/nativelayerdumps-PID/frame-123.html
6709 -   name: gfx.webrender.debug.dump-native-layer-tree-to-file
6710     type: RelaxedAtomicBool
6711     value: false
6712     mirror: always
6713 #endif
6715 - name: gfx.webrender.enable-low-priority-pool
6716   type: RelaxedAtomicBool
6717 #if defined(ANDROID)
6718   value: false
6719 #else
6720   value: true
6721 #endif
6722   mirror: always
6724   # Force subpixel anti-aliasing as much as possible, despite performance cost.
6725 - name: gfx.webrender.quality.force-subpixel-aa-where-possible
6726   type: bool
6727   value: false
6728   mirror: always
6730 - name: gfx.webrender.enable-subpixel-aa
6731   type: bool
6732   mirror: once
6733 #ifdef MOZ_WIDGET_ANDROID
6734   value: false
6735 #else
6736   value: true
6737 #endif
6739 #ifdef XP_MACOSX
6740 - name: gfx.webrender.enable-client-storage
6741   type: bool
6742   value: true
6743   mirror: once
6744 #endif
6746  # Width of WebRender tile size
6747 - name: gfx.webrender.picture-tile-width
6748   type: RelaxedAtomicInt32
6749   value: 1024
6750   mirror: always
6752  # Width of WebRender tile size
6753 - name: gfx.webrender.picture-tile-height
6754   type: RelaxedAtomicInt32
6755   value: 512
6756   mirror: always
6758 # WebRender upper bound for shared surface size
6759 # According to apitrace, textures larger than 2048 break fast clear
6760 # optimizations on some intel drivers. We sometimes need to go larger, but
6761 # we try to avoid it.
6762 - name: gfx.webrender.max-shared-surface-size
6763   type: int32_t
6764   value: 2048
6765   mirror: once
6767 # Whether to use EGL robustness or not.
6768 - name: gfx.webrender.prefer-robustness
6769   type: bool
6770 #if defined(XP_WIN) || defined(MOZ_WIDGET_GTK)
6771   value: true
6772 #else
6773   value: false
6774 #endif
6775   mirror: once
6777 # Whether to use the WebRender software backend
6778 - name: gfx.webrender.software
6779   type: bool
6780   value: false
6781   mirror: once
6783 # Whether to use the D3D11 RenderCompositor when using WebRender software backend
6784 - name: gfx.webrender.software.d3d11
6785   type: bool
6786   value: true
6787   mirror: once
6789 - name: gfx.webrender.software.opengl
6790   type: bool
6791 #if defined(MOZ_WIDGET_ANDROID)
6792   value: true
6793 #else
6794   value: false
6795 #endif
6796   mirror: once
6798 - name: gfx.webrender.software.d3d11.upload-mode
6799   type: RelaxedAtomicInt32
6800   value: 4
6801   mirror: always
6803 # Whether to force widgets to don't support acceleration to use WebRender
6804 # despite that
6805 - name: gfx.webrender.unaccelerated-widget.force
6806   type: RelaxedAtomicBool
6807   value: false
6808   mirror: always
6810 # Enable a lower quality, but higher performance pinch-zoom mode. Primarily
6811 # for devices with weak GPUs, or when running SWGL.
6812 - name: gfx.webrender.low-quality-pinch-zoom
6813   type: bool
6814 #if defined(MOZ_WIDGET_ANDROID) && defined(NIGHTLY_BUILD)
6815   value: true
6816 #else
6817   value: false
6818 #endif
6819   mirror: once
6821 # Disable wait of GPU execution completion
6822 - name: gfx.webrender.wait-gpu-finished.disabled
6823   type: bool
6824 #if defined(XP_WIN)
6825   value: true
6826 #else
6827   value: false
6828 #endif
6829   mirror: once
6831 # Enable VideoProcessor Super Resolution for video overlay
6832 - name: gfx.webrender.overlay-vp-super-resolution
6833   type: bool
6834   value: false
6835   mirror: once
6837 # Enable VideoProcessor-HDR on SDR content for video overlay
6838 - name: gfx.webrender.overlay-vp-auto-hdr
6839   type: bool
6840   value: false
6841   mirror: once
6843 # Use vsync events generated by hardware
6844 - name: gfx.work-around-driver-bugs
6845   type: bool
6846   value: true
6847   mirror: once
6849 - name: gfx.ycbcr.accurate-conversion
6850   type: RelaxedAtomicBool
6851   value: false
6852   mirror: always
6854 #---------------------------------------------------------------------------
6855 # Prefs starting with "gl." (OpenGL)
6856 #---------------------------------------------------------------------------
6858 - name: gl.allow-high-power
6859   type: RelaxedAtomicBool
6860   value: true
6861   mirror: always
6863 - name: gl.ignore-dx-interop2-blacklist
6864   type: RelaxedAtomicBool
6865   value: false
6866   mirror: always
6868 - name: gl.use-tls-is-current
6869   type: RelaxedAtomicInt32
6870   value: 0
6871   mirror: always
6873 #---------------------------------------------------------------------------
6874 # Prefs starting with "html5."
6875 #---------------------------------------------------------------------------
6877 # Time in milliseconds between the time a network buffer is seen and the timer
6878 # firing when the timer hasn't fired previously in this parse in the
6879 # off-the-main-thread HTML5 parser.
6880 - name: html5.flushtimer.initialdelay
6881   type: RelaxedAtomicInt32
6882   value: 16
6883   mirror: always
6885 # Time in milliseconds between the time a network buffer is seen and the timer
6886 # firing when the timer has already fired previously in this parse.
6887 - name: html5.flushtimer.subsequentdelay
6888   type: RelaxedAtomicInt32
6889   value: 16
6890   mirror: always
6892 #---------------------------------------------------------------------------
6893 # Prefs starting with "idle_period."
6894 #---------------------------------------------------------------------------
6896 - name: idle_period.min
6897   type: uint32_t
6898   value: 3
6899   mirror: always
6901 - name: idle_period.during_page_load.min
6902   type: uint32_t
6903   value: 12
6904   mirror: always
6906 - name: idle_period.cross_process_scheduling
6907   type: RelaxedAtomicBool
6908   value: true
6909   mirror: always
6911 #---------------------------------------------------------------------------
6912 # Prefs starting with "image."
6913 #---------------------------------------------------------------------------
6915 # The maximum size (in kB) that the aggregate frames of an animation can use
6916 # before it starts to discard already displayed frames and redecode them as
6917 # necessary.
6918 - name: image.animated.decode-on-demand.threshold-kb
6919   type: RelaxedAtomicUint32
6920   value: 20*1024
6921   mirror: always
6923 # The minimum number of frames we want to have buffered ahead of an
6924 # animation's currently displayed frame.
6925 - name: image.animated.decode-on-demand.batch-size
6926   type: RelaxedAtomicUint32
6927   value: 6
6928   mirror: always
6930 # Whether we should recycle already displayed frames instead of discarding
6931 # them. This saves on the allocation itself, and may be able to reuse the
6932 # contents as well. Only applies if generating full frames.
6933 - name: image.animated.decode-on-demand.recycle
6934   type: bool
6935   value: true
6936   mirror: once
6938 # Resume an animated image from the last displayed frame rather than
6939 # advancing when out of view.
6940 - name: image.animated.resume-from-last-displayed
6941   type: RelaxedAtomicBool
6942   value: true
6943   mirror: always
6945 # Maximum number of surfaces for an image before entering "factor of 2" mode.
6946 # This in addition to the number of "native" sizes of an image. A native size
6947 # is a size for which we can decode a frame without up or downscaling. Most
6948 # images only have 1, but some (i.e. ICOs) may have multiple frames for the
6949 # same data at different sizes.
6950 - name: image.cache.factor2.threshold-surfaces
6951   type: RelaxedAtomicInt32
6952   value: 4
6953   mirror: always
6955 # Maximum size of a surface in KB we are willing to produce when rasterizing
6956 # an SVG.
6957 - name: image.cache.max-rasterized-svg-threshold-kb
6958   type: RelaxedAtomicInt32
6959   value: 200*1024
6960   mirror: always
6962 # The maximum size, in bytes, of the decoded images we cache.
6963 - name: image.cache.size
6964   type: int32_t
6965   value: 5*1024*1024
6966   mirror: once
6968 # A weight, from 0-1000, to place on time when comparing to size.
6969 # Size is given a weight of 1000 - timeweight.
6970 - name: image.cache.timeweight
6971   type: int32_t
6972   value: 500
6973   mirror: once
6975 # Decode all images automatically on load, ignoring our normal heuristics.
6976 - name: image.decode-immediately.enabled
6977   type: RelaxedAtomicBool
6978   value: false
6979   mirror: always
6981 # Decode all images synchronously
6982 - name: image.decode-sync.enabled
6983   type: bool
6984   value: false
6985   mirror: always
6987 # Whether we attempt to downscale images during decoding.
6988 - name: image.downscale-during-decode.enabled
6989   type: RelaxedAtomicBool
6990   value: true
6991   mirror: always
6993 # Whether we use EXIF metadata for image density.
6994 - name: image.exif-density-correction.enabled
6995   type: RelaxedAtomicBool
6996   value: true
6997   mirror: always
6999 # Whether EXIF density metadata is sanity checked against PixelXDimension and PixelYDimension
7000 - name: image.exif-density-correction.sanity-check.enabled
7001   type: RelaxedAtomicBool
7002   value: true
7003   mirror: always
7005 # The threshold for inferring that changes to an <img> element's |src|
7006 # attribute by JavaScript represent an animation, in milliseconds. If the |src|
7007 # attribute is changing more frequently than this value, then we enter a
7008 # special "animation mode" which is designed to eliminate flicker. Set to 0 to
7009 # disable.
7010 - name: image.infer-src-animation.threshold-ms
7011   type: RelaxedAtomicUint32
7012   value: 2000
7013   mirror: always
7015 # Whether the network request priority should be adjusted according
7016 # the layout and view frame position of each particular image.
7017 - name: image.layout_network_priority
7018   type: RelaxedAtomicBool
7019   value: true
7020   mirror: always
7022 # Chunk size for calls to the image decoders.
7023 - name: image.mem.decode_bytes_at_a_time
7024   type: uint32_t
7025   value: 16384
7026   mirror: once
7028 # Discards inactive image frames and re-decodes them on demand from
7029 # compressed data.
7030 - name: image.mem.discardable
7031   type: RelaxedAtomicBool
7032   value: true
7033   mirror: always
7035 # Discards inactive image frames of _animated_ images and re-decodes them on
7036 # demand from compressed data. Has no effect if image.mem.discardable is false.
7037 - name: image.mem.animated.discardable
7038   type: bool
7039   value: true
7040   mirror: once
7042 # Enable extra information for debugging in the image memory reports.
7043 - name: image.mem.debug-reporting
7044   type: RelaxedAtomicBool
7045   value: false
7046   mirror: always
7048 # Force unmapping of unused shared surfaces after a timeout period or when we
7049 # encounter virtual memory pressure. By default this is only enabled on 32-bit
7050 # Firefox.
7051 - name: image.mem.shared.unmap.force-enabled
7052   type: bool
7053   value: false
7054   mirror: once
7056 # Minimum timeout to unmap shared surfaces since they have been last used,
7057 # in milliseconds.
7058 - name: image.mem.shared.unmap.min_expiration_ms
7059   type: uint32_t
7060   value: 60*1000
7061   mirror: once
7063 # Mininum size for shared surfaces to consider unmapping, in kilobytes.
7064 - name: image.mem.shared.unmap.min_threshold_kb
7065   type: uint32_t
7066   value: 100
7067   mirror: once
7069 # How much of the data in the surface cache is discarded when we get a memory
7070 # pressure notification, as a fraction. The discard factor is interpreted as a
7071 # reciprocal, so a discard factor of 1 means to discard everything in the
7072 # surface cache on memory pressure, a discard factor of 2 means to discard half
7073 # of the data, and so forth. The default should be a good balance for desktop
7074 # and laptop systems, where we never discard visible images.
7075 - name: image.mem.surfacecache.discard_factor
7076   type: uint32_t
7077   value: 1
7078   mirror: once
7080 # Maximum size for the surface cache, in kilobytes.
7081 - name: image.mem.surfacecache.max_size_kb
7082   type: uint32_t
7083   value: 2024 * 1024
7084   mirror: once
7086 # Minimum timeout for expiring unused images from the surface cache, in
7087 # milliseconds. This controls how long we store cached temporary surfaces.
7088 - name: image.mem.surfacecache.min_expiration_ms
7089   type: uint32_t
7090   value: 60*1000
7091   mirror: once
7093 # The surface cache's size, within the constraints of the maximum size set
7094 # above, is determined as a fraction of main memory size. The size factor is
7095 # interpreted as a reciprocal, so a size factor of 4 means to use no more than
7096 # 1/4 of main memory.  The default should be a good balance for most systems.
7097 - name: image.mem.surfacecache.size_factor
7098   type: uint32_t
7099   value: 4
7100   mirror: once
7102 # Maximum size in kilobytes that we allow to allocate an imgFrame, meant for
7103 # testing/fuzzing purposes. -1 disables this limit (there are other limits in
7104 # place).
7105 - name: image.mem.max_legal_imgframe_size_kb
7106   type: RelaxedAtomicInt32
7107   value: -1
7108   mirror: always
7110 # Whether we record SVG images as blobs or not.
7111 - name: image.svg.blob-image
7112   type: RelaxedAtomicBool
7113   value: false
7114   mirror: always
7116 # Whether we attempt to decode AVIF images or not.
7117 - name: image.avif.enabled
7118   type: RelaxedAtomicBool
7119 #if defined(MOZ_AV1)
7120   value: true
7121 #else
7122   value: false
7123 #endif
7124   mirror: always
7126 # How strict we are in accepting/rejecting AVIF inputs according to whether they
7127 # conform to the specification
7128 # 0 = Permissive: accept whatever we can simply, unambiguously interpret
7129 # 1 = Normal: reject violations of "shall" specification directives
7130 # 2 = Strict: reject violations of "should" specification directives
7131 - name: image.avif.compliance_strictness
7132   type: RelaxedAtomicInt32
7133   value: 1
7134   mirror: always
7136 # Whether we apply container-level transforms like mirroring and rotation
7137 - name: image.avif.apply_transforms
7138   type: RelaxedAtomicBool
7139   value: true
7140   mirror: always
7142 # Whether we use dav1d (true) or libaom (false) to decode AVIF image
7143 - name: image.avif.use-dav1d
7144   type: RelaxedAtomicBool
7145   value: true
7146   mirror: always
7148 # Whether to allow decoding of animated AVIF sequences.
7149 - name: image.avif.sequence.enabled
7150   type: RelaxedAtomicBool
7151   value: true
7152   mirror: always
7154 # Whether AVIF files containing sequences should be animated even when the
7155 # major brand is set to 'avif'.
7156 - name: image.avif.sequence.animate_avif_major_branded_images
7157   type: RelaxedAtomicBool
7158   value: false
7159   mirror: always
7161 # Whether we attempt to decode JXL images or not.
7162 - name: image.jxl.enabled
7163   type: RelaxedAtomicBool
7164   value: false
7165   mirror: always
7167 #---------------------------------------------------------------------------
7168 # Prefs starting with "intl."
7169 #---------------------------------------------------------------------------
7171 #ifdef XP_WIN
7172   # Whether making Gecko TSF-aware or only working with IMM.  TSF is a modern
7173   # IME API set of Windows which replaces IMM APIs.  Unless you can avoid the
7174   # problem which you see with enabling TSF, you shouldn't change this pref
7175   # to false since IMM handler is now not maintained nor tested with latest
7176   # Windows.  If you need to change this pref to false, please file a bug to
7177   # <https://bugzilla.mozilla.org>.
7178   # Restart required to apply this pref change.
7179 -   name: intl.tsf.enabled
7180     type: bool
7181     value: true
7182     mirror: once
7184   # Whether Gecko creates or does not create native caret for legacy ATOK
7185   # (2011 - 2015).
7186 -   name: intl.tsf.hack.atok.create_native_caret
7187     type: bool
7188     value: true
7189     mirror: always
7191   # Whether Gecko returns available composition string rect or TS_E_NOLAYOUT
7192   # from ITextStoreACP::GetTextExt() when the specified range is same as the
7193   # range of composition string but some character rects in it are still
7194   # dirty if and only if ATOK is active TIP.
7195   # Note that this is ignored if active ATOK is or older than 2016 and
7196   # create_native_caret is true.
7197 -   name: intl.tsf.hack.atok.do_not_return_no_layout_error_of_composition_string
7198     type: bool
7199     value: true
7200     mirror: always
7202   # Whether Gecko sets input scope of ATOK to "search" or never does it.
7203   # When "search" is set to the input scope, ATOK may stop their suggestions.
7204   # To avoid it, turn this pref on, or changing the settings in ATOK.
7205   # Note that if you enable this pref and you use the touch keyboard for touch
7206   # screens, you cannot access some specific features for a "search" input
7207   # field.
7208 -   name: intl.tsf.hack.atok.search_input_scope_disabled
7209     type: bool
7210     value: false
7211     mirror: always
7213   # Whether Gecko returns caret rect before composition string or TS_E_NOLAYOUT
7214   # from ITextStoreACP::GetTextExt() when the specified range is larger than
7215   # composition start offset if and only if Free ChangJie is active TIP.
7216 -   name: intl.tsf.hack.free_chang_jie.do_not_return_no_layout_error
7217     type: bool
7218     value: true
7219     mirror: always
7221   # Whether Gecko returns available composition string rect or TS_E_NOLAYOUT
7222   # from ITextStoreACP::GetTextExt() when the specified range is same as the
7223   # range of composition string but some character rects in it are still
7224   # dirty if and only if Japanist 10 is active TIP.
7225 -   name: intl.tsf.hack.japanist10.do_not_return_no_layout_error_of_composition_string
7226     type: bool
7227     value: true
7228     mirror: always
7230   # Whether Gecko returns previous character rect or TS_E_NOLAYOUT from
7231   # ITfContextView::GetTextExt() when the specified range is the first
7232   # character of selected clause of composition string if and only if Japanese TIP
7233   # of Microsoft is active.
7234 -   name: intl.tsf.hack.ms_japanese_ime.do_not_return_no_layout_error_at_first_char
7235     type: bool
7236     value: true
7237     mirror: always
7239   # Whether Gecko returns previous character rect or TS_E_NOLAYOUT from
7240   # ITfContextView::GetTextExt() when the specified range is the caret of
7241   # composition string if and only if Japanese TIP of Microsoft is active.
7242 -   name: intl.tsf.hack.ms_japanese_ime.do_not_return_no_layout_error_at_caret
7243     type: bool
7244     value: true
7245     mirror: always
7247   # Whether Gecko returns caret rect before composition string or TS_E_NOLAYOUT
7248   # from ITfContextView::GetTextExt() when the specified range is larger than
7249   # composition start offset if and only Simplified Chinese TIP of Microsoft
7250   # is active.
7251 -   name: intl.tsf.hack.ms_simplified_chinese.do_not_return_no_layout_error
7252     type: bool
7253     value: true
7254     mirror: always
7256   # Whether Geckos hacks ITextStoreACP::QueryInsert() or not.  The method should
7257   # return new selection after specified length text is inserted at specified
7258   # range.  However, Microsoft Pinyin and Microsoft Wubi expect that the result
7259   # is same as specified range.  If following prefs are true,
7260   # ITextStoreACP::QueryInsert() returns specified range only when one of the
7261   # TIPs is active.
7262 -   name: intl.tsf.hack.ms_simplified_chinese.query_insert_result
7263     type: bool
7264     value: true
7265     mirror: always
7267   # Whether Gecko returns caret rect before composition string or TS_E_NOLAYOUT
7268   # from ITfContextView::GetTextExt() when the specified range is larger than
7269   # composition start offset if and only Traditional Chinese TIP of Microsoft
7270   # is active.
7271 -   name: intl.tsf.hack.ms_traditional_chinese.do_not_return_no_layout_error
7272     type: bool
7273     value: true
7274     mirror: always
7276   # Whether Geckos hacks ITextStoreACP::QueryInsert() or not.  The method should
7277   # return new selection after specified length text is inserted at specified
7278   # range.  However, Microsoft ChangJie and Microsoft Quick expect that the
7279   # result is same as specified range.  If following prefs are true,
7280   # ITextStoreACP::QueryInsert() returns specified range only when one of the
7281   # TIPs is active.
7282 -   name: intl.tsf.hack.ms_traditional_chinese.query_insert_result
7283     type: bool
7284     value: true
7285     mirror: always
7287   # Whether Gecko sets input scope of the URL bar to IS_DEFAULT when black
7288   # listed IMEs are active or does not.  If you use tablet mode mainly and you
7289   # want to use touch keyboard for URL when you set focus to the URL bar, you
7290   # can set this to false.  Then, you'll see, e.g., ".com" key on the keyboard.
7291   # However, if you set this to false, such IMEs set its open state to "closed"
7292   # when you set focus to the URL bar.  I.e., input mode is automatically
7293   # changed to English input mode.
7294   # Known buggy IME list:
7295   #   - Microsoft IME for Japanese
7296   #   - Google Japanese Input
7297   #   - Microsoft Bopomofo
7298   #   - Microsoft ChangJie
7299   #   - Microsoft Phonetic
7300   #   - Microsoft Quick
7301   #   - Microsoft New ChangJie
7302   #   - Microsoft New Phonetic
7303   #   - Microsoft New Quick
7304   #   - Microsoft Pinyin
7305   #   - Microsoft Pinyin New Experience Input Style
7306   #   - Microsoft Wubi
7307   #   - Microsoft IME for Korean (except on Win7)
7308   #   - Microsoft Old Hangul
7309 -   name: intl.ime.hack.set_input_scope_of_url_bar_to_default
7310     type: bool
7311     value: true
7312     mirror: always
7314   # On Windows 10 Build 17643 (an Insider Preview build of RS5), Microsoft
7315   # have fixed the caller of ITextACPStore::GetTextExt() to return
7316   # TS_E_NOLAYOUT to TIP as-is, rather than converting to E_FAIL.
7317   # Therefore, if TIP supports asynchronous layout computation perfectly, we
7318   # can return TS_E_NOLAYOUT and TIP waits next OnLayoutChange()
7319   # notification.  However, some TIPs still have some bugs of asynchronous
7320   # layout support.  We keep hacking the result of GetTextExt() like running
7321   # on Windows 10, however, there could be unknown TIP bugs if we stop
7322   # hacking the result.  So, user can stop checking build ID to make Gecko
7323   # hack the result forcibly.
7324 -   name: intl.tsf.hack.allow_to_stop_hacking_on_build_17643_or_later
7325     type: bool
7326     value: @IS_EARLY_BETA_OR_EARLIER@
7327     mirror: always
7329   # If true, automatically extend selection to cluster boundaries when
7330   # TSF/TIP requests to select from/by middle of a cluster.
7331 -   name: intl.tsf.hack.extend_setting_selection_range_to_cluster_boundaries
7332     type: bool
7333     value: @IS_NOT_EARLY_BETA_OR_EARLIER@
7334     mirror: always
7336   # Whether Gecko supports IMM even if TSF is enabled.  This pref exists
7337   # only for check TSF behavior of new versions.  Therefore, users should
7338   # not set this to false for daily use.
7339 -   name: intl.tsf.support_imm
7340     type: bool
7341     value: true
7342     mirror: once
7344   # If true, TSF and TIP (IME) can retrieve URL of the document containing
7345   # the focused element.  When this is set to true, Gecko exposes the spec
7346   # of the URL.
7347   # And Gecko exposes only "http" and "https" URLs.  E.g., "data", "blob",
7348   # "file" URLs are never exposed.
7349 -  name: intl.tsf.expose_url.allowed
7350    type: bool
7351    value: true
7352    mirror: always
7354   # If true, TSF and TIP (IME) can retrieve URL of the document containing
7355   # the focused element in the private browsing mode too.
7356 -  name: intl.tsf.expose_url_in_private_browsing.allowed
7357    type: bool
7358    value: false
7359    mirror: always
7361 #if defined(ENABLE_TESTS)
7362   # If true, NS_GetComplexLineBreaks compares the line breaks produced in the
7363   # content process using the Uniscribe line breaker, with those from a
7364   # brokered call to the parent.
7365 -   name: intl.compare_against_brokered_complex_line_breaks
7366     type: bool
7367     value: false
7368     mirror: always
7369 #endif
7370 #endif
7372 # If you use legacy Chinese IME which puts an ideographic space to composition
7373 # string as placeholder, this pref might be useful.  If this is true and when
7374 # web contents forcibly commits composition (e.g., moving focus), the
7375 # ideographic space will be ignored (i.e., commits with empty string).
7376 - name: intl.ime.remove_placeholder_character_at_commit
7377   type: bool
7378   value: false
7379   mirror: always
7382 #if defined(XP_MACOSX) || defined(MOZ_WIDGET_GTK)
7383 # Whether text input without keyboard press nor IME composition should cause a
7384 # set of composition events or not.  E.g., when you use Emoji picker on macOS,
7385 # it inserts an Emoji character directly.  If set to true, `compositionstart`,
7386 # `compositionupdate` and `compositionend` events will be fired, and the
7387 # correspnding `beforeinput` events are not cancelable.  Otherwise, if set to
7388 # false, any user input events are not exposed to web apps but only
7389 # `beforeinput` event is fired as "insert text" as a cancelable event.
7390 - name: intl.ime.use_composition_events_for_insert_text
7391   type: bool
7392   value: false
7393   mirror: always
7394 #endif
7396 # If true, we use UAX14/29 compatible segmenter rules using ICU4X
7397 - name: intl.icu4x.segmenter.enabled
7398   type: RelaxedAtomicBool
7399   value: true
7400   mirror: always
7402 #---------------------------------------------------------------------------
7403 # Prefs starting with "javascript."
7405 # NOTE: SpiderMonkey starts up before `mirror: once` preferences are sealed and
7406 #       we cannot use them (Bug 1698311). Instead, we use `mirror: always`
7407 #       prefs but mark as `do_not_use_directly` and `LoadStartupJSPrefs` will
7408 #       mirror them into SpiderMonkey.
7409 #---------------------------------------------------------------------------
7411 # The JavaScript JIT compilers. These are read once on startup so a browser may
7412 # need to be restarted if toggling them. In general each subsequent JIT depends
7413 # on the ones before it being enabled.
7414 - name: javascript.options.blinterp
7415   type: bool
7416   value: true
7417   mirror: always  # LoadStartupJSPrefs
7418   do_not_use_directly: true
7420 - name: javascript.options.baselinejit
7421   type: bool
7422   value: true
7423   mirror: always  # LoadStartupJSPrefs
7424   do_not_use_directly: true
7426 - name: javascript.options.ion
7427   type: bool
7428   value: true
7429   mirror: always  # LoadStartupJSPrefs
7430   do_not_use_directly: true
7432 # The irregexp JIT for regex evaluation.
7433 - name: javascript.options.native_regexp
7434   type: bool
7435   value: true
7436   mirror: always  # LoadStartupJSPrefs
7437   do_not_use_directly: true
7439 # Jit Hints Cache - An in-process cache for the
7440 # content process to accelerate repeated baseline
7441 # compilations
7442 - name: javascript.options.jithints
7443   type: bool
7444   value: true
7445   mirror: always  # LoadStartupJSPrefs
7446   do_not_use_directly: true
7448 # "Warm-up" thresholds at which we attempt to compile a script/function with
7449 # the next JIT tier.
7451 # NOTE: These must match JitOptions defaults.
7452 - name: javascript.options.blinterp.threshold
7453   type: int32_t
7454   value: 10
7455   mirror: always  # LoadStartupJSPrefs
7456   do_not_use_directly: true
7458 - name: javascript.options.baselinejit.threshold
7459   type: int32_t
7460   value: 100
7461   mirror: always  # LoadStartupJSPrefs
7462   do_not_use_directly: true
7464 - name: javascript.options.ion.threshold
7465   type: int32_t
7466   value: 1500
7467   mirror: always  # LoadStartupJSPrefs
7468   do_not_use_directly: true
7470 # Enable off-main-thread Warp compilation.
7471 - name: javascript.options.ion.offthread_compilation
7472   type: bool
7473   value: true
7474   mirror: always  # LoadStartupJSPrefs
7475   do_not_use_directly: true
7477 #ifdef DEBUG
7478   # Enable extra correctness checks in the JITs that are slow and only available
7479   # in debug builds.
7480 -   name: javascript.options.jit.full_debug_checks
7481     type: bool
7482     value: false
7483     mirror: always  # LoadStartupJSPrefs
7484     do_not_use_directly: true
7485 #endif
7487 # Heuristic threshold for Warp/Ion to decide that too many bailouts are
7488 # happening and an IonScript should be discarded.
7490 # NOTE: This must match JitOptions defaults.
7491 - name: javascript.options.ion.frequent_bailout_threshold
7492   type: int32_t
7493   value: 10
7494   mirror: always  # LoadStartupJSPrefs
7495   do_not_use_directly: true
7497 # A threshold for Warp to decide whether a function can be inlined.
7498 # If the size of a function is smaller than this threshold, then it
7499 # may be inlined.
7501 # NOTE: These must match JitOptions defaults.
7502 - name: javascript.options.inlining_bytecode_max_length
7503   type: uint32_t
7504   value: 130
7505   mirror: always
7506   do_not_use_directly: true
7508 - name: javascript.options.use_emulates_undefined_fuse
7509   type: bool
7510   value: true
7511   mirror: always
7512   do_not_use_directly: true
7513   set_spidermonkey_pref: startup
7515 - name: javascript.options.compact_on_user_inactive
7516   type: bool
7517   value: true
7518   mirror: always
7520 # No-op pref for testing the SpiderMonkey pref system.
7521 - name: javascript.options.tests.uint32-pref
7522   type: uint32_t
7523   value: 1
7524   mirror: always
7525   set_spidermonkey_pref: always
7527 # Enable fuse based destructuring
7528 - name: javascript.options.destructuring_fuse
7529   type: bool
7530   value: true
7531   mirror: always
7532   set_spidermonkey_pref: startup
7534 # The default amount of time to wait from the user being idle to starting a
7535 # shrinking GC. Measured in milliseconds.
7536 - name: javascript.options.compact_on_user_inactive_delay
7537   type: uint32_t
7538 #ifdef NIGHTLY_BUILD
7539   value: 15000
7540 #else
7541   value: 300000
7542 #endif
7543   mirror: always
7545 # Use better error message when accessing property of null or undefined.
7546 - name: javascript.options.property_error_message_fix
7547   type: bool
7548   value: @IS_NIGHTLY_OR_DEV_EDITION@
7549   mirror: always
7550   set_spidermonkey_pref: startup
7552 # Support for weak references in JavaScript (WeakRef and FinalizationRegistry).
7553 - name: javascript.options.weakrefs
7554   type: bool
7555   value: true
7556   mirror: always
7557   set_spidermonkey_pref: startup
7559 # Whether to expose the FinalizationRegistry.prototype.cleanupSome method.
7560 - name: javascript.options.experimental.weakrefs.expose_cleanupSome
7561   type: bool
7562   value: false
7563   mirror: always
7564   set_spidermonkey_pref: startup
7566 # ShadowRealms: https://github.com/tc39/proposal-shadowrealm
7567 - name: javascript.options.experimental.shadow_realms
7568   # Atomic, as we assert the preference, and that assertion may happen
7569   # in a worker.
7570   type: RelaxedAtomicBool
7571   value: false
7572   mirror: always
7573   # Non-startup pref because the WPT test harness sets prefs after startup.
7574   set_spidermonkey_pref: always
7576 # Support for String.prototype.{is,to}WellFormed in JavaScript.
7577 - name: javascript.options.well_formed_unicode_strings
7578   type: bool
7579   value: true
7580   mirror: always
7581   set_spidermonkey_pref: startup
7583 # Support for Object.groupBy/Map.groupBy in JavaScript.
7584 -  name: javascript.options.array_grouping
7585    type: bool
7586    value: true
7587    mirror: always
7588    set_spidermonkey_pref: startup
7590 #ifdef NIGHTLY_BUILD
7591   # Experimental support for Iterator Helpers in JavaScript.
7592 -   name: javascript.options.experimental.iterator_helpers
7593     type: bool
7594     value: false
7595     mirror: always
7596     set_spidermonkey_pref: startup
7598   # Experimental support for New Set methods
7599 -   name: javascript.options.experimental.new_set_methods
7600     type: bool
7601     value: false
7602     mirror: always
7603     set_spidermonkey_pref: startup
7605   # Experimental support for Symbols as WeakMap keys in JavaScript.
7606 -   name: javascript.options.experimental.symbols_as_weakmap_keys
7607     type: bool
7608     value: false
7609     mirror: always
7610     set_spidermonkey_pref: startup
7612   # Experimental support for resizable ArrayBuffers in JavaScript.
7613 -   name: javascript.options.experimental.arraybuffer_resizable
7614     type: bool
7615     value: false
7616     mirror: always
7617     set_spidermonkey_pref: startup
7619   # Experimental support for growable SharedArrayBuffers in JavaScript.
7620 -   name: javascript.options.experimental.sharedarraybuffer_growable
7621     type: bool
7622     value: false
7623     mirror: always
7624     set_spidermonkey_pref: startup
7625 #endif  // NIGHTLY_BUILD
7627 # Experimental support for ArrayBuffer.prototype.transfer{,ToFixedLength}() in JavaScript.
7628 -   name: javascript.options.arraybuffer_transfer
7629     type: bool
7630     value: true
7631     mirror: always
7632     set_spidermonkey_pref: startup
7634 #ifdef NIGHTLY_BUILD
7635   # Experimental support for Import Assertions in JavaScript.
7636 -   name: javascript.options.experimental.import_attributes
7637     type: bool
7638     value: false
7639     mirror: always
7640   # Import attributes were developed under the 'assert' keyword.
7641   # We have that keyword under a pref, as we'd rather not ship it if we
7642   # can avoid it, but in the case we can't, we'd like access to it quickly.
7643 -   name: javascript.options.experimental.import_attributes.assert_syntax
7644     type: bool
7645     value: false
7646     mirror: always
7647 #endif  // NIGHTLY_BUILD
7649 - name: javascript.options.wasm_caching
7650   type: bool
7651   value: true
7652   mirror: always
7654 # The amount of time we wait between a request to GC (due to leaving a page) and doing the actual GC, in ms.
7655 - name: javascript.options.gc_delay
7656   type: uint32_t
7657   value: 4000
7658   mirror: always
7660 # The amount of time we wait from the first request to GC to actually doing the first GC, in ms.
7661 - name: javascript.options.gc_delay.first
7662   type: uint32_t
7663   value: 10000
7664   mirror: always
7666 # After doing a zonal GC, wait this much time (in ms) and then do a full GC,
7667 # unless one is already pending.
7668 - name: javascript.options.gc_delay.full
7669   type: uint32_t
7670   value: 60000
7671   mirror: always
7673 # Maximum amount of time that should elapse between incremental GC slices, in ms.
7674 - name: javascript.options.gc_delay.interslice
7675   type: uint32_t
7676   value: 250
7677   mirror: always
7679 # nsJSEnvironmentObserver observes the memory-pressure notifications and
7680 # forces a garbage collection and cycle collection when it happens, if the
7681 # appropriate pref is set.
7682 - name: javascript.options.gc_on_memory_pressure
7683   type: bool
7684   # Disable the JS engine's GC on memory pressure, since we do one in the
7685   # mobile browser (bug 669346).
7686   # XXX: this value possibly should be changed, or the pref removed entirely.
7687   #      See bug 1450787.
7688   value: @IS_NOT_ANDROID@
7689   mirror: always
7691 # We allow at most MIN(max, MAX(NUM_CPUS / cpu_divisor, 1)) concurrent GCs
7692 # between processes
7693 - name: javascript.options.concurrent_multiprocess_gcs.cpu_divisor
7694   type: RelaxedAtomicUint32
7695   value: 4
7696   mirror: always
7698 # See 'cpu_divisor' above, 0 means UINT_32_MAX.
7699 - name: javascript.options.concurrent_multiprocess_gcs.max
7700   type: RelaxedAtomicUint32
7701   value: 0
7702   mirror: always
7704 - name: javascript.options.mem.log
7705   type: bool
7706   value: false
7707   mirror: always
7709 - name: javascript.options.mem.notify
7710   type: bool
7711   value: false
7712   mirror: always
7714 # Whether the Parent process allocates and shares memory with all content
7715 # processes. This is mirrored once, as the parent process will do this
7716 # allocation early on.
7717 - name: javascript.options.self_hosted.use_shared_memory
7718   type: bool
7719   value: true
7720   mirror: always  # LoadStartupJSPrefs
7721   do_not_use_directly: true
7723 - name: javascript.options.main_thread_stack_quota_cap
7724   type: uint32_t
7725 #if defined(MOZ_ASAN)
7726   value: 6 * 1024 * 1024
7727 #else
7728   value: 2 * 1024 * 1024
7729 #endif
7730   mirror: always
7732 - name: javascript.options.wasm_optimizingjit
7733   type: bool
7734   value: true
7735   mirror: always
7737 -   name: javascript.options.wasm_relaxed_simd
7738     type: bool
7739 #if defined(ENABLE_WASM_RELAXED_SIMD)
7740     value: @IS_NIGHTLY_BUILD@
7741 #else
7742     value: false
7743 #endif
7744     mirror: always
7745     set_spidermonkey_pref: startup
7747 -   name: javascript.options.wasm_moz_intgemm
7748     type: bool
7749 #if defined(ENABLE_WASM_MOZ_INTGEMM)
7750     value: @IS_NIGHTLY_BUILD@
7751 #else
7752     value: false
7753 #endif
7754     mirror: always
7755     set_spidermonkey_pref: startup
7757 -   name: javascript.options.wasm_exnref
7758     type: bool
7759     value: @IS_EARLY_BETA_OR_EARLIER@
7760     mirror: always
7761     set_spidermonkey_pref: startup
7763 -   name: javascript.options.wasm_gc
7764     type: bool
7765 #if defined(ENABLE_WASM_GC)
7766     value: true
7767 #else
7768     value: false
7769 #endif
7770     mirror: always
7771     set_spidermonkey_pref: startup
7773 -   name: javascript.options.wasm_memory_control
7774     type: bool
7775     value: false
7776     mirror: always
7777     set_spidermonkey_pref: startup
7779 #if defined(ENABLE_WASM_SIMD)
7780 #if defined(JS_CODEGEN_X64) || defined(JS_CODEGEN_X86)
7781   # Enables AVX instructions support on X86/X64 platforms.
7782   # Changing these prefs requires a restart.
7783 -   name: javascript.options.wasm_simd_avx
7784     type: bool
7785     value: true
7786     mirror: always
7787 #endif
7788 #endif
7790 -   name: javascript.options.wasm_memory64
7791     type: bool
7792 #if defined(ENABLE_WASM_MEMORY64)
7793     value: @IS_NIGHTLY_BUILD@
7794 #else
7795     value: false
7796 #endif
7797     mirror: always
7798     set_spidermonkey_pref: startup
7800 -   name: javascript.options.wasm_multi_memory
7801     type: bool
7802 #if defined(ENABLE_WASM_MULTI_MEMORY)
7803     value: true
7804 #else
7805     value: false
7806 #endif
7807     mirror: always
7808     set_spidermonkey_pref: startup
7810 -   name: javascript.options.wasm_js_string_builtins
7811     type: bool
7812     value: false
7813     mirror: always
7814     set_spidermonkey_pref: startup
7816 -   name: javascript.options.wasm_tail_calls
7817     type: bool
7818 #if defined(ENABLE_WASM_TAIL_CALLS)
7819     value: true
7820 #else
7821     value: false
7822 #endif
7823     mirror: always
7824     set_spidermonkey_pref: startup
7826 -   name: javascript.options.wasm_test_serialization
7827     type: bool
7828     value: false
7829     mirror: always
7830     set_spidermonkey_pref: startup
7832 # Support for pretenuring allocations based on their allocation site.
7833 - name: javascript.options.site_based_pretenuring
7834   type: bool
7835   value: true
7836   mirror: always
7837   do_not_use_directly: true
7838   set_spidermonkey_pref: startup
7840 #if !defined(JS_CODEGEN_MIPS32) && !defined(JS_CODEGEN_MIPS64) && !defined(JS_CODEGEN_LOONG64)
7841   # Spectre security vulnerability mitigations for the JS JITs.
7842   #
7843   # NOTE: The MIPS and LoongArch backends do not support these mitigations (and generally
7844   #       do not need them). In that case, leave the pref unlisted with its
7845   #       default value of false.
7846 -   name: javascript.options.spectre.index_masking
7847     type: bool
7848     value: true
7849     mirror: always  # LoadStartupJSPrefs
7850     do_not_use_directly: true
7852 -   name: javascript.options.spectre.object_mitigations
7853     type: bool
7854     value: true
7855     mirror: always  # LoadStartupJSPrefs
7856     do_not_use_directly: true
7858 -   name: javascript.options.spectre.string_mitigations
7859     type: bool
7860     value: true
7861     mirror: always  # LoadStartupJSPrefs
7862     do_not_use_directly: true
7864 -   name: javascript.options.spectre.value_masking
7865     type: bool
7866     value: true
7867     mirror: always  # LoadStartupJSPrefs
7868     do_not_use_directly: true
7870 -   name: javascript.options.spectre.jit_to_cxx_calls
7871     type: bool
7872     value: false
7873     mirror: always  # LoadStartupJSPrefs
7874     do_not_use_directly: true
7875 #endif  // !defined(JS_CODEGEN_MIPSXX) && !defined(JS_CODEGEN_LOONG64)
7877 # Separate pref to override the values of the Spectre-related prefs above for
7878 # isolated web content processes, where we don't need these mitigations.
7879 - name: javascript.options.spectre.disable_for_isolated_content
7880   type: bool
7881   value: true
7882   mirror: always
7884 # Whether the W^X policy is enforced to mark JIT code pages as either writable
7885 # or executable but never both at the same time. OpenBSD defaults to W^X.
7886 - name: javascript.options.content_process_write_protect_code
7887   type: bool
7888 #if defined(XP_OPENBSD)
7889   value: true
7890 #else
7891   value: false
7892 #endif
7893   mirror: always
7895 # Whether to use the XPCOM thread pool for JS helper tasks.
7896 - name: javascript.options.external_thread_pool
7897   type: bool
7898   value: true
7899   mirror: always
7900   do_not_use_directly: true
7902 # Whether to use the off-thread script compilation and decoding.
7903 - name: javascript.options.parallel_parsing
7904   type: bool
7905   value: true
7906   mirror: always
7908 # Whether to use fdlibm for Math.sin, Math.cos, and Math.tan. When
7909 # privacy.resistFingerprinting is true, this pref is ignored and fdlibm is used
7910 # anyway.
7911 - name: javascript.options.use_fdlibm_for_sin_cos_tan
7912   type: bool
7913   value: @IS_EARLY_BETA_OR_EARLIER@
7914   mirror: always
7915   set_spidermonkey_pref: always
7917 # Whether to support parsing '//(#@) source(Mapping)?URL=' pragmas.
7918 - name: javascript.options.source_pragmas
7919   type: bool
7920   value: true
7921   mirror: always
7923 # asm.js
7924 - name: javascript.options.asmjs
7925   type: bool
7926   value: true
7927   mirror: always
7929 # Whether to throw a TypeError if asm.js code hits validation failure.
7930 - name: javascript.options.throw_on_asmjs_validation_failure
7931   type: bool
7932   value: false
7933   mirror: always
7935 #---------------------------------------------------------------------------
7936 # Prefs starting with "layers."
7937 #---------------------------------------------------------------------------
7939 # Whether to disable acceleration for all widgets.
7940 - name: layers.acceleration.disabled
7941   type: bool
7942   value: false
7943   mirror: once
7944   do_not_use_directly: true
7945 # Instead, use gfxConfig::IsEnabled(Feature::HW_COMPOSITING).
7947 # Whether to force acceleration on, ignoring blacklists.
7949 # bug 838603 -- on Android, accidentally blacklisting OpenGL layers
7950 # means a startup crash for everyone.
7951 # Temporarily force-enable GL compositing.  This is default-disabled
7952 # deep within the bowels of the widgetry system.  Remove me when GL
7953 # compositing isn't default disabled in widget/android.
7954 - name: layers.acceleration.force-enabled
7955   type: bool
7956   value: @IS_ANDROID@
7957   mirror: once
7958   do_not_use_directly: true
7960 # Whether we allow AMD switchable graphics.
7961 - name: layers.amd-switchable-gfx.enabled
7962   type: bool
7963   value: true
7964   mirror: once
7966 # Whether to use async panning and zooming.
7967 - name: layers.async-pan-zoom.enabled
7968   type: bool
7969   value: true
7970   mirror: once
7971   do_not_use_directly: true
7973 - name: layers.child-process-shutdown
7974   type: RelaxedAtomicBool
7975   value: true
7976   mirror: always
7978 - name: layers.d3d11.force-warp
7979   type: bool
7980   value: false
7981   mirror: once
7983 - name: layers.d3d11.enable-blacklist
7984   type: bool
7985   value: true
7986   mirror: once
7988 # Enable DEAA antialiasing for transformed layers in the compositor.
7989 - name: layers.deaa.enabled
7990   type: RelaxedAtomicBool
7991 #if defined(MOZ_WIDGET_ANDROID)
7992   value: false
7993 #else
7994   value: true
7995 #endif
7996   mirror: always
7998 # Force all possible layers to be always active layers.
7999 - name: layers.force-active
8000   type: bool
8001   value: false
8002   mirror: always
8004 - name: layers.force-shmem-tiles
8005   type: bool
8006   value: false
8007   mirror: once
8009 - name: layers.draw-mask-debug
8010   type: RelaxedAtomicBool
8011   value: false
8012   mirror: always
8014 - name: layers.force-synchronous-resize
8015   type: RelaxedAtomicBool
8016 #ifdef MOZ_WAYLAND
8017   # We want to control it by nsWindow::SynchronouslyRepaintOnResize() on Linux/Wayland.
8018   value: false
8019 #else
8020   value: true
8021 #endif
8022   mirror: always
8024 - name: layers.gpu-process.allow-software
8025   type: bool
8026 #if defined(XP_WIN)
8027   value: true
8028 #else
8029   value: false
8030 #endif
8031   mirror: once
8033 - name: layers.gpu-process.enabled
8034   type: bool
8035 #if defined(XP_WIN) || defined(MOZ_WIDGET_ANDROID)
8036   value: true
8037 #else
8038   value: false
8039 #endif
8040   mirror: once
8042 - name: layers.gpu-process.force-enabled
8043   type: bool
8044   value: false
8045   mirror: once
8047 - name: layers.gpu-process.ipc_reply_timeout_ms
8048   type: int32_t
8049   value: 10000
8050   mirror: once
8052 # How many unstable GPU process restarts we allow for a given configuration.
8053 - name: layers.gpu-process.max_restarts
8054   type: RelaxedAtomicInt32
8055 #if defined(XP_WIN) || defined(MOZ_WIDGET_GTK) || defined(MOZ_WIDGET_ANDROID)
8056   value: 6
8057 #else
8058   value: 1
8059 #endif
8060   mirror: always
8062 # How many frames we must render before declaring the GPU process stable, and
8063 # allow restarts without it counting against our maximum restarts.
8064 - name: layers.gpu-process.stable.frame-threshold
8065   type: RelaxedAtomicUint32
8066   value: 10
8067   mirror: always
8069 # How many milliseconds the GPU process must have lived before we accept that
8070 # it is stable, and allow restarts without it counting against our maximum
8071 # restarts.
8072 - name: layers.gpu-process.stable.min-uptime-ms
8073   type: RelaxedAtomicInt32
8074   value: 4 * 60000
8075   mirror: always
8077 # Note: This pref will only be used if it is less than layers.gpu-process.max_restarts.
8078 - name: layers.gpu-process.max_restarts_with_decoder
8079   type: RelaxedAtomicInt32
8080   value: 0
8081   mirror: always
8083 - name: layers.gpu-process.startup_timeout_ms
8084   type: int32_t
8085   value: 5000
8086   mirror: once
8088 - name: layers.gpu-process.crash-also-crashes-browser
8089   type: bool
8090   value: false
8091   mirror: always
8093 # Whether to animate simple opacity and transforms on the compositor.
8094 - name: layers.offmainthreadcomposition.async-animations
8095   type: bool
8096   value: true
8097   mirror: always
8099 # Whether to log information about off main thread animations to stderr.
8100 - name: layers.offmainthreadcomposition.log-animations
8101   type: bool
8102   value: false
8103   mirror: always
8105 - name: layers.offmainthreadcomposition.force-disabled
8106   type: bool
8107   value: false
8108   mirror: once
8110 # Compositor target frame rate. NOTE: If vsync is enabled the compositor
8111 # frame rate will still be capped.
8112 # -1 -> default (match layout.frame_rate or 60 FPS)
8113 # 0  -> full-tilt mode: Recomposite even if not transaction occured.
8114 - name: layers.offmainthreadcomposition.frame-rate
8115   type: RelaxedAtomicInt32
8116   value: -1
8117   mirror: always
8119 #ifdef XP_WIN
8120 -   name: layers.prefer-opengl
8121     type: bool
8122     value: false
8123     mirror: once
8124 #endif
8126 # Copy-on-write canvas.
8127 - name: layers.shared-buffer-provider.enabled
8128   type: RelaxedAtomicBool
8129   value: true
8130   mirror: always
8132 - name: layers.recycle-allocator-rdd
8133   type: bool
8134   value: true
8135   mirror: once
8137 - name: layers.iosurfaceimage.recycle-limit
8138   type: RelaxedAtomicUint32
8139   value: 15
8140   mirror: always
8142 - name: layers.iosurfaceimage.use-nv12
8143   type: bool
8144   value: true
8145   mirror: once
8147 #---------------------------------------------------------------------------
8148 # Prefs starting with "layout."
8149 #---------------------------------------------------------------------------
8151 # Debug-only pref to force enable the AccessibleCaret. If you want to
8152 # control AccessibleCaret by mouse, you'll need to set
8153 # "layout.accessiblecaret.hide_carets_for_mouse_input" to false.
8154 - name: layout.accessiblecaret.enabled
8155   type: bool
8156   value: false
8157   mirror: always
8159 # Enable the accessible caret on platforms/devices
8160 # that we detect have touch support. Note that this pref is an
8161 # additional way to enable the accessible carets, rather than
8162 # overriding the layout.accessiblecaret.enabled pref.
8163 - name: layout.accessiblecaret.enabled_on_touch
8164   type: bool
8165   value: true
8166   mirror: always
8168 # By default, carets become tilt only when they are overlapping.
8169 - name: layout.accessiblecaret.always_tilt
8170   type: bool
8171   value: false
8172   mirror: always
8174 # Show caret in cursor mode when long tapping on an empty content. This
8175 # also changes the default update behavior in cursor mode, which is based
8176 # on the emptiness of the content, into something more heuristic. See
8177 # AccessibleCaretManager::UpdateCaretsForCursorMode() for the details.
8178 - name: layout.accessiblecaret.caret_shown_when_long_tapping_on_empty_content
8179   type: bool
8180   value: false
8181   mirror: always
8183 # 0 = by default, always hide carets for selection changes due to JS calls.
8184 # 1 = update any visible carets for selection changes due to JS calls,
8185 #     but don't show carets if carets are hidden.
8186 # 2 = always show carets for selection changes due to JS calls.
8187 - name: layout.accessiblecaret.script_change_update_mode
8188   type: int32_t
8189   value: 0
8190   mirror: always
8192 # Allow one caret to be dragged across the other caret without any limitation.
8193 # This matches the built-in convention for all desktop platforms.
8194 - name: layout.accessiblecaret.allow_dragging_across_other_caret
8195   type: bool
8196   value: true
8197   mirror: always
8199 # Optionally provide haptic feedback on long-press selection events.
8200 - name: layout.accessiblecaret.hapticfeedback
8201   type: bool
8202   value: false
8203   mirror: always
8205 # Smart phone-number selection on long-press is not enabled by default.
8206 - name: layout.accessiblecaret.extend_selection_for_phone_number
8207   type: bool
8208   value: false
8209   mirror: always
8211 # Keep the accessible carets hidden when the user is using mouse input (as
8212 # opposed to touch/pen/etc.).
8213 - name: layout.accessiblecaret.hide_carets_for_mouse_input
8214   type: bool
8215   value: true
8216   mirror: always
8218 # CSS attributes (width, height, margin-left) of the AccessibleCaret in CSS
8219 # pixels.
8220 - name: layout.accessiblecaret.width
8221   type: float
8222   value: 34.0f
8223   mirror: always
8225 - name: layout.accessiblecaret.height
8226   type: float
8227   value: 36.0f
8228   mirror: always
8230 - name: layout.accessiblecaret.margin-left
8231   type: float
8232   value: -18.5f
8233   mirror: always
8235 - name: layout.accessiblecaret.transition-duration
8236   type: float
8237   value: 250.0f
8238   mirror: always
8240 # Simulate long tap events to select words. Mainly used in manual testing
8241 # with mouse.
8242 - name: layout.accessiblecaret.use_long_tap_injector
8243   type: bool
8244   value: false
8245   mirror: always
8247 # To support magnify glass, whether we dispatch additional chrome event such as
8248 # dragcaret.
8249 - name: layout.accessiblecaret.magnifier.enabled
8250   type: bool
8251   value: @IS_ANDROID@
8252   mirror: always
8254 # One of several prefs affecting the maximum area to pre-render when animating
8255 # a large element on the compositor.
8256 # This pref enables transform (and transform like properties) animations on a
8257 # large element run on the compositor with rendering partial area of the
8258 # element on the main thread instead of rendering the whole area.  Once the
8259 # animation tried to composite out of the partial rendered area, the animation
8260 # is rendered again with the latest visible partial area.
8261 - name: layout.animation.prerender.partial
8262   type: RelaxedAtomicBool
8263   value: false
8264   mirror: always
8266 # One of several prefs affecting the maximum area to pre-render when animating
8267 # a large element on the compositor.
8268 # This value is applied to both x and y axes and a perfect square contructed
8269 # by the greater axis value which will be capped by the absolute limits is used
8270 # for the partial pre-render area.
8271 - name: layout.animation.prerender.viewport-ratio-limit
8272   type: AtomicFloat
8273   value: 1.125f
8274   mirror: always
8276 # One of several prefs affecting the maximum area to pre-render when animating
8277 # a large element on the compositor.
8278 - name: layout.animation.prerender.absolute-limit-x
8279   type: RelaxedAtomicUint32
8280   value: 4096
8281   mirror: always
8283 # One of several prefs affecting the maximum area to pre-render when animating
8284 # a large element on the compositor.
8285 - name: layout.animation.prerender.absolute-limit-y
8286   type: RelaxedAtomicUint32
8287   value: 4096
8288   mirror: always
8290 # Test-only pref, if this is true, partial pre-rendered transform animations
8291 # get stuck when it reaches to the pre-rendered boundaries and the pre-render
8292 # region is never updated.
8293 - name: layout.animation.prerender.partial.jank
8294   type: RelaxedAtomicBool
8295   value: false
8296   mirror: always
8298 # Override DPI. A value of -1 means use the maximum of 96 and the system DPI.
8299 # A value of 0 means use the system DPI. A positive value is used as the DPI.
8300 # This sets the physical size of a device pixel and thus controls the
8301 # interpretation of physical units such as "pt".
8302 - name: layout.css.dpi
8303   type: int32_t
8304   value: -1
8305   mirror: always
8307 # Whether to always underline links.
8308 - name: layout.css.always_underline_links
8309   type: RelaxedAtomicBool
8310   value: false
8311   mirror: always
8312   rust: true
8314 # Whether to respect align-content on blocks.
8315 - name: layout.css.align-content.blocks.enabled
8316   type: RelaxedAtomicBool
8317   value: true
8318   mirror: always
8319   rust: true
8321 # Whether Container Queries are enabled
8322 - name: layout.css.container-queries.enabled
8323   type: RelaxedAtomicBool
8324   value: true
8325   mirror: always
8326   rust: true
8328 # Whether content-box and stroke-box are enabled for transform-box.
8329 - name: layout.css.transform-box-content-stroke.enabled
8330   type: RelaxedAtomicBool
8331   value: true
8332   mirror: always
8333   rust: true
8335 # Whether transition-behavior property is enabled?
8336 - name: layout.css.transition-behavior.enabled
8337   type: RelaxedAtomicBool
8338   value: @IS_NIGHTLY_BUILD@
8339   mirror: always
8340   rust: true
8342 # Should we look for counter ancestor scopes first?
8343 - name: layout.css.counter-ancestor-scope.enabled
8344   type: bool
8345   value: true
8346   mirror: always
8348 # Whether the `-moz-control-character-visibility` property is exposed to
8349 # content.
8351 # Only for testing purposes.
8352 - name: layout.css.moz-control-character-visibility.enabled
8353   type: RelaxedAtomicBool
8354   value: false
8355   mirror: always
8356   rust: true
8358 # This pref controls whether the `prefers-color-scheme` value of iframes images
8359 # reacts to the embedder `color-scheme` in content.
8360 - name: layout.css.iframe-embedder-prefers-color-scheme.content.enabled
8361   type: RelaxedAtomicBool
8362   value: true
8363   mirror: always
8365 # Controls the transparency of the initial about:blank document. Generally you
8366 # don't ever want a white flash in dark mode, but due to backwards compat we
8367 # have some extra control over this, for now at least.
8369 # See https://github.com/w3c/csswg-drafts/issues/9624 for iframes.
8371 # Values:
8372 #  1: content-inaccessible top-level only.
8373 #  2: frames and content-inaccessible top-level only.
8374 #  3: always
8375 #  Others: don't treat this document specially.
8376 - name: layout.css.initial-document-transparency
8377   type: RelaxedAtomicInt32
8378   value: 3
8379   mirror: always
8381 # The minimum contrast ratio between the accent color foreground and background
8382 # colors.
8384 # We don't use this for text, so we need a contrast of at least AA (for user
8385 # interface components and graphical objects), which per WCAG is 3:1
8386 - name: layout.css.accent-color.min-contrast-ratio
8387   type: AtomicFloat
8388   value: 3.0
8389   mirror: always
8391 # The target contrast ratio between the accent color foreground and background
8392 # colors when darkening.
8394 # We aim a bit further than the minimum contrast ratio, which seems to provide
8395 # nice results in practice.
8396 - name: layout.css.accent-color.darkening-target-contrast-ratio
8397   type: AtomicFloat
8398   value: 6.0
8399   mirror: always
8401 # Whether the `animation-composition` in css-animations-2 is enabled.
8402 - name: layout.css.animation-composition.enabled
8403   type: bool
8404   value: true
8405   mirror: always
8407 # Is the codepath for using cached scrollbar styles enabled?
8408 - name: layout.css.cached-scrollbar-styles.enabled
8409   type: bool
8410   value: true
8411   mirror: always
8413 # Whether we cache inline styles in a document unconditionally or not.
8414 - name: layout.css.inline-style-caching.always-enabled
8415   type: bool
8416   value: true
8417   mirror: always
8419 # Whether computed local-fragment-only image urls serialize using the same
8420 # rules as filter/mask/etc (not resolving the URL for local refs).
8422 # See https://github.com/w3c/csswg-drafts/issues/3195
8423 - name: layout.css.computed-style.dont-resolve-image-local-refs
8424   type: RelaxedAtomicBool
8425   value: true
8426   mirror: always
8427   rust: true
8429 # Whether we should expose all shorthands in getComputedStyle().
8430 - name: layout.css.computed-style.shorthands
8431   type: bool
8432   value: true
8433   mirror: always
8435 # Are implicit tracks in computed grid templates serialized?
8436 - name: layout.css.serialize-grid-implicit-tracks
8437   type: RelaxedAtomicBool
8438   value: true
8439   mirror: always
8441 # Whether the system-ui generic family is enabled.
8442 - name: layout.css.system-ui.enabled
8443   type: RelaxedAtomicBool
8444   value: true
8445   mirror: always
8446   rust: true
8448 # Set the number of device pixels per CSS pixel. A value <= 0 means choose
8449 # automatically based on user settings for the platform (e.g., "UI scale factor"
8450 # on Mac). If browser.display.os-zoom-behavior == 1, then a positive value
8451 # will be multiplied by the text scale factor; otherwise a positive value is
8452 # used as-is. This controls the size of a CSS "px" at 100% full-zoom.
8453 # The size of system fonts is also changed in proportion with the change in
8454 # "px" sizes. Use "ui.textScaleFactor" instead to only change the size of "px".
8455 # This is only used for windows on the screen, not for printing.
8456 - name: layout.css.devPixelsPerPx
8457   type: AtomicFloat
8458   value: -1.0f
8459   mirror: always
8461 # Is support for CSS backdrop-filter enabled?
8462 - name: layout.css.backdrop-filter.enabled
8463   type: bool
8464   value: true
8465   mirror: always
8467 # Do we override the blocklist for CSS backdrop-filter?
8468 - name: layout.css.backdrop-filter.force-enabled
8469   type: bool
8470   value: false
8471   mirror: always
8473 # Is support for rect() enabled?
8474 - name: layout.css.basic-shape-rect.enabled
8475   type: RelaxedAtomicBool
8476   value: true
8477   mirror: always
8478   rust: true
8480 # Is support for shape() enabled?
8481 - name: layout.css.basic-shape-shape.enabled
8482   type: RelaxedAtomicBool
8483   value: @IS_NIGHTLY_BUILD@
8484   mirror: always
8485   rust: true
8487 # Is support for xywh() enabled?
8488 - name: layout.css.basic-shape-xywh.enabled
8489   type: RelaxedAtomicBool
8490   value: true
8491   mirror: always
8492   rust: true
8494 # Should stray control characters be rendered visibly?
8495 - name: layout.css.control-characters.visible
8496   type: RelaxedAtomicBool
8497   value: @IS_NOT_RELEASE_OR_BETA@
8498   mirror: always
8499   rust: true
8501 # Whether the `content-visibility` CSS property is enabled
8502 - name: layout.css.content-visibility.enabled
8503   type: RelaxedAtomicBool
8504   value: true
8505   mirror: always
8506   rust: true
8508 # Whether the `contain-intrinsic-size` CSS property is enabled
8509 - name: layout.css.contain-intrinsic-size.enabled
8510   type: RelaxedAtomicBool
8511   value: true
8512   mirror: always
8513   rust: true
8515 # Is support for GeometryUtils.convert*FromNode enabled?
8516 - name: layout.css.convertFromNode.enabled
8517   type: bool
8518   value: @IS_NOT_RELEASE_OR_BETA@
8519   mirror: always
8521 - name: layout.css.cross-fade.enabled
8522   type: RelaxedAtomicBool
8523   value: false
8524   mirror: always
8525   rust: true
8527 # Is support for light-dark() on content enabled?
8528 - name: layout.css.light-dark.enabled
8529   type: RelaxedAtomicBool
8530   value: true
8531   mirror: always
8532   rust: true
8534 # Is support for fit-content() enabled?
8535 - name: layout.css.fit-content-function.enabled
8536   type: RelaxedAtomicBool
8537   value: false
8538   mirror: always
8539   rust: true
8541 # Whether to use tight bounds for floating ::first-letter (legacy Gecko behavior)
8542 # or loose bounds based on overall font metrics (WebKit/Blink-like behavior)?
8543 # Values mean:
8544 #     1   legacy Gecko behavior (tight bounds)
8545 #     0   loose typographic bounds (similar to webkit/blink)
8546 #    -1   auto behavior: use loose bounds if reduced line-height (<1em) or negative
8547 #         block-start margin is present; otherwise use tight bounds.
8548 - name: layout.css.floating-first-letter.tight-glyph-bounds
8549   type: int32_t
8550 #ifdef NIGHTLY_BUILD
8551   value: -1
8552 #else
8553   value: 1
8554 #endif
8555   mirror: always
8557 # Is support for the @font-palette-values rule and font-palette property enabled?
8558 - name: layout.css.font-palette.enabled
8559   type: RelaxedAtomicBool
8560   value: true
8561   mirror: always
8562   rust: true
8564 # Is support for variation fonts enabled?
8565 - name: layout.css.font-variations.enabled
8566   type: RelaxedAtomicBool
8567   value: true
8568   mirror: always
8569   rust: true
8571 # Is support for the size-adjust @font-face descriptor enabled?
8572 - name: layout.css.size-adjust.enabled
8573   type: RelaxedAtomicBool
8574   value: true
8575   mirror: always
8576   rust: true
8578 # Is support for the tech() function in the @font-face src descriptor enabled?
8579 - name: layout.css.font-tech.enabled
8580   type: RelaxedAtomicBool
8581   value: true
8582   mirror: always
8583   rust: true
8585 # Is support for font-variant-emoji enabled?
8586 - name: layout.css.font-variant-emoji.enabled
8587   type: RelaxedAtomicBool
8588   value: @IS_NIGHTLY_BUILD@
8589   mirror: always
8590   rust: true
8592 # Visibility level of font families available to CSS font-matching:
8593 #   1 - only base system fonts
8594 #   2 - also fonts from optional language packs
8595 #   3 - also user-installed fonts
8596 - name: layout.css.font-visibility
8597   type: int32_t
8598   value: 3
8599   mirror: always
8601 # Is support for GeometryUtils.getBoxQuads enabled?
8602 - name: layout.css.getBoxQuads.enabled
8603   type: bool
8604   value: @IS_NOT_RELEASE_OR_BETA@
8605   mirror: always
8607 # Is support for (linear|radial|conic)-gradient color interpolation methods enabled?
8608 - name: layout.css.gradient-color-interpolation-method.enabled
8609   type: RelaxedAtomicBool
8610   value: @IS_NIGHTLY_BUILD@
8611   mirror: always
8612   rust: true
8614 # Should we propagate baseline alignment information from a parent grid into
8615 # its subgrids?
8616 - name: layout.css.grid-subgrid-baselines.enabled
8617   type: RelaxedAtomicBool
8618   value: @IS_NIGHTLY_BUILD@
8619   mirror: always
8621 # Is support for CSS masonry layout enabled?
8622 - name: layout.css.grid-template-masonry-value.enabled
8623   type: RelaxedAtomicBool
8624   value: @IS_NIGHTLY_BUILD@
8625   mirror: always
8626   rust: true
8628 # Is support for :has() enabled?
8629 - name: layout.css.has-selector.enabled
8630   type: RelaxedAtomicBool
8631   value: true
8632   mirror: always
8633   rust: true
8635 # Is support for CSS individual transform enabled?
8636 - name: layout.css.individual-transform.enabled
8637   type: bool
8638   value: true
8639   mirror: always
8641 # Is support for CSS initial-letter property enabled?
8642 - name: layout.css.initial-letter.enabled
8643   type: bool
8644   value: false
8645   mirror: always
8647 # Is support for motion-path <basic-shape> other than path() enabled?
8648 # https://drafts.fxtf.org/motion-1/#valdef-offset-path-basic-shape
8649 - name: layout.css.motion-path-basic-shapes.enabled
8650   type: RelaxedAtomicBool
8651   value: true
8652   mirror: always
8653   rust: true
8655 # Is support for motion-path <coord-box> enabled?
8656 # https://drafts.fxtf.org/motion-1/#valdef-offset-path-coord-box
8657 - name: layout.css.motion-path-coord-box.enabled
8658   type: RelaxedAtomicBool
8659   value: true
8660   mirror: always
8661   rust: true
8663 # Is support for motion-path ray() enabled?
8664 - name: layout.css.motion-path-ray.enabled
8665   type: RelaxedAtomicBool
8666   value: true
8667   mirror: always
8668   rust: true
8670 # Is support for motion-path offset-position enabled?
8671 - name: layout.css.motion-path-offset-position.enabled
8672   type: RelaxedAtomicBool
8673   value: true
8674   mirror: always
8675   rust: true
8677 # Is support for motion-path url enabled?
8678 - name: layout.css.motion-path-url.enabled
8679   type: RelaxedAtomicBool
8680   value: true
8681   mirror: always
8682   rust: true
8684 # Pref to control whether the ::marker property restrictions defined in [1]
8685 # apply.
8687 # [1]: https://drafts.csswg.org/css-pseudo-4/#selectordef-marker
8688 - name: layout.css.marker.restricted
8689   type: RelaxedAtomicBool
8690   value: true
8691   mirror: always
8692   rust: true
8694 # Is -moz-osx-font-smoothing enabled? (Only supported in OSX builds)
8695 - name: layout.css.osx-font-smoothing.enabled
8696   type: bool
8697 #if defined(XP_MACOSX)
8698   value: true
8699 #else
8700   value: false
8701 #endif
8702   mirror: always
8704 # Is support for CSS overflow-clip-box enabled for non-UA sheets?
8705 - name: layout.css.overflow-clip-box.enabled
8706   type: bool
8707   value: false
8708   mirror: always
8710 # Is support for CSS overflow: -moz-hidden-unscrollable enabled
8711 - name: layout.css.overflow-moz-hidden-unscrollable.enabled
8712   type: RelaxedAtomicBool
8713   value: @IS_NOT_NIGHTLY_BUILD@
8714   mirror: always
8715   rust: true
8717 # Is support for overscroll-behavior enabled?
8718 - name: layout.css.overscroll-behavior.enabled
8719   type: bool
8720   value: true
8721   mirror: always
8723 # Enables support for the page-orientation  property inside of CSS @page rules.
8724 - name: layout.css.page-orientation.enabled
8725   type: RelaxedAtomicBool
8726   value: true
8727   mirror: always
8728   rust: true
8730 # Enables support for different CSS page sizes on each page when printing.
8731 - name: layout.css.allow-mixed-page-sizes
8732   type: RelaxedAtomicBool
8733   value: true
8734   mirror: always
8736 # Enables support for @margin rules.
8737 - name: layout.css.margin-rules.enabled
8738   type: RelaxedAtomicBool
8739   value: false
8740   mirror: always
8741   rust: true
8743 # Whether Properties and Values is enabled
8744 - name: layout.css.properties-and-values.enabled
8745   type: RelaxedAtomicBool
8746   value: @IS_NIGHTLY_BUILD@
8747   mirror: always
8748   rust: true
8750 # Dictates whether or not the prefers contrast media query will be
8751 # usable.
8752 #   true: prefers-contrast will toggle based on OS and browser settings.
8753 #   false: prefers-contrast will only parse and toggle in the browser
8754 #   chrome and ua.
8755 - name: layout.css.prefers-contrast.enabled
8756   type: RelaxedAtomicBool
8757   value: true
8758   mirror: always
8759   rust: true
8761 # An override for prefers-color-scheme for content documents.
8762 #   0: Dark
8763 #   1: Light
8764 #   2: Auto (system color scheme unless overridden by browser theme)
8765 - name: layout.css.prefers-color-scheme.content-override
8766   type: RelaxedAtomicInt32
8767   value: 2
8768   mirror: always
8770 # Dictates whether or not the forced-colors media query is enabled.
8771 - name: layout.css.forced-colors.enabled
8772   type: RelaxedAtomicBool
8773   value: true
8774   mirror: always
8775   rust: true
8777 # Dictates whether or not the prefers-reduced-transparency media query is enabled.
8778 - name: layout.css.prefers-reduced-transparency.enabled
8779   type: RelaxedAtomicBool
8780   value: false
8781   mirror: always
8782   rust: true
8784 # Dictates whether or not the inverted-colors media query is enabled.
8785 - name: layout.css.inverted-colors.enabled
8786   type: RelaxedAtomicBool
8787   value: false
8788   mirror: always
8789   rust: true
8791 # Is support for forced-color-adjust properties enabled?
8792 - name: layout.css.forced-color-adjust.enabled
8793   type: RelaxedAtomicBool
8794   value: true
8795   mirror: always
8796   rust: true
8798 # Is support for -moz-prefixed animation properties enabled?
8799 - name: layout.css.prefixes.animations
8800   type: bool
8801   value: true
8802   mirror: always
8804 # Is support for -moz-border-image enabled?
8805 - name: layout.css.prefixes.border-image
8806   type: bool
8807   value: true
8808   mirror: always
8810 # Is support for -moz-box-sizing enabled?
8811 - name: layout.css.prefixes.box-sizing
8812   type: bool
8813   value: true
8814   mirror: always
8816 # Is support for -moz-prefixed font feature properties enabled?
8817 - name: layout.css.prefixes.font-features
8818   type: bool
8819   value: true
8820   mirror: always
8822 # Is support for -moz-prefixed transform properties enabled?
8823 - name: layout.css.prefixes.transforms
8824   type: bool
8825   value: @IS_NOT_NIGHTLY_BUILD@
8826   mirror: always
8828 # Is support for -moz-prefixed transition properties enabled?
8829 - name: layout.css.prefixes.transitions
8830   type: bool
8831   value: @IS_NOT_NIGHTLY_BUILD@
8832   mirror: always
8834 # Is CSS error reporting enabled?
8835 - name: layout.css.report_errors
8836   type: bool
8837   value: true
8838   mirror: always
8840 # Are inter-character ruby annotations enabled?
8841 - name: layout.css.ruby.intercharacter.enabled
8842   type: bool
8843   value: false
8844   mirror: always
8846 - name: layout.css.scroll-behavior.damping-ratio
8847   type: AtomicFloat
8848   value: 1.0f
8849   mirror: always
8851 # Tuning of the smooth scroll motion used by CSSOM-View scroll-behavior.
8852 # Spring-constant controls the strength of the simulated MSD
8853 # (Mass-Spring-Damper).
8854 - name: layout.css.scroll-behavior.spring-constant
8855   type: AtomicFloat
8856   value: 250.0f
8857   mirror: always
8859 # Whether the scroll-driven animations generated by CSS is enabled. This
8860 # also include animation-timelime property.
8861 - name: layout.css.scroll-driven-animations.enabled
8862   type: RelaxedAtomicBool
8863   value: false
8864   mirror: always
8865   rust: true
8867 # When selecting the snap point for CSS scroll snapping, the velocity of the
8868 # scroll frame is clamped to this speed, in CSS pixels / s.
8869 - name: layout.css.scroll-snap.prediction-max-velocity
8870   type: RelaxedAtomicInt32
8871   value: 2000
8872   mirror: always
8874 #  When selecting the snap point for CSS scroll snapping, the velocity of the
8875 # scroll frame is integrated over this duration, in seconds.  The snap point
8876 # best suited for this position is selected, enabling the user to perform fling
8877 # gestures.
8878 - name: layout.css.scroll-snap.prediction-sensitivity
8879   type: AtomicFloat
8880   value: 0.750f
8881   mirror: always
8883 # Stylo thread-pool size.
8884 # Negative means auto, 0 disables the thread-pool (main-thread styling), other
8885 # numbers override as specified.
8886 # Note that 1 still creates a thread-pool of one thread!
8887 - name: layout.css.stylo-threads
8888   type: RelaxedAtomicInt32
8889   value: -1
8890   mirror: always
8891   rust: true
8893 # Stylo work unit size. This is the amount of nodes we'll process in a single
8894 # unit of work of the thread-pool.
8896 # Larger values will increase style sharing cache hits and general DOM locality
8897 # at the expense of decreased opportunities for parallelism.  There are some
8898 # measurements in bug 1385982 comments 11, 12, 13 that investigate some
8899 # slightly different values for the work unit size.
8901 # If the size is significantly increased, make sure to also review
8902 # stylo-local-work-queue prefs, since we might end up doing too much work
8903 # sequentially.
8905 # A value of 0 disables parallelism altogether.
8906 - name: layout.css.stylo-work-unit-size
8907   type: RelaxedAtomicUint32
8908   value: 16
8909   mirror: always
8910   rust: true
8912 # The minimum amount of work that a thread doing styling will try to keep
8913 # locally before sending work to other threads, in a worker.
8914 - name: layout.css.stylo-local-work-queue.in-worker
8915   type: RelaxedAtomicUint32
8916   value: 0
8917   mirror: always
8918   rust: true
8920 # As above but for the main thread. The main thread can't really steal from
8921 # other threads so it might want a bigger min queue size before giving work to
8922 # other threads.
8923 - name: layout.css.stylo-local-work-queue.in-main-thread
8924   type: RelaxedAtomicUint32
8925   value: 32
8926   mirror: always
8927   rust: true
8929 # Are counters for implemented CSS properties enabled?
8930 - name: layout.css.use-counters.enabled
8931   type: bool
8932   value: true
8933   mirror: always
8935 # Are counters for unimplemented CSS properties enabled?
8936 - name: layout.css.use-counters-unimplemented.enabled
8937   type: RelaxedAtomicBool
8938   value: true
8939   mirror: always
8940   rust: true
8942 # Should the :visited selector ever match (otherwise :link matches instead)?
8943 - name: layout.css.visited_links_enabled
8944   type: bool
8945   value: true
8946   mirror: always
8948 # The margin used for detecting relevancy for `content-visibility: auto`.
8949 - name: layout.css.content-visibility-relevant-content-margin
8950   type: float
8951   value: 50 # 50%
8952   mirror: always
8954 # Whether the `hanging` and `each-line` keywords are supported by `text-indent`
8955 - name: layout.css.text-indent-keywords.enabled
8956   type: RelaxedAtomicBool
8957   value: true
8958   mirror: always
8959   rust: true
8961 # Whether the "modern" uppercase mapping of ÃŸ to áºž (rather than SS) is used.
8962 - name: layout.css.text-transform.uppercase-eszett.enabled
8963   type: bool
8964   value: false
8965   mirror: always
8967 - name: layout.css.text-wrap-balance.enabled
8968   type: bool
8969   value: true
8970   mirror: always
8972 # Maximum number of lines to try balancing.
8973 - name: layout.css.text-wrap-balance.limit
8974   type: int32_t
8975   value: 10
8976   mirror: always
8978 - name: layout.css.text-wrap-balance-after-clamp.enabled
8979   type: bool
8980   value: true
8981   mirror: always
8983 - name: layout.css.text-align.justify-only-after-last-tab
8984   type: bool
8985   value: true
8986   mirror: always
8988 # Support for the css Zoom property.
8989 - name: layout.css.zoom.enabled
8990   type: RelaxedAtomicBool
8991   value: @IS_NIGHTLY_BUILD@
8992   mirror: always
8993   rust: true
8995 # UA styles for h1 in article/aside/nav/section. See bug 1883896.
8996 - name: layout.css.h1-in-section-ua-styles.enabled
8997   type: RelaxedAtomicBool
8998   value: @IS_NOT_NIGHTLY_BUILD@
8999   mirror: always
9001 # The maximum width or height of the cursor we should allow when intersecting
9002 # the UI, in CSS pixels.
9003 - name: layout.cursor.block.max-size
9004   type: uint32_t
9005   value: 32
9006   mirror: always
9008 - name: layout.cursor.disable-for-popups
9009   type: bool
9010   value: true
9011   mirror: always
9013 - name: layout.display-list.build-twice
9014   type: RelaxedAtomicBool
9015   value: false
9016   mirror: always
9018 # Toggle retaining display lists between paints.
9019 - name: layout.display-list.retain
9020   type: RelaxedAtomicBool
9021   value: true
9022   mirror: always
9024 # Toggle retaining display lists between paints.
9025 - name: layout.display-list.retain.chrome
9026   type: RelaxedAtomicBool
9027   value: true
9028   mirror: always
9030 - name: layout.display-list.retain.sc
9031   type: RelaxedAtomicBool
9032   value: false
9033   mirror: always
9035 # Set the maximum number of modified frames allowed before doing a full
9036 # display list rebuild.
9037 - name: layout.display-list.rebuild-frame-limit
9038   type: RelaxedAtomicUint32
9039   value: 500
9040   mirror: always
9042 # Pref to dump the display list to the log. Useful for debugging drawing.
9043 - name: layout.display-list.dump
9044   type: RelaxedAtomicBool
9045   value: false
9046   mirror: always
9048 # Pref to dump the display list to the log. Useful for debugging drawing.
9049 - name: layout.display-list.dump-content
9050   type: RelaxedAtomicBool
9051   value: false
9052   mirror: always
9054 # Pref to dump the display list to the log. Useful for debugging drawing.
9055 - name: layout.display-list.dump-parent
9056   type: RelaxedAtomicBool
9057   value: false
9058   mirror: always
9060 - name: layout.display-list.show-rebuild-area
9061   type: RelaxedAtomicBool
9062   value: false
9063   mirror: always
9065 - name: layout.display-list.improve-fragmentation
9066   type: RelaxedAtomicBool
9067   value: true
9068   mirror: always
9070 # Are dynamic reflow roots enabled?
9071 - name: layout.dynamic-reflow-roots.enabled
9072   type: bool
9073   value: @IS_EARLY_BETA_OR_EARLIER@
9074   mirror: always
9076 # Enables the mechanism to optimize away flex item's final reflow.
9077 # Warning: Disabling the pref will impact the performance. This is useful only for
9078 # debugging flexbox issues.
9079 - name: layout.flexbox.item-final-reflow-optimization.enabled
9080   type: bool
9081   value: true
9082   mirror: always
9084 # Enables the <input type=search> custom layout frame with a clear icon.
9085 # Still needs tests and a web-exposed way to remove that icon, see bug 1654288.
9086 - name: layout.forms.input-type-search.enabled
9087   type: bool
9088   value: false
9089   mirror: always
9091 # Enables the Reveal Password button inside a <input type=password>.
9092 - name: layout.forms.reveal-password-button.enabled
9093   type: bool
9094   value: false
9095   mirror: always
9097 # Enables the Reveal Password context-menu entry.
9098 - name: layout.forms.reveal-password-context-menu.enabled
9099   type: bool
9100   value: true
9101   mirror: always
9103 # Pref to control browser frame rate, in Hz. A value <= 0 means choose
9104 # automatically based on knowledge of the platform (or 60Hz if no platform-
9105 # specific information is available).
9106 - name: layout.frame_rate
9107   type: RelaxedAtomicInt32
9108   value: -1
9109   mirror: always
9111 # If it has been this many frame periods since a refresh, assume that painting
9112 # is quiescent (will not happen again soon).
9113 - name: layout.idle_period.required_quiescent_frames
9114   type: uint32_t
9115   value: 2
9116   mirror: always
9118 # The amount of time (milliseconds) needed between an idle period's
9119 # end and the start of the next tick to avoid jank.
9120 - name: layout.idle_period.time_limit
9121   type: uint32_t
9122   value: 1
9123   mirror: always
9125 # The minimum amount of time (milliseconds) required to be remaining
9126 # in the current vsync interval for us to attempt an extra tick, or
9127 # <0 to disable extra ticks entirely.
9128 - name: layout.extra-tick.minimum-ms
9129   type: int32_t
9130   value: 4
9131   mirror: always
9133 # Whether to load the broken image icon eagerly. This is mostly needed for
9134 # reftests, since the broken image icon doesn't block the load event and thus
9135 # there's no easy way to guarantee it's loaded.
9136 - name: layout.image.eager_broken_image_icon
9137   type: bool
9138   value: false
9139   mirror: always
9141 # Enable/disable interruptible reflow, which allows reflows to stop
9142 # before completion (and display the partial results) when user events
9143 # are pending.
9144 - name: layout.interruptible-reflow.enabled
9145   type: bool
9146   value: true
9147   mirror: always
9149 # On Android, don't synth mouse move events after scrolling, as they cause
9150 # unexpected user-visible behaviour. Can remove this after bug 1633450 is
9151 # satisfactorily resolved.
9152 - name: layout.reflow.synthMouseMove
9153   type: bool
9154   value: @IS_NOT_ANDROID@
9155   mirror: always
9157 # This pref determines which side vertical scrollbars should be on.
9158 # 0 = end-side in UI direction
9159 # 1 = end-side in document/content direction
9160 # 2 = right
9161 # 3 = left
9162 - name: layout.scrollbar.side
9163   type: int32_t
9164   value: 0
9165   mirror: always
9167 # This pref is to be set by test code only.
9168 - name: layout.scrollbars.always-layerize-track
9169   type: RelaxedAtomicBool
9170   value: false
9171   mirror: always
9173 - name: layout.scrollbars.click_and_hold_track.continue_to_end
9174   type: bool
9175 # On Linux, click-and-hold on the scrollbar track should continue scrolling
9176 # until the mouse is released. On the other platforms we want to stop
9177 # scrolling as soon as the scrollbar thumb has reached the current mouse
9178 # position.
9179 #ifdef MOZ_WIDGET_GTK
9180   value: true
9181 #else
9182   value: false
9183 #endif
9184   mirror: always
9186 # Whether anchor is kept selected.
9187 - name: layout.selectanchor
9188   type: bool
9189   value: false
9190   mirror: always
9192 # Controls caret style and word-delete during text selection.
9193 # 0: Use platform default
9194 # 1: Caret moves and blinks as when there is no selection; word
9195 #    delete deselects the selection and then deletes word.
9196 # 2: Caret moves to selection edge and is not visible during selection;
9197 #    word delete deletes the selection (Mac and Linux default).
9198 # 3: Caret moves and blinks as when there is no selection; word delete
9199 #    deletes the selection.
9200 # Windows default is 1 for word delete behavior, the rest as for 2.
9201 - name: layout.selection.caret_style
9202   type: int32_t
9203   value: 0
9204   mirror: always
9206 # If layout.show_previous_page is true then during loading of a new page we
9207 # will draw the previous page if the new page has painting suppressed.
9208 - name: layout.show_previous_page
9209   type: bool
9210   value: true
9211   mirror: always
9213 # Pref to stop overlay scrollbars from fading out, for testing purposes.
9214 - name: layout.testing.overlay-scrollbars.always-visible
9215   type: bool
9216   value: false
9217   mirror: always
9219 # Throttled frame rate, in frames per second.
9220 - name: layout.throttled_frame_rate
9221   type: uint32_t
9222   value: 1
9223   mirror: always
9225 # Whether we should throttle in-process iframes in the active tab.
9226 - name: layout.throttle_in_process_iframes
9227   type: bool
9228   value: true
9229   mirror: always
9231 - name: layout.lower_priority_refresh_driver_during_load
9232   type: bool
9233   value: true
9234   mirror: always
9236 # If > 0, nsRefreshDriver will keep ticking this amount of milliseconds after
9237 # top level page load.
9238 - name: layout.keep_ticking_after_load_ms
9239   type: uint32_t
9240   value: 1000
9241   mirror: always
9243 # Pref to control enabling scroll anchoring.
9244 - name: layout.css.scroll-anchoring.enabled
9245   type: bool
9246   value: true
9247   mirror: always
9249 # Pref to control whether to suspend also RefreshDriver::Tick when the page
9250 # itself is suspended because of some synchronous operation, like sync XHR.
9251 - name: layout.skip_ticks_while_page_suspended
9252   type: bool
9253   value: true
9254   mirror: always
9256 # Pref to control how many consecutive scroll-anchoring adjustments (since the
9257 # most recent user scroll or timeout) we'll average, before we consider whether
9258 # to automatically turn off scroll anchoring. When we hit this threshold, the
9259 # actual decision to disable also depends on the
9260 # min-average-adjustment-threshold pref, see below for more details.
9262 # Zero disables the heuristic.
9263 - name: layout.css.scroll-anchoring.max-consecutive-adjustments
9264   type: uint32_t
9265   value: 10
9266   mirror: always
9268 # Whether to reset counting the consecutive scroll-anchoring adjustments during
9269 # running async scrolling by APZ.
9270 - name: layout.css.scroll-anchoring.reset-heuristic-during-animation
9271   type: bool
9272   value: false
9273   mirror: always
9275 # The time after which we reset the max-consecutive-adjustments period, in
9276 # milliseconds.
9278 # This prevents sporadic back-and-forth scroll anchoring to trigger the
9279 # max-consecutive-adjustments heuristic.
9280 - name: layout.css.scroll-anchoring.max-consecutive-adjustments-timeout-ms
9281   type: uint32_t
9282   value: 500
9283   mirror: always
9285 # Pref to control whether we should disable scroll anchoring on a scroller
9286 # where at least max-consecutive-adjustments have happened, and which the
9287 # average adjustment ends up being less than this number, in CSS pixels.
9289 # So, for example, given max-consecutive-adjustments=10 and
9290 # min-average-adjustment-treshold=3, we'll block scroll anchoring if there have
9291 # been 10 consecutive adjustments without a user scroll or more, and the
9292 # average offset difference between them amount to less than 3 CSS pixels.
9293 - name: layout.css.scroll-anchoring.min-average-adjustment-threshold
9294   type: uint32_t
9295   value: 2
9296   mirror: always
9298 # Pref to control disabling scroll anchoring suppression triggers, see
9300 # https://drafts.csswg.org/css-scroll-anchoring/#suppression-triggers
9302 # Those triggers should be unnecessary after bug 1561450.
9303 - name: layout.css.scroll-anchoring.suppressions.enabled
9304   type: bool
9305   value: true
9306   mirror: always
9308 - name: layout.css.scroll-anchoring.highlight
9309   type: bool
9310   value: false
9311   mirror: always
9313 # Pref to control whether we reselect scroll anchors if sub-optimal
9315 # See https://github.com/w3c/csswg-drafts/issues/6787
9316 - name: layout.css.scroll-anchoring.reselect-if-suboptimal
9317   type: bool
9318   value: true
9319   mirror: always
9321 # Are shared memory User Agent style sheets enabled?
9322 - name: layout.css.shared-memory-ua-sheets.enabled
9323   type: bool
9324   value: true
9325   mirror: always
9327 # Is support for -webkit-line-clamp on regular blocks enabled?
9328 - name: layout.css.webkit-line-clamp.block.enabled
9329   type: bool
9330   value: false
9331   mirror: always
9333 # Is 'content:none' supported on (non-pseudo) elements?
9334 - name: layout.css.element-content-none.enabled
9335   type: RelaxedAtomicBool
9336   value: false
9337   mirror: always
9338   rust: true
9340 # Whether we want scrollbar-width: thin to behave as scrollbar-width: auto.
9341 - name: layout.css.scrollbar-width-thin.disabled
9342   type: RelaxedAtomicBool
9343   value: false
9344   mirror: always
9346 # Whether supports() conditions in @import is enabled
9347 - name: layout.css.import-supports.enabled
9348   type: RelaxedAtomicBool
9349   value: true
9350   mirror: always
9351   rust: true
9353 # Whether :-moz-broken is supported in content.
9354 - name: layout.css.moz-broken.content.enabled
9355   type: RelaxedAtomicBool
9356   value: false
9357   mirror: always
9358   rust: true
9360 # Whether the modern ::slider-* pseudos are enabled.
9361 - name: layout.css.modern-range-pseudos.enabled
9362   type: RelaxedAtomicBool
9363   value: false
9364   mirror: always
9365   rust: true
9367 # Whether frame visibility tracking is enabled globally.
9368 - name: layout.framevisibility.enabled
9369   type: bool
9370   value: true
9371   mirror: always
9373 # The fraction of the scrollport we allow to horizontally scroll by before we
9374 # schedule an update of frame visibility.
9375 - name: layout.framevisibility.amountscrollbeforeupdatehorizontal
9376   type: int32_t
9377   value: 2
9378   mirror: always
9380 # The fraction of the scrollport we allow to vertically scroll by before we
9381 # schedule an update of frame visibility.
9382 - name: layout.framevisibility.amountscrollbeforeupdatevertical
9383   type: int32_t
9384   value: 2
9385   mirror: always
9387 # The number of scrollports wide to expand when tracking frame visibility.
9388 - name: layout.framevisibility.numscrollportwidths
9389   type: uint32_t
9390 #ifdef ANDROID
9391   value: 1
9392 #else
9393   value: 0
9394 #endif
9395   mirror: always
9397 # The number of scrollports high to expand when tracking frame visibility.
9398 - name: layout.framevisibility.numscrollportheights
9399   type: uint32_t
9400   value: 1
9401   mirror: always
9403 # Test only.
9404 - name: layout.dynamic-toolbar-max-height
9405   type: RelaxedAtomicInt32
9406   value: 0
9407   mirror: always
9409 # Whether outlines should include all overflowing descendants, or just the
9410 # border-box of a given element.
9412 # Historically we have included descendants but other browsers have not.
9413 - name: layout.outline.include-overflow
9414   type: bool
9415   value: false
9416   mirror: always
9418 - name: layout.visibility.min-recompute-interval-ms
9419   type: uint32_t
9420   value: 1000
9421   mirror: always
9423 # Controls double click and Alt+Arrow word selection behavior.
9424 - name: layout.word_select.eat_space_to_next_word
9425   type: bool
9426 #ifdef XP_WIN
9427   value: true
9428 #else
9429   value: false
9430 #endif
9431   mirror: always
9433 - name: layout.word_select.stop_at_punctuation
9434   type: RelaxedAtomicBool
9435   value: true
9436   mirror: always
9438 # Whether underscore should be treated as a word-breaking character for
9439 # word selection/arrow-key movement purposes.
9440 - name: layout.word_select.stop_at_underscore
9441   type: bool
9442   value: false
9443   mirror: always
9445 # Whether to draw images in CSS backgrounds if we only have a partial frame.
9446 - name: layout.display_partial_background_images
9447   type: bool
9448   value: true
9449   mirror: always
9451 # Controls whether nsRefreshDriver::IsInHighRateMode() may ever return true.
9452 - name: layout.expose_high_rate_mode_from_refreshdriver
9453   type: bool
9454   value: true
9455   mirror: always
9457 # Whether <details> is forced to be a block, see bug 1856374
9458 - name: layout.details.force-block-layout
9459   type: bool
9460   value: true
9461   mirror: always
9463 # Whether table cells can generate scroll boxes.
9464 - name: layout.tables.scrollable-cells
9465   type: bool
9466   value: @IS_NIGHTLY_BUILD@
9467   mirror: always
9469 # Whether to disable layer pixel alignment in scroll related stuff.
9470 - name: layout.scroll.disable-pixel-alignment
9471   type: RelaxedAtomicBool
9472   value: false
9473   mirror: always
9475 #---------------------------------------------------------------------------
9476 # Prefs starting with "mathml."
9477 #---------------------------------------------------------------------------
9479 # Whether to disable legacy names "thickmathspace", "mediummathspace",
9480 # "thickmathspace" etc for length attributes.
9481 - name: mathml.mathspace_names.disabled
9482   type: bool
9483   value: @IS_NIGHTLY_BUILD@
9484   mirror: always
9486 # Whether to disable support for stretching operators with STIXGeneral fonts.
9487 # macos still has the deprecated STIXGeneral font pre-installed.
9488 - name: mathml.stixgeneral_operator_stretching.disabled
9489   type: bool
9490 #if defined(XP_MACOSX)
9491   value: @IS_NIGHTLY_BUILD@
9492 #else
9493   value: true
9494 #endif
9495   mirror: always
9497 # Whether to disable fallback for mathvariant=italic/bold/bold-italic via
9498 # styling when lacking proper fonts for Mathematical Alphanumeric Symbols.
9499 # We expect all OSes to have relevant fonts, except Android, see bug 1789083.
9500 - name: mathml.mathvariant_styling_fallback.disabled
9501   type: bool
9502 #if defined(ANDROID)
9503   value: false
9504 #else
9505   value: true
9506 #endif
9507   mirror: always
9509 # Whether to disable the MathML3 support for the mathvariant attribute. For
9510 # MathML Core, support is restricted to the <mi> element and to value "normal".
9511 # Corresponding automatic italicization on single-char <mi> element is also
9512 # implemented via text-transform: auto when that flag is enabled.
9513 - name: mathml.legacy_mathvariant_attribute.disabled
9514   type: bool
9515   value: @IS_NIGHTLY_BUILD@
9516   mirror: always
9517   rust: true
9519 #---------------------------------------------------------------------------
9520 # Prefs starting with "media."
9521 #---------------------------------------------------------------------------
9524 # This pref defines what the blocking policy would be used in blocking autoplay.
9525 # 0 : use sticky activation (default)
9526 # https://html.spec.whatwg.org/multipage/interaction.html#sticky-activation
9527 # 1 : use transient activation (the transient activation duration can be
9528 #     adjusted by the pref `dom.user_activation.transient.timeout`)
9529 # https://html.spec.whatwg.org/multipage/interaction.html#transient-activation
9530 # 2 : user input depth (allow autoplay when the play is trigged by user input
9531 #     which is determined by the user input depth)
9532 - name: media.autoplay.blocking_policy
9533   type: uint32_t
9534   value: 0
9535   mirror: always
9537 # Whether to allow autoplay on extension background pages.
9538 - name: media.autoplay.allow-extension-background-pages
9539   type: bool
9540   value: true
9541   mirror: always
9543 # Block autoplay, asking for permission by default.
9544 # 0=Allowed, 1=Blocked, 5=All Blocked
9545 - name: media.autoplay.default
9546   type: int32_t
9547   value: 1
9548   mirror: always
9550 # File-backed MediaCache size.
9551 - name: media.cache_size
9552   type: RelaxedAtomicUint32
9553   value: 512000   # Measured in KiB
9554   mirror: always
9556 # Size of file backed MediaCache while on a connection which is cellular (3G,
9557 # etc), and thus assumed to be "expensive".
9558 - name: media.cache_size.cellular
9559   type: RelaxedAtomicUint32
9560   value: 32768   # Measured in KiB
9561   mirror: always
9563 # Whether cubeb is sandboxed (AudioIPC)
9564 - name: media.cubeb.sandbox
9565   type: bool
9566   mirror: always
9567 #if defined(XP_LINUX) || defined(XP_WIN) || defined(XP_MACOSX)
9568   value: true
9569 #else
9570   value: false
9571 #endif
9573 # Whether or not to pass AUDCLNT_STREAMOPTIONS_RAW when initializing audio
9574 # streams when using WASAPI.
9575 # 0 - don't use RAW streams
9576 # 1 - use RAW streams for input streams only
9577 # 2 - use RAW streams for output streams only
9578 # 3 - use RAW streams for input and output streams
9579 #if defined (XP_WIN)
9580 - name: media.cubeb.wasapi-raw
9581   type: RelaxedAtomicUint32
9582   mirror: always
9583   value: 0
9584 #endif // XP_WIN
9586 # Whether to make the start of cubeb stream slower, and by how many
9587 # milliseconds.
9588 - name: media.cubeb.slow_stream_init_ms
9589   type: RelaxedAtomicUint32
9590   mirror: always
9591   value: 0
9593 # If a resource is known to be smaller than this size (in kilobytes), a
9594 # memory-backed MediaCache may be used; otherwise the (single shared global)
9595 # file-backed MediaCache is used.
9596 - name: media.memory_cache_max_size
9597   type: uint32_t
9598   value: 8192        # Measured in KiB
9599   mirror: always
9601 # Don't create more memory-backed MediaCaches if their combined size would go
9602 # above this absolute size limit.
9603 - name: media.memory_caches_combined_limit_kb
9604   type: uint32_t
9605   value: 524288
9606   mirror: always
9608 # Don't create more memory-backed MediaCaches if their combined size would go
9609 # above this relative size limit (a percentage of physical memory).
9610 - name: media.memory_caches_combined_limit_pc_sysmem
9611   type: uint32_t
9612   value: 5           # A percentage
9613   mirror: always
9615 # When a network connection is suspended, don't resume it until the amount of
9616 # buffered data falls below this threshold (in seconds).
9617 - name: media.cache_resume_threshold
9618   type: RelaxedAtomicUint32
9619   value: 30
9620   mirror: always
9621 - name: media.cache_resume_threshold.cellular
9622   type: RelaxedAtomicUint32
9623   value: 10
9624   mirror: always
9626 # Stop reading ahead when our buffered data is this many seconds ahead of the
9627 # current playback position. This limit can stop us from using arbitrary
9628 # amounts of network bandwidth prefetching huge videos.
9629 - name: media.cache_readahead_limit
9630   type: RelaxedAtomicUint32
9631   value: 60
9632   mirror: always
9633 - name: media.cache_readahead_limit.cellular
9634   type: RelaxedAtomicUint32
9635   value: 30
9636   mirror: always
9638 # MediaCapabilities
9639 - name: media.mediacapabilities.drop-threshold
9640   type: RelaxedAtomicInt32
9641   value: 95
9642   mirror: always
9644 - name: media.mediacapabilities.from-database
9645   type: RelaxedAtomicBool
9646   value: @IS_NIGHTLY_BUILD@
9647   mirror: always
9649 # AudioSink
9650 - name: media.resampling.enabled
9651   type: RelaxedAtomicBool
9652   value: false
9653   mirror: always
9655 # libcubeb backend implements .get_preferred_channel_layout
9656 - name: media.forcestereo.enabled
9657   type: RelaxedAtomicBool
9658 #if defined(XP_WIN) || defined(XP_DARWIN) || defined(MOZ_PULSEAUDIO)
9659   value: false
9660 #else
9661   value: true
9662 #endif
9663   mirror: always
9665 # MediaSource
9667 # Whether to enable MediaSource support.
9668 - name: media.mediasource.enabled
9669   type: RelaxedAtomicBool
9670   value: true
9671   mirror: always
9673 - name: media.mediasource.mp4.enabled
9674   type: RelaxedAtomicBool
9675   value: true
9676   mirror: always
9678 - name: media.mediasource.webm.enabled
9679   type: RelaxedAtomicBool
9680   value: true
9681   mirror: always
9683 # Check if vp9 is enabled by default in mediasource. False on Android.
9684 # If disabled, vp9 will only be enabled under some conditions:
9685 # - h264 HW decoding is not supported
9686 # - mp4 is not enabled
9687 # - Device was deemed fast enough to decode VP9 via the VP9Benchmark utility
9688 # - A VP9 HW decoder is present.
9689 - name: media.mediasource.vp9.enabled
9690   type: RelaxedAtomicBool
9691   value: @IS_NOT_ANDROID@
9692   mirror: always
9694 - name: media.mediasource.webm.audio.enabled
9695   type: RelaxedAtomicBool
9696   value: true
9697   mirror: always
9699 # Whether to enable MediaSource v2 support.
9700 - name: media.mediasource.experimental.enabled
9701   type: RelaxedAtomicBool
9702   value: false
9703   mirror: always
9705 # VideoSink
9706 - name: media.ruin-av-sync.enabled
9707   type: RelaxedAtomicBool
9708   value: false
9709   mirror: always
9711 # Encrypted Media Extensions
9712 - name: media.eme.enabled
9713   type: bool
9714 #if defined(XP_LINUX) && !defined(MOZ_WIDGET_ANDROID)
9715   # On Linux EME is visible but disabled by default. This is so that the "Play
9716   # DRM content" checkbox in the Firefox UI is unchecked by default. DRM
9717   # requires downloading and installing proprietary binaries, which users on an
9718   # open source operating systems didn't opt into. The first time a site using
9719   # EME is encountered, the user will be prompted to enable DRM, whereupon the
9720   # EME plugin binaries will be downloaded if permission is granted.
9721   value: false
9722 #else
9723   value: true
9724 #endif
9725   mirror: always
9727 # Whether we expose the functionality proposed in
9728 # https://github.com/WICG/encrypted-media-encryption-scheme/blob/master/explainer.md
9729 # I.e. if true, apps calling navigator.requestMediaKeySystemAccess() can pass
9730 # an optional encryption scheme as part of MediaKeySystemMediaCapability
9731 # objects. If a scheme is present when we check for support, we must ensure we
9732 # support that scheme in order to provide key system access.
9733 - name: media.eme.encrypted-media-encryption-scheme.enabled
9734   type: bool
9735   value: false
9736   mirror: always
9738 # Do we need explicit approval from the application to allow access to EME?
9739 # If true, Gecko will ask for permission before allowing MediaKeySystemAccess.
9740 # At time of writing this is aimed at GeckoView, and setting this to true
9741 # outside of GeckoView or test environments will likely break EME.
9742 - name: media.eme.require-app-approval
9743   type: bool
9744   value: false
9745   mirror: always
9747 - name: media.eme.audio.blank
9748   type: RelaxedAtomicBool
9749   value: false
9750   mirror: always
9752 - name: media.eme.video.blank
9753   type: RelaxedAtomicBool
9754   value: false
9755   mirror: always
9757 - name: media.eme.chromium-api.video-shmems
9758   type: RelaxedAtomicUint32
9759   value: 6
9760   mirror: always
9762 # Is support for MediaKeys.getStatusForPolicy enabled?
9763 - name: media.eme.hdcp-policy-check.enabled
9764   type: bool
9765   value: @IS_NIGHTLY_OR_DEV_EDITION@
9766   mirror: always
9768 - name: media.eme.max-throughput-ms
9769   type: RelaxedAtomicUint32
9770   value: 500
9771   mirror: always
9773 - name: media.clearkey.persistent-license.enabled
9774   type: bool
9775   value: false
9776   mirror: always
9778 # Are test specific clearkey key systems enabled and exposed?
9779 - name: media.clearkey.test-key-systems.enabled
9780   type: RelaxedAtomicBool
9781   value: false
9782   mirror: always
9784 - name: media.cloneElementVisually.testing
9785   type: bool
9786   value: false
9787   mirror: always
9789 # Does the GMPlugin process initialize minimal XPCOM
9790 - name: media.gmp.use-minimal-xpcom
9791   type: RelaxedAtomicBool
9792   value: true
9793   mirror: always
9795 # Does the GMPlugin process use native event processing
9796 - name: media.gmp.use-native-event-processing
9797   type: RelaxedAtomicBool
9798   value: @IS_NOT_XP_MACOSX@
9799   mirror: always
9801 #if defined(XP_LINUX) && defined(MOZ_SANDBOX)
9802   # Whether to allow, on a Linux system that doesn't support the necessary
9803   # sandboxing features, loading Gecko Media Plugins unsandboxed.  However, EME
9804   # CDMs will not be loaded without sandboxing even if this pref is changed.
9805 -   name: media.gmp.insecure.allow
9806     type: RelaxedAtomicBool
9807     value: false
9808     mirror: always
9809 #endif
9811 # (When reading the next line, know that preprocessor.py doesn't
9812 # understand parentheses, but && is higher precedence than ||.)
9813 #if defined(XP_WIN) && defined(_ARM64_) || defined(XP_MACOSX)
9814   # These prefs control whether or not we will allow x86/x64 plugins
9815   # to run on Windows ARM or Apple Silicon machines. This requires
9816   # launching the GMP child process executable in x86/x64 mode. We
9817   # expect to allow this for Widevine until an arm64 version of
9818   # Widevine and Clearkey is made available. We don't expect to need
9819   # to allow this for OpenH264.
9820   #
9821   # For Apple Silicon and OSX, it will be for universal builds and
9822   # whether or not it can use the x64 Widevine plugin.
9823   #
9824   # For Windows ARM, it will be for ARM builds and whether or not it
9825   # can use x86 Widevine or Clearkey plugins.
9827   # May a Widevine GMP x64 process be executed on ARM builds.
9828 - name: media.gmp-widevinecdm.allow-x64-plugin-on-arm64
9829   type: RelaxedAtomicBool
9830   value: true
9831   mirror: always
9833   # May an OpenH264 GMP x64 process be executed on ARM builds.
9834 - name: media.gmp-gmpopenh264.allow-x64-plugin-on-arm64
9835   type: RelaxedAtomicBool
9836   value: false
9837   mirror: always
9839   # May a Clearkey GMP x64 process be executed on ARM builds.
9840 - name: media.gmp-gmpclearkey.allow-x64-plugin-on-arm64
9841   type: RelaxedAtomicBool
9842   value: false
9843   mirror: always
9844 #endif
9846 # Specifies whether the PDMFactory can create a test decoder that just outputs
9847 # blank frames/audio instead of actually decoding. The blank decoder works on
9848 # all platforms.
9849 - name: media.use-blank-decoder
9850   type: RelaxedAtomicBool
9851   value: false
9852   mirror: always
9854 - name: media.gpu-process-decoder
9855   type: RelaxedAtomicBool
9856 #if defined(XP_WIN)
9857   value: true
9858 #else
9859   value: false
9860 #endif
9861   mirror: always
9863 - name: media.rdd-process.enabled
9864   type: RelaxedAtomicBool
9865 #if defined(XP_WIN)
9866   value: true
9867 #elif defined(XP_MACOSX)
9868   value: true
9869 #elif defined(XP_LINUX) && !defined(ANDROID)
9870   value: true
9871 #elif defined(XP_FREEBSD)
9872   value: true
9873 #elif defined(XP_OPENBSD)
9874   value: true
9875 #else
9876   value: false
9877 #endif
9878   mirror: always
9880 - name: media.rdd-retryonfailure.enabled
9881   type: RelaxedAtomicBool
9882   value: true
9883   mirror: always
9885 - name: media.rdd-process.startup_timeout_ms
9886   type: RelaxedAtomicInt32
9887   value: 5000
9888   mirror: always
9890 # Specifies how many times we restart RDD process after crash till we give up.
9891 # After first RDD restart we disable HW acceleration on Linux.
9892 - name: media.rdd-process.max-crashes
9893   type: RelaxedAtomicInt32
9894   value: 2
9895   mirror: always
9897 #ifdef MOZ_FFMPEG
9898 - name: media.rdd-ffmpeg.enabled
9899   type: RelaxedAtomicBool
9900   value: true
9901   mirror: always
9902 #endif
9905 - name: media.rdd-ffvpx.enabled
9906   type: RelaxedAtomicBool
9907 #if defined(XP_WIN)
9908   value: true
9909 #elif defined(XP_MACOSX)
9910   value: true
9911 #elif defined(XP_LINUX) && !defined(ANDROID)
9912   value: true
9913 #elif defined(XP_FREEBSD)
9914   value: true
9915 #elif defined(XP_OPENBSD)
9916   value: true
9917 #else
9918   value: false
9919 #endif
9920   mirror: always
9922 #ifdef MOZ_WMF
9923 - name: media.rdd-wmf.enabled
9924   type: RelaxedAtomicBool
9925   value: true
9926   mirror: always
9927 #endif
9929 #ifdef MOZ_APPLEMEDIA
9930 - name: media.rdd-applemedia.enabled
9931   type: RelaxedAtomicBool
9932   value: true
9933   mirror: always
9934 #endif
9936 - name: media.rdd-theora.enabled
9937   type: RelaxedAtomicBool
9938 #if defined(XP_WIN)
9939   value: true
9940 #elif defined(XP_MACOSX)
9941   value: true
9942 #elif defined(XP_LINUX) && !defined(ANDROID)
9943   value: true
9944 #elif defined(XP_FREEBSD)
9945   value: true
9946 #elif defined(XP_OPENBSD)
9947   value: true
9948 #else
9949   value: false
9950 #endif
9951   mirror: always
9953 - name: media.rdd-vorbis.enabled
9954   type: RelaxedAtomicBool
9955 #if defined(XP_WIN)
9956   value: true
9957 #elif defined(XP_MACOSX)
9958   value: true
9959 #elif defined(XP_LINUX) && !defined(ANDROID)
9960   value: true
9961 #elif defined(XP_FREEBSD)
9962   value: true
9963 #elif defined(XP_OPENBSD)
9964   value: true
9965 #else
9966   value: false
9967 #endif
9968   mirror: always
9970 - name: media.rdd-vpx.enabled
9971   type: RelaxedAtomicBool
9972 #if defined(XP_WIN)
9973   value: true
9974 #elif defined(XP_MACOSX)
9975   value: true
9976 #elif defined(XP_LINUX) && !defined(ANDROID)
9977   value: true
9978 #elif defined(XP_FREEBSD)
9979   value: true
9980 #elif defined(XP_OPENBSD)
9981   value: true
9982 #else
9983   value: false
9984 #endif
9985   mirror: always
9987 - name: media.rdd-wav.enabled
9988   type: RelaxedAtomicBool
9989 #if defined(XP_WIN)
9990   value: true
9991 #elif defined(XP_MACOSX)
9992   value: true
9993 #elif defined(XP_LINUX) && !defined(ANDROID)
9994   value: true
9995 #elif defined(XP_FREEBSD)
9996   value: true
9997 #elif defined(XP_OPENBSD)
9998   value: true
9999 #else
10000   value: false
10001 #endif
10002   mirror: always
10004 - name: media.rdd-opus.enabled
10005   type: RelaxedAtomicBool
10006 #if defined(XP_WIN)
10007   value: true
10008 #elif defined(XP_MACOSX)
10009   value: true
10010 #elif defined(XP_LINUX) && !defined(ANDROID)
10011   value: true
10012 #elif defined(XP_FREEBSD)
10013   value: true
10014 #elif defined(XP_OPENBSD)
10015   value: true
10016 #else
10017   value: false
10018 #endif
10019   mirror: always
10021 - name: media.rdd-webaudio.batch.size
10022   type: RelaxedAtomicInt32
10023   value: 100
10024   mirror: always
10026 # This pref is here to control whether we want to perform audio decoding by
10027 # using the IPC actor within the Utility process rather than the RDD process.
10028 # When it is set to true, then the utility process will take precedence over RDD
10029 # to perform audio decoding.
10030 # TODO: Enabling for Isolated Processes builds on Android
10031 - name: media.utility-process.enabled
10032   type: RelaxedAtomicBool
10033 #if defined(XP_WIN)
10034   value: true
10035 #elif defined(XP_MACOSX)
10036   value: true
10037 #elif defined(XP_LINUX) && !defined(ANDROID)
10038   value: true
10039 #elif defined(ANDROID) && !defined(MOZ_ANDROID_CONTENT_SERVICE_ISOLATED_PROCESS)
10040   value: true
10041 #elif defined(XP_FREEBSD)
10042   value: true
10043 #elif defined(XP_OPENBSD)
10044   value: true
10045 #else
10046   value: false
10047 #endif
10048   mirror: always
10050 # Specifies how many times we restart Utility process after crash till we give
10051 # up.
10052 - name: media.utility-process.max-crashes
10053   type: RelaxedAtomicInt32
10054   value: 2
10055   mirror: always
10057 #ifdef MOZ_FFMPEG
10058 - name: media.utility-ffmpeg.enabled
10059   type: RelaxedAtomicBool
10060   value: true
10061   mirror: always
10062 #endif
10064 - name: media.utility-ffvpx.enabled
10065   type: RelaxedAtomicBool
10066   value: true
10067   mirror: always
10069 #ifdef MOZ_WMF
10070 - name: media.utility-wmf.enabled
10071   type: RelaxedAtomicBool
10072   value: true
10073   mirror: always
10074 #endif
10076 #ifdef MOZ_APPLEMEDIA
10077 - name: media.utility-applemedia.enabled
10078   type: RelaxedAtomicBool
10079   value: true
10080   mirror: always
10081 #endif
10083 - name: media.utility-vorbis.enabled
10084   type: RelaxedAtomicBool
10085   value: true
10086   mirror: always
10088 - name: media.utility-wav.enabled
10089   type: RelaxedAtomicBool
10090   value: true
10091   mirror: always
10093 - name: media.utility-opus.enabled
10094   type: RelaxedAtomicBool
10095   value: true
10096   mirror: always
10098 #ifdef ANDROID
10099   # Enable the MediaCodec PlatformDecoderModule by default.
10100 -   name: media.android-media-codec.enabled
10101     type: RelaxedAtomicBool
10102     value: true
10103     mirror: always
10105   # Bug 1771196
10106   # Dont yet enable AndroidDecoderModule on Utility
10107 -   name: media.utility-android-media-codec.enabled
10108     type: RelaxedAtomicBool
10109     value: false
10110     mirror: always
10112 -   name: media.android-media-codec.preferred
10113     type: RelaxedAtomicBool
10114     value: true
10115     mirror: always
10116 #endif  # ANDROID
10118 # Now we will completely disable the ability to perform audio decoding outside
10119 # of Utility.
10120 -   name: media.allow-audio-non-utility
10121     type: RelaxedAtomicBool
10122     value: false
10123     mirror: always
10125 #ifdef MOZ_OMX
10126 -   name: media.omx.enabled
10127     type: bool
10128     value: false
10129     mirror: always
10130 #endif
10132 # Allow ffmpeg decoder to decode directly onto shmem buffer
10133 - name: media.ffmpeg.customized-buffer-allocation
10134   type: RelaxedAtomicBool
10135   value: true
10136   mirror: always
10138 #ifdef MOZ_FFMPEG
10139 -   name: media.ffmpeg.enabled
10140     type: RelaxedAtomicBool
10141   #if defined(XP_MACOSX)
10142     value: false
10143   #else
10144     value: true
10145   #endif
10146     mirror: always
10148 -   name: media.libavcodec.allow-obsolete
10149     type: bool
10150     value: false
10151     mirror: always
10152 #endif  # MOZ_FFMPEG
10154 # Allow using ffmpeg encoder
10155 -   name: media.ffmpeg.encoder.enabled
10156     type: RelaxedAtomicBool
10157 #if defined(MOZ_WIDGET_GTK)
10158     value: @IS_NIGHTLY_BUILD@
10159 #else
10160     value: false
10161 #endif
10162     mirror: always
10164 # Allow using openh264 decoding with ffmpeg
10165 -   name: media.ffmpeg.allow-openh264
10166     type: RelaxedAtomicBool
10167     value: @IS_NOT_NIGHTLY_BUILD@
10168     mirror: always
10170 #ifdef MOZ_WIDGET_GTK
10171 # Use VA-API for ffmpeg video playback on Linux
10172 - name: media.ffmpeg.vaapi.enabled
10173   type: bool
10174   value: false
10175   mirror: once
10177 # Force to copy dmabuf video frames
10178 # Used for debugging/troubleshooting only
10179 # 0 - force disable
10180 # 1 - force enable
10181 # 2 - default
10182 - name: media.ffmpeg.vaapi.force-surface-zero-copy
10183   type: uint32_t
10184   value: 2
10185   mirror: once
10186 #endif # MOZ_WIDGET_GTK
10188 # Set to true in marionette tests to disable the sanity test
10189 # which would lead to unnecessary start of the RDD process.
10190 -   name: media.sanity-test.disabled
10191     type: RelaxedAtomicBool
10192     value: false
10193     mirror: always
10195 #ifdef MOZ_WMF
10197 -   name: media.wmf.enabled
10198     type: RelaxedAtomicBool
10199     value: true
10200     mirror: always
10202   # Whether DD should consider WMF-disabled a WMF failure, useful for testing.
10203 -   name: media.decoder-doctor.wmf-disabled-is-failure
10204     type: RelaxedAtomicBool
10205     value: false
10206     mirror: always
10208 -   name: media.wmf.dxva.d3d11.enabled
10209     type: RelaxedAtomicBool
10210     value: true
10211     mirror: always
10213 -   name: media.wmf.dxva.max-videos
10214     type: RelaxedAtomicUint32
10215     value: 8
10216     mirror: always
10218 -   name: media.wmf.use-nv12-format
10219     type: RelaxedAtomicBool
10220     value: true
10221     mirror: always
10223 -   name: media.wmf.zero-copy-nv12-textures
10224     type: bool
10225     value: true
10226     mirror: once
10227 # Enable hardware decoded video no copy even when it is blocked.
10228 -   name: media.wmf.zero-copy-nv12-textures-force-enabled
10229     type: bool
10230     value: false
10231     mirror: once
10233 -   name: media.wmf.force.allow-p010-format
10234     type: RelaxedAtomicBool
10235     value: false
10236     mirror: always
10238 -   name: media.wmf.use-sync-texture
10239     type: bool
10240     value: true
10241     mirror: once
10243 -   name: media.wmf.low-latency.enabled
10244     type: RelaxedAtomicBool
10245     value: true
10246     mirror: always
10248 -   name: media.wmf.skip-blacklist
10249     type: RelaxedAtomicBool
10250     value: false
10251     mirror: always
10253 -   name: media.wmf.amd.highres.enabled
10254     type: RelaxedAtomicBool
10255     value: true
10256     mirror: always
10258 -   name: media.wmf.allow-unsupported-resolutions
10259     type: RelaxedAtomicBool
10260     value: false
10261     mirror: always
10263 -   name: media.wmf.vp9.enabled
10264     type: RelaxedAtomicBool
10265     value: true
10266     mirror: always
10268 -   name: media.wmf.av1.enabled
10269     type: RelaxedAtomicBool
10270     value: true
10271     mirror: always
10273 # Using Windows Media Foundation Media Engine for encrypted playback
10274 # 0 : disable, 1 : enable for encrypted and clear,
10275 # 2 : enable for encrypted only, 3 : enable for clear only
10276 -   name: media.wmf.media-engine.enabled
10277     type: RelaxedAtomicUint32
10278 #if defined(NIGHTLY_BUILD)
10279     value: 2
10280 #else
10281     value: 0
10282 #endif
10283     mirror: always
10285 # Testing purpose, enable media engine on channel decoder as well.
10286 -   name: media.wmf.media-engine.channel-decoder.enabled
10287     type: RelaxedAtomicBool
10288     value: false
10289     mirror: always
10291 # The amount of video raw data the engine stream will queue
10292 -   name: media.wmf.media-engine.raw-data-threshold.video
10293     type: RelaxedAtomicInt32
10294     value: 500000
10295     mirror: always
10297 # The amount of audio raw data the engine stream will queue
10298 -   name: media.wmf.media-engine.raw-data-threshold.audio
10299     type: RelaxedAtomicInt32
10300     value: 2000000
10301     mirror: always
10303 # Specifies how many times we restart MFCDM process after crash till we give up.
10304 -   name: media.wmf.media-engine.max-crashes
10305     type: RelaxedAtomicInt32
10306     value: 2
10307     mirror: always
10309 # Bypass the gfx block list check for the media engine playback.
10310 -   name: media.wmf.media-engine.bypass-gfx-blocklist
10311     type: RelaxedAtomicBool
10312     value: false
10313     mirror: always
10315 # [TEST-ONLY] Use Media Foundation Clearkey CDM for EME related testing.
10316 -   name: media.eme.wmf.clearkey.enabled
10317     type: RelaxedAtomicBool
10318     value: false
10319     mirror: always
10321 # [TEST-ONLY] use Media Foundation clearkey CDM dll to mock as an external CDM,
10322 # external CDM like Widevine and PlayReady so that we won't be interfered by
10323 # unexpected behaviors caused by the external library.
10324 -   name: media.eme.wmf.use-mock-cdm-for-external-cdms
10325     type: RelaxedAtomicBool
10326     value: false
10327     mirror: always
10329 # Enable PlayReady DRM for EME
10330 -   name: media.eme.playready.enabled
10331     type: RelaxedAtomicBool
10332 #if defined(MOZ_WMF_CDM) && defined(IS_NIGHTLY_OR_DEV_EDITION)
10333     value: true
10334 #else
10335     value: false
10336 #endif
10337     mirror: always
10339 # Use IsTypeSupportedEx for PlayReady
10340 -   name: media.eme.playready.istypesupportedex
10341     type: RelaxedAtomicBool
10342     value: true
10343     mirror: always
10345 # Enable HEVC support via the windows media foundation
10346 # 0 : disable, 1 : enable for media engine and MFT,
10347 # 2 : enable for media engine only
10348 -   name: media.wmf.hevc.enabled
10349     type: RelaxedAtomicUint32
10350 #if defined(NIGHTLY_BUILD)
10351     value: 1
10352 #elif defined(MOZ_DEV_EDITION)
10353     value: 2
10354 #else
10355     value: 0
10356 #endif
10357     mirror: always
10359 # Enable Widevine experiment DRM for EME
10360 -   name: media.eme.widevine.experiment.enabled
10361     type: RelaxedAtomicBool
10362     value: false
10363     mirror: always
10365 #endif  # MOZ_WMF
10367 - name: media.decoder-doctor.testing
10368   type: bool
10369   value: false
10370   mirror: always
10372 - name: media.hardware-video-decoding.enabled
10373   type: bool
10374   value: true
10375   mirror: once
10377 - name: media.hardware-video-decoding.force-enabled
10378   type: bool
10379   value: false
10380   mirror: once
10382 # Whether to check the decoder supports recycling.
10383 - name: media.decoder.recycle.enabled
10384   type: RelaxedAtomicBool
10385   value: @IS_ANDROID@
10386   mirror: always
10388 # Should MFR try to skip to the next key frame?
10389 - name: media.decoder.skip-to-next-key-frame.enabled
10390   type: RelaxedAtomicBool
10391   value: true
10392   mirror: always
10394 # When video continues later than the current media time for this period of
10395 # time, then it will trigger skip-to-next-keyframe mechanism. As this aims to
10396 # solve the drop frames issue where video decoding too slow for high
10397 # resolution videos. eg. 4k+. Therefore, the value is is determined by the
10398 # telemetry probe `video_inter_keyframe_max_ms` in the key of `AV,h>2160` which
10399 # shows that 95% video's key frame interval are less than ~5000. We use its
10400 # half value as a threashold to decide whether we should keep decoding in the
10401 # current video position or jump to the next keyframe in order to decode future
10402 # frames in advance.
10403 - name: media.decoder.skip_when_video_too_slow_ms
10404   type: RelaxedAtomicInt32
10405   value: 2500
10406   mirror: always
10408 # True if we want to decode in batches.
10409 - name: media.gmp.decoder.decode_batch
10410   type: RelaxedAtomicBool
10411   value: false
10412   mirror: always
10414 # True if we allow use of any decoders found in GMP plugins.
10415 - name: media.gmp.decoder.enabled
10416   type: RelaxedAtomicBool
10417   value: true
10418   mirror: always
10420 # True if we want to request the multithreaded GMP decoder.
10421 - name: media.gmp.decoder.multithreaded
10422   type: RelaxedAtomicBool
10423   value: false
10424   mirror: always
10426 # True if we want to try using the GMP plugin decoders first.
10427 - name: media.gmp.decoder.preferred
10428   type: RelaxedAtomicBool
10429   value: false
10430   mirror: always
10432 # True if we want to reorder frames from the decoder based on the timestamp.
10433 - name: media.gmp.decoder.reorder_frames
10434   type: RelaxedAtomicBool
10435   value: true
10436   mirror: always
10438 # Whether to suspend decoding of videos in background tabs.
10439 - name: media.suspend-background-video.enabled
10440   type: RelaxedAtomicBool
10441   value: true
10442   mirror: always
10444 # Delay, in ms, from time window goes to background to suspending
10445 # video decoders. Defaults to 10 seconds.
10446 - name: media.suspend-background-video.delay-ms
10447   type: RelaxedAtomicUint32
10448   value: 10000
10449   mirror: always
10451 - name: media.dormant-on-pause-timeout-ms
10452   type: RelaxedAtomicInt32
10453   value: 5000
10454   mirror: always
10456 # AudioTrack and VideoTrack support
10457 - name: media.track.enabled
10458   type: bool
10459   value: false
10460   mirror: always
10462 # This pref disables the reception of RTCP. It is used for testing.
10463 - name: media.webrtc.net.force_disable_rtcp_reception
10464   type: ReleaseAcquireAtomicBool
10465   value: false
10466   mirror: always
10468 # This pref controls whether dispatch testing-only events.
10469 - name: media.webvtt.testing.events
10470   type: bool
10471   value: false
10472   mirror: always
10474 - name: media.webspeech.synth.force_global_queue
10475   type: bool
10476   value: false
10477   mirror: always
10479 - name: media.webspeech.test.enable
10480   type: bool
10481   value: false
10482   mirror: always
10484 - name: media.webspeech.test.fake_fsm_events
10485   type: bool
10486   value: false
10487   mirror: always
10489 - name: media.webspeech.test.fake_recognition_service
10490   type: bool
10491   value: false
10492   mirror: always
10494 #ifdef MOZ_WEBSPEECH
10495 -   name: media.webspeech.recognition.enable
10496     type: bool
10497     value: false
10498     mirror: always
10499 #endif
10501 - name: media.webspeech.recognition.force_enable
10502   type: bool
10503   value: false
10504   mirror: always
10506 #ifdef MOZ_WEBSPEECH
10507 -   name: media.webspeech.synth.enabled
10508     type: bool
10509     value: true
10510     mirror: always
10511 #endif  # MOZ_WEBSPEECH
10513 - name: media.encoder.webm.enabled
10514   type: RelaxedAtomicBool
10515   value: true
10516   mirror: always
10518 - name: media.audio-max-decode-error
10519   type: uint32_t
10520 #if defined(RELEASE_OR_BETA)
10521   value: 3
10522 #else
10523   # Zero tolerance in pre-release builds to detect any decoder regression.
10524   value: 0
10525 #endif
10526   mirror: always
10528 - name: media.video-max-decode-error
10529   type: uint32_t
10530 #if defined(RELEASE_OR_BETA)
10531   value: 2
10532 #else
10533   # Zero tolerance in pre-release builds to detect any decoder regression.
10534   value: 0
10535 #endif
10536   mirror: always
10538 # Are video stats enabled? (Disabling can help prevent fingerprinting.)
10539 - name: media.video_stats.enabled
10540   type: bool
10541   value: true
10542   mirror: always
10544 # forces the number of dropped frames to 0
10545 - name: media.video.dropped_frame_stats.enabled
10546   type: bool
10547   value: true
10548   mirror: always
10550 # Opus
10551 - name: media.opus.enabled
10552   type: RelaxedAtomicBool
10553   value: true
10554   mirror: always
10556 # Wave
10557 - name: media.wave.enabled
10558   type: RelaxedAtomicBool
10559   value: true
10560   mirror: always
10562 # Ogg
10563 - name: media.ogg.enabled
10564   type: RelaxedAtomicBool
10565   value: true
10566   mirror: always
10568 # WebM
10569 - name: media.webm.enabled
10570   type: RelaxedAtomicBool
10571   value: true
10572   mirror: always
10574 # AV1
10575 - name: media.av1.enabled
10576   type: RelaxedAtomicBool
10577 #if defined(XP_WIN) && !defined(_ARM64_)
10578   value: true
10579 #elif defined(XP_MACOSX)
10580   value: true
10581 #elif defined(MOZ_WIDGET_ANDROID)
10582   value: true
10583 #elif defined(XP_UNIX)
10584   value: true
10585 #else
10586   value: false
10587 #endif
10588   mirror: always
10590 - name: media.av1.use-dav1d
10591   type: RelaxedAtomicBool
10592 #if defined(XP_WIN) && !defined(_ARM64_)
10593   value: true
10594 #elif defined(XP_MACOSX)
10595   value: true
10596 #elif defined(XP_UNIX)
10597   value: true
10598 #else
10599   value: false
10600 #endif
10601   mirror: always
10603 - name: media.av1.new-thread-count-strategy
10604   type: RelaxedAtomicBool
10605   value: false
10606   mirror: always
10608 - name: media.av1.force-thread-count
10609   type: RelaxedAtomicInt32
10610   value: 0
10611   mirror: always
10613 - name: media.flac.enabled
10614   type: RelaxedAtomicBool
10615   value: true
10616   mirror: always
10618 # Hls
10619 - name: media.hls.enabled
10620   type: RelaxedAtomicBool
10621   value: @IS_ANDROID@
10622   mirror: always
10624 # Max number of HLS players that can be created concurrently. Used only on
10625 # Android and when "media.hls.enabled" is true.
10626 #ifdef ANDROID
10627 -   name: media.hls.max-allocations
10628     type: uint32_t
10629     value: 20
10630     mirror: always
10631 #endif
10633 - name: media.mp4.enabled
10634   type: RelaxedAtomicBool
10635   value: true
10636   mirror: always
10638 - name: media.mp4.sniff_iso_brand
10639   type: RelaxedAtomicBool
10640   value: true
10641   mirror: always
10643 # Error/warning handling, Decoder Doctor.
10645 # Set to true to force demux/decode warnings to be treated as errors.
10646 - name: media.playback.warnings-as-errors
10647   type: RelaxedAtomicBool
10648   value: false
10649   mirror: always
10651 # Resume video decoding when the cursor is hovering on a background tab to
10652 # reduce the resume latency and improve the user experience.
10653 - name: media.resume-background-video-on-tabhover
10654   type: bool
10655   value: true
10656   mirror: always
10658 # Media Seamless Looping
10659 - name: media.seamless-looping
10660   type: RelaxedAtomicBool
10661   value: true
10662   mirror: always
10664 - name: media.seamless-looping-video
10665   type: RelaxedAtomicBool
10666   value: true
10667   mirror: always
10669 - name: media.autoplay.block-event.enabled
10670   type: bool
10671   value: false
10672   mirror: always
10674 - name: media.media-capabilities.enabled
10675   type: RelaxedAtomicBool
10676   value: true
10677   mirror: always
10679 - name: media.media-capabilities.screen.enabled
10680   type: RelaxedAtomicBool
10681   value: false
10682   mirror: always
10684 - name: media.benchmark.vp9.fps
10685   type: RelaxedAtomicUint32
10686   value: 0
10687   mirror: always
10689 - name: media.benchmark.vp9.threshold
10690   type: RelaxedAtomicUint32
10691   value: 150
10692   mirror: always
10694 - name: media.benchmark.vp9.versioncheck
10695   type: RelaxedAtomicUint32
10696   value: 0
10697   mirror: always
10699 - name: media.benchmark.frames
10700   type: RelaxedAtomicUint32
10701   value: 300
10702   mirror: always
10704 - name: media.benchmark.timeout
10705   type: RelaxedAtomicUint32
10706   value: 1000
10707   mirror: always
10709 - name: media.test.video-suspend
10710   type: RelaxedAtomicBool
10711   value: false
10712   mirror: always
10714 # MediaCapture prefs follow
10716 # Enables navigator.mediaDevices and getUserMedia() support. See also
10717 # media.peerconnection.enabled
10718 - name: media.navigator.enabled
10719   type: bool
10720   value: true
10721   mirror: always
10723 # This pref turns off window-focus checks on the navigator.mediaDevices methods,
10724 # for partner testing frameworks.
10725 # Prefer "focusmanager.testmode", which is already set by default for
10726 # web-platform tests.
10727 - name: media.devices.unfocused.enabled
10728   type: bool
10729   value: false
10730   mirror: always
10732 # This pref turns off [SecureContext] on the navigator.mediaDevices object, for
10733 # more compatible legacy behavior.
10734 - name: media.devices.insecure.enabled
10735   type: bool
10736   value: false
10737   mirror: always
10739 # If the above pref is also enabled, this pref enabled getUserMedia() support
10740 # in http, bypassing the instant NotAllowedError you get otherwise.
10741 - name: media.getusermedia.insecure.enabled
10742   type: bool
10743   value: false
10744   mirror: always
10746 # Enable tab sharing
10747 - name: media.getusermedia.browser.enabled
10748   type: RelaxedAtomicBool
10749   value: false
10750   mirror: always
10752 # The getDisplayMedia method is always SecureContext regardless of the above two
10753 # prefs. But it is not implemented on android, and can be turned off elsewhere.
10754 - name: media.getdisplaymedia.enabled
10755   type: bool
10756   value: @IS_NOT_ANDROID@
10757   mirror: always
10759 # The getDisplayMedia prompt uses getDisplayMedia under the hood to show previews.
10760 # This can be turned off if, e.g. on systems with known issues like X11, or if
10761 # previews are not desired.
10762 - name: media.getdisplaymedia.previews.enabled
10763   type: bool
10764   value: @IS_NOT_ANDROID@
10765   mirror: always
10767 # Turn off any cameras (but not mics) while in the background. This is desirable
10768 # on mobile.
10769 - name: media.getusermedia.camera.background.mute.enabled
10770   type: bool
10771   value: @IS_ANDROID@
10772   mirror: always
10774 # Use the libwebrtc AVFoundation camera backend on Mac by default. When
10775 # disabled, an older forked capture module is used.
10776 - name: media.getusermedia.camera.macavf.enabled
10777   type: bool
10778   value: true
10779   mirror: once
10781 # Tell the audio backend to prefer a stream adapted for voice when processing is
10782 # enabled through constraints (possibly defaults). Whether it has any effect
10783 # depends on the backend.
10784 - name: media.getusermedia.microphone.prefer_voice_stream_with_processing.enabled
10785   type: RelaxedAtomicBool
10786   value: True
10787   mirror: always
10789 # This pref turns on legacy (non-spec) exposure of camera and microphone
10790 # information from enumerateDevices and devicechange ahead of successful
10791 # getUserMedia calls. Should only be turned on to resolve web compat issues,
10792 # since doing so reveals more user fingerprinting information to trackers.
10794 # In this mode, camera and microphone device labels are exposed if the site has a
10795 # persisted permission to either kind, as well as while actively capturing either
10796 # kind (temporary and tab-specific grace-period permissions do not count).
10798 # Planned next steps: true â†’ @IS_NOT_NIGHTLY_BUILD@ â†’ false
10799 - name: media.devices.enumerate.legacy.enabled
10800   type: bool
10801   value: true
10802   mirror: always
10804 # WebRTC prefs follow
10806 # Enables auto refresh of peerconnection stats by default
10807 - name: media.aboutwebrtc.auto_refresh.peerconnection_section
10808   type: bool
10809   value: @IS_NOT_NIGHTLY_BUILD@
10810   mirror: always
10812 # Enables auto refresh of the transport connection log by default
10813 - name: media.aboutwebrtc.auto_refresh.connection_log_section
10814   type: bool
10815   value: false
10816   mirror: always
10818 # Enables auto refresh of user config by default
10819 - name: media.aboutwebrtc.auto_refresh.user_modified_config_section
10820   type: bool
10821   value: true
10822   mirror: always
10824 # Enables auto refresh of media context by default
10825 - name: media.aboutwebrtc.auto_refresh.media_ctx_section
10826   type: bool
10827   value: false
10828   mirror: always
10830 # Enables RTCPeerConnection support. Note that, when true, this pref enables
10831 # navigator.mediaDevices and getUserMedia() support as well.
10832 # See also media.navigator.enabled
10833 - name: media.peerconnection.enabled
10834   type: RelaxedAtomicBool
10835   value: true
10836   mirror: always
10838 - name: media.peerconnection.scripttransform.enabled
10839   type: RelaxedAtomicBool
10840   value: true
10841   mirror: always
10843 #ifdef MOZ_WEBRTC
10844   # Use MediaDataDecoder API for VP8/VP9 in WebRTC. This includes hardware
10845   # acceleration for decoding.
10846 -   name: media.navigator.mediadatadecoder_vpx_enabled
10847     type: RelaxedAtomicBool
10848 #if defined(NIGHTLY_BUILD) || defined(MOZ_WIDGET_GTK)
10849     value: true
10850 #else
10851     value: false
10852 #endif
10853     mirror: always
10855   # Use MediaDataDecoder API for H264 in WebRTC. This includes hardware
10856   # acceleration for decoding.
10857 -   name: media.navigator.mediadatadecoder_h264_enabled
10858     type: RelaxedAtomicBool
10859   #if defined(_ARM64_) && defined(XP_WIN)
10860     value: false
10861   #else
10862     value: true
10863   #endif
10864     mirror: always
10866 #if defined(MOZ_WIDGET_GTK)
10867   # Use hardware acceleration for VP8 decoding on Linux.
10868 -   name: media.navigator.mediadatadecoder_vp8_hardware_enabled
10869     type: RelaxedAtomicBool
10870     value: false
10871     mirror: always
10872 #endif
10874   # Interval in milliseconds at which to gather WebRTC stats for use in about:webrtc.
10875 -   name: media.aboutwebrtc.hist.poll_interval_ms
10876     type: RelaxedAtomicUint32
10877     value: 250
10878     mirror: always
10880   # History time depth in seconds to keep for webrtc:stats for use in about:webrtc.
10881 -   name: media.aboutwebrtc.hist.storage_window_s
10882     type: RelaxedAtomicUint32
10883     value: 60
10884     mirror: always
10886   # Time in minutes to retain peer connection stats after closing.
10887 -   name: media.aboutwebrtc.hist.prune_after_m
10888     type: RelaxedAtomicUint32
10889     value: 60 * 24 * 2
10890     mirror: always
10892   # Max number of closed PC stats histories to retain
10893 -   name: media.aboutwebrtc.hist.closed_stats_to_retain
10894     type: RelaxedAtomicUint32
10895     value: 8
10896     mirror: always
10898   # Gather PeerConnection stats history for display in about:webrtc. If
10899   # disabled history will only gather when about:webrtc is open. Additionally,
10900   # if disabled and when about:webrtc is not in the foreground history data
10901   # will become sparse.
10902 -   name: media.aboutwebrtc.hist.enabled
10903     type: RelaxedAtomicBool
10904 #if defined(MOZ_WIDGET_ANDROID)
10905     value: false
10906 #else
10907     value: @IS_NIGHTLY_BUILD@
10908 #endif
10909     mirror: always
10911 #endif  # MOZ_WEBRTC
10913 # HTMLMediaElement.allowedToPlay should be exposed to web content when
10914 # block autoplay rides the trains to release. Until then, Nightly only.
10915 - name: media.allowed-to-play.enabled
10916   type: bool
10917   value: @IS_NIGHTLY_BUILD@
10918   mirror: always
10920 # Is support for MediaDevices.ondevicechange enabled?
10921 - name: media.ondevicechange.enabled
10922   type: bool
10923   value: true
10924   mirror: always
10926 # Is support for HTMLMediaElement.seekToNextFrame enabled?
10927 - name: media.seekToNextFrame.enabled
10928   type: bool
10929   value: true
10930   mirror: always
10932 # Is the Audio Output Devices API enabled?
10933 - name: media.setsinkid.enabled
10934   type: bool
10935 #if defined(MOZ_WIDGET_ANDROID)
10936   value: false # bug 1473346
10937 #else
10938   value: true
10939 #endif
10940   mirror: always
10942 # Turn on this pref can enable test-only events for media element.
10943 - name: media.testing-only-events
10944   type: bool
10945   value: false
10946   mirror: always
10948 - name: media.useAudioChannelService.testing
10949   type: bool
10950   value: false
10951   mirror: always
10953 - name: media.audioFocus.management
10954   type: bool
10955 #if defined(MOZ_WIDGET_ANDROID)
10956   value: true
10957 #else
10958   value: false
10959 #endif
10960   mirror: always
10962 - name: media.hardwaremediakeys.enabled
10963   type: bool
10964   value: true
10965   mirror: always
10967 # If this pref is on, then `media.mediacontrol.stopcontrol.timer.ms` would take
10968 # effect and determine the timing to stop controlling media.
10969 - name: media.mediacontrol.stopcontrol.timer
10970   type: bool
10971   value: true
10972   mirror: always
10974 # If media is being paused after a certain period, then we would think that
10975 # media doesn't need to be controlled anymore. Therefore, that media would stop
10976 # listening to the media control key events. The value of this pref is how long
10977 # media would stop listening to the event after it's paused. The default value
10978 # is set to 24 hrs (24*60*60*1000)
10979 - name: media.mediacontrol.stopcontrol.timer.ms
10980   type: RelaxedAtomicUint32
10981   value: 86400000
10982   mirror: always
10984 # If this pref is on, we would stop controlling media after it reaches to the
10985 # end.
10986 - name: media.mediacontrol.stopcontrol.aftermediaends
10987   type: bool
10988   value: true
10989   mirror: always
10991 # We would only use media control to control media which duration is longer
10992 # than this value.
10993 - name: media.mediacontrol.eligible.media.duration.s
10994   type: AtomicFloat
10995   value: 3.0f
10996   mirror: always
10998 - name: media.webrtc.platformencoder
10999   type: RelaxedAtomicBool
11000 #if defined(MOZ_WIDGET_ANDROID)
11001   value: true
11002 #elif defined(MOZ_WIDGET_GTK)
11003   value: false
11004 #else
11005   value: @IS_EARLY_BETA_OR_EARLIER@
11006 #endif
11007   mirror: always
11009 - name: media.webrtc.platformencoder.sw_only
11010   type: RelaxedAtomicBool
11011 #if defined(MOZ_WIDGET_ANDROID)
11012   value: false
11013 #else
11014   value: true
11015 #endif
11016   mirror: always
11018 - name: media.webrtc.software_encoder.fallback
11019   type: RelaxedAtomicBool
11020 #if !defined(MOZ_WIDGET_GTK)
11021   value: true
11022 #else
11023   value: false
11024 #endif
11025   mirror: always
11027 #if defined(XP_MACOSX)
11028 - name: media.webrtc.capture.allow-iosurface
11029   type: RelaxedAtomicBool
11030   value: true
11031   mirror: always
11032 #endif
11034 #if defined(XP_WIN)
11035 - name: media.webrtc.capture.allow-directx
11036   type: RelaxedAtomicBool
11037   value: true
11038   mirror: always
11040 - name: media.webrtc.capture.screen.allow-wgc
11041   type: RelaxedAtomicBool
11042   value: false
11043   mirror: always
11045 - name: media.webrtc.capture.window.allow-wgc
11046   type: RelaxedAtomicBool
11047   value: false
11048   mirror: always
11050 - name: media.webrtc.capture.wgc.allow-zero-hertz
11051   type: RelaxedAtomicBool
11052   value: false
11053   mirror: always
11054 #endif
11056 #if defined(MOZ_WIDGET_GTK)
11057 - name: media.webrtc.capture.allow-pipewire
11058   type: RelaxedAtomicBool
11059   value: true
11060   mirror: always
11062 - name: media.webrtc.camera.allow-pipewire
11063   type: bool
11064   value: false
11065   mirror: once
11066 #endif
11068 - name: media.block-autoplay-until-in-foreground
11069   type: bool
11070 #if !defined(MOZ_WIDGET_ANDROID)
11071   value: true
11072 #else
11073   value: false
11074 #endif
11075   mirror: always
11077 - name: media.webrtc.hw.h264.enabled
11078   type: bool
11079 #if defined(MOZ_WIDGET_ANDROID)
11080   value: true
11081 #else
11082   value: false
11083 #endif
11084   mirror: always
11086  # If true, then we require explicit approval from the embedding app (ex. Fenix)
11087  # on GeckoView to know if we can allow audible, inaudible media or both kinds
11088  # of media to autoplay.
11089 - name: media.geckoview.autoplay.request
11090   type: bool
11091   value: false
11092   mirror: always
11094  # This is used in testing only, in order to skip the prompting process. This
11095  # pref works only when enabling the pref `media.geckoview.autoplay.request`.
11096  # 0=prompt as normal, 1=allow all, 2=deny all, 3=allow audible request,
11097  # 4=deny audible request, 5=allow inaudible request, 6=deny inaudible request.
11098  # 7=leave all requests pending.
11099 - name: media.geckoview.autoplay.request.testing
11100   type: uint32_t
11101   value: 0
11102   mirror: always
11104 - name: media.mediacontrol.testingevents.enabled
11105   type: bool
11106   value: false
11107   mirror: always
11109 #if defined(XP_MACOSX)
11110 - name: media.macos.screenrecording.oscheck.enabled
11111   type: bool
11112   value: true
11113   mirror: always
11114 #endif
11116 # When the playback rate of an HTMLMediaElement is greater than this value, or
11117 # lower than the inverse of this value, the audio is muted.
11118 - name: media.audio.playbackrate.muting_threshold
11119   type: uint32_t
11120   value: 8
11121   mirror: always
11123 # The interval of time in milliseconds between attempts to reopen any
11124 # previously unavailable audio device.
11125 - name: media.audio.device.retry.ms
11126   type: RelaxedAtomicInt32
11127   value: 1000
11128   mirror: always
11130 # Time-stretch algorithm single processing sequence length in milliseconds.
11131 # This determines to how long sequences the original sound is chopped in the
11132 # time-stretch algorithm.
11133 - name: media.audio.playbackrate.soundtouch_sequence_ms
11134   type: RelaxedAtomicInt32
11135   value: 10
11136   mirror: always
11138 # Time-stretch algorithm seeking window length in milliseconds for algorithm
11139 # that finds the best possible overlapping location. This determines from how
11140 # wide window the algorithm may look for an optimal joining location when mixing
11141 # the sound sequences back together.
11142 - name: media.audio.playbackrate.soundtouch_seekwindow_ms
11143   type: RelaxedAtomicInt32
11144   value: 15
11145   mirror: always
11147 # Time-stretch algorithm overlap length in milliseconds. When the chopped sound
11148 # sequences are mixed back together, to form a continuous sound stream, this
11149 # parameter defines over how long period the two consecutive sequences are let
11150 # to overlap each other.
11151 - name: media.audio.playbackrate.soundtouch_overlap_ms
11152   type: RelaxedAtomicInt32
11153   value: 8
11154   mirror: always
11156 # The duration, in milliseconds, of decoded audio to keep around in the
11157 # AudioSink ring-buffer. New decoding operations are started when this limit is
11158 # reached. The total size of the ring-buffer is slightly bigger than this.
11159 - name: media.audio.audiosink.threshold_ms
11160   type: AtomicFloat
11161 #if defined(XP_MACOSX) && defined(MOZ_AARCH64)
11162   value: 1000.0
11163 #else
11164   value: 200.0
11165 #endif
11166   mirror: always
11168 - name: media.video-wakelock
11169   type: RelaxedAtomicBool
11170   value: true
11171   mirror: always
11173 # On Mac, enables using the `<Brand> Media Plugin Helper` executable as the
11174 # GMP child process instead of the plugin-container executable.
11175 #if defined(XP_MACOSX)
11176 -   name: media.plugin_helper_process.enabled
11177     type: RelaxedAtomicBool
11178     value: true
11179     mirror: always
11180 #endif
11182 #---------------------------------------------------------------------------
11183 # Prefs starting with "memory."
11184 #---------------------------------------------------------------------------
11186 - name: memory.phc.enabled
11187   type: bool
11188   value: @IS_EARLY_BETA_OR_EARLIER@
11189   mirror: always
11191 - name: memory.phc.min_ram_mb
11192   type: uint32_t
11193   value: 8000
11194   mirror: always
11196 - name: memory.phc.avg_delay.first
11197   type: uint32_t
11198   value: 65536
11199   mirror: always
11201 - name: memory.phc.avg_delay.normal
11202   type: uint32_t
11203   value: 16384
11204   mirror: always
11206 - name: memory.phc.avg_delay.page_reuse
11207   type: uint32_t
11208   value: 262144
11209   mirror: always
11211 #---------------------------------------------------------------------------
11212 # Prefs starting with "midi."
11213 #---------------------------------------------------------------------------
11215 - name: midi.testing
11216   type: RelaxedAtomicBool
11217   value: false
11218   mirror: always
11220 #---------------------------------------------------------------------------
11221 # Prefs starting with "mousewheel."
11222 #---------------------------------------------------------------------------
11224 # This affects how line scrolls from wheel events will be accelerated.
11225 # Factor to be multiplied for constant acceleration.
11226 - name: mousewheel.acceleration.factor
11227   type: RelaxedAtomicInt32
11228   value: 10
11229   mirror: always
11231 # This affects how line scrolls from wheel events will be accelerated.
11232 # Number of mousewheel clicks when acceleration starts.
11233 # Acceleration can be turned off if pref is set to -1.
11234 - name: mousewheel.acceleration.start
11235   type: RelaxedAtomicInt32
11236   value: -1
11237   mirror: always
11239 # Auto-dir is a feature which treats any single-wheel scroll as a scroll in the
11240 # only one scrollable direction if the target has only one scrollable
11241 # direction. For example, if the user scrolls a vertical wheel inside a target
11242 # which is horizontally scrollable but vertical unscrollable, then the vertical
11243 # scroll is converted to a horizontal scroll for that target.
11244 # Note that auto-dir only takes effect for |mousewheel.*.action|s and
11245 # |mousewheel.*.action.override_x|s whose values are 1.
11246 - name: mousewheel.autodir.enabled
11247   type: bool
11248   value: false
11249   mirror: always
11251 # When a wheel scroll is converted due to auto-dir, which side the converted
11252 # scroll goes towards is decided by one thing called "honoured target". If the
11253 # content of the honoured target horizontally starts from right to left, then
11254 # an upward scroll maps to a rightward scroll and a downward scroll maps to a
11255 # leftward scroll; otherwise, an upward scroll maps to a leftward scroll and a
11256 # downward scroll maps to a rightward scroll.
11257 # If this pref is set to false, then consider the scrolling target as the
11258 # honoured target.
11259 # If set to true, then consider the root element in the document where the
11260 # scrolling target is as the honoured target. But note that there's one
11261 # exception: for targets in an HTML document, the real root element(I.e. the
11262 # <html> element) is typically not considered as a root element, but the <body>
11263 # element is typically considered as a root element. If there is no <body>
11264 # element, then consider the <html> element instead.
11265 - name: mousewheel.autodir.honourroot
11266   type: bool
11267   value: false
11268   mirror: always
11270 - name: mousewheel.system_scroll_override.enabled
11271   type: RelaxedAtomicBool
11272 #if defined(XP_WIN) || defined(MOZ_WIDGET_GTK)
11273   value: true
11274 #else
11275   value: false
11276 #endif
11277   mirror: always
11279 # Prefs for overriding the system mouse wheel scrolling speed on
11280 # content of the web pages.  When
11281 # "mousewheel.system_scroll_override.enabled" is true and the
11282 # system scrolling speed isn't customized by the user, the content scrolling
11283 # speed is multiplied by the following factors.  The value will be used as
11284 # 1/100.  E.g., 200 means 2.00.
11285 # NOTE: Even if "mousewheel.system_scroll_override.enabled" is
11286 # true, when Gecko detects the user customized the system scrolling speed
11287 # settings, the override isn't executed.
11288 - name: mousewheel.system_scroll_override.horizontal.factor
11289   type: RelaxedAtomicInt32
11290   value: 200
11291   mirror: always
11292 - name: mousewheel.system_scroll_override.vertical.factor
11293   type: RelaxedAtomicInt32
11294   value: 200
11295   mirror: always
11297 # Mouse wheel scroll transaction is held even if the mouse cursor is moved.
11298 - name: mousewheel.transaction.ignoremovedelay
11299   type: RelaxedAtomicInt32
11300   value: 100
11301   mirror: always
11303 # Mouse wheel scroll transaction period of time (in milliseconds).
11304 - name: mousewheel.transaction.timeout
11305   type: RelaxedAtomicInt32
11306   value: 1500
11307   mirror: always
11309 # Mouse wheel scroll position is determined by GetMessagePos rather than
11310 # LPARAM msg value
11311 - name: mousewheel.ignore_cursor_position_in_lparam
11312   type: RelaxedAtomicBool
11313   value: false
11314   mirror: always
11316 # If line-height is lower than this value (in device pixels), 1 line scroll
11317 # scrolls this height.
11318 - name: mousewheel.min_line_scroll_amount
11319   type: int32_t
11320   value: 5
11321   mirror: always
11323 # Timeout period (in milliseconds) when the mouse wheel event is no longer
11324 # handled as the same series.
11325 - name: mousewheel.scroll_series_timeout
11326   type: RelaxedAtomicInt32
11327   value: 80
11328   mirror: always
11330 #---------------------------------------------------------------------------
11331 # Prefs starting with "mozilla."
11332 #---------------------------------------------------------------------------
11334 - name: mozilla.widget.raise-on-setfocus
11335   type: bool
11336   value: true
11337   mirror: once
11339 #---------------------------------------------------------------------------
11340 # Prefs starting with "network."
11341 #---------------------------------------------------------------------------
11343 # Force less-secure NTLMv1 when needed (NTLMv2 is the default).
11344 - name: network.auth.force-generic-ntlm-v1
11345   type: RelaxedAtomicBool
11346   value: false
11347   mirror: always
11349 # Sub-resources HTTP-authentication:
11350 #   0 - don't allow sub-resources to open HTTP authentication credentials
11351 #       dialogs
11352 #   1 - allow sub-resources to open HTTP authentication credentials dialogs,
11353 #       but don't allow it for cross-origin sub-resources
11354 #   2 - allow the cross-origin authentication as well.
11355 - name: network.auth.subresource-http-auth-allow
11356   type: uint32_t
11357   value: 2
11358   mirror: always
11360 # Sub-resources HTTP-authentication for cross-origin images:
11361 # - true: It is allowed to present http auth. dialog for cross-origin images.
11362 # - false: It is not allowed.
11363 # If network.auth.subresource-http-auth-allow has values 0 or 1 this pref does
11364 # not have any effect.
11365 - name: network.auth.subresource-img-cross-origin-http-auth-allow
11366   type: bool
11367   value: false
11368   mirror: always
11370 # Resources that are triggered by some non-web-content:
11371 # - true: They are allow to present http auth. dialog
11372 # - false: They are not allow to present http auth. dialog.
11373 - name: network.auth.non-web-content-triggered-resources-http-auth-allow
11374   type: bool
11375   value: false
11376   mirror: always
11378 # Whether to show anti-spoof confirmation prompts when navigating to a url
11379 # with userinfo
11380 - name: network.auth.confirmAuth.enabled
11381   type: bool
11382   value: true
11383   mirror: always
11385 # Whether to display auth prompts if X-Frame-Options header will block loading
11386 # page
11387 - name: network.auth.supress_auth_prompt_for_XFO_failures
11388   type: bool
11389   value: true
11390   mirror: always
11392 # Whether to use challenges in the most secure order. See bug 650091.
11393 - name: network.auth.choose_most_secure_challenge
11394   type: RelaxedAtomicBool
11395   value: true
11396   mirror: always
11398 # whether to redirect the channel for auth redirects. See Bug 1820807
11399 - name: network.auth.use_redirect_for_retries
11400   type: RelaxedAtomicBool
11401   value: @IS_EARLY_BETA_OR_EARLIER@
11402   mirror: always
11404 # Whether to allow truncated brotli with empty output. This also fixes
11405 # throwing an erroring when receiving highly compressed brotli files when
11406 # no content type is specified (Bug 1715401). This pref can be removed after
11407 # some time (Bug 1841061)
11408 - name: network.compress.allow_truncated_empty_brotli
11409   type: RelaxedAtomicBool
11410   value: true
11411   mirror: always
11413 # See the full list of values in nsICookieService.idl.
11414 - name: network.cookie.cookieBehavior
11415   type: RelaxedAtomicInt32
11416   value: 0 # accept all cookies
11417   mirror: always
11419 # The cookieBehavior to be used in Private Browsing mode.
11420 - name: network.cookie.cookieBehavior.pbmode
11421   type: RelaxedAtomicInt32
11422   value: 0 # accept all cookies
11423   mirror: always
11425 # Changes cookieBehavior=5 to block third-party cookies by default
11426 - name: network.cookie.cookieBehavior.optInPartitioning
11427   type: bool
11428   value: false
11429   mirror: always
11431 # Stale threshold for cookies in seconds.
11432 - name: network.cookie.staleThreshold
11433   type: uint32_t
11434   value: 60
11435   mirror: always
11437 - name: network.cookie.sameSite.laxByDefault
11438   type: RelaxedAtomicBool
11439   value: false
11440   mirror: always
11442 # lax-by-default 2 minutes tollerance for unsafe methods. The value is in seconds.
11443 - name: network.cookie.sameSite.laxPlusPOST.timeout
11444   type: uint32_t
11445   value: 120
11446   mirror: always
11448 # For lax-by-default cookies ignore cross-site redirects when the final
11449 # redirect is same-site again.
11450 # https://github.com/httpwg/http-extensions/issues/2104
11451 - name: network.cookie.sameSite.laxByDefault.allowBoomerangRedirect
11452   type: bool
11453   value: true
11454   mirror: always
11456 - name: network.cookie.sameSite.noneRequiresSecure
11457   type: bool
11458   value: @IS_EARLY_BETA_OR_EARLIER@
11459   mirror: always
11461 - name: network.cookie.sameSite.schemeful
11462   type: bool
11463   value: false
11464   mirror: always
11466 - name: network.cookie.thirdparty.sessionOnly
11467   type: bool
11468   value: false
11469   mirror: always
11471 - name: network.cookie.thirdparty.nonsecureSessionOnly
11472   type: bool
11473   value: false
11474   mirror: always
11476 # If we should not store "persistent" cookies at all, i.e., make the
11477 # "persistent" storage be like "private" storage.  This value is only read when
11478 # instantiating persistent storage for the cookie service, which usually only
11479 # happens when the cookie service singleton is created.
11480 - name: network.cookie.noPersistentStorage
11481   type: bool
11482   value: false
11483   mirror: always
11485 # If true then any cookies containing unicode will be rejected
11486 - name: network.cookie.blockUnicode
11487   type: RelaxedAtomicBool
11488   value: false
11489   mirror: always
11491 # If true cookies loaded from the sqlite DB that have a creation or
11492 # last accessed time that is in the future will be fixed and the
11493 # timestamps will be set to the current time.
11494 - name: network.cookie.fixup_on_db_load
11495   type: RelaxedAtomicBool
11496   value: true
11497   mirror: always
11499 # If true content types of multipart/x-mixed-replace cannot set a cookie
11500 - name: network.cookie.prevent_set_cookie_from_multipart
11501   type: RelaxedAtomicBool
11502   value: true
11503   mirror: always
11505 # If we should attempt to race the cache and network.
11506 - name: network.http.rcwn.enabled
11507   type: bool
11508   value: true
11509   mirror: always
11511 - name: network.http.rcwn.cache_queue_normal_threshold
11512   type: uint32_t
11513   value: 8
11514   mirror: always
11516 - name: network.http.rcwn.cache_queue_priority_threshold
11517   type: uint32_t
11518   value: 2
11519   mirror: always
11521 # We might attempt to race the cache with the network only if a resource
11522 # is smaller than this size.
11523 - name: network.http.rcwn.small_resource_size_kb
11524   type: uint32_t
11525   value: 256
11526   mirror: always
11528 - name: network.http.rcwn.min_wait_before_racing_ms
11529   type: uint32_t
11530   value: 0
11531   mirror: always
11533 - name: network.http.rcwn.max_wait_before_racing_ms
11534   type: uint32_t
11535   value: 500
11536   mirror: always
11538 # false=real referer, true=spoof referer (use target URI as referer).
11539 - name: network.http.referer.spoofSource
11540   type: bool
11541   value: false
11542   mirror: always
11544 # Check whether we need to hide referrer when leaving a .onion domain.
11545 # false=allow onion referer, true=hide onion referer (use empty referer).
11546 - name: network.http.referer.hideOnionSource
11547   type: bool
11548   value: false
11549   mirror: always
11551 # Include an origin header on non-GET and non-HEAD requests regardless of CORS.
11552 # 0=never send, 1=send when same-origin only, 2=always send.
11553 - name: network.http.sendOriginHeader
11554   type: uint32_t
11555   value: 2
11556   mirror: always
11558 # Whether to respect the redirected-tainted origin flag
11559 # https://fetch.spec.whatwg.org/#concept-request-tainted-origin
11560 - name: network.http.origin.redirectTainted
11561   type: bool
11562   value: true
11563   mirror: always
11565 # Whether to strip auth headers for redirected fetch/xhr channels
11566 # https://fetch.spec.whatwg.org/#http-redirect-fetch
11567 - name: network.fetch.redirect.stripAuthHeader
11568   type: RelaxedAtomicBool
11569   value: true
11570   mirror: always
11572 # If true, cross origin fetch (or XHR) requests would be keyed
11573 # with a different cache key.
11574 - name: network.fetch.cache_partition_cross_origin
11575   type: RelaxedAtomicBool
11576   value: true
11577   mirror: always
11579 # Whether to strip auth headers for redirected http channels
11580 # https://fetch.spec.whatwg.org/#http-redirect-fetch
11581 - name: network.http.redirect.stripAuthHeader
11582   type: RelaxedAtomicBool
11583   value: true
11584   mirror: always
11586 # Prefs allowing granular control of referers.
11587 # 0=don't send any, 1=send only on clicks, 2=send on image requests as well
11588 - name: network.http.sendRefererHeader
11589   type: uint32_t
11590   value: 2
11591   mirror: always
11592   do_not_use_directly: true
11594 # The maximum allowed length for a referrer header - 4096 default.
11595 # 0 means no limit.
11596 - name: network.http.referer.referrerLengthLimit
11597   type: uint32_t
11598   value: 4096
11599   mirror: always
11601 #  0=always send, 1=send iff base domains match, 2=send iff hosts match.
11602 - name: network.http.referer.XOriginPolicy
11603   type: uint32_t
11604   value: 0
11605   mirror: always
11606   do_not_use_directly: true
11608 # 0=full URI, 1=scheme+host+port+path, 2=scheme+host+port.
11609 - name: network.http.referer.trimmingPolicy
11610   type: uint32_t
11611   value: 0
11612   mirror: always
11613   do_not_use_directly: true
11615 # 0=full URI, 1=scheme+host+port+path, 2=scheme+host+port.
11616 - name: network.http.referer.XOriginTrimmingPolicy
11617   type: uint32_t
11618   value: 0
11619   mirror: always
11620   do_not_use_directly: true
11622 # Set the default Referrer Policy; to be used unless overriden by the site.
11623 # 0=no-referrer, 1=same-origin, 2=strict-origin-when-cross-origin,
11624 # 3=no-referrer-when-downgrade.
11625 - name: network.http.referer.defaultPolicy
11626   type: uint32_t
11627   value: 2
11628   mirror: always
11630 # Set the default Referrer Policy applied to third-party trackers when the
11631 # default cookie policy is set to reject third-party trackers, to be used
11632 # unless overriden by the site.
11633 # 0=no-referrer, 1=same-origin, 2=strict-origin-when-cross-origin,
11634 # 3=no-referrer-when-downgrade.
11635 # Trim referrers from trackers to origins by default.
11636 - name: network.http.referer.defaultPolicy.trackers
11637   type: uint32_t
11638   value: 2
11639   mirror: always
11641 # Set the Private Browsing Default Referrer Policy, to be used
11642 # unless overriden by the site.
11643 # 0=no-referrer, 1=same-origin, 2=strict-origin-when-cross-origin,
11644 # 3=no-referrer-when-downgrade.
11645 - name: network.http.referer.defaultPolicy.pbmode
11646   type: uint32_t
11647   value: 2
11648   mirror: always
11650 # Set to ignore referrer policies which is less restricted than the default for
11651 # cross-site requests, including 'unsafe-url', 'no-referrer-when-downgrade' and
11652 # 'origin-when-cross-origin'.
11653 - name: network.http.referer.disallowCrossSiteRelaxingDefault
11654   type: bool
11655   value: true
11656   mirror: always
11658 # Whether we ignore less restricted referrer policies for top navigations.
11659 - name: network.http.referer.disallowCrossSiteRelaxingDefault.top_navigation
11660   type: bool
11661   value: false
11662   mirror: always
11665 # Set to ignore referrer policies which is less restricted than the default for
11666 # cross-site requests in the private browsing mode, including 'unsafe-url',
11667 # 'no-referrer-when-downgrade' and 'origin-when-cross-origin'.
11668 - name: network.http.referer.disallowCrossSiteRelaxingDefault.pbmode
11669   type: bool
11670   value: true
11671   mirror: always
11673 # Whether we ignore less restricted referrer policies for top navigations in the
11674 # private browsing mode.
11675 - name: network.http.referer.disallowCrossSiteRelaxingDefault.pbmode.top_navigation
11676   type: bool
11677   value: true
11678   mirror: always
11680 # Set the Private Browsing Default Referrer Policy applied to third-party
11681 # trackers when the default cookie policy is set to reject third-party
11682 # trackers, to be used unless overriden by the site.
11683 # 0=no-referrer, 1=same-origin, 2=strict-origin-when-cross-origin,
11684 # 3=no-referrer-when-downgrade.
11685 # No need to change this pref for trimming referrers from trackers since in
11686 # private windows we already trim all referrers to origin only.
11687 - name: network.http.referer.defaultPolicy.trackers.pbmode
11688   type: uint32_t
11689   value: 2
11690   mirror: always
11692 # Whether certain http header values should be censored out in logs.
11693 # Specifically filters out "authorization" and "proxy-authorization".
11694 - name: network.http.sanitize-headers-in-logs
11695   type: RelaxedAtomicBool
11696   value: true
11697   mirror: always
11699 # Hard code the User-Agent string's CPU architecture. This pref can be removed
11700 # after we're confident there are no webcompat problems.
11702 # For now, don't enable this pref for x86 Linux builds until Firefox
11703 # download page bugs https://github.com/mozilla/bedrock/issues/12966 and
11704 # https://github.com/mozilla/bedrock/issues/14012 are fixed.
11706 # Enable for:
11707 # * Android (any architecture)
11708 # * Linux (any architecture except x86)
11709 # * Other Unix-like platforms except macOS (any architecture)
11710 - name: network.http.useragent.freezeCpu
11711   type: bool
11712 # (When reading the next line, know that preprocessor.py doesn't
11713 # understand parentheses, but && is higher precedence than ||.)
11714 #if defined(ANDROID) || defined(XP_LINUX) && !defined(__i386__) || defined(XP_UNIX) && !defined(XP_LINUX) && !defined(XP_MACOSX)
11715   value: true
11716 #else
11717   value: false
11718 #endif
11719   mirror: always
11721 # Whether or not we use Windows for SSO to Microsoft sites.
11722 - name: network.http.windows-sso.enabled
11723   type: RelaxedAtomicBool
11724   value: false
11725   mirror: always
11727 # Whether windows-sso is enabled for the default (0) container.
11728 # To enable SSO for additional containers, add a new pref like
11729 # `network.http.windows-sso.container-enabled.${containerId}` = true
11730 - name: network.http.windows-sso.container-enabled.0
11731   type: bool
11732   value: true
11733   mirror: never
11735 # The factor by which to increase the keepalive timeout when the
11736 # NS_HTTP_LARGE_KEEPALIVE flag is used for a connection
11737 - name: network.http.largeKeepaliveFactor
11738   type: RelaxedAtomicUint32
11739   value: 10
11740   mirror: always
11742 # This preference, if true, causes all UTF-8 domain names to be normalized to
11743 # punycode.  The intention is to allow UTF-8 domain names as input, but never
11744 # generate them from punycode.
11745 - name: network.IDN_show_punycode
11746   type: RelaxedAtomicBool
11747   value: false
11748   mirror: always
11750 # If set to true, IOService.offline depends on IOService.connectivity.
11751 - name: network.offline-mirrors-connectivity
11752   type: RelaxedAtomicBool
11753   value: false
11754   mirror: always
11756 # If set to true, disallow localhost connections when offline.
11757 - name: network.disable-localhost-when-offline
11758   type: RelaxedAtomicBool
11759   value: false
11760   mirror: always
11762 # Enables the predictive service.
11763 - name: network.predictor.enabled
11764   type: bool
11765   value: true
11766   mirror: always
11768 # Set true to allow resolving proxy for localhost
11769 - name: network.proxy.allow_hijacking_localhost
11770   type: RelaxedAtomicBool
11771   value: false
11772   mirror: always
11774 # This pref will still treat localhost URLs as secure even when hijacked
11775 # during testing. This is necessary for automated testing to check that we
11776 # actually treat localhost as a secure origin.
11777 - name: network.proxy.testing_localhost_is_secure_when_hijacked
11778   type: RelaxedAtomicBool
11779   value: false
11780   mirror: always
11782 # Allow CookieJarSettings to be unblocked for channels without a document.
11783 # This is for testing only.
11784 - name: network.cookieJarSettings.unblocked_for_testing
11785   type: bool
11786   value: false
11787   mirror: always
11789 - name: network.predictor.enable-hover-on-ssl
11790   type: bool
11791   value: false
11792   mirror: always
11794 - name: network.predictor.enable-prefetch
11795   type: bool
11796   value: @IS_EARLY_BETA_OR_EARLIER@
11797   mirror: always
11799 - name: network.predictor.page-degradation.day
11800   type: int32_t
11801   value: 0
11802   mirror: always
11803 - name: network.predictor.page-degradation.week
11804   type: int32_t
11805   value: 5
11806   mirror: always
11807 - name: network.predictor.page-degradation.month
11808   type: int32_t
11809   value: 10
11810   mirror: always
11811 - name: network.predictor.page-degradation.year
11812   type: int32_t
11813   value: 25
11814   mirror: always
11815 - name: network.predictor.page-degradation.max
11816   type: int32_t
11817   value: 50
11818   mirror: always
11820 - name: network.predictor.subresource-degradation.day
11821   type: int32_t
11822   value: 1
11823   mirror: always
11824 - name: network.predictor.subresource-degradation.week
11825   type: int32_t
11826   value: 10
11827   mirror: always
11828 - name: network.predictor.subresource-degradation.month
11829   type: int32_t
11830   value: 25
11831   mirror: always
11832 - name: network.predictor.subresource-degradation.year
11833   type: int32_t
11834   value: 50
11835   mirror: always
11836 - name: network.predictor.subresource-degradation.max
11837   type: int32_t
11838   value: 100
11839   mirror: always
11841 - name: network.predictor.prefetch-rolling-load-count
11842   type: int32_t
11843   value: 10
11844   mirror: always
11846 - name: network.predictor.prefetch-min-confidence
11847   type: int32_t
11848   value: 100
11849   mirror: always
11850 - name: network.predictor.preconnect-min-confidence
11851   type: int32_t
11852   value: 90
11853   mirror: always
11854 - name: network.predictor.preresolve-min-confidence
11855   type: int32_t
11856   value: 60
11857   mirror: always
11859 - name: network.predictor.prefetch-force-valid-for
11860   type: int32_t
11861   value: 10
11862   mirror: always
11864 - name: network.predictor.max-resources-per-entry
11865   type: int32_t
11866   value: 100
11867   mirror: always
11869 # This is selected in concert with max-resources-per-entry to keep memory
11870 # usage low-ish. The default of the combo of the two is ~50k.
11871 - name: network.predictor.max-uri-length
11872   type: uint32_t
11873   value: 500
11874   mirror: always
11876 # A testing flag.
11877 - name: network.predictor.doing-tests
11878   type: bool
11879   value: false
11880   mirror: always
11882 # Indicates whether the `fetchpriority` attribute for elements which support it
11883 # (e.g. `<script>`) is enabled.
11884 - name: network.fetchpriority.enabled
11885   type: RelaxedAtomicBool
11886   value: false
11887   mirror: always
11889 # Adjustments to apply to the internal priority of <link rel=preload as=script
11890 # fetchpriority=low/high/auto> and equivalent Link header with respect to the
11891 # case when network.fetchpriority is disabled.
11892 # - When the flag is disabled, Gecko currently sets priority to HIGHEST.
11893 # - When the flag is enabled, it respectively maps to LOW/HIGHEST/HIGHEST.
11894 - name: network.fetchpriority.adjustments.link-preload-script.low
11895   type: int32_t
11896   value: 30
11897   mirror: always
11898 - name: network.fetchpriority.adjustments.link-preload-script.high
11899   type: int32_t
11900   value: 0
11901   mirror: always
11902 - name: network.fetchpriority.adjustments.link-preload-script.auto
11903   type: int32_t
11904   value: 0
11905   mirror: always
11907 # Adjustments to apply to the internal priority of <script type="module"
11908 # fetchpriority=low/high/auto> with respect to the case when
11909 # network.fetchpriority is disabled.
11910 # - When the flag is disabled, Gecko currently sets priority to NORMAL.
11911 # - When the flag is enabled, it respectively maps to LOW/HIGH/NORMAL.
11912 - name: network.fetchpriority.adjustments.module-script.low
11913   type: int32_t
11914   value: 10
11915   mirror: always
11916 - name: network.fetchpriority.adjustments.module-script.high
11917   type: int32_t
11918   value: -10
11919   mirror: always
11920 - name: network.fetchpriority.adjustments.module-script.auto
11921   type: int32_t
11922   value: 0
11923   mirror: always
11925 # Adjustments to apply to the internal priority of async or defer <script
11926 # fetchpriority=low/high/auto> with respect to the case when
11927 # network.fetchpriority is disabled.
11928 # - When the flag is disabled, Gecko currently sets priority to NORMAL.
11929 # - When the flag is enabled, it respectively maps to LOW/HIGH/NORMAL.
11930 - name: network.fetchpriority.adjustments.async-or-defer-script.low
11931   type: int32_t
11932   value: 10
11933   mirror: always
11934 - name: network.fetchpriority.adjustments.async-or-defer-script.high
11935   type: int32_t
11936   value: -10
11937   mirror: always
11938 - name: network.fetchpriority.adjustments.async-or-defer-script.auto
11939   type: int32_t
11940   value: 0
11941   mirror: always
11943 # Adjustments to apply to the internal priority of <script
11944 # fetchpriority=low/high/auto> inside the <head>, with respect to the case when
11945 # network.fetchpriority is disabled.
11946 # - When the flag is disabled, Gecko currently sets priority to NORMAL.
11947 # - When the flag is enabled, it respectively maps to LOW/HIGH/NORMAL.
11948 - name: network.fetchpriority.adjustments.script-in-head.low
11949   type: int32_t
11950   value: 10
11951   mirror: always
11952 - name: network.fetchpriority.adjustments.script-in-head.high
11953   type: int32_t
11954   value: -10
11955   mirror: always
11956 - name: network.fetchpriority.adjustments.script-in-head.auto
11957   type: int32_t
11958   value: 0
11959   mirror: always
11961 # Adjustments to apply to the internal priority of <script
11962 # fetchpriority=low/high/auto> (other than the scripts handled above) with
11963 # respect to the case when network.fetchpriority is disabled.
11964 # - When the flag is disabled, Gecko currently sets priority to NORMAL.
11965 # - When the flag is enabled, it respectively maps to LOW/HIGH/NORMAL.
11966 - name: network.fetchpriority.adjustments.other-script.low
11967   type: int32_t
11968   value: 10
11969   mirror: always
11970 - name: network.fetchpriority.adjustments.other-script.high
11971   type: int32_t
11972   value: -10
11973   mirror: always
11974 - name: network.fetchpriority.adjustments.other-script.auto
11975   type: int32_t
11976   value: 0
11977   mirror: always
11979 # Adjustments to apply to the internal priority of <link rel=preload as=font
11980 # fetchpriority=low/high/auto> with respect to the case when
11981 # network.fetchpriority is disabled.
11982 # - When the flag is disabled, Gecko currently sets priority to HIGH.
11983 # - When the flag is enabled, it respectively maps to LOW/HIGH/HIGH.
11984 - name: network.fetchpriority.adjustments.link-preload-font.low
11985   type: int32_t
11986   value: 20
11987   mirror: always
11988 - name: network.fetchpriority.adjustments.link-preload-font.high
11989   type: int32_t
11990   value: 0
11991   mirror: always
11992 - name: network.fetchpriority.adjustments.link-preload-font.auto
11993   type: int32_t
11994   value: 0
11995   mirror: always
11997 # Adjustments to apply to the internal priority of <link rel=preload as=fetch
11998 # fetchpriority=low/high/auto> with respect to the case when
11999 # network.fetchpriority is disabled.
12000 # - When the flag is disabled, Gecko currently sets priority to NORMAL.
12001 # - When the flag is enabled, it respectively maps to LOW/HIGH/NORMAL.
12002 - name: network.fetchpriority.adjustments.link-preload-fetch.low
12003   type: int32_t
12004   value: 10
12005   mirror: always
12006 - name: network.fetchpriority.adjustments.link-preload-fetch.high
12007   type: int32_t
12008   value: -10
12009   mirror: always
12010 - name: network.fetchpriority.adjustments.link-preload-fetch.auto
12011   type: int32_t
12012   value: 0
12013   mirror: always
12015 # Adjustments to apply to the internal priority of deferred style for
12016 # fetchpriority=low/high/auto> with respect to the case when
12017 # network.fetchpriority is disabled.
12018 # - When the flag is disabled, Gecko currently sets priority to NORMAL.
12019 # - When the flag is enabled, it respectively maps to LOW/NORMAL/NORMAL.
12020 - name: network.fetchpriority.adjustments.deferred-style.low
12021   type: int32_t
12022   value: 10
12023   mirror: always
12024 - name: network.fetchpriority.adjustments.deferred-style.high
12025   type: int32_t
12026   value: 0
12027   mirror: always
12028 - name: network.fetchpriority.adjustments.deferred-style.auto
12029   type: int32_t
12030   value: 0
12031   mirror: always
12033 # Adjustments to apply to the internal priority of <link rel=preload as=style
12034 # fetchpriority=low/high/auto> with respect to the case when
12035 # network.fetchpriority is disabled.
12036 # - When the flag is disabled, Gecko currently sets priority to HIGHEST.
12037 # - When the flag is enabled, it respectively maps to HIGH/HIGHEST/HIGHEST.
12038 - name: network.fetchpriority.adjustments.link-preload-style.low
12039   type: int32_t
12040   value: 10
12041   mirror: always
12042 - name: network.fetchpriority.adjustments.link-preload-style.high
12043   type: int32_t
12044   value: 0
12045   mirror: always
12046 - name: network.fetchpriority.adjustments.link-preload-style.auto
12047   type: int32_t
12048   value: 0
12049   mirror: always
12051 # Adjustments to apply to the internal priority of other non-deferred
12052 # stylesheet load for fetchpriority=low/high/auto with respect to the case when
12053 # network.fetchpriority is disabled.
12054 # - When the flag is disabled, Gecko currently sets priority to NORMAL.
12055 # - When the flag is enabled, it respectively maps to HIGH/HIGHEST/NORMAL.
12056 - name: network.fetchpriority.adjustments.non-deferred-style.low
12057   type: int32_t
12058   value: 0
12059   mirror: always
12060 - name: network.fetchpriority.adjustments.non-deferred-style.high
12061   type: int32_t
12062   value: -20
12063   mirror: always
12064 - name: network.fetchpriority.adjustments.non-deferred-style.auto
12065   type: int32_t
12066   value: 0
12067   mirror: always
12069 # Adjustments to apply to the internal priority of gloable fetch API
12070 # for fetchpriority=low/high/auto with respect to the case when
12071 # network.fetchpriority is disabled.
12072 # - When the flag is disabled, Gecko currently sets priority to NORMAL.
12073 # - When the flag is enabled, it respectively maps to LOW/HIGH/NORMAL.
12074 - name: network.fetchpriority.adjustments.global-fetch-api.low
12075   type: RelaxedAtomicInt32
12076   value: 10
12077   mirror: always
12078 - name: network.fetchpriority.adjustments.global-fetch-api.high
12079   type: RelaxedAtomicInt32
12080   value: -10
12081   mirror: always
12082 - name: network.fetchpriority.adjustments.global-fetch-api.auto
12083   type: RelaxedAtomicInt32
12084   value: 0
12085   mirror: always
12087 # Adjustments to apply to the internal priority of <link rel=preload as=images
12088 # fetchpriority=low/high/auto> and <img fetchpriority=low/high/auto> with
12089 # respect to the case when network.fetchpriority is disabled.
12090 # - When the flag is disabled, Gecko currently sets priority to LOW.
12091 # - When the flag is enabled, it respectively maps to LOW/LOW/HIGH.
12092 # The image code can currently further adjust the priority for image load, see
12093 # imgRequest::BoostPriority and AdjustPriorityForImages.
12094 - name: network.fetchpriority.adjustments.images.low
12095   type: int32_t
12096   value: 0
12097   mirror: always
12098 - name: network.fetchpriority.adjustments.images.high
12099   type: int32_t
12100   value: -20
12101   mirror: always
12102 - name: network.fetchpriority.adjustments.images.auto
12103   type: int32_t
12104   value: 0
12105   mirror: always
12107 # Enables `<link rel="preconnect">` tag and `Link: rel=preconnect` response header
12108 # handling.
12109 - name: network.preconnect
12110   type: RelaxedAtomicBool
12111   value: true
12112   mirror: always
12114 # Enables `<link rel="modulepreload">` tag and `Link: rel=modulepreload`
12115 # response header handling.
12116 - name: network.modulepreload
12117   type: RelaxedAtomicBool
12118   value: true
12119   mirror: always
12121 # Enable 103 Early Hint status code (RFC 8297)
12122 - name: network.early-hints.enabled
12123   type: RelaxedAtomicBool
12124   value: true
12125   mirror: always
12127 # Enable `Link: rel=preconnect` in 103 Early Hint response.
12128 - name: network.early-hints.preconnect.enabled
12129   type: RelaxedAtomicBool
12130   value: true
12131   mirror: always
12133 # The max number of speculative connections we allow for `Link: rel=preconnect`.
12134 # When 0, the speculative connection created due to `Link: rel=preconnect` will
12135 # be limited by "network.http.speculative-parallel-limit".
12136 - name: network.early-hints.preconnect.max_connections
12137   type: uint32_t
12138   value: 10
12139   mirror: always
12141 # How long we should wait for EarlyHintPreloader to be used.
12142 # Under normal circumstances it should be used immidiately.
12143 - name: network.early-hints.parent-connect-timeout
12144   type: uint32_t
12145   value: 10000
12146   mirror: always
12148 # Whether to use the network process or not
12149 # Start a separate socket process. Performing networking on the socket process
12150 # is control by a sepparate pref
12151 # ("network.http.network_access_on_socket_process.enabled").
12152 # Changing these prefs requires a restart.
12153 - name: network.process.enabled
12154   type: RelaxedAtomicBool
12155   mirror: always
12156 #if defined(ANDROID) || defined(MOZ_THUNDERBIRD)
12157   value: false # see bug 1641427
12158 #else
12159   value: true
12160 #endif
12162 # Whether we can send OnDataAvailable to content process directly.
12163 - name: network.send_ODA_to_content_directly
12164   type: RelaxedAtomicBool
12165   value: true
12166   mirror: always
12168 # Whether we can send OnDataFinished to html5parser in content process directly
12169 - name: network.send_OnDataFinished.html5parser
12170   type: RelaxedAtomicBool
12171   value: true
12172   mirror: always
12174 # Whether we can send OnDataFinished in the content process
12175 - name: network.send_OnDataFinished
12176   type: RelaxedAtomicBool
12177   value: true
12178   mirror: always
12180 # Whether we can send OnDataFinished to content process directly.
12181 - name: network.send_OnDataFinished.nsInputStreamPump
12182   type: RelaxedAtomicBool
12183   value: true
12184   mirror: always
12186 # Whether we can send OnDataFinished to cssLoader in content process.
12187 - name: network.send_OnDataFinished.cssLoader
12188   type: RelaxedAtomicBool
12189   value: @IS_EARLY_BETA_OR_EARLIER@
12190   mirror: always
12192 # Whether we can send send OnDataFinished only after dispatching
12193 # all the progress events on the main thread
12194 - name: network.send_OnDataFinished_after_progress_updates
12195   type: RelaxedAtomicBool
12196   value: false
12197   mirror: always
12199 # Perform all network access on the socket process.
12200 # The pref requires "network.process.enabled" to be true.
12201 # Changing these prefs requires a restart.
12202 - name: network.http.network_access_on_socket_process.enabled
12203   type: RelaxedAtomicBool
12204   mirror: always
12205   value: false
12207 # Telemetry of traffic categories. Whether or not to enable HttpTrafficAnalyzer.
12208 - name: network.traffic_analyzer.enabled
12209   type: RelaxedAtomicBool
12210   value: true
12211   mirror: always
12213 # Whether DNS resolution is limited to literals and cached entries.
12214 - name: network.dns.disabled
12215   type: RelaxedAtomicBool
12216   value: false
12217   mirror: always
12219 - name: network.dns.disablePrefetchFromHTTPS
12220   type: bool
12221   value: true
12222   mirror: always
12224 # Max time to shutdown the resolver threads
12225 - name: network.dns.resolver_shutdown_timeout_ms
12226   type: uint32_t
12227   value: 2000
12228   mirror: always
12230 # When true on Windows DNS resolutions for single label domains
12231 # (domains that don't contain a dot) will be resolved using the DnsQuery
12232 # API instead of PR_GetAddrInfoByName
12233 - name: network.dns.dns_query_single_label
12234   type: RelaxedAtomicBool
12235   value: false
12236   mirror: always
12238 # Use platform DNS APIs (where available) to resolve HTTPS queries
12239 - name: network.dns.native_https_query
12240   type: RelaxedAtomicBool
12241 #if defined(EARLY_BETA_OR_EARLIER) && !defined(XP_MACOSX)
12242   value: true
12243 #else
12244   value: false
12245 #endif
12246   mirror: always
12248 # DnsQuery_A is broken for HTTPS queries on Windows 10.
12249 # Once it gets fixed, we can flip this pref to enable it.
12250 # Changes might not take effect until restart.
12251 - name: network.dns.native_https_query_win10
12252   type: RelaxedAtomicBool
12253   value: false
12254   mirror: always
12256 # When true, the HTTPS query will actually call the native
12257 # platform API. When false it will return before the call
12258 # to the platform API
12259 # This pref is necessary because having a HTTPS record
12260 # could cause channels to connect to a different port,
12261 # which is not desirable in automation.
12262 - name: network.dns.native_https_query_in_automation
12263   type: RelaxedAtomicBool
12264   value: false
12265   mirror: always
12267 # When resolving a native HTTPS query with native APIs
12268 # the Android implementation has a max timeout
12269 - name: network.dns.native_https_timeout_android
12270   type: RelaxedAtomicInt32
12271   value: 20000
12272   mirror: always
12274 # When this pref is true, we copy the host name to a fresh string before
12275 # calling into getaddrinfo.
12276 - name: network.dns.copy_string_before_call
12277   type: RelaxedAtomicBool
12278   value: true
12279   mirror: always
12281 - name: network.dns.max_high_priority_threads
12282   type: RelaxedAtomicUint32
12283   value: 40
12284   mirror: always
12286 - name: network.dns.max_any_priority_threads
12287   type: RelaxedAtomicUint32
12288   value: 24
12289   mirror: always
12291 # The proxy type. See nsIProtocolProxyService.idl
12292 #     PROXYCONFIG_DIRECT   = 0
12293 #     PROXYCONFIG_MANUAL   = 1
12294 #     PROXYCONFIG_PAC      = 2
12295 #     PROXYCONFIG_WPAD     = 4
12296 #     PROXYCONFIG_SYSTEM   = 5
12297 - name: network.proxy.type
12298   type: RelaxedAtomicUint32
12299   value: 5
12300   mirror: always
12302 # Whether to use WPAD while configuring proxy with system settings
12303 - name: network.proxy.system_wpad
12304   type: bool
12305   value: false
12306   mirror: always
12308 # Whether to allow the use of WPAD while configuring proxy with system settings
12309 - name: network.proxy.system_wpad.allowed
12310   type: bool
12311   value: false
12312   mirror: always
12314 # Whether the SOCKS proxy should be in charge of DNS resolution.
12315 - name: network.proxy.socks_remote_dns
12316   type: RelaxedAtomicBool
12317   value: false
12318   mirror: always
12320 # When receiving a network change event, the time (in ms) we wait to reload the
12321 # PAC url.
12322 - name: network.proxy.reload_pac_delay
12323   type: RelaxedAtomicUint32
12324   value: 2000
12325   mirror: always
12327 # When parsing "SOCKS" in PAC string, the default version of SOCKS that will be
12328 # used.
12329 - name: network.proxy.default_pac_script_socks_version
12330   type: RelaxedAtomicUint32
12331   value: 4
12332   mirror: always
12334 # Whether to force failover to direct for system requests.
12335 #ifdef MOZ_PROXY_DIRECT_FAILOVER
12336 - name: network.proxy.failover_direct
12337   type: bool
12338   value: true
12339   mirror: always
12340 #endif
12342 # Whether to allow a bypass flag to be set on httpChannel that will
12343 # prevent proxies from being used for that specific request.
12344 - name: network.proxy.allow_bypass
12345   type: bool
12346 #ifdef MOZ_PROXY_BYPASS_PROTECTION
12347   value: false
12348 #else
12349   value: true
12350 #endif
12351   mirror: always
12353 - name: network.proxy.parse_pac_on_socket_process
12354   type: RelaxedAtomicBool
12355   value: false
12356   mirror: always
12358 - name: network.proxy.detect_system_proxy_changes
12359   type: RelaxedAtomicBool
12360   value: false
12361   mirror: always
12363 # If all non-direct proxies have failed, we retry all of them in case they
12364 # are online now.
12365 - name: network.proxy.retry_failed_proxies
12366   type: RelaxedAtomicBool
12367   value: true
12368   mirror: always
12370 # Some requests during a page load are marked as "tail", mainly trackers, but not only.
12371 # This pref controls whether such requests are put to the tail, behind other requests
12372 # emerging during page loading process.
12373 - name: network.http.tailing.enabled
12374   type: bool
12375   value: true
12376   mirror: always
12378 # Whether to run proxy checks when processing Alt-Svc headers.
12379 - name: network.http.altsvc.proxy_checks
12380   type: bool
12381   value: true
12382   mirror: always
12384 - name: network.http.stale_while_revalidate.enabled
12385   type: RelaxedAtomicBool
12386   value: true
12387   mirror: always
12389 # Capacity of the above cache, in kilobytes.
12390 - name: network.ssl_tokens_cache_capacity
12391   type: RelaxedAtomicUint32
12392   value: 2048
12393   mirror: always
12395 # How many records we store per entry
12396 - name: network.ssl_tokens_cache_records_per_entry
12397   type: RelaxedAtomicUint32
12398   value: 2
12399   mirror: always
12401 # The maximum allowed length for a URL - 1MB default.
12402 - name: network.standard-url.max-length
12403   type: RelaxedAtomicUint32
12404   value: 1048576
12405   mirror: always
12407 # DNS Trusted Recursive Resolver
12408 # 0 - default off, 1 - reserved/off, 2 - TRR first, 3 - TRR only,
12409 # 4 - reserved/off, 5 off by choice
12410 - name: network.trr.mode
12411   type: RelaxedAtomicUint32
12412   value: 0
12413   mirror: always
12415 # Default global TRR provider
12416 - name: network.trr.default_provider_uri
12417   type: String
12418   value: "https://mozilla.cloudflare-dns.com/dns-query"
12419   mirror: never
12421 # If true, retry TRR for recoverable errors once.
12422 - name: network.trr.retry_on_recoverable_errors
12423   type: RelaxedAtomicBool
12424   value: true
12425   mirror: always
12427 # If true, don't fallback to native DNS upon network errors.
12428 - name: network.trr.strict_native_fallback
12429   type: RelaxedAtomicBool
12430   value: false
12431   mirror: always
12433 # If true, we'll fallback to native if the retry also times out.
12434 - name: network.trr.strict_native_fallback_allow_timeouts
12435   type: RelaxedAtomicBool
12436   value: true
12437   mirror: always
12439 # Single TRR request timeout (ms) when strict native fallback is enabled.
12440 - name: network.trr.strict_fallback_request_timeout_ms
12441   type: RelaxedAtomicUint32
12442   value: 6000
12443   mirror: always
12445 # If false, the temporary blocklisting feature is disabled.
12446 # This is useful for tests to prevent bleeding extra reqs
12447 # between tasks, since we may attempt to look up the
12448 # parent domain in the background when blocklisting a host.
12449 - name: network.trr.temp_blocklist
12450   type: RelaxedAtomicBool
12451   value: true
12452   mirror: always
12454 # TRR blocklist entry expire time (in seconds). Default is one minute.
12455 # Meant to survive basically a page load.
12456 - name: network.trr.temp_blocklist_duration_sec
12457   type: RelaxedAtomicUint32
12458   value: 60
12459   mirror: always
12461 # Single TRR request timeout, in milliseconds
12462 - name: network.trr.request_timeout_ms
12463   type: RelaxedAtomicUint32
12464   value: 1500
12465   mirror: always
12467 # Single TRR request timeout, in milliseconds for mode 3
12468 - name: network.trr.request_timeout_mode_trronly_ms
12469   type: RelaxedAtomicUint32
12470   value: 30000
12471   mirror: always
12473 # Similar to network.http.http2.ping-timeout, but this is used when the
12474 # Http/2 connection is connected to the TRR server.
12475 - name: network.trr.ping_timeout
12476   type: RelaxedAtomicUint32
12477   value: 3000
12478   mirror: always
12480 # The timeout of the TRR confirmation request
12481 - name: network.trr.confirmation_timeout_ms
12482   type: RelaxedAtomicUint32
12483   value: 6000
12484   mirror: always
12486 # The timeout of the TRR confirmation request
12487 - name: network.trr.confirmation_telemetry_enabled
12488   type: RelaxedAtomicBool
12489   value: true
12490   mirror: always
12492 # Whether to send the Accept-Language header for TRR requests
12493 - name: network.trr.send_accept-language_headers
12494   type: RelaxedAtomicBool
12495   value: false
12496   mirror: always
12498 # Whether to send an empty Accept-Encoding header for TRR requests
12499 - name: network.trr.send_empty_accept-encoding_headers
12500   type: RelaxedAtomicBool
12501   value: true
12502   mirror: always
12504 # Whether to send the User-Agent header for TRR requests
12505 - name: network.trr.send_user-agent_headers
12506   type: RelaxedAtomicBool
12507   value: false
12508   mirror: always
12510 # This pref controls whether to use TRRServiceChannel off main thread.
12511 - name: network.trr.fetch_off_main_thread
12512   type: RelaxedAtomicBool
12513   value: true
12514   mirror: always
12516 # If we should wait for captive portal confirmation before enabling TRR
12517 - name: network.trr.wait-for-portal
12518   type: RelaxedAtomicBool
12519   value: false
12520   mirror: always
12522 # If we should wait for TRR service confirmation to complete before enabling
12523 # TRR for lookups when fallback is enabled. Confirmation is always skipped when
12524 # global mode is TRR-only (no fallback).
12525 - name: network.trr.wait-for-confirmation
12526   type: RelaxedAtomicBool
12527   value: false
12528   mirror: always
12530 # Normally when confirmation fails we wait for the confirmation to succeed
12531 # before attempting to do TRR. When this pref is true, we optimistically
12532 # assume the confirmation will succeed and might attempt TRR anyway.
12533 # If network.trr.wait-for-confirmation is true, this pref is ignored.
12534 - name: network.trr.attempt-when-retrying-confirmation
12535   type: RelaxedAtomicBool
12536   value: false
12537   mirror: always
12539 # Use GET (rather than POST)
12540 - name: network.trr.useGET
12541   type: RelaxedAtomicBool
12542   value: false
12543   mirror: always
12545 # Allow RFC1918 address in responses?
12546 - name: network.trr.allow-rfc1918
12547   type: RelaxedAtomicBool
12548   value: false
12549   mirror: always
12551 # When true, it only sends AAAA when the system has IPv6 connectivity
12552 - name: network.trr.skip-AAAA-when-not-supported
12553   type: RelaxedAtomicBool
12554   value: true
12555   mirror: always
12557 # Whether to apply split horizon mitigations when using TRR.
12558 # These include adding the DNS suffix to the excluded domains
12559 - name: network.trr.split_horizon_mitigations
12560   type: RelaxedAtomicBool
12561   value: true
12562   mirror: always
12564 # Explicitly disable ECS (EDNS Client Subnet, RFC 7871)
12565 - name: network.trr.disable-ECS
12566   type: RelaxedAtomicBool
12567   value: true
12568   mirror: always
12570 # When true, the DNS+TRR cache will be cleared when a relevant TRR pref
12571 # changes. (uri, bootstrapAddress, excluded-domains)
12572 - name: network.trr.clear-cache-on-pref-change
12573   type: RelaxedAtomicBool
12574   value: true
12575   mirror: always
12577 # After this many failed TRR requests in a row, consider TRR borked
12578 - name: network.trr.max-fails
12579   type: RelaxedAtomicUint32
12580   value: 15
12581   mirror: always
12583 # When the TRR confirmation is set to CONFIRM_FAILED due to many failures in
12584 # a row, we set a timer to retry. This has an exponential backoff up to
12585 # 64 seconds.
12586 - name: network.trr.retry-timeout-ms
12587   type: RelaxedAtomicUint32
12588   value: 125
12589   mirror: always
12591 # Retry with no TRR when the response contained only 0.0.0.0 or ::
12592 - name: network.trr.fallback-on-zero-response
12593   type: RelaxedAtomicBool
12594   value: false
12595   mirror: always
12597 # If true we parse the /etc/hosts file and exclude any host names from TRR.
12598 # Reading the file is only done once, when TRR is first enabled - this could be
12599 # soon after startup or when the pref is flipped.
12600 - name: network.trr.exclude-etc-hosts
12601   type: RelaxedAtomicBool
12602   value: true
12603   mirror: always
12605 # Whether to add padding in the doh dns queries (rfc 7830)
12606 - name: network.trr.padding
12607   type: RelaxedAtomicBool
12608   value: true
12609   mirror: always
12611 # The block size to pad to. Capped at 1024 bytes.
12612 # Setting it to 0 doesn't add additional padding, but allows the server to
12613 # respond with padding (RFC7930 Sec 4)
12614 - name: network.trr.padding.length
12615   type: RelaxedAtomicUint32
12616   value: 128
12617   mirror: always
12619 # Whether to skip the NS check for the blocked host.
12620 # Note this is used for test only.
12621 - name: network.trr.skip-check-for-blocked-host
12622   type: RelaxedAtomicBool
12623   value: false
12624   mirror: always
12626 # Whether to use the connection info that is generated asynchronously.
12627 - name: network.trr.async_connInfo
12628   type: RelaxedAtomicBool
12629   value: false
12630   mirror: always
12632 # If true, a failed TRR request that contains an extended DNS error
12633 # matching the hardFail condition in DNSPacket.cpp will not be
12634 # retried with native DNS
12635 - name: network.trr.hard_fail_on_extended_error
12636   type: RelaxedAtomicBool
12637   value: true
12638   mirror: always
12640 # The base URL of the `Learn more` button for skip reasons
12641 - name: network.trr_ui.skip_reason_learn_more_url
12642   type: String
12643   value: "https://firefox-source-docs.mozilla.org/networking/dns/trr-skip-reasons.html#"
12644   mirror: never
12646 # If true, display a warning before fallback to native
12647 - name: network.trr.display_fallback_warning
12648   type: RelaxedAtomicBool
12649   value: false
12650   mirror: always
12652 # Heuristics in this list will trigger the fallback to native warning
12653 - name: network.trr.fallback_warning_heuristic_list
12654   type: String
12655   value: "canary"
12656   mirror: never
12658 # Use Oblivious HTTP when making TRR requests.
12659 - name: network.trr.use_ohttp
12660   type: RelaxedAtomicBool
12661   value: false
12662   mirror: always
12664 # Oblivious HTTP relay URI for TRR requests.
12665 - name: network.trr.ohttp.relay_uri
12666   type: String
12667   value: ""
12668   mirror: never
12670 # URI from which to fetch the configuration for the Oblivious HTTP gateway for TRR requests.
12671 - name: network.trr.ohttp.config_uri
12672   type: String
12673   value: ""
12674   mirror: never
12676 # The URI used for the target DoH server when network.trr.use_ohttp is true
12677 - name: network.trr.ohttp.uri
12678   type: String
12679   value: ""
12680   mirror: never
12682 # Allow the network changed event to get sent when a network topology or setup
12683 # change is noticed while running.
12684 - name: network.notify.changed
12685   type: RelaxedAtomicBool
12686   value: true
12687   mirror: always
12689 # Allow network detection of IPv6 related changes (bug 1245059)
12690 - name: network.notify.IPv6
12691   type: RelaxedAtomicBool
12692 #ifdef XP_WIN
12693   value: false
12694 #else
12695   value: true
12696 #endif
12697   mirror: always
12699 # Whether to check the dnsSuffix on network changes
12700 - name: network.notify.dnsSuffixList
12701   type: RelaxedAtomicBool
12702   value: true
12703   mirror: always
12705 # Whether to check the registry for proxies on network changes that indicate
12706 # that TRR should not be used.
12707 - name: network.notify.checkForProxies
12708   type: RelaxedAtomicBool
12709   value: true
12710   mirror: always
12712 # Whether to check the registry for NRPT rules on network changes that
12713 # indicate that TRR should not be used.
12714 - name: network.notify.checkForNRPT
12715   type: RelaxedAtomicBool
12716   value: true
12717   mirror: always
12719 # Whether NotifyIpInterfaceChange should be called immediately after
12720 # registration in order to record the initial state of the network adapters.
12721 - name: network.notify.initial_call
12722   type: RelaxedAtomicBool
12723   value: true
12724   mirror: always
12726 # Whether to check for DNS resolvers
12727 - name: network.notify.resolvers
12728   type: RelaxedAtomicBool
12729   value: true
12730   mirror: always
12732 # Whether to use the rust implemented DefaultURI for unknown scheme types
12733 - name: network.url.useDefaultURI
12734   type: RelaxedAtomicBool
12735   value: false
12736   mirror: always
12738 # The maximum allowed length for a URL - 32MB default.
12739 # If 0 that means no limit.
12740 - name: network.url.max-length
12741   type: RelaxedAtomicUint32
12742   value: 32 * 1024 * 1024
12743   mirror: always
12745 # Should be removed if no breakage occurs. See bug 1797846
12746 - name: network.url.strip-data-url-whitespace
12747   type: RelaxedAtomicBool
12748   value: false
12749   mirror: always
12751   # If true, will be more strict with status code parsing
12752 - name: network.url.strict_data_url_base64_placement
12753   type: RelaxedAtomicBool
12754   value: true
12755   mirror: always
12757 - name: network.url.strict_protocol_setter
12758   type: RelaxedAtomicBool
12759   value: true
12760   mirror: always
12762 # Force remapping of remote port numbers to allow reaching local testing
12763 # servers or port forwarders listening on non-standard ports.  Note that
12764 # this is not changing the origin URL in the addressbar, only internally
12765 # the port number used.  This is intended to be used along with the
12766 # `network.dns.forceResolve` preference.
12768 # The form is:
12769 #   "80,443,808-888=8080; 563=8081"
12770 # this will remap ports for HTTP, HTTPS and the range of 808-888 included
12771 # to use port 8080, and port 563 to go to 8081.
12772 - name: network.socket.forcePort
12773   type: String
12774   value: ""
12775   mirror: never
12777 # Try and use HTTP2 when using SSL
12778 - name: network.http.http2.enabled
12779   type: RelaxedAtomicBool
12780   value: true
12781   mirror: always
12783 - name: network.http.http2.enabled.deps
12784   type: RelaxedAtomicBool
12785   value: true
12786   mirror: always
12788 - name: network.http.http2.enforce-tls-profile
12789   type: RelaxedAtomicBool
12790   value: true
12791   mirror: always
12793 - name: network.http.http2.chunk-size
12794   type: RelaxedAtomicInt32
12795   value: 16000
12796   mirror: always
12798 - name: network.http.http2.timeout
12799   type: RelaxedAtomicInt32
12800   value: 170
12801   mirror: always
12803 - name: network.http.http2.coalesce-hostnames
12804   type: RelaxedAtomicBool
12805   value: true
12806   mirror: always
12808 - name: network.http.http2.ping-threshold
12809   type: RelaxedAtomicInt32
12810   value: 58
12811   mirror: always
12813 - name: network.http.http2.ping-timeout
12814   type: RelaxedAtomicInt32
12815   value: 8
12816   mirror: always
12818 - name: network.http.http2.send-buffer-size
12819   type: RelaxedAtomicInt32
12820   value: 0
12821   mirror: always
12823 - name: network.http.http2.allow-push
12824   type: RelaxedAtomicBool
12825   value: true
12826   mirror: always
12828 - name: network.http.http2.push-allowance
12829   type: RelaxedAtomicInt32
12830   value: 131072  # 128KB
12831   mirror: always
12833 - name: network.http.http2.pull-allowance
12834   type: RelaxedAtomicInt32
12835   value: 12582912  # 12MB
12836   mirror: always
12838 - name: network.http.http2.default-concurrent
12839   type: RelaxedAtomicInt32
12840   value: 100
12841   mirror: always
12843 - name: network.http.http2.default-hpack-buffer
12844   type: RelaxedAtomicInt32
12845   value: 65536 # 64K
12846   mirror: always
12848 - name: network.http.http2.websockets
12849   type: RelaxedAtomicBool
12850   value: true
12851   mirror: always
12853 - name: network.http.http2.enable-hpack-dump
12854   type: RelaxedAtomicBool
12855   value: false
12856   mirror: always
12858 - name: network.http.http2.move_to_pending_list_after_network_change
12859   type: RelaxedAtomicBool
12860   value: true
12861   mirror: always
12863 # Enable HTTP/3
12864 - name: network.http.http3.enable
12865   type: RelaxedAtomicBool
12866   value: true
12867   mirror: always
12869 # Receive buffer size of QUIC socket
12870 - name: network.http.http3.recvBufferSize
12871   type: RelaxedAtomicInt32
12872   value: 1048576
12873   mirror: always
12875 - name: network.http.http3.enable_qlog
12876   type: RelaxedAtomicBool
12877   value: false
12878   mirror: always
12880 - name: network.http.http3.enable_0rtt
12881   type: RelaxedAtomicBool
12882   value: true
12883   mirror: always
12885 # When a h3 transaction is inserted in the pending queue, the time (ms) we wait
12886 # to create a TCP backup connection.
12887 - name: network.http.http3.backup_timer_delay
12888   type: RelaxedAtomicUint32
12889   value: 100
12890   mirror: always
12892 # The global half open sockets allowed for creating a backup connection.
12893 - name: network.http.http3.parallel_fallback_conn_limit
12894   type: RelaxedAtomicUint32
12895   value: 32
12896   mirror: always
12898 # Receive buffer size of QUIC socket
12899 - name: network.http.http3.max_data
12900   type: RelaxedAtomicUint32
12901   value: 25165824
12902   mirror: always
12904 # Receive buffer size of QUIC socket
12905 - name: network.http.http3.max_stream_data
12906   type: RelaxedAtomicUint32
12907   value: 12582912
12908   mirror: always
12910 # Enable http3 network priority as described in
12911 # <https://www.rfc-editor.org/rfc/rfc9218.html>.
12912 - name: network.http.http3.priority
12913   type: RelaxedAtomicBool
12914   value: true
12915   mirror: always
12917 # Depriorizing background tabs notifies websites when switching to or from the
12918 # tab while still loading resources for the website. On one hand it might
12919 # improve performance when switching to an tab with a website using the same
12920 # QUIC connection. On the other hand it sends more data to the website and
12921 # might be a privacy concern.
12922 - name: network.http.http3.send_background_tabs_deprioritization
12923   type: RelaxedAtomicBool
12924   value: false
12925   mirror: always
12927 - name: network.http.http3.version_negotiation.enabled
12928   type: RelaxedAtomicBool
12929   value: false
12930   mirror: always
12932 # When a Http/3 connection failed, whether to retry with a different IP address.
12933 - name: network.http.http3.retry_different_ip_family
12934   type: RelaxedAtomicBool
12935   value: @IS_EARLY_BETA_OR_EARLIER@
12936   mirror: always
12938 # This is for testing purpose. When true, nsUDPSocket::SendWithAddress will
12939 # return NS_ERROR_CONNECTION_REFUSED for address "::1".
12940 - name: network.http.http3.block_loopback_ipv6_addr
12941   type: RelaxedAtomicBool
12942   value: false
12943   mirror: always
12945 # The congestion control algorithm with which to configure neqo.
12946 # 0 => NewReno
12947 # 1 => Cubic
12948 - name: network.http.http3.cc_algorithm
12949   type: RelaxedAtomicUint32
12950   value: 1
12951   mirror: always
12952   rust: true
12954 # It represents the maximum duration that we used to accumulate
12955 # callback timeouts before we set a timer and break out of the loop.
12956 - name: network.http.http3.max_accumlated_time_ms
12957   type: RelaxedAtomicUint32
12958   value: 1
12959   mirror: always
12960   rust: true
12962 # When true, a http request will be upgraded to https when HTTPS RR is
12963 # available.
12964 - name: network.dns.upgrade_with_https_rr
12965   type: RelaxedAtomicBool
12966   value: true
12967   mirror: always
12969 # Whether to use HTTPS RR as AltSvc
12970 - name: network.dns.use_https_rr_as_altsvc
12971   type: RelaxedAtomicBool
12972   value: true
12973   mirror: always
12975 # Whether to check for NAT64 using the system resolver
12976 - name: network.connectivity-service.nat64-check
12977   type: bool
12978   value: true
12979   mirror: always
12981 # Manually enter the NAT64 prefix that will be used if IPv4 is unavailable.
12982 # The value is formatted as IPv6 with the least significant bits to be dropped.
12983 # For example, 64:ff9b:: is a common prefix. This will not disable
12984 # the NAT64 check, although the value of this pref will be prioritized.
12985 - name: network.connectivity-service.nat64-prefix
12986   type: String
12987   value: ""
12988   mirror: never
12990 # Whether to enable echconfig.
12991 - name: network.dns.echconfig.enabled
12992   type: RelaxedAtomicBool
12993   value: true
12994   mirror: always
12996 # Whether to enable echconfig for http3.
12997 - name: network.dns.http3_echconfig.enabled
12998   type: RelaxedAtomicBool
12999   value: true
13000   mirror: always
13002 # This pref needs to be worked together with network.dns.echconfig.enabled
13003 # being true and there is no record without ECHConfig.
13004 # When we try all records with ECHConfig in HTTPS RRs and still can't connect,
13005 # this pref indicate whether we can fallback to the origin server.
13006 - name: network.dns.echconfig.fallback_to_origin_when_all_failed
13007   type: RelaxedAtomicBool
13008   value: false
13009   mirror: always
13011 # When true, reset the exclusion list when all records are excluded.
13012 - name: network.dns.httpssvc.reset_exclustion_list
13013   type: RelaxedAtomicBool
13014   value: true
13015   mirror: always
13017 # If the http3 connection cannot be ready after the timeout value here, the
13018 # transaction will start another non-http3 conneciton.
13019 # Setting this value to 0 indicates this feature is disabled.
13020 - name: network.dns.httpssvc.http3_fast_fallback_timeout
13021   type: RelaxedAtomicUint32
13022   value: 50
13023   mirror: always
13025 # Whether to force a transaction to wait https rr.
13026 - name: network.dns.force_waiting_https_rr
13027   type: RelaxedAtomicBool
13028   value: true
13029   mirror: always
13031 # The TTL for negative responses of TXT and HTTPS records.
13032 - name: network.dns.negative_ttl_for_type_record
13033   type: RelaxedAtomicUint32
13034   value: 300   # 5 minutes (in seconds)
13035   mirror: always
13037 # Whether to use port prefixed QNAME for HTTPS RR
13038 - name: network.dns.port_prefixed_qname_https_rr
13039   type: RelaxedAtomicBool
13040   value: false
13041   mirror: always
13043 # Whether to use HTTPS RR and ignore NS_HTTP_DISALLOW_HTTPS_RR
13044 # This pref is only set when running tests
13045 - name: network.dns.force_use_https_rr
13046   type: RelaxedAtomicBool
13047   value: false
13048   mirror: always
13050 # This preference can be used to turn off IPv6 name lookups. See bug 68796.
13051 - name: network.dns.disableIPv6
13052   type: RelaxedAtomicBool
13053   value: false
13054   mirror: always
13056 # Whether to add additional record IPs to the cache
13057 - name: network.trr.add_additional_records
13058   type: RelaxedAtomicBool
13059   value: true
13060   mirror: always
13062 # When this pref is true, AddStorageEntry will return an error if the
13063 # OPEN_READONLY & OPEN_SECRETLY flags are passed and no entry exists.
13064 # If no regressions occur this pref should be removed.
13065 - name: network.cache.bug1708673
13066   type: RelaxedAtomicBool
13067   value: false
13068   mirror: always
13070 # How much progress we want to do minimum when purging under pressure.
13071 # On disk, we may see blocking I/O, so for now we keep 0 here.
13072 - name: network.cache.purge_minprogress_disk
13073   type: RelaxedAtomicUint32
13074   value: 0
13075   mirror: always
13077 # How much progress we want to do minimum when purging under pressure.
13078 # In memory, purging is cheap and memory is precious.
13079 - name: network.cache.purge_minprogress_memory
13080   type: RelaxedAtomicUint32
13081   value: 32
13082   mirror: always
13084 # When true we will dispatch a background task (separate process) to
13085 # delete the cache folder at shutdown in order to avoid shutdown hangs.
13086 - name: network.cache.shutdown_purge_in_background_task
13087   type: RelaxedAtomicBool
13088 #if defined(XP_WIN)
13089   value: true
13090 #else
13091   value: false
13092 #endif
13093   mirror: always
13095 # Number of seconds to wait for the cache folder to be renamed before
13096 # the background task forcefully exists.
13097 - name: network.cache.shutdown_purge_folder_wait_seconds
13098   type: RelaxedAtomicUint32
13099   value: 10
13100   mirror: always
13102 # This is used for a temporary workaround for a web-compat issue. If pref is
13103 # true CORS preflight requests are allowed to send client certificates.
13104 - name: network.cors_preflight.allow_client_cert
13105   type: RelaxedAtomicBool
13106   value: false
13107   mirror: always
13109 # If true nsCORSListenerProxy will reject any URL that contains user & password
13110 # regardless if it's a redirect or not. When false nsCORSListenerProxy will
13111 # only reject URLs with a username and password when they happen on a redirected
13112 # channel.
13113 - name: network.cors_preflight.block_userpass_uri
13114   type: RelaxedAtomicBool
13115   value: false
13116   mirror: always
13118 # Whether to record the telemetry event when a JAR channel is failed to load.
13119 - name: network.jar.record_failure_reason
13120   type: RelaxedAtomicBool
13121   value: @IS_EARLY_BETA_OR_EARLIER@
13122   mirror: always
13124 # nsJARInputStream::Available returns the size indicated by the archived entry
13125 # so we need a limit so we don't OOM if the archive is corrupted.
13126 - name: network.jar.max_available_size
13127   type: RelaxedAtomicUint32
13128   value: 256*1024*1024 # 256 Mb
13129   mirror: always
13131 # Whether JAR entries that defate to a different size than RealSize/orglen
13132 # are considered corrupted or not
13133 - name: network.jar.require_size_match
13134   type: RelaxedAtomicBool
13135   value: true
13136   mirror: always
13138 # When decompressing an archived entry we need to allocate a buffer
13139 # large enough to hold the uncompressed entry. This pref specifies the max
13140 # size of such a buffer.
13141 # When set to 0 there is no limit.
13142 - name: network.jar.max_entry_size
13143   type: RelaxedAtomicUint32
13144   value: 256*1024*1024 # 256 Mb
13145   mirror: always
13147 # When this pref is true, we will use the HTTPS acceptable content encoding
13148 # list for trustworthy domains such as http://localhost
13149 - name: network.http.encoding.trustworthy_is_https
13150   type: RelaxedAtomicBool
13151   value: true
13152   mirror: always
13154 # Support http3 version1
13155 - name: network.http.http3.support_version1
13156   type: RelaxedAtomicBool
13157   value: true
13158   mirror: always
13160 # Disable early data on an origin if SSL_ERROR_PROTOCOL_VERSION_ALERT is received
13161 - name: network.http.early_data_disable_on_error
13162   type: RelaxedAtomicBool
13163   value: true
13164   mirror: always
13166 # Disable early data if it fails for more than this number of origins
13167 - name: network.http.early_data_max_error
13168   type: RelaxedAtomicUint32
13169   value: 5
13170   mirror: always
13172   # If true, requests will be canceled if any of the response headers values has a NUL character
13173 - name: network.http.reject_NULs_in_response_header_values
13174   type: RelaxedAtomicBool
13175   value: true
13176   mirror: always
13178   # If true, will be more strict with status code parsing
13179 - name: network.http.strict_response_status_line_parsing
13180   type: RelaxedAtomicBool
13181   value: true
13182   mirror: always
13184   # If true, remove the resumption token when 0RTT failed.
13185 - name: network.http.remove_resumption_token_when_early_data_failed
13186   type: RelaxedAtomicBool
13187   value: true
13188   mirror: always
13190   # The length of cnonce string used in HTTP digest auth.
13191 - name: network.http.digest_auth_cnonce_length
13192   type: uint32_t
13193   value: 64
13194   mirror: always
13196   # If true, HTTP response content-type headers will be parsed using the standards-compliant MimeType parser
13197 - name: network.standard_content_type_parsing.response_headers
13198   type: RelaxedAtomicBool
13199   value: true
13200   mirror: always
13202 # The maximum count that we allow socket prrocess to crash. If this count is
13203 # reached, we won't use networking over socket process.
13204 - name: network.max_socket_process_failed_count
13205   type: RelaxedAtomicUint32
13206   value: 1
13207   mirror: always
13209 - name: network.allow_redirect_to_data
13210   type: RelaxedAtomicBool
13211   value: false
13212   mirror: always
13214 - name: network.allow_raw_sockets_in_content_processes
13215   type: bool
13216   value: false
13217   mirror: once
13219 - name: network.allow_large_stack_size_for_socket_thread
13220   type: RelaxedAtomicBool
13221   value: true
13222   mirror: always
13224 # WebTransport
13225 - name: network.webtransport.enabled
13226   type: RelaxedAtomicBool
13227   value: true
13228   mirror: always
13230 # WebTransport Datagram support
13231 - name: network.webtransport.datagrams.enabled
13232   type: RelaxedAtomicBool
13233   value: true
13234   mirror: always
13236 # WebTransport Datagram size
13237 - name: network.webtransport.datagram_size
13238   type: RelaxedAtomicUint32
13239   value: 1200
13240   mirror: always
13242 # WebTransport Redirect support
13243 - name: network.webtransport.redirect.enabled
13244   type: RelaxedAtomicBool
13245   value: false
13246   mirror: always
13248 # Wifi-scan polling period, in ms, when on a mobile network.
13249 # A value of 0 indicates that no polling should be done.
13250 - name: network.wifi.scanning_period
13251   type: RelaxedAtomicUint32
13252   value: 60000
13253   mirror: always
13255 # When the Access-Control-Allow-Headers is wildcard (*), whether to allow
13256 # CORS-protected requests with the Authorization request header.
13257 - name: network.cors_preflight.authorization_covered_by_wildcard
13258   type: bool
13259   value: true
13260   mirror: always
13262 # Inner schemes that are allowed to display application/http-index-format.
13263 # Set to * to allow all schemes.
13264 - name: network.http_index_format.allowed_schemes
13265   type: String
13266   value: "file,moz-gio"
13267   mirror: never
13270 #---------------------------------------------------------------------------
13271 # Prefs starting with "nglayout."
13272 #---------------------------------------------------------------------------
13274 # Enable/disable display list invalidation logging --- useful for debugging.
13275 - name: nglayout.debug.invalidation
13276   type: bool
13277   value: false
13278   mirror: always
13280 - name: nglayout.debug.disable_xul_cache
13281   type: bool
13282   value: false
13283   mirror: always
13285 - name: nglayout.initialpaint.delay
13286   type: int32_t
13287   value: 5
13288   mirror: always
13290 - name: nglayout.initialpaint.delay_in_oopif
13291   type: int32_t
13292   value: 5
13293   mirror: always
13295 #---------------------------------------------------------------------------
13296 # Prefs starting with "page_load."
13297 #---------------------------------------------------------------------------
13299 # Time in milliseconds during which certain tasks are deprioritized during
13300 # page load.
13301 - name: page_load.deprioritization_period
13302   type: RelaxedAtomicUint32
13303   value: 5000
13304   mirror: always
13306 #---------------------------------------------------------------------------
13307 # Prefs starting with "pdfjs."
13308 #---------------------------------------------------------------------------
13310 - name: pdfjs.disabled
13311   type: bool
13312   value: false
13313   mirror: always
13315 #---------------------------------------------------------------------------
13316 # Prefs starting with "permissions."
13317 #---------------------------------------------------------------------------
13319 # 1-Accept, 2-Deny, Any other value: Accept
13320 - name: permissions.default.image
13321   type: RelaxedAtomicUint32
13322   value: 1
13323   mirror: always
13325 - name: permissions.default.screen-wake-lock
13326   type: RelaxedAtomicUint32
13327   value: 1
13328   mirror: always
13330 - name: permissions.isolateBy.userContext
13331   type: RelaxedAtomicBool
13332   value: false
13333   mirror: always
13335 - name: permissions.isolateBy.privateBrowsing
13336   type: RelaxedAtomicBool
13337   value: true
13338   mirror: always
13340 #---------------------------------------------------------------------------
13341 # Prefs starting with "places."
13342 #---------------------------------------------------------------------------
13344 # Whether pages alternative frecency is enabled. This and the following related
13345 # prefs only apply at restart.
13346 - name: places.frecency.pages.alternative.featureGate
13347   type: bool
13348   value: false
13349   mirror: once
13351 - name: places.frecency.pages.alternative.highWeight
13352   type: uint32_t
13353   value: 100
13354   mirror: once
13356 - name: places.frecency.pages.alternative.mediumWeight
13357   type: uint32_t
13358   value: 50
13359   mirror: once
13361 - name: places.frecency.pages.alternative.lowWeight
13362   type: uint32_t
13363   value: 20
13364   mirror: once
13366 - name: places.frecency.pages.alternative.halfLifeDays
13367   type: uint32_t
13368   value: 30
13369   mirror: once
13371 - name: places.frecency.pages.alternative.numSampledVisits
13372   type: uint32_t
13373   value: 10
13374   mirror: once
13376 #---------------------------------------------------------------------------
13377 # Prefs starting with "plain_text."
13378 #---------------------------------------------------------------------------
13380 # When false, text in plaintext documents does not wrap long lines.
13381 - name: plain_text.wrap_long_lines
13382   type: bool
13383   value: true
13384   mirror: always
13386 #---------------------------------------------------------------------------
13387 # Prefs starting with "preferences."
13388 #---------------------------------------------------------------------------
13390 - name: preferences.allow.omt-write
13391   type: bool
13392   value: true
13393   mirror: never
13395 #ifdef DEBUG
13396   # If set to true, setting a Preference matched to a `Once` StaticPref will
13397   # assert that the value matches. Such assertion being broken is a clear flag
13398   # that the Once policy shouldn't be used.
13399 -   name: preferences.check.once.policy
13400     type: bool
13401     value: false
13402     mirror: always
13404   # If set to true, StaticPrefs Once policy check will be skipped during
13405   # automation regression test. Use with care. This pref must be set back to
13406   # false as soon as specific test has completed.
13407 -   name: preferences.force-disable.check.once.policy
13408     type: bool
13409     value: false
13410     mirror: always
13411 #endif
13413 #---------------------------------------------------------------------------
13414 # Prefs starting with "print."
13415 #---------------------------------------------------------------------------
13417 # Variation fonts can't always be embedded in certain output formats
13418 # such as PDF. To work around this, draw the variation fonts using
13419 # paths instead of using font embedding.
13420 - name: print.font-variations-as-paths
13421   type: RelaxedAtomicBool
13422   value: true
13423   mirror: always
13425 # Whether we always print silently (without a print dialog).
13426 - name: print.always_print_silent
13427   type: RelaxedAtomicBool
13428   value: false
13429   mirror: always
13431 # Whether we attempt to generate links in Save As PDF output.
13432 - name: print.save_as_pdf.links.enabled
13433   type: RelaxedAtomicBool
13434   value: true
13435   mirror: always
13437 # Whether we attempt to generate and use document-internal PDF destinations.
13438 # This currently sometimes results in an internal cairo error, see bug 1725743;
13439 # disabled by default until that is resolved.
13440 - name: print.save_as_pdf.internal_destinations.enabled
13441   type: RelaxedAtomicBool
13442   value: false
13443   mirror: always
13445 # Whether we use the CSS @page size as the paper size in PDF output.
13446 - name: print.save_as_pdf.use_page_rule_size_as_paper_size.enabled
13447   type: RelaxedAtomicBool
13448   value: @IS_NOT_ANDROID@
13449   mirror: always
13451 # The default DPI for printing.
13453 # For PDF-based output, DPI should ideally be irrelevant, but in fact it is not
13454 # for multiple reasons:
13456 #  * Layout code that tries to respect device pixels (e.g. for snapping glyph
13457 #    positions and baselines, and especially for the "GDI Classic"
13458 #    rendering-mode threshold for certain fonts).
13460 #  * The limitations of the PDF format mean that we can't natively represent
13461 #    certain effects, such as filters, in PDF output, so we need to rasterize
13462 #    the parts of the document with these applied.
13464 #  * Other rasterized things like images and such are also affected by DPI
13465 #    (both in the output, and the images we select via srcset, for example).
13467 # Therefore, using a high DPI is preferable. For now, we use 144dpi to match
13468 # physical printer output on Windows, but higher (e.g. 300dpi) might be better,
13469 # but only if it does not lead to issues such as excessive memory use.
13470 - name: print.default_dpi
13471   type: float
13472   value: 144.0f
13473   mirror: always
13475 # Whether support for monochrome printing is enabled for CUPS.
13476 - name: print.cups.monochrome.enabled
13477   type: RelaxedAtomicBool
13478   value: true
13479   mirror: always
13481 # Disabling this will no-op window.print()
13482 - name: print.enabled
13483   type: RelaxedAtomicBool
13484   value: true
13485   mirror: always
13487 #---------------------------------------------------------------------------
13488 # Prefs starting with "privacy."
13489 #---------------------------------------------------------------------------
13491 # Annotate trackers using the strict list. If set to false, the basic list will
13492 # be used instead.
13493 - name: privacy.annotate_channels.strict_list.enabled
13494   type: bool
13495   value: @IS_EARLY_BETA_OR_EARLIER@
13496   mirror: always
13498 # Annotate trackers using the strict list in the private browsing mode. If set
13499 # to false, the basic list will be used instead.
13500 - name: privacy.annotate_channels.strict_list.pbmode.enabled
13501   type: bool
13502   value: true
13503   mirror: always
13505 # First Party Isolation (double keying), disabled by default.
13506 - name: privacy.firstparty.isolate
13507   type: RelaxedAtomicBool
13508   value: false
13509   mirror: always
13511 # If false, two windows in the same domain with different first party domains
13512 # (top level URLs) can access resources through window.opener. This pref is
13513 # effective only when "privacy.firstparty.isolate" is true.
13514 - name: privacy.firstparty.isolate.restrict_opener_access
13515   type: RelaxedAtomicBool
13516   value: true
13517   mirror: always
13519 - name: privacy.firstparty.isolate.block_post_message
13520   type: RelaxedAtomicBool
13521   value: false
13522   mirror: always
13524 - name: privacy.firstparty.isolate.use_site
13525   type: RelaxedAtomicBool
13526   value: false
13527   mirror: always
13529 # Enforce tracking protection in all modes.
13530 - name: privacy.trackingprotection.enabled
13531   type: bool
13532   value: false
13533   mirror: always
13535 # Enforce tracking protection in Private Browsing mode.
13536 - name: privacy.trackingprotection.pbmode.enabled
13537   type: bool
13538   value: true
13539   mirror: always
13541 # Annotate channels based on the tracking protection list in all modes
13542 - name: privacy.trackingprotection.annotate_channels
13543   type: bool
13544   value: true
13545   mirror: always
13547 # Block 3rd party fingerprinting resources.
13548 - name: privacy.trackingprotection.fingerprinting.enabled
13549   type: bool
13550   value: false
13551   mirror: always
13553 # Block 3rd party cryptomining resources.
13554 - name: privacy.trackingprotection.cryptomining.enabled
13555   type: bool
13556   value: false
13557   mirror: always
13559 # Block 3rd party socialtracking resources.
13560 - name: privacy.trackingprotection.socialtracking.enabled
13561   type: bool
13562   value: false
13563   mirror: always
13565 # Consider socialtracking annotation as trackers (see ETP).
13566 - name: privacy.socialtracking.block_cookies.enabled
13567   type: bool
13568   value: true
13569   mirror: always
13571 # Block 3rd party emailtracking resources in all mode.
13572 - name: privacy.trackingprotection.emailtracking.enabled
13573   type: bool
13574   value: false
13575   mirror: always
13577 # Block 3rd party emailtracking resources in Private Browsing mode.
13578 - name: privacy.trackingprotection.emailtracking.pbmode.enabled
13579   type: bool
13580   value: true
13581   mirror: always
13583 # Collecting 3rd party emailtracking telemetry.
13584 - name: privacy.trackingprotection.emailtracking.data_collection.enabled
13585   type: bool
13586   value: true
13587   mirror: always
13589 - name: privacy.trackingprotection.testing.report_blocked_node
13590   type: RelaxedAtomicBool
13591   value: false
13592   mirror: always
13594 # Whether to spoof user locale to English (used as part of Resist
13595 # Fingerprinting).
13596 # 0 - will prompt
13597 # 1 - don't spoof
13598 # 2 - spoof
13599 - name: privacy.spoof_english
13600   type: RelaxedAtomicUint32
13601   value: 0
13602   mirror: always
13604 # Send "do not track" HTTP header, disabled by default.
13605 - name: privacy.donottrackheader.enabled
13606   type: bool
13607   value: false
13608   mirror: always
13610 # Potentially send "global privacy control" HTTP header and set navigator
13611 # property accordingly. Communicates user's desire to opt-out/in of
13612 # websites or services selling or sharing the user's information, false by
13613 # default.
13614 # true - Send the header with a value of 1 to indicate opting-out
13615 # false - Do not send header to indicate opting-in
13616 - name: privacy.globalprivacycontrol.enabled
13617   type: RelaxedAtomicBool
13618   value: false
13619   mirror: always
13621 # Controls whether or not GPC signals are sent in private browsing mode.
13622 # This can be overridden by `privacy.globalprivacycontrol.enabled` as true.
13623 - name: privacy.globalprivacycontrol.pbmode.enabled
13624   type: RelaxedAtomicBool
13625   value: false
13626   mirror: always
13628 # Controls whether or not GPC signals are sent. Meant to act as a third option
13629 # of 'undecided' by leaving the navigator property undefined and not attaching
13630 # the Sec-GPC HTTP header.
13631 - name: privacy.globalprivacycontrol.functionality.enabled
13632   type: RelaxedAtomicBool
13633   value: false
13634   mirror: always
13636 # Lower the priority of network loads for resources on the tracking protection
13637 # list.  Note that this requires the
13638 # privacy.trackingprotection.annotate_channels pref to be on in order to have
13639 # any effect.
13640 - name: privacy.trackingprotection.lower_network_priority
13641   type: bool
13642   value: @IS_NIGHTLY_BUILD@
13643   mirror: always
13645 # A subset of Resist Fingerprinting protections focused specifically on timers.
13646 # This affects the Animation API, the performance APIs, Date.getTime,
13647 # Event.timestamp, File.lastModified, audioContext.currentTime,
13648 # canvas.captureStream.currentTime.
13649 - name: privacy.reduceTimerPrecision
13650   type: RelaxedAtomicBool
13651   value: true
13652   mirror: always
13654 # If privacy.reduceTimerPrecision is false, this pref controls whether or not
13655 # to clamp all timers at a fixed 20 microsconds. It should always be enabled,
13656 # and is only specified as a pref to enable an emergency disabling in the event
13657 # of catastrophic failure.
13658 - name: privacy.reduceTimerPrecision.unconditional
13659   type: RelaxedAtomicBool
13660   value: true
13661   mirror: always
13663 # The resistFingerprinting variables are marked with 'Relaxed' memory ordering.
13664 # We don't particurally care that threads have a percently consistent view of
13665 # the values of these prefs. They are not expected to change often, and having
13666 # an outdated view is not particurally harmful. They will eventually become
13667 # consistent.
13669 # The variables will, however, be read often (specifically .microseconds on
13670 # each timer rounding) so performance is important.
13671 - name: privacy.resistFingerprinting
13672   type: RelaxedAtomicBool
13673   value: false
13674   mirror: always
13675   do_not_use_directly: true
13677 # When the .pbmode pref is on, RFP or FPP will be enabled in PBM
13678 # When the non-pbm pref is on, they will be enabled in PBM and non-PBM
13679 - name: privacy.resistFingerprinting.pbmode
13680   type: RelaxedAtomicBool
13681   value: false
13682   mirror: always
13683   do_not_use_directly: true
13685 # privacy.fingerprintingProtection enables a set of fingerprinting protections
13686 # designed to minimize breakage while maximizing protection.
13687 - name: privacy.fingerprintingProtection
13688   type: RelaxedAtomicBool
13689   value: false
13690   mirror: always
13691   do_not_use_directly: true
13693 - name: privacy.fingerprintingProtection.pbmode
13694   type: RelaxedAtomicBool
13695   value: false
13696   mirror: always
13697   do_not_use_directly: true
13699 # We automatically decline canvas permission requests if they are not initiated
13700 # from user input. Just in case that breaks something, we allow the user to
13701 # revert this behavior with this obscure pref. We do not intend to support this
13702 # long term. If you do set it, to work around some broken website, please file
13703 # a bug with information so we can understand why it is needed.
13704 - name: privacy.resistFingerprinting.autoDeclineNoUserInputCanvasPrompts
13705   type: bool
13706   value: true
13707   mirror: always
13709 # This pref can be used to disable mozAddonManager entirely for fingerprinting
13710 # reasons. Someone like Tor browser will use this pref.
13711 # NOTE: We'd like this to be a "hidden" pref once StaticPrefs supports it.
13712 - name: privacy.resistFingerprinting.block_mozAddonManager
13713   type: RelaxedAtomicBool
13714   value: false
13715   mirror: always
13717 # Whether canvas extraction should result in random data. If false, canvas
13718 # extraction results in all-white, opaque pixel data.
13719 - name: privacy.resistFingerprinting.randomDataOnCanvasExtract
13720   type: RelaxedAtomicBool
13721   value: true
13722   mirror: always
13724 # The log level for browser console messages logged in RFPHelper.sys.mjs. Change to
13725 # 'All' and restart to see the messages.
13726 - name: privacy.resistFingerprinting.jsmloglevel
13727   type: String
13728   value: "Warn"
13729   mirror: never
13731 # Enable jittering the clock one precision value forward.
13732 - name: privacy.resistFingerprinting.reduceTimerPrecision.jitter
13733   type: RelaxedAtomicBool
13734   value: true
13735   mirror: always
13737 # Dynamically tune the resolution of the timer reduction for
13738 # `privacy.reduceTimerPrecision` and `privacy.resistFingerprinting`.
13739 - name: privacy.resistFingerprinting.reduceTimerPrecision.microseconds
13740   type: RelaxedAtomicUint32
13741   value: 1000
13742   mirror: always
13744 - name: privacy.resistFingerprinting.target_video_res
13745   type: uint32_t
13746   value: 480
13747   mirror: always
13749 # Enable resetting the fingerprinting randomization key daily for normal windwos.
13750 - name: privacy.resistFingerprinting.randomization.daily_reset.enabled
13751   type: RelaxedAtomicBool
13752   value: false
13753   mirror: always
13755 # Enable resetting the fingerprinting randomization key daily for private windwos.
13756 - name: privacy.resistFingerprinting.randomization.daily_reset.private.enabled
13757   type: RelaxedAtomicBool
13758   value: false
13759   mirror: always
13762 # Anti-tracking permission expiration.
13763 - name: privacy.restrict3rdpartystorage.expiration
13764   type: uint32_t
13765   value: 2592000   # 30 days (in seconds)
13766   mirror: always
13768 # Report Anti-tracking warnings to console lazily
13769 - name: privacy.restrict3rdpartystorage.console.lazy
13770   type: bool
13771   value: true
13772   mirror: always
13774 # Enable the heuristic to allow storage access for windows opened using window.open() after user interaction
13775 - name: privacy.restrict3rdpartystorage.heuristic.opened_window_after_interaction
13776   type: bool
13777   value: true
13778   mirror: always
13780 # Enable the heuristic to allow storage access for windows opened using window.open()
13781 - name: privacy.restrict3rdpartystorage.heuristic.window_open
13782   type: bool
13783   value: true
13784   mirror: always
13786 # Enable the heuristic to allow storage access for windows opened using window.open()
13787 - name: privacy.restrict3rdpartystorage.heuristic.redirect
13788   type: bool
13789   value: true
13790   mirror: always
13792 # Anti-tracking permission expiration.
13793 - name: privacy.restrict3rdpartystorage.expiration_redirect
13794   type: uint32_t
13795   value: 2592000   # 30 days (in seconds)
13796   mirror: always
13798 # Anti-tracking user-interaction expiration.
13799 - name: privacy.userInteraction.expiration
13800   type: uint32_t
13801   value: 3888000   # 45 days (in seconds)
13802   mirror: always
13804 # Anti-tracking user-interaction document interval.
13805 - name: privacy.userInteraction.document.interval
13806   type: uint32_t
13807   value: 1800   # 30 minutes (in seconds)
13808   mirror: always
13810 # Enable Anti-tracking testing. When it enables, it will notify the observers
13811 # when user-interaction permission or storage access permission is added. This
13812 # is for testing only.
13813 - name: privacy.antitracking.testing
13814   type: bool
13815   value: false
13816   mirror: always
13818 # Controls the anti-tracking webcompat features. This includes:
13819 # - All URL-Classifier and state partitioning skip lists (prefs and remote
13820 #   settings)
13821 # - Storage access heuristics (opener, redirect, etc.)
13822 # - StorageAccessAPI automatic grants (skips the prompt)
13823 # - Allowing specific tracking channels on user opt-in (e.g. facebook login
13824 #   shim).
13825 - name: privacy.antitracking.enableWebcompat
13826   type: RelaxedAtomicBool
13827   value: true
13828   mirror: always
13830 # Enable the heuristic to allow storage access for recent visited pages
13831 - name: privacy.restrict3rdpartystorage.heuristic.recently_visited
13832   type: bool
13833   value: true
13834   mirror: always
13836 # Valid time gap since last visit
13837 - name: privacy.restrict3rdpartystorage.heuristic.recently_visited_time
13838   type: uint32_t
13839   value: 600    # 10 minutes
13840   mirror: always
13842 # Recent visited pages redirection permission expiration.
13843 - name: privacy.restrict3rdpartystorage.expiration_visited
13844   type: uint32_t
13845   value: 2592000   # 30 days (in seconds)
13846   mirror: always
13848 # Maximum client-side cookie life-time cap. Measured in seconds, set to 0 to
13849 # disable.
13850 - name: privacy.documentCookies.maxage
13851   type: uint32_t
13852   value: 0
13853   mirror: always
13855 - name: privacy.window.maxInnerWidth
13856   type: int32_t
13857   value: 1000
13858   mirror: always
13860 - name: privacy.window.maxInnerHeight
13861   type: int32_t
13862   value: 1000
13863   mirror: always
13865 - name: privacy.sanitize.sanitizeOnShutdown
13866   type: RelaxedAtomicBool
13867   value: false
13868   mirror: always
13870 - name: privacy.clearOnShutdown.cache
13871   type: RelaxedAtomicBool
13872   value: false
13873   mirror: always
13875 - name: privacy.dynamic_firstparty.limitForeign
13876   type: RelaxedAtomicBool
13877   value: false
13878   mirror: always
13880 - name: privacy.dynamic_firstparty.use_site
13881   type: RelaxedAtomicBool
13882   value: true
13883   mirror: always
13885 - name: privacy.partition.network_state
13886   type: RelaxedAtomicBool
13887   value: true
13888   mirror: always
13890 # Partition the OCSP cache by the partitionKey.
13891 - name: privacy.partition.network_state.ocsp_cache
13892   type: RelaxedAtomicBool
13893   value: true
13894   mirror: always
13896 # Partition the OCSP cache by the partitionKey for private browsing mode.
13897 - name: privacy.partition.network_state.ocsp_cache.pbmode
13898   type: RelaxedAtomicBool
13899   value: true
13900   mirror: always
13902 # Always partition web storage APIs except cookies.
13903 - name: privacy.partition.always_partition_third_party_non_cookie_storage
13904   type: RelaxedAtomicBool
13905   value: true
13906   mirror: always
13908 # Exclude session storage from the above preference.
13909 - name: privacy.partition.always_partition_third_party_non_cookie_storage.exempt_sessionstorage
13910   type: RelaxedAtomicBool
13911   value: false
13912   mirror: always
13914 - name: privacy.partition.bloburl_per_partition_key
13915   type: bool
13916   value: true
13917   mirror: always
13919 - name: privacy.window.name.update.enabled
13920   type: bool
13921   value: true
13922   mirror: always
13924 # By default, the network state isolation is not active when there is a proxy
13925 # setting. This pref forces the network isolation even in these scenarios.
13926 - name: privacy.partition.network_state.connection_with_proxy
13927   type: bool
13928   value: false
13929   mirror: always
13931 # Partition the service workers unconditionally when dFPI is enabled.
13932 - name: privacy.partition.serviceWorkers
13933   type: RelaxedAtomicBool
13934   value: true
13935   mirror: always
13937 # Enables / disables the strip on share feature which strips query parameters
13938 # when copying/sharing in-content links or from the url bar.
13939 - name: privacy.query_stripping.strip_on_share.enabled
13940   type: RelaxedAtomicBool
13941   value: false
13942   mirror: always
13944 # Enables / disables the URL query string stripping in normal browsing mode
13945 # which strips query parameters from loading URIs to prevent bounce (redirect)
13946 # tracking.
13947 - name: privacy.query_stripping.enabled
13948   type: RelaxedAtomicBool
13949   value: false
13950   mirror: always
13952 # Same as the pref above, but controls query stripping for private browsing
13953 # mode.
13954 - name: privacy.query_stripping.enabled.pbmode
13955   type: RelaxedAtomicBool
13956   value: false
13957   mirror: always
13959 # The list which contains query parameters that are needed to be stripped from
13960 # URIs. The query parameters are separated by a space.
13961 - name: privacy.query_stripping.strip_list
13962   type: String
13963   value: ""
13964   mirror: never
13966 # This controls if we will do the query string stripping for redirects.
13967 - name: privacy.query_stripping.redirect
13968   type: bool
13969   value: true
13970   mirror: always
13972 # the list which contains sites where should exempt from query stripping
13973 - name: privacy.query_stripping.allow_list
13974   type: String
13975   value: ""
13976   mirror: never
13978 # Main pref to enable / disable the feature.
13979 - name: privacy.bounceTrackingProtection.enabled
13980   type: bool
13981   value: false
13982   mirror: once
13984 # How long to wait for a client redirect after a navigation ends.
13985 - name: privacy.bounceTrackingProtection.clientBounceDetectionTimerPeriodMS
13986   type: uint32_t
13987   value: 10000
13988   mirror: always
13990 # How long user activations will protect a site host from storage deletion.
13991 - name: privacy.bounceTrackingProtection.bounceTrackingActivationLifetimeSec
13992   type: uint32_t
13993   value: 3888000
13994   mirror: always
13996 # How long to wait for interaction after a possible bounce tracking event before
13997 # deleting a site host's storage.
13998 - name: privacy.bounceTrackingProtection.bounceTrackingGracePeriodSec
13999   type: uint32_t
14000   value: 3600
14001   mirror: always
14003 # How often to run the bounce tracking timer algorithm  which purges bounce
14004 # tracker state periodically. Set to 0 to disable purging.
14005 - name: privacy.bounceTrackingProtection.bounceTrackingPurgeTimerPeriodSec
14006   type: uint32_t
14007   value: 3600
14008   mirror: always
14010 # Whether only bounces that access storage should be considered trackers.
14011 - name: privacy.bounceTrackingProtection.requireStatefulBounces
14012   type: bool
14013   value: false
14014   mirror: always
14016 # To be used in test environments to enable observer messages.
14017 - name: privacy.bounceTrackingProtection.enableTestMode
14018   type: bool
14019   value: false
14020   mirror: always
14022 #---------------------------------------------------------------------------
14023 # Prefs starting with "prompts."
14024 #---------------------------------------------------------------------------
14026 # Prompt modal type prefs
14027 # See nsIPromptService::MODAL_TYPE fields for possible values.
14029 # Insecure form submit warning.
14030 - name: prompts.modalType.insecureFormSubmit
14031   type: int32_t
14032   value: 2
14033   mirror: always
14035 # nsHttpChannelAuthProvider#ConfirmAuth anti-phishing prompts.
14036 - name: prompts.modalType.confirmAuth
14037   type: int32_t
14038   value: 2
14039   mirror: always
14041 #---------------------------------------------------------------------------
14042 # Prefs starting with "security."
14043 #---------------------------------------------------------------------------
14045 # Mochitests that need to load resource:// URIs not declared content-accessible
14046 # in manifests should set this pref.
14047 - name: security.all_resource_uri_content_accessible
14048   type: bool
14049   value: false
14050   mirror: always
14052 - name: security.bad_cert_domain_error.url_fix_enabled
14053   type: bool
14054   value: true
14055   mirror: always
14057 - name: security.csp.reporting.script-sample.max-length
14058   type: int32_t
14059   value: 40
14060   mirror: always
14062 - name: security.csp.truncate_blocked_uri_for_frame_navigations
14063   type: bool
14064   value: true
14065   mirror: always
14067 # Limit the number of CSP reports that are send in a specific timespan.
14068 - name: security.csp.reporting.limit.count
14069   type: uint32_t
14070   value: 100
14071   mirror: always
14073 # Time span in seconds for reporting limit.
14074 - name: security.csp.reporting.limit.timespan
14075   type: uint32_t
14076   value: 2
14077   mirror: always
14079 # If true, all toplevel data: URI navigations will be blocked.
14080 # Please note that manually entering a data: URI in the
14081 # URL-Bar will not be blocked when flipping this pref.
14082 - name: security.data_uri.block_toplevel_data_uri_navigations
14083   type: bool
14084   value: true
14085   mirror: always
14087 # Whether window A is allowed to navigate cross-origin window B (that is not
14088 # a descendant frame of A) to a URI that loads externally.
14089 - name: security.allow_disjointed_external_uri_loads
14090   type: bool
14091   value: false
14092   mirror: always
14094 # Allowed by default so it doesn't affect Thunderbird/SeaMonkey, but
14095 # not allowed for Firefox Desktop in firefox.js
14096 - name: security.allow_parent_unrestricted_js_loads
14097   type: RelaxedAtomicBool
14098   value: true
14099   mirror: always
14101 # Allowed by default so it doesn't affect Thunderbird/SeaMonkey, but
14102 # not allowed for Firefox Desktop in firefox.js
14103 - name: security.allow_eval_with_system_principal
14104   type: RelaxedAtomicBool
14105   value: true
14106   mirror: always
14108 # Allowed by default so it doesn't affect Thunderbird/SeaMonkey, but
14109 # not allowed for Firefox Desktop in firefox.js
14110 - name: security.allow_eval_in_parent_process
14111   type: RelaxedAtomicBool
14112   value: true
14113   mirror: always
14115 # Disallowed by default, ensure not disallowed content is loaded in the parent
14116 # process.
14117 - name: security.allow_unsafe_parent_loads
14118   type: bool
14119   value: false
14120   mirror: always
14122 # Pref to block mixed scripts (fonts, plugin content, scripts, stylesheets,
14123 # iframes, websockets, XHR).
14124 - name: security.mixed_content.block_active_content
14125   type: bool
14126   value: @IS_ANDROID@
14127   mirror: always
14129 # Pref to block sub requests that happen within an object.
14130 - name: security.mixed_content.block_object_subrequest
14131   type: bool
14132   value: false
14133   mirror: always
14135 # Pref for mixed display content blocking (images, audio, video).
14136 - name: security.mixed_content.block_display_content
14137   type: bool
14138   value: false
14139   mirror: always
14141 # Prerequisite pref for mixed display content upgrading (images, audio, video).
14142 - name: security.mixed_content.upgrade_display_content
14143   type: bool
14144   value: @IS_NIGHTLY_BUILD@
14145   mirror: always
14147 # Upgrade images when the upgrading is enabled.
14148 - name: security.mixed_content.upgrade_display_content.image
14149   type: bool
14150   value: @IS_NIGHTLY_BUILD@
14151   mirror: always
14153 # Upgrade audio when the upgrading is enabled.
14154 - name: security.mixed_content.upgrade_display_content.audio
14155   type: bool
14156   value: true
14157   mirror: always
14159 # Upgrade videos when the upgrading is enabled.
14160 - name: security.mixed_content.upgrade_display_content.video
14161   type: bool
14162   value: true
14163   mirror: always
14165 # Whether strict file origin policy is in effect. "False" is traditional.
14166 - name: security.fileuri.strict_origin_policy
14167   type: RelaxedAtomicBool
14168   value: true
14169   mirror: always
14171 # The level to which we sandbox the content process. firefox.js sets the
14172 # default to different values on a per-OS basis, and has documentation
14173 # on what the defaults are and what the numbers mean.
14174 - name: security.sandbox.content.level
14175   type: int32_t
14176   value: 0
14177   mirror: always
14178   do_not_use_directly: true # Consumers should use SandboxSettings to ask.
14180 - name: security.sandbox.socket.process.level
14181   type: int32_t
14182   value: 0
14183   mirror: always
14184   do_not_use_directly: true # Consumers should use SandboxSettings to ask.
14186 # This controls the strength of the Windows GPU process sandbox.  Changes
14187 # will require restart.
14188 # For information on what the level number means, see
14189 # SetSecurityLevelForGPUProcess() in
14190 # security/sandbox/win/src/sandboxbroker/sandboxBroker.cpp
14191 - name: security.sandbox.gpu.level
14192   type: int32_t
14193 #if defined(XP_WIN)
14194   value: 1
14195 #else
14196   value: 0
14197 #endif
14198   mirror: always
14200 # Enrollment preferences for the win32k experiment, set and managed by Normandy
14201 - name: security.sandbox.content.win32k-experiment.enrollmentStatus
14202   type: uint32_t
14203   value: 0
14204   mirror: never
14206 - name: security.sandbox.content.win32k-experiment.startupEnrollmentStatus
14207   type: uint32_t
14208   value: 0
14209   mirror: never
14211 #if defined(XP_WIN) && defined(MOZ_SANDBOX)
14213   # Whether win32k is disabled for content processes.
14214   # true means win32k system calls are not permitted.
14215 -   name: security.sandbox.content.win32k-disable
14216     type: RelaxedAtomicBool
14217     value: true
14218     mirror: always
14220   # Note: win32k is currently _not_ disabled for GMP due to intermittent test
14221   # failures, where the GMP process fails very early. See bug 1449348.
14222 -   name: security.sandbox.gmp.win32k-disable
14223     type: RelaxedAtomicBool
14224     value: false
14225     mirror: always
14227   # Whether win32k is disabled for socket processes.
14228   # true means win32k system calls are not permitted.
14229 -   name: security.sandbox.socket.win32k-disable
14230     type: RelaxedAtomicBool
14231     value: true
14232     mirror: always
14234   # Whether CET User Shadow Stack compatible modules only is enabled for the
14235   # relevant process type.
14236 -   name: security.sandbox.content.shadow-stack.enabled
14237     type: RelaxedAtomicBool
14238     value: false
14239     mirror: always
14241 -   name: security.sandbox.rdd.shadow-stack.enabled
14242     type: RelaxedAtomicBool
14243     value: true
14244     mirror: always
14246 -   name: security.sandbox.socket.shadow-stack.enabled
14247     type: RelaxedAtomicBool
14248     value: true
14249     mirror: always
14251 -   name: security.sandbox.gpu.shadow-stack.enabled
14252     type: RelaxedAtomicBool
14253     value: true
14254     mirror: always
14256 -   name: security.sandbox.gmp.shadow-stack.enabled
14257     type: RelaxedAtomicBool
14258     value: true
14259     mirror: always
14261   # Whether a Low Privilege AppContainer (LPAC) is enabled for the relevant
14262   # process type.
14264 #if defined(MOZ_WMF_MEDIA_ENGINE)
14265 -   name: security.sandbox.utility-wmf-cdm.lpac.enabled
14266     type: RelaxedAtomicBool
14267     value: true
14268     mirror: always
14269 #endif
14271   # Whether Arbitrary Code Guard is enabled for the RDD process.
14272 -   name: security.sandbox.rdd.acg.enabled
14273     type: RelaxedAtomicBool
14274     value: true
14275     mirror: always
14277 #ifdef MOZ_WMF
14278   # Whether Arbitrary Code Guard is enabled for the utility WMF audio decoder
14279   # process.
14281 -   name: security.sandbox.utility-wmf.acg.enabled
14282     type: RelaxedAtomicBool
14283     value: true
14284     mirror: always
14285 #endif  // MOZ_WMF
14287   # This controls the depth of stack trace that is logged when Windows sandbox
14288   # logging is turned on. This is only currently available for the content
14289   # process because the only other sandbox (for GMP) has too strict a policy to
14290   # allow stack tracing. This does not require a restart to take effect.
14291 -   name: security.sandbox.windows.log.stackTraceDepth
14292     type: RelaxedAtomicUint32
14293     value: 0
14294     mirror: always
14295 #endif
14297 #if defined(XP_LINUX) && defined(MOZ_SANDBOX)
14298   # Run content processes in headless mode and disallow
14299   # connections to the X server.  Requires:
14300   # * `webgl.out-of-process` (or else WebGL breaks)
14301   # * `widget.non-native-theme.enabled` (scrollbars & form controls)
14302   # Changing it requires a restart because sandbox policy information
14303   # dependent on it is cached.  See bug 1640345 for details.
14304 - name: security.sandbox.content.headless
14305   type: bool
14306   value: true
14307   mirror: once
14308 #endif
14310 # Pref to show warning when submitting from secure to insecure.
14311 - name: security.warn_submit_secure_to_insecure
14312   type: bool
14313   value: true
14314   mirror: always
14316 # Hardware Origin-bound Second Factor Support
14317 - name: security.webauth.webauthn
14318   type: bool
14319   value: true
14320   mirror: always
14322 # WebAuthn CTAP2 support
14323 - name: security.webauthn.ctap2
14324   type: RelaxedAtomicBool
14325   value: true
14326   mirror: always
14327   rust: true
14329 # WebAuthn JSON serialization methods
14330 - name: security.webauthn.enable_json_serialization_methods
14331   type: RelaxedAtomicBool
14332   value: true
14333   mirror: always
14335 # WebAuthn conditional mediation
14336 - name: security.webauthn.enable_conditional_mediation
14337   type: RelaxedAtomicBool
14338   value: true
14339   mirror: always
14341 # Dispatch WebAuthn requests to virtual authenticators (mutually exclusive
14342 # with and webauthn_enable_usbtoken)
14343 - name: security.webauth.webauthn_enable_softtoken
14344   type: RelaxedAtomicBool
14345   value: false
14346   mirror: always
14347   rust: true
14349 # residentKey support when using Android platform API
14350 - name: security.webauthn.webauthn_enable_android_fido2.residentkey
14351   type: RelaxedAtomicBool
14352   value: false
14353   mirror: always
14355 # Dispatch WebAuthn requests to the macOS platform API
14356 - name: security.webauthn.enable_macos_passkeys
14357   type: RelaxedAtomicBool
14358   value: true
14359   mirror: always
14361 # Dispatch WebAuthn requests to authenticator-rs
14362 - name: security.webauth.webauthn_enable_usbtoken
14363   type: RelaxedAtomicBool
14364   value: @IS_NOT_ANDROID@
14365   mirror: always
14366   rust: true
14368 # Skip direct attestation consent prompts (for tests).
14369 - name: security.webauth.webauthn_testing_allow_direct_attestation
14370   type: RelaxedAtomicBool
14371   value: false
14372   mirror: always
14373   rust: true
14375 # Show the Windows Passkey settings link in about:preferences. This is
14376 # set to true if we find that webauthn.dll is sufficiently recent.
14377 - name: security.webauthn.show_ms_settings_link
14378   type: RelaxedAtomicBool
14379   value: false
14380   mirror: always
14382 # Block Worker/SharedWorker scripts with wrong MIME type.
14383 - name: security.block_Worker_with_wrong_mime
14384   type: bool
14385   value: true
14386   mirror: always
14388 # Block the execution of scripts using a wrong type as defined by the file extension
14389 # (OS) mapping when loaded via the file:// protocol.
14390 - name: security.block_fileuri_script_with_wrong_mime
14391   type: bool
14392   value: false
14393   mirror: always
14395 # Cancel outgoing requests from SystemPrincipal:
14396 # but only with scheme http(s) and contentpolicytype subdocument
14397 - name: security.disallow_privileged_https_subdocuments_loads
14398   type: bool
14399   value: true
14400   mirror: always
14402 # but only with scheme data and contentpolicytype subdocument
14403 - name: security.disallow_privileged_data_subdocuments_loads
14404   type: bool
14405   value: true
14406   mirror: always
14408 # Cancel outgoing requests from SystemPrincipal:
14409 # but only with scheme http(s) and contentpolicytype stylesheet
14410 - name: security.disallow_privileged_https_stylesheet_loads
14411   type: bool
14412   value: true
14413   mirror: always
14415 # Cancel outgoing requests from SystemPrincipal:
14416 # but only with scheme http(s) and contentpolicytype script
14417 - name: security.disallow_privileged_https_script_loads
14418   type: bool
14419   value: true
14420   mirror: always
14422 # Cancel outgoing requests from SystemPrincipal:
14423 # where there is no finalURI.
14424 - name: security.disallow_privileged_no_finaluri_loads
14425   type: bool
14426   value: true
14427   mirror: always
14429 # Cancel outgoing requests from privileged about pages:
14430 # but only with scheme http(s) and contentpolicytype script
14431 - name: security.disallow_privilegedabout_remote_script_loads
14432   type: bool
14433   value: true
14434   mirror: always
14436 # Enable preloaded static key pins by default.
14437 - name: security.cert_pinning.enforcement_level
14438   type: RelaxedAtomicUint32
14439   value: 1
14440   mirror: always
14441   do_not_use_directly: true
14443 # OCSP fetching behavior:
14444 # 0: do not fetch OCSP
14445 # 1: fetch OCSP for DV and EV certificates
14446 # 2: fetch OCSP only for EV certificates
14447 - name: security.OCSP.enabled
14448   type: RelaxedAtomicUint32
14449 #ifdef ANDROID
14450   value: 2
14451 #else
14452   value: 1
14453 #endif
14454   mirror: always
14457 # Whether or not OCSP is required.
14458 # true => hard-fail (if an OCSP request times out, stop the connection)
14459 # false => soft-fail (if an OCSP request times out, continue the connection)
14460 - name: security.OCSP.require
14461   type: RelaxedAtomicBool
14462   value: false
14463   mirror: always
14465 # How many milliseconds to wait for an OCSP response before assuming it failed
14466 # (when fetching for soft-fail).
14467 - name: security.OCSP.timeoutMilliseconds.soft
14468   type: RelaxedAtomicUint32
14469 #ifdef RELEASE_OR_BETA
14470   value: 2000
14471 #else
14472   value: 1000
14473 #endif
14474   mirror: always
14476 # How many milliseconds to wait for an OCSP response before assuming it failed
14477 # (when fetching for hard-fail).
14478 - name: security.OCSP.timeoutMilliseconds.hard
14479   type: RelaxedAtomicUint32
14480   value: 10000
14481   mirror: always
14483 # Whether or not to enable OCSP must-staple (in other words, TLS-feature with
14484 # status request).
14485 - name: security.ssl.enable_ocsp_must_staple
14486   type: RelaxedAtomicBool
14487   value: true
14488   mirror: always
14490 # Whether or not to enable OCSP stapling.
14491 - name: security.ssl.enable_ocsp_stapling
14492   type: RelaxedAtomicBool
14493   value: true
14494   mirror: always
14496 # This is checked at startup to see if NSS should be initialized without the
14497 # user's certificate and key databases.
14498 - name: security.nocertdb
14499   type: bool
14500   value: false
14501   mirror: once
14503 # Whether or not to import and trust third party root certificates from the OS.
14504 - name: security.enterprise_roots.enabled
14505   type: RelaxedAtomicBool
14506   value: true
14507   mirror: always
14509 - name: security.intermediate_preloading_healer.enabled
14510   type: RelaxedAtomicBool
14511   value: @IS_NOT_ANDROID@
14512   mirror: always
14514 - name: security.intermediate_preloading_healer.timer_interval_ms
14515   type: RelaxedAtomicUint32
14516   value: 300000
14517   mirror: always
14519 # If true, attempt to load the osclientcerts PKCS#11 module at startup on a
14520 # background thread. This module allows Firefox to use client certificates
14521 # stored in OS certificate storage. Currently only available for Windows and
14522 # macOS.
14523 - name: security.osclientcerts.autoload
14524   type: RelaxedAtomicBool
14525   value: true
14526   mirror: always
14528 # If true, assume tokens accessed via osclientcerts implement RSA-PSS. If a
14529 # given token does not support RSA-PSS, users may see the error
14530 # 'SEC_ERROR_PKCS11_GENERAL_ERROR' if a server indicates it will accept an
14531 # RSA-PSS signature in the client's certificate verify message.
14532 # Setting this to false may allow such connections to succeed, if the server
14533 # also accepts RSA-PKCS1 signatures.
14534 - name: security.osclientcerts.assume_rsa_pss_support
14535   type: RelaxedAtomicBool
14536   value: true
14537   mirror: always
14539 - name: security.pki.cert_short_lifetime_in_days
14540   type: RelaxedAtomicUint32
14541   value: 10
14542   mirror: always
14544 # security.pki.netscape_step_up_policy controls how the platform handles the
14545 # id-Netscape-stepUp OID in extended key usage extensions of CA certificates.
14546 # 0: id-Netscape-stepUp is always considered equivalent to id-kp-serverAuth
14547 # 1: it is considered equivalent when the notBefore is before 23 August 2016
14548 # 2: similarly, but for 23 August 2015
14549 # 3: it is never considered equivalent
14550 - name: security.pki.netscape_step_up_policy
14551   type: RelaxedAtomicUint32
14552 #ifdef RELEASE_OR_BETA
14553   value: 1
14554 #else
14555   value: 2
14556 #endif
14557   mirror: always
14559 # Configures Certificate Transparency support mode:
14560 # 0: Fully disabled.
14561 # 1: Only collect telemetry. CT qualification checks are not performed.
14562 - name: security.pki.certificate_transparency.mode
14563   type: RelaxedAtomicUint32
14564   value: 0
14565   mirror: always
14567 # 0: Disable CRLite entirely.
14568 # 1: Consult CRLite but only collect telemetry.
14569 # 2: Consult CRLite and enforce both "Revoked" and "Not Revoked" results.
14570 # 3: Consult CRLite and enforce "Not Revoked" results, but defer to OCSP for "Revoked".
14571 - name: security.pki.crlite_mode
14572   type: RelaxedAtomicUint32
14573   value: 3
14574   mirror: always
14576 - name: security.tls.version.min
14577   type: RelaxedAtomicUint32
14578   value: 3
14579   mirror: always
14581 - name: security.tls.version.max
14582   type: RelaxedAtomicUint32
14583   value: 4
14584   mirror: always
14586 - name: security.tls.version.enable-deprecated
14587   type: RelaxedAtomicBool
14588   value: false
14589   mirror: always
14591 - name: security.tls.version.fallback-limit
14592   type: RelaxedAtomicUint32
14593   value: 4
14594   mirror: always
14596 # Turn off post-handshake authentication for TLS 1.3 by default,
14597 # until the incompatibility with HTTP/2 is resolved:
14598 # https://tools.ietf.org/html/draft-davidben-http2-tls13-00
14599 - name: security.tls.enable_post_handshake_auth
14600   type: RelaxedAtomicBool
14601   value: false
14602   mirror: always
14604 # Probability of GREASEing a TLS connection with ECH (0-100)
14605 # 0 means never GREASE, 100 means always GREASE
14606 - name: security.tls.ech.grease_probability
14607   type: RelaxedAtomicUint32
14608   value: 100
14609   mirror: always
14611 # Whether to apply ECH GREASE settings to HTTP3/QUIC connections
14612 - name: security.tls.ech.grease_http3
14613   type: RelaxedAtomicBool
14614   value: true
14615   mirror: always
14617 # Whether to retry connections without ECH Grease
14618 - name: security.tls.ech.disable_grease_on_fallback
14619   type: RelaxedAtomicBool
14620   value: false
14621   mirror: always
14623 # ECH GREASE Padding target (1-255)
14624 - name: security.tls.ech.grease_size
14625   type: RelaxedAtomicUint32
14626   value: 100
14627   mirror: always
14629 # Whether to apply GREASE settings to HTTP3/QUIC connections
14630 - name: security.tls.grease_http3_enable
14631   type: RelaxedAtomicBool
14632   value: false
14633   mirror: always
14634   rust: true
14636 - name: security.tls.hello_downgrade_check
14637   type: RelaxedAtomicBool
14638   value: true
14639   mirror: always
14641 - name: security.tls.enable_delegated_credentials
14642   type: RelaxedAtomicBool
14643   value: true
14644   mirror: always
14646 - name: security.tls.enable_0rtt_data
14647   type: RelaxedAtomicBool
14648   value: true
14649   mirror: always
14651 - name: security.tls.enable_kyber
14652   type: RelaxedAtomicBool
14653 #ifdef ANDROID
14654   value: false
14655 #else
14656   value: @IS_NIGHTLY_BUILD@
14657 #endif
14658   mirror: always
14660 - name: security.ssl.treat_unsafe_negotiation_as_broken
14661   type: RelaxedAtomicBool
14662   value: false
14663   mirror: always
14665 - name: security.ssl.require_safe_negotiation
14666   type: RelaxedAtomicBool
14667   value: false
14668   mirror: always
14670 - name: security.ssl.enable_false_start
14671   type: RelaxedAtomicBool
14672   value: true
14673   mirror: always
14675 - name: security.ssl.enable_alpn
14676   type: RelaxedAtomicBool
14677   value: true
14678   mirror: always
14680 - name: security.ssl.disable_session_identifiers
14681   type: RelaxedAtomicBool
14682   value: false
14683   mirror: always
14685 - name: security.ssl3.ecdhe_rsa_aes_128_gcm_sha256
14686   type: RelaxedAtomicBool
14687   value: true
14688   mirror: always
14690 - name: security.ssl3.ecdhe_ecdsa_aes_128_gcm_sha256
14691   type: RelaxedAtomicBool
14692   value: true
14693   mirror: always
14695 - name: security.ssl3.ecdhe_ecdsa_chacha20_poly1305_sha256
14696   type: RelaxedAtomicBool
14697   value: true
14698   mirror: always
14700 - name: security.ssl3.ecdhe_rsa_chacha20_poly1305_sha256
14701   type: RelaxedAtomicBool
14702   value: true
14703   mirror: always
14705 - name: security.ssl3.ecdhe_ecdsa_aes_256_gcm_sha384
14706   type: RelaxedAtomicBool
14707   value: true
14708   mirror: always
14710 - name: security.ssl3.ecdhe_rsa_aes_256_gcm_sha384
14711   type: RelaxedAtomicBool
14712   value: true
14713   mirror: always
14715 - name: security.ssl3.ecdhe_rsa_aes_128_sha
14716   type: RelaxedAtomicBool
14717   value: true
14718   mirror: always
14720 - name: security.ssl3.ecdhe_ecdsa_aes_128_sha
14721   type: RelaxedAtomicBool
14722   value: @IS_NOT_EARLY_BETA_OR_EARLIER@
14723   mirror: always
14725 - name: security.ssl3.ecdhe_rsa_aes_256_sha
14726   type: RelaxedAtomicBool
14727   value: true
14728   mirror: always
14730 - name: security.ssl3.ecdhe_ecdsa_aes_256_sha
14731   type: RelaxedAtomicBool
14732   value: @IS_NOT_EARLY_BETA_OR_EARLIER@
14733   mirror: always
14735 - name: security.ssl3.dhe_rsa_aes_128_sha
14736   type: RelaxedAtomicBool
14737   value: false
14738   mirror: always
14740 - name: security.ssl3.dhe_rsa_aes_256_sha
14741   type: RelaxedAtomicBool
14742   value: false
14743   mirror: always
14745 - name: security.ssl3.rsa_aes_128_sha
14746   type: RelaxedAtomicBool
14747   value: true
14748   mirror: always
14750 - name: security.ssl3.rsa_aes_256_sha
14751   type: RelaxedAtomicBool
14752   value: true
14753   mirror: always
14755 - name: security.ssl3.rsa_aes_128_gcm_sha256
14756   type: RelaxedAtomicBool
14757   value: true
14758   mirror: always
14760 - name: security.ssl3.rsa_aes_256_gcm_sha384
14761   type: RelaxedAtomicBool
14762   value: true
14763   mirror: always
14765 - name: security.ssl3.deprecated.rsa_des_ede3_sha
14766   type: RelaxedAtomicBool
14767   value: true
14768   mirror: always
14770 - name: security.tls13.aes_128_gcm_sha256
14771   type: RelaxedAtomicBool
14772   value: true
14773   mirror: always
14775 - name: security.tls13.chacha20_poly1305_sha256
14776   type: RelaxedAtomicBool
14777   value: true
14778   mirror: always
14780 - name: security.tls13.aes_256_gcm_sha384
14781   type: RelaxedAtomicBool
14782   value: true
14783   mirror: always
14785 #---------------------------------------------------------------------------
14786 # Prefs starting with "signon."
14787 #---------------------------------------------------------------------------
14788 - name: signon.usernameOnlyForm.enabled
14789   type: bool
14790   value: true
14791   mirror: always
14793 #---------------------------------------------------------------------------
14794 # Prefs starting with "slider."
14795 #---------------------------------------------------------------------------
14797 # Scrollbar snapping region.
14798 # - 0: off
14799 # - 1 and higher: slider thickness multiple
14800 - name: slider.snapMultiplier
14801   type: int32_t
14802 #ifdef XP_WIN
14803   value: 6
14804 #else
14805   value: 0
14806 #endif
14807   mirror: always
14809 #---------------------------------------------------------------------------
14810 # Prefs starting with "storage."
14811 #---------------------------------------------------------------------------
14813 # Whether to use a non-exclusive VFS.
14814 # By default we use the unix-excl VFS, for the following reasons:
14815 # 1. It improves compatibility with NFS shares, whose implementation
14816 #    is incompatible with SQLite's locking requirements (reliable fcntl), and
14817 #    in particular with WAL journaling.
14818 #    Bug 433129 attempted to automatically identify such file-systems,
14819 #    but a reliable way was not found and the fallback locking is slower than
14820 #    POSIX locking, so we do not want to do it by default.
14821 # 2. It allows wal mode to avoid the memory mapped -shm file, reducing the
14822 #    likelihood of SIGBUS failures when disk space is exhausted.
14823 # 3. It provides some protection from third party database tampering while a
14824 #    connection is open.
14825 # Note there's no win32-excl VFS, so this has no effect on Windows.
14826 - name: storage.sqlite.exclusiveLock.enabled
14827   type: RelaxedAtomicBool
14828   value: @IS_NOT_ANDROID@
14829   mirror: always
14831 #---------------------------------------------------------------------------
14832 # Prefs starting with "svg."
14833 #---------------------------------------------------------------------------
14835 # This pref controls whether the 'context-fill' and 'context-stroke' keywords
14836 # can be used in SVG-as-an-image in the content processes to use the fill/
14837 # stroke specified on the element that embeds the image. (These keywords are
14838 # always enabled in the chrome process, regardless of this pref.) Also, these
14839 # keywords are currently not part of any spec, which is partly why we disable
14840 # them for web content.
14841 - name: svg.context-properties.content.enabled
14842   type: RelaxedAtomicBool
14843   value: false
14844   mirror: always
14846 # This pref controls whether the `prefers-color-scheme` value of SVG images
14847 # reacts to the embedder `color-scheme` in content.
14848 - name: svg.embedder-prefers-color-scheme.content.enabled
14849   type: RelaxedAtomicBool
14850   value: true
14851   mirror: always
14853 # Enables the 'context-fill' and 'context-stroke' keywords for particular
14854 # domains. We expect this list to be Mozilla-controlled properties, since the
14855 # 'context-*' keywords are not part of any spec. We expect to remove this
14856 # preference and the 'context-` keyword support entirely in the
14857 # not-too-distant future when a standardized alternative ships. This preference
14858 # is _not_ for allowing web content to use these keywords. For performance
14859 # reasons, the list of domains in this preference should remain short in
14860 # length.
14861 - name: svg.context-properties.content.allowed-domains
14862   type: String
14863   value: ""
14864   mirror: never
14866 # Is support for the new getBBox method from SVG 2 enabled?
14867 # See https://svgwg.org/svg2-draft/single-page.html#types-SVGBoundingBoxOptions
14868 - name: svg.new-getBBox.enabled
14869   type: bool
14870   value: false
14871   mirror: always
14873 # Whether SVGGraphicsElement.nearestViewportElement and SVGGraphicsElement.farthestViewportElement are enabled.
14874 - name: svg.nearestAndFarthestViewportElement.enabled
14875   type: bool
14876   value: @IS_NOT_EARLY_BETA_OR_EARLIER@
14877   mirror: always
14879 # Whether SVGAElement.text is enabled.
14880 - name: svg.SVGAElement.text.enabled
14881   type: bool
14882   value: false
14883   mirror: always
14885 # Tweak which elements are allowed in <svg:use> subtrees, and in which
14886 # circumstances. See RemoveForbiddenNodes in SVGUseElement.cpp for the spec
14887 # text.
14889 # - 0: Don't restrict ever.
14890 # - 1: Restrict only cross-document.
14891 # - 2/other: restrict always.
14893 # We allow the behavior to be configurable via this pref. Our chosen default
14894 # value forbids non-graphical content in <svg:use> clones of cross-document
14895 # elements. This is a compromise between our more-permissive pre-existing
14896 # behavior (which SVG 2 seems to call for, and maps to pref value 0) and the
14897 # behavior of other UAs (which SVG 1.1 seems to call for, and maps to pref
14898 # value 2).
14899 - name: svg.use-element.graphics-element-restrictions
14900   type: int32_t
14901   value: 1
14902   mirror: always
14904 # Whether to restrict <svg:use> element recursion levels.
14906 # - 0: Don't restrict ever.
14907 # - 1: Restrict everywhere
14908 # - 2/other: Restrict only in the parent process.
14910 - name: svg.use-element.recursive-clone-limit.enabled
14911   type: int32_t
14912   value: 2
14913   mirror: always
14915 # What is the recursion limit for svg use element cloning if enabled.
14916 - name: svg.use-element.recursive-clone-limit
14917   type: uint32_t
14918   value: 8
14919   mirror: always
14921 # Whether <svg:use> with a data: URL as href is allowed
14922 - name: svg.use-element.data-url-href.allowed
14923   type: bool
14924   value: false
14925   mirror: always
14927 #---------------------------------------------------------------------------
14928 # Prefs starting with "telemetry."
14929 #---------------------------------------------------------------------------
14931 - name: telemetry.number_of_site_origin.min_interval
14932   type: uint32_t
14933   value: 300000
14934   mirror: always
14936 - name: telemetry.fog.test.localhost_port
14937   type: RelaxedAtomicInt32
14938   value: 0
14939   mirror: always
14940   rust: true
14942 - name: telemetry.fog.test.activity_limit
14943   type: RelaxedAtomicUint32
14944   value: 120
14945   mirror: always
14946   rust: true
14948 - name: telemetry.fog.test.inactivity_limit
14949   type: RelaxedAtomicUint32
14950   value: 1200
14951   mirror: always
14952   rust: true
14954 - name: telemetry.fog.artifact_build
14955   type: RelaxedAtomicBool
14956   value: false
14957   mirror: always
14959 #---------------------------------------------------------------------------
14960 # Prefs starting with "test."
14961 #---------------------------------------------------------------------------
14963 - name: test.events.async.enabled
14964   type: RelaxedAtomicBool
14965   value: false
14966   mirror: always
14968 - name: test.mousescroll
14969   type: RelaxedAtomicBool
14970   value: false
14971   mirror: always
14973 #---------------------------------------------------------------------------
14974 # Prefs starting with "thread."
14975 #---------------------------------------------------------------------------
14977 # If control tasks aren't enabled, they get medium high priority.
14978 - name: threads.control_event_queue.enabled
14979   type: RelaxedAtomicBool
14980   value: true
14981   mirror: always
14983 # If the service is available, set threads to low-power mode when in the background.
14984 - name: threads.use_low_power.enabled
14985   type: RelaxedAtomicBool
14986   value: @IS_NIGHTLY_BUILD@
14987   mirror: always
14990 # If the process priority is set to background, put the main thread in the background.
14991 # Currently off by default.
14992 - name: threads.lower_mainthread_priority_in_background.enabled
14993   type: bool
14994   value: @IS_NIGHTLY_BUILD@
14995   mirror: always
14997 #---------------------------------------------------------------------------
14998 # Prefs starting with "timer."
14999 #---------------------------------------------------------------------------
15001 # Since our timestamp on macOS does not increment while the system is asleep, we
15002 # should ignore sleep/wake notifications to make timer thread process timers.
15003 - name: timer.ignore_sleep_wake_notifications
15004   type: RelaxedAtomicBool
15005 #ifdef XP_MACOSX
15006   value: true
15007 #else
15008   value: false
15009 #endif
15010   mirror: always
15012 # Amount of time by which it is always acceptable to delay the firing of a timer.
15013 # Any timer may be delayed by up to this amount in order to enable timers to be
15014 # bundled together for efficiency.
15015 - name: timer.minimum_firing_delay_tolerance_ms
15016   type: AtomicFloat
15017   value: 1.0
15018   mirror: always
15020 # Maximum amount of time by which it is ever acceptable to delay the firing of a timer.
15021 # Setting this to zero will effectively disable timer coalescing.
15022 - name: timer.maximum_firing_delay_tolerance_ms
15023   type: AtomicFloat
15024   value: 10000.0
15025   mirror: always
15027 #ifdef XP_WIN
15028   # Controls whether or not TimerThread will automatically increase the Windows timer
15029   # resolution when appropriate conditions are met.
15030 -   name: timer.auto_increase_timer_resolution
15031     type: RelaxedAtomicBool
15032 #ifdef NIGHTLY_BUILD
15033     value: true
15034 #else
15035     value: false
15036 #endif
15037     mirror: always
15038 #endif
15040 #---------------------------------------------------------------------------
15041 # Prefs starting with "toolkit."
15042 #---------------------------------------------------------------------------
15044 # Makes removeDirectory background task wait for the given milliseconds before removal.
15045 - name: toolkit.background_tasks.remove_directory.testing.sleep_ms
15046   type: RelaxedAtomicUint32
15047   value: 0
15048   mirror: always
15050 # Returns true if BHR is disabled.
15051 - name: toolkit.content-background-hang-monitor.disabled
15052   type: bool
15053   value: false
15054   mirror: always
15056 - name: toolkit.scrollbox.smoothScroll
15057   type: RelaxedAtomicBool
15058   value: true
15059   mirror: always
15061 - name: toolkit.scrollbox.horizontalScrollDistance
15062   type: RelaxedAtomicInt32
15063   value: 5
15064   mirror: always
15066 - name: toolkit.scrollbox.verticalScrollDistance
15067   type: RelaxedAtomicInt32
15068   value: 3
15069   mirror: always
15071 # The lateWriteChecksStage and fastShutdownStage below represent the stage
15072 # of shutdown after which we (for lateWriteChecksStage) crash / gather
15073 # telemetry data on file writes, or (for fastShutdownStage) we call _exit(0).
15074 # Higher values are earlier during shutdown, and the full enumeration can
15075 # be found in AppShutdown.h in the AppShutdownPhase enum.
15076 - name: toolkit.shutdown.lateWriteChecksStage
15077   type: int32_t
15078 #ifdef MOZ_CODE_COVERAGE
15079   value: 0
15080 #else
15081   value: 2
15082 #endif
15083   mirror: always
15085 # See the comment above toolkit.shutdown.lateWriteChecksStage. A higher value
15086 # for this pref means we call _exit(0) earlier during shutdown.
15087 - name: toolkit.shutdown.fastShutdownStage
15088   type: int32_t
15089 #if !defined(DEBUG) && !defined(MOZ_ASAN) && !defined(MOZ_TSAN) && !defined(MOZ_CODE_COVERAGE) && !defined(MOZ_VALGRIND) && !defined(MOZ_PROFILE_GENERATE) && !defined(JS_STRUCTURED_SPEW)
15090   value: 1
15091 #else
15092   value: 0
15093 #endif
15094   mirror: always
15096 # Sending each remote accumulation immediately places undue strain on the IPC
15097 # subsystem. Batch the remote accumulations for a period of time before sending
15098 # them all at once. This value was chosen as a balance between data timeliness
15099 # and performance (see bug 1218576).
15100 - name: toolkit.telemetry.ipcBatchTimeout
15101   type: uint32_t
15102   value: 2000
15103   mirror: always
15105 - name: toolkit.telemetry.geckoview.batchDurationMS
15106   type: RelaxedAtomicUint32
15107   value: 5000
15108   mirror: always
15110 - name: toolkit.telemetry.geckoview.maxBatchStalenessMS
15111   type: RelaxedAtomicUint32
15112   value: 60000
15113   mirror: always
15115 - name: toolkit.telemetry.geckoview.streaming
15116   type: RelaxedAtomicBool
15117   value: false
15118   mirror: always
15120 - name: toolkit.telemetry.testing.overrideProductsCheck
15121   type: RelaxedAtomicBool
15122   value: false
15123   mirror: always
15125 #---------------------------------------------------------------------------
15126 # Prefs starting with "ui."
15127 #---------------------------------------------------------------------------
15129 - name: ui.key.generalAccessKey
15130   type: int32_t
15131   value: -1
15132   mirror: always
15134 # Use 17 for Ctrl, 18 for Alt, 91 or 224 for Meta, 0 for none.
15135 - name: ui.key.accelKey
15136   type: uint32_t
15137 #ifdef XP_MACOSX
15138   value: 224
15139 #else
15140   value: 17
15141 #endif
15142   mirror: always
15144 # See above for the key codes to use.
15145 - name: ui.key.menuAccessKey
15146   type: uint32_t
15147 #ifdef XP_MACOSX
15148   value: 0
15149 #else
15150   value: 18
15151 #endif
15152   mirror: always
15154 # Only used if generalAccessKey is -1.
15155 - name: ui.key.chromeAccess
15156   type: int32_t
15157 #ifdef XP_MACOSX
15158   # 0 = disabled, 1 = Shift, 2 = Ctrl, 4 = Alt, 3 =  ctrl+shift, 8 = Meta
15159   value: 2
15160 #else
15161   # 0 = disabled, 1 = Shift, 2 = Ctrl, 4 = Alt, 5 =  Alt+Shift, 8 = Win
15162   value: 4
15163 #endif
15164   mirror: always
15166 # Only used if generalAccessKey is -1.
15167 - name: ui.key.contentAccess
15168   type: int32_t
15169 #ifdef XP_MACOSX
15170   # 0 = disabled, 1 = Shift, 2 = Ctrl, 4 = Alt, 3 = ctrl+shift, 8 = Meta
15171   value: 6
15172 #else
15173   # 0 = disabled, 1 = Shift, 2 = Ctrl, 4 = Alt, 5 =  Alt+Shift, 8 = Win
15174   value: 5
15175 #endif
15176   mirror: always
15178 #ifdef XP_WIN
15179 - name: ui.key.layout.load_when_first_needed
15180   type: bool
15181   value: @IS_EARLY_BETA_OR_EARLIER@
15182   mirror: always
15183 #endif
15185 # Does the access key by itself focus the menu bar?
15186 - name: ui.key.menuAccessKeyFocuses
15187   type: bool
15188 #if defined(XP_WIN) || defined(MOZ_WIDGET_GTK)
15189   # On Windows and Linux, we now default to showing the menu bar only when alt
15190   # is pressed.
15191   value: true
15192 #else
15193   value: false
15194 #endif
15195   mirror: always
15197 # Whether native key bindings in the environment or builtin shortcut key
15198 # definitions in Gecko are used first in <input> and <textarea>
15199 - name: ui.key.textcontrol.prefer_native_key_bindings_over_builtin_shortcut_key_definitions
15200   type: bool
15201   value: true
15202   mirror: always
15204 #ifdef MOZ_WIDGET_GTK
15205 # Only GtkTextView (native multiline text viewer/editor) supports "select-all"
15206 # signal so that we cannot know "select-all" key bindings only with GtkEntry.
15207 # When this pref is set to true, if a key combination does not cause any
15208 # signals in GtkEntry, try to check the key combination is mapped to
15209 # "select-all" in GtkTextView or not.  If it's mapped to other commands, they
15210 # are just ignored.
15211 - name: ui.key.use_select_all_in_single_line_editor
15212   type: bool
15213   value: true
15214   mirror: always
15215 #endif
15217 # Duration of timeout of incremental search in menus (ms).  0 means infinite.
15218 - name: ui.menu.incremental_search.timeout
15219   type: uint32_t
15220   value: 1000
15221   mirror: always
15223 # If true, all popups won't hide automatically on blur
15224 - name: ui.popup.disable_autohide
15225   type: RelaxedAtomicBool
15226   value: false
15227   mirror: always
15229 # Negate scroll, true will make the mouse scroll wheel move the screen the
15230 # same direction as with most desktops or laptops.
15231 - name: ui.scrolling.negate_wheel_scroll
15232   type: RelaxedAtomicBool
15233   value: @IS_ANDROID@
15234   mirror: always
15236 # Delay in milliseconds for tooltips
15237 - name: ui.tooltip.delay_ms
15238   type: uint32_t
15239   value: 500
15240   mirror: always
15242 # If the user puts a finger down on an element and we think the user might be
15243 # executing a pan gesture, how long do we wait before tentatively deciding the
15244 # gesture is actually a tap and activating the target element?
15245 - name: ui.touch_activation.delay_ms
15246   type: int32_t
15247   value: 100
15248   mirror: always
15250 # If the user has clicked an element, how long do we keep the :active state
15251 # before it is cleared.
15252 - name: ui.touch_activation.duration_ms
15253   type: int32_t
15254   value: 50
15255   mirror: always
15257 # Prevent system colors from being exposed to CSS or canvas.
15258 - name: ui.use_standins_for_native_colors
15259   type: RelaxedAtomicBool
15260   value: false
15261   mirror: always
15263 # Whether context menus should only appear on mouseup instead of mousedown,
15264 # on OSes where they normally appear on mousedown (macOS, *nix).
15265 # Note: ignored on Windows (context menus always use mouseup).
15266 - name: ui.context_menus.after_mouseup
15267   type: bool
15268   value: false
15269   mirror: always
15271 # Whether click-hold context menus are enabled.
15272 - name: ui.click_hold_context_menus
15273   type: RelaxedAtomicBool
15274   value: false
15275   mirror: always
15277 # How long to wait for a drag gesture before displaying click-hold context menu,
15278 # in milliseconds.
15279 - name: ui.click_hold_context_menus.delay
15280   type: RelaxedAtomicInt32
15281   value: 500
15282   mirror: always
15284 # When enabled, the touch.radius and mouse.radius prefs allow events to be
15285 # dispatched to nearby elements that are sensitive to the event. See
15286 # PositionedEventTargeting.cpp. The 'mm' prefs define a rectangle around the
15287 # nominal event target point within which we will search for suitable elements.
15288 # 'visitedWeight' is a percentage weight; a value > 100 makes a visited link be
15289 # treated as further away from the event target than it really is, while a
15290 # value < 100 makes a visited link be treated as closer to the event target
15291 # than it really is.
15293 - name: ui.touch.radius.enabled
15294   type: bool
15295   value: @IS_ANDROID@
15296   mirror: always
15298 - name: ui.touch.radius.topmm
15299   type: uint32_t
15300 #ifdef ANDROID
15301   value: 2
15302 #else
15303   value: 12
15304 #endif
15305   mirror: always
15307 - name: ui.touch.radius.rightmm
15308   type: uint32_t
15309 #ifdef ANDROID
15310   value: 3
15311 #else
15312   value: 8
15313 #endif
15314   mirror: always
15316 - name: ui.touch.radius.bottommm
15317   type: uint32_t
15318 #ifdef ANDROID
15319   value: 2
15320 #else
15321   value: 4
15322 #endif
15323   mirror: always
15325 - name: ui.touch.radius.leftmm
15326   type: uint32_t
15327 #ifdef ANDROID
15328   value: 3
15329 #else
15330   value: 8
15331 #endif
15332   mirror: always
15334 - name: ui.touch.radius.visitedWeight
15335   type: uint32_t
15336   value: 120
15337   mirror: always
15339 - name: ui.mouse.radius.enabled
15340   type: bool
15341   value: @IS_ANDROID@
15342   mirror: always
15344 - name: ui.mouse.radius.topmm
15345   type: uint32_t
15346 #ifdef ANDROID
15347   value: 2
15348 #else
15349   value: 12
15350 #endif
15351   mirror: always
15353 - name: ui.mouse.radius.rightmm
15354   type: uint32_t
15355 #ifdef ANDROID
15356   value: 3
15357 #else
15358   value: 8
15359 #endif
15360   mirror: always
15362 - name: ui.mouse.radius.bottommm
15363   type: uint32_t
15364 #ifdef ANDROID
15365   value: 2
15366 #else
15367   value: 4
15368 #endif
15369   mirror: always
15371 - name: ui.mouse.radius.leftmm
15372   type: uint32_t
15373 #ifdef ANDROID
15374   value: 3
15375 #else
15376   value: 8
15377 #endif
15378   mirror: always
15380 - name: ui.mouse.radius.visitedWeight
15381   type: uint32_t
15382   value: 120
15383   mirror: always
15385 - name: ui.mouse.radius.reposition
15386   type: bool
15387   value: @IS_ANDROID@
15388   mirror: always
15390 # When true, the ui.mouse.radius.* prefs will only affect simulated mouse
15391 # events generated by touch input. When false, the prefs will be used for all
15392 # mouse events.
15393 - name: ui.mouse.radius.inputSource.touchOnly
15394   type: bool
15395   value: true
15396   mirror: always
15398 # When true, selection is not collapsed at the right click point if there is a
15399 # non-collapsed selection.
15400 - name: ui.mouse.right_click.collapse_selection.stop_if_non_collapsed_selection
15401   type: bool
15402   value: true
15403   mirror: always
15405 # When true, selection is not collapsed at the right click point if the clicked
15406 # node is not editable.
15407 - name: ui.mouse.right_click.collapse_selection.stop_if_non_editable_node
15408   type: bool
15409   value: false
15410   mirror: always
15412 # When true, the caret is not moved to the right click point in focused editable
15413 # content.
15414 - name: ui.mouse.right_click.move_caret.stop_if_in_focused_editable_node
15415   type: bool
15416   value: false
15417   mirror: always
15419 #---------------------------------------------------------------------------
15420 # Prefs starting with "urlclassifier."
15421 #---------------------------------------------------------------------------
15423 # Update server response timeout for Safe Browsing.
15424 - name: urlclassifier.update.response_timeout_ms
15425   type: uint32_t
15426   value: 30000
15427   mirror: always
15429 # Download update timeout for Safe Browsing.
15430 - name: urlclassifier.update.timeout_ms
15431   type: uint32_t
15432   value: 90000
15433   mirror: always
15435 #---------------------------------------------------------------------------
15436 # Prefs starting with "view_source."
15437 #---------------------------------------------------------------------------
15439 - name: view_source.editor.external
15440   type: bool
15441   value: false
15442   mirror: always
15444 - name: view_source.wrap_long_lines
15445   type: bool
15446   value: @IS_ANDROID@
15447   mirror: always
15449 - name: view_source.syntax_highlight
15450   type: bool
15451   value: true
15452   mirror: always
15454 - name: view_source.tab_size
15455   type: int32_t
15456   value: 4
15457   mirror: always
15459 #---------------------------------------------------------------------------
15460 # Prefs starting with "webgl." (for pref access from Worker threads)
15461 #---------------------------------------------------------------------------
15463 - name: webgl.1.allow-core-profiles
15464   type: RelaxedAtomicBool
15465 #ifdef XP_MACOSX
15466   value: true
15467 #else
15468   value: false
15469 #endif
15470   mirror: always
15472 - name: webgl.angle.force-d3d11
15473   type: RelaxedAtomicBool
15474   value: false
15475   mirror: always
15477 - name: webgl.angle.try-d3d11
15478   type: RelaxedAtomicBool
15479 #ifdef XP_WIN
15480   value: true
15481 #else
15482   value: false
15483 #endif
15484   mirror: always
15486 - name: webgl.angle.force-warp
15487   type: RelaxedAtomicBool
15488   value: false
15489   mirror: always
15491 - name: webgl.auto-flush
15492   type: RelaxedAtomicBool
15493   value: true
15494   mirror: always
15496 - name: webgl.auto-flush.gl
15497   type: RelaxedAtomicBool
15498   value: false
15499   mirror: always
15501 - name: webgl.can-lose-context-in-foreground
15502   type: RelaxedAtomicBool
15503   value: true
15504   mirror: always
15506 - name: webgl.cgl.multithreaded
15507   type: RelaxedAtomicBool
15508   value: true
15509   mirror: always
15511 - name: webgl.colorspaces.prototype
15512   type: RelaxedAtomicBool
15513   value: false
15514   mirror: always
15516 - name: webgl.debug.incomplete-tex-color
15517   type: RelaxedAtomicUint32
15518   value: 0
15519   mirror: always
15521 - name: webgl.default-antialias
15522   type: RelaxedAtomicBool
15523   value: @IS_NOT_ANDROID@
15524   mirror: always
15526 - name: webgl.default-no-alpha
15527   type: RelaxedAtomicBool
15528   value: false
15529   mirror: always
15531 - name: webgl.disable-angle
15532   type: RelaxedAtomicBool
15533   value: false
15534   mirror: always
15536 - name: webgl.disable-wgl
15537   type: RelaxedAtomicBool
15538   value: false
15539   mirror: always
15541 - name: webgl.dxgl.enabled
15542   type: RelaxedAtomicBool
15543 #ifdef XP_WIN
15544   value: true
15545 #else
15546   value: false
15547 #endif
15548   mirror: always
15550 - name: webgl.dxgl.needs-finish
15551   type: RelaxedAtomicBool
15552   value: false
15553   mirror: always
15555 - name: webgl.disable-fail-if-major-performance-caveat
15556   type: RelaxedAtomicBool
15557   value: true
15558   mirror: always
15560 - name: webgl.disable-DOM-blit-uploads
15561   type: RelaxedAtomicBool
15562 #if defined(MOZ_AARCH64) && defined(XP_MACOSX)
15563   value: true
15564 #else
15565   value: false
15566 #endif
15567   mirror: always
15569 - name: webgl.disabled
15570   type: RelaxedAtomicBool
15571   value: false
15572   mirror: always
15574 - name: webgl.enable-debug-renderer-info
15575   type: RelaxedAtomicBool
15576   value: true
15577   mirror: always
15579 - name: webgl.enable-draft-extensions
15580   type: RelaxedAtomicBool
15581   value: false
15582   mirror: always
15584 - name: webgl.enable-privileged-extensions
15585   type: RelaxedAtomicBool
15586   value: false
15587   mirror: always
15589 - name: webgl.enable-renderer-query
15590   type: RelaxedAtomicBool
15591   value: true
15592   mirror: always
15594 - name: webgl.enable-surface-texture
15595   type: RelaxedAtomicBool
15596   value: true
15597   mirror: always
15599 - name: webgl.enable-webgl2
15600   type: RelaxedAtomicBool
15601   value: true
15602   mirror: always
15604 - name: webgl.fake-verts.max
15605   type: RelaxedAtomicUint32
15606   value: 10*1000*1000  # 10M as vec4 is count*4*4 = 160MB
15607   mirror: always
15609 # Only works on Mac for now.
15610 - name: webgl.forbid-hardware
15611   type: RelaxedAtomicBool
15612   value: false
15613   mirror: always
15615 # Only works on Mac for now.
15616 - name: webgl.forbid-software
15617   type: RelaxedAtomicBool
15618   value: true  # It's generally better to encourage fallback to e.g. canvas2d.
15619   mirror: always
15621 - name: webgl.force-enabled
15622   type: RelaxedAtomicBool
15623   value: false
15624   mirror: always
15626 - name: webgl.force-index-validation
15627   type: RelaxedAtomicInt32
15628   value: 0
15629   mirror: always
15631 - name: webgl.gl_khr_no_error
15632   type: RelaxedAtomicBool
15633 #ifdef XP_WIN
15634   value: false
15635 #elif defined(MOZ_WIDGET_GTK)
15636   # Bug 1862039 - All versions of Mesa as of Nov 2023 have issues with
15637   # GL_CONTEXT_FLAG_NO_ERROR_BIT. We should aspire to reenable it at
15638   # some point when the bugs are fixed.
15639   # See also https://gitlab.freedesktop.org/mesa/mesa/-/issues/10062
15640   value: false
15641 #else
15642   value: true
15643 #endif
15644   mirror: always
15646 - name: webgl.lose-context-on-memory-pressure
15647   type: RelaxedAtomicBool
15648   value: false
15649   mirror: always
15651 - name: webgl.max-contexts
15652   type: RelaxedAtomicUint32
15653   value: 1000
15654   mirror: always
15656 - name: webgl.max-contexts-per-principal
15657   type: RelaxedAtomicUint32
15658   value: 300
15659   mirror: always
15661 - name: webgl.max-size-per-texture-mib
15662   type: RelaxedAtomicUint32
15663   value: 1024
15664   mirror: always
15666 - name: webgl.max-vert-ids-per-draw
15667   type: RelaxedAtomicUint32
15668   value: 30*1000*1000
15669   mirror: always
15671 - name: webgl.max-warnings-per-context
15672   type: RelaxedAtomicUint32
15673   value: 32
15674   mirror: always
15676 - name: webgl.min_capability_mode
15677   type: RelaxedAtomicBool
15678   value: false
15679   mirror: always
15681 - name: webgl.msaa-force
15682   type: RelaxedAtomicBool
15683   value: false
15684   mirror: always
15686 - name: webgl.msaa-samples
15687   type: RelaxedAtomicUint32
15688   value: 4
15689   mirror: always
15691 - name: webgl.out-of-process
15692   type: RelaxedAtomicBool
15693   value: true
15694   mirror: always
15696 - name: webgl.out-of-process.worker
15697   type: RelaxedAtomicBool
15698   value: true
15699   mirror: always
15701 - name: webgl.out-of-process.force
15702   type: RelaxedAtomicBool
15703   value: false
15704   mirror: always
15706 - name: webgl.out-of-process.shmem-size
15707   type: RelaxedAtomicUint32
15708   value: 100000 # 100KB
15709   mirror: always
15711 - name: webgl.out-of-process.async-present
15712   type: RelaxedAtomicBool
15713   value: true
15714   mirror: always
15716 # Forces async present to wait for a sync, even while using remote textures.
15717 - name: webgl.out-of-process.async-present.force-sync
15718   type: RelaxedAtomicBool
15719   value: false
15720   mirror: always
15722 #if defined(MOZ_WIDGET_ANDROID)
15723 - name: webgl.out-of-process.enable-ahardwarebuffer
15724   type: bool
15725   value: false
15726   mirror: once
15727 #endif
15729 # Override the blocklist to assume that GL is threadsafe.
15730 - name: webgl.threadsafe-gl.force-enabled
15731   type: bool
15732   value: false
15733   mirror: once
15735 # Override the blocklist to assume that GL is not threadsafe.
15736 - name: webgl.threadsafe-gl.force-disabled
15737   type: bool
15738   value: false
15739   mirror: once
15741 - name: webgl.use-canvas-render-thread
15742   type: bool
15743   value: true
15744   mirror: once
15746 - name: webgl.override-unmasked-renderer
15747   type: DataMutexString
15748   value: ""
15749   mirror: always
15751 - name: webgl.override-unmasked-vendor
15752   type: DataMutexString
15753   value: ""
15754   mirror: always
15756 - name: webgl.power-preference-override
15757   type: RelaxedAtomicInt32
15758   value: 0
15759   mirror: always
15761 - name: webgl.prefer-16bpp
15762   type: RelaxedAtomicBool
15763   value: false
15764   mirror: always
15766 - name: webgl.sanitize-unmasked-renderer
15767   type: RelaxedAtomicBool
15768   value: true
15769   mirror: always
15771 - name: webgl.allow-immediate-queries
15772   type: RelaxedAtomicBool
15773   value: false
15774   mirror: always
15776 - name: webgl.allow-fb-invalidation
15777   type: RelaxedAtomicBool
15778   value: false
15779   mirror: always
15782 - name: webgl.perf.max-warnings
15783   type: RelaxedAtomicInt32
15784   value: 0
15785   mirror: always
15787 - name: webgl.perf.max-acceptable-fb-status-invals
15788   type: RelaxedAtomicInt32
15789   value: 0
15790   mirror: always
15792 - name: webgl.perf.spew-frame-allocs
15793   type: RelaxedAtomicBool
15794   value: true
15795   mirror: always
15797 #---------------------------------------------------------------------------
15798 # Prefs starting with "widget."
15799 #---------------------------------------------------------------------------
15801 # Global user preference for disabling native theme in content processes.
15803 # NOTE(emilio): When changing this make sure to update the non_native_theme
15804 # entry in python/mozbuild/mozbuild/mozinfo.py and test_fission_autostart.py
15805 - name: widget.non-native-theme.enabled
15806   type: RelaxedAtomicBool
15807   value: true
15808   mirror: always
15810 # Whether the non-native theme should always use system colors. Useful mostly
15811 # for testing forced colors mode.
15812 - name: widget.non-native-theme.always-high-contrast
15813   type: RelaxedAtomicBool
15814   value: false
15815   mirror: always
15817 # The style of scrollbars to use. Here are the current options:
15819 #   0: Default platform scrollbar style.
15820 #   1: macOS scrollbars
15821 #   2: GTK scrollbars
15822 #   3: Android scrollbars
15823 #   4: Windows 10 scrollbars
15824 #   5: Windows 11 scrollbars
15826 # Note that switching to non-default scrollbars is experimental and other
15827 # scrollbar-related prefs may interfere with the experience. For example,
15828 # setting the GTK thumb size may have no effect when using non-GTK scrollbars
15829 # on GTK.
15830 - name: widget.non-native-theme.scrollbar.style
15831   type: uint32_t
15832   value: 0
15833   mirror: always
15835 # An override that allows to override the default platform size. The size in CSS
15836 # pixels at full zoom of the minimum scrollbar width.
15837 - name: widget.non-native-theme.scrollbar.size.override
15838   type: uint32_t
15839   value: 0
15840   mirror: always
15842 # Whether we should use themed values for dark scrollbars.
15843 - name: widget.non-native-theme.scrollbar.dark-themed
15844   type: RelaxedAtomicBool
15845   value: true
15846   mirror: always
15848 # Whether the active thumb color should always use the themed colors, even if
15849 # dark scrollbars are in use.
15850 - name: widget.non-native-theme.scrollbar.active-always-themed
15851   type: RelaxedAtomicBool
15852   value: true
15853   mirror: always
15855 # Whether we use the Windows CSS scrollbar sizes, or the scrollbar sizes
15856 # defined above.
15857 - name: widget.non-native-theme.win.scrollbar.use-system-size
15858   type: bool
15859   value: true
15860   mirror: always
15862 # Whether Windows 11 scrollbars are always drawn with the thinner "overlay"
15863 # scrollbar style.
15864 - name: widget.non-native-theme.win11.scrollbar.force-overlay-style
15865   type: bool
15866   value: false
15867   mirror: always
15869 # The amount of space that the thumb should fill the scrollbar, from zero to
15870 # one.
15871 - name: widget.non-native-theme.gtk.scrollbar.thumb-size
15872   type: float
15873   value: 0.75
15874   mirror: always
15876 # The minimum size of the scroll thumb, in the scrollbar direction.
15877 - name: widget.non-native-theme.gtk.scrollbar.thumb-cross-size
15878   type: uint32_t
15879   value: 40
15880   mirror: always
15882 # Whether the thumb should be rounded for the non-native scrollbars.
15883 - name: widget.non-native-theme.gtk.scrollbar.round-thumb
15884   type: bool
15885   value: true
15886   mirror: always
15888 # Whether buttons shouldn't be suppressed for non-native scrollbars.
15889 - name: widget.non-native-theme.gtk.scrollbar.allow-buttons
15890   type: bool
15891   value: false
15892   mirror: always
15894 # Whether we should use the default accent color or the theme-provided one for
15895 # content (e.g. for form controls and CSS system colors).
15897 # Turned off on Windows, for now (we always use the default blue-ish
15898 # accent-color there). We might want to turn this on there, though it's worth
15899 # thinking on what the behavior should be for grey-ish accent colors (which are
15900 # a thing on Windows and can cause confusion with things like disabled form
15901 # controls). Maybe it's just fine.
15902 - name: widget.non-native-theme.use-theme-accent
15903   type: RelaxedAtomicBool
15904 #if defined(XP_WIN) && !defined(MOZ_THUNDERBIRD)
15905   value: false
15906 #else
15907   value: true
15908 #endif
15909   mirror: always
15911 # Whether we should try to use WebRender to render widgets.
15912 - name: widget.non-native-theme.webrender
15913   type: bool
15914   value: true
15915   mirror: always
15917 # Whether the outline style should be one big stroke or two contrasting strokes
15918 - name: widget.non-native-theme.solid-outline-style
15919   type: bool
15920   value: false
15921   mirror: always
15923 # Preference to disable dark scrollbar implementation.
15924 # This is mainly for testing because dark scrollbars have to be semi-
15925 # transparent, but many reftests expect scrollbars to look identical
15926 # among different backgrounds.
15927 # However, some users may want to disable this as well.
15928 - name: widget.disable-dark-scrollbar
15929   type: bool
15930   value: false
15931   mirror: always
15933 - name: widget.disable_file_pickers
15934   type: RelaxedAtomicBool
15935   value: false
15936   mirror: always
15938 - name: widget.window-transforms.disabled
15939   type: RelaxedAtomicBool
15940   value: false
15941   mirror: always
15943 #ifdef XP_MACOSX
15945 # Whether to shift by the menubar height on fullscreen mode.
15946 # 0: never
15947 # 1: always
15948 # 2: auto (tries to detect when it is needed)
15949 - name: widget.macos.shift-by-menubar-on-fullscreen
15950   type: RelaxedAtomicUint32
15951   value: 2
15952   mirror: always
15954 - name: widget.macos.native-context-menus
15955   type: RelaxedAtomicBool
15956   value: true
15957   mirror: always
15958 #endif
15960 # Whether native GTK global menubar support is enabled.
15961 # Disabled because there are some minor bugs and it needs deeper integration
15962 # with the front-end.
15963 - name: widget.gtk.global-menu.enabled
15964   type: RelaxedAtomicBool
15965   value: false
15966   mirror: always
15968 # Whether GTK global menubar support is enabled using wayland's experimental
15969 # dbus_annotation protocol:
15970 # https://gitlab.freedesktop.org/wayland/wayland-protocols/-/merge_requests/52
15971 # Disabled until it has a final shape and it is available in compositors.
15972 - name: widget.gtk.global-menu.wayland.enabled
15973   type: RelaxedAtomicBool
15974   value: false
15975   mirror: always
15977 # Whether native GTK context menus are enabled.
15978 # Disabled because at the very least there's missing custom icon support.
15979 - name: widget.gtk.native-context-menus
15980   type: RelaxedAtomicBool
15981   value: false
15982   mirror: always
15984 # Whether we use overlay scrollbars on GTK.
15985 - name: widget.gtk.overlay-scrollbars.enabled
15986   type: RelaxedAtomicBool
15987   value: true
15988   mirror: always
15990 # Whether we hide the pointer while typing on Linux
15991 - name: widget.gtk.hide-pointer-while-typing.enabled
15992   type: RelaxedAtomicBool
15993   value: true
15994   mirror: always
15996 # Whether we honor the scrollbar colors from the gtk theme.
15997 - name: widget.gtk.theme-scrollbar-colors.enabled
15998   type: bool
15999   value: true
16000   mirror: always
16002 # Whether libadwaita colors are used rather than the default ones.
16003 - name: widget.gtk.libadwaita-colors.enabled
16004   type: bool
16005   value: true
16006   mirror: always
16008 # Whether to use gtk titlebar actions for middle click instead of Firefox
16009 # build in one
16010 - name: widget.gtk.titlebar-action-middle-click-enabled
16011   type: bool
16012   value: false
16013   mirror: always
16015 # Whether to ignore middle click events on widget level.
16016 - name: widget.gtk.middle-click-enabled
16017   type: bool
16018   value: true
16019   mirror: always
16021 # Whether we enable rounded bottom corners on GTK by default.
16023 # The implementation is a bit hacky (see details in bug 1850827) so behind a
16024 # pref for emergency purposes.
16025 - name: widget.gtk.rounded-bottom-corners.enabled
16026   type: bool
16027   value: false
16028   mirror: always
16029   rust: true
16031 # Whether non-native titlebar buttons are enabled for lightweight themes.
16032 - name: widget.gtk.non-native-titlebar-buttons.enabled
16033   type: RelaxedAtomicBool
16034   value: true
16035   mirror: always
16037 # Whether selection colors for the non-system theme get passed from the system
16038 # GTK theme.
16039 - name: widget.gtk.alt-theme.selection
16040   type: bool
16041   value: true
16042   mirror: always
16044 # Whether form control accent colors for the non-system theme get passed from
16045 # the system GTK theme.
16046 - name: widget.gtk.alt-theme.accent
16047   type: bool
16048   value: true
16049   mirror: always
16051 # Whether the scrollbar thumb active color from the non-system theme gets
16052 # passed from the system GTK theme.
16053 - name: widget.gtk.alt-theme.scrollbar_active
16054   type: bool
16055   value: true
16056   mirror: always
16058 # Whether we should try to grab the pointer on popups.
16059 #  0: Never
16060 #  1: Always
16061 #  2: Auto (depending on the system)
16062 - name: widget.gtk.grab-pointer
16063   type: int32_t
16064   value: 2
16065   mirror: always
16067 # Whether we should try ignore bogus leave-notify events from the window
16068 # manager.
16069 #  0: Never
16070 #  1: Always
16071 #  2: Auto (depending on the system)
16072 - name: widget.gtk.ignore-bogus-leave-notify
16073   type: int32_t
16074   value: 2
16075   mirror: always
16077 # Whether to use gtk legacy cursor API.
16078 - name: widget.gtk.legacy-cursors.enabled
16079   type: bool
16080   value: false
16081   mirror: always
16083 # Whether to use gtk high contrast themes to disable content styling like on
16084 # windows high contrast mode.
16085 - name: widget.content.gtk-high-contrast.enabled
16086   type: bool
16087   value: true
16088   mirror: always
16090 #ifdef MOZ_WAYLAND
16091 - name: widget.wayland.fractional-scale.enabled
16092   type: bool
16093   value: false
16094   mirror: once
16096 # Use opaque region for MozContainer wl_surface
16097 - name: widget.wayland.opaque-region.enabled
16098   type: bool
16099   value: true
16100   mirror: once
16102 # Use frame callback based vsync
16103 - name: widget.wayland.vsync.enabled
16104   type: bool
16105   value: true
16106   mirror: once
16108 # Whether to keep firing vsync at layout.throttled_frame_rate after we've been
16109 # occluded.
16110 - name: widget.wayland.vsync.keep-firing-at-idle
16111   type: bool
16112   value: false
16113   mirror: always
16114 #endif
16116 #ifdef MOZ_WIDGET_GTK
16117 # Whether to use DMABuf backend.
16118 - name: widget.dmabuf.enabled
16119   type: bool
16120   value: true
16121   mirror: once
16123 # Whether to override the DMABuf blocklist.
16124 - name: widget.dmabuf.force-enabled
16125   type: bool
16126   value: false
16127   mirror: once
16129 #ifdef NIGHTLY_BUILD
16130 # Keep those pref hidden on non-nightly builds to avoid people accidentally
16131 # turning it on.
16133 # Use DMABuf for content textures.
16134 # For testing purposes only.
16135 - name: widget.dmabuf-textures.enabled
16136   type: RelaxedAtomicBool
16137   value: false
16138   mirror: always
16139 #endif
16141 # Use DMABuf backend for WebGL.
16142 - name: widget.dmabuf-webgl.enabled
16143   type: RelaxedAtomicBool
16144   value: true
16145   mirror: always
16147 # Use gdk_window_move_to_rect to move Wayland popups when available.
16148 - name: widget.wayland.use-move-to-rect
16149   type: bool
16150   value: true
16151   mirror: once
16153 # The time we should spend on a DBUS call to the FileManager1 interface before
16154 # giving up and trying an alternative method.
16156 # -1 for the default system timeout, INT_MAX for "infinite time".
16158 # This happens right now on the main thread so 1 second should be enough, we
16159 # should consider moving it to a background task and just use the default
16160 # timeout.
16161 - name: widget.gtk.file-manager-show-items-timeout-ms
16162   type: int32_t
16163   value: 1000
16164   mirror: always
16166 # The timeout we should spend on a DBUS call to the Settings proxy before
16167 # giving up.
16169 # -1 for the default system timeout, INT_MAX for "infinite time".
16171 # This runs just once, but during startup, so make sure it doesn't take too
16172 # long. Three seconds should be way more than enough, and if we don't get the
16173 # reply on time then the only potential issue is that we use a light instead of
16174 # dark interface or vice versa.
16175 - name: widget.gtk.settings-portal-timeout-ms
16176   type: int32_t
16177   value: 3000
16178   mirror: always
16180 # Whether to use gtk portal for the file picker.
16181 #  - 0: never
16182 #  - 1: always
16183 #  - 2: auto (true for flatpak or GTK_USE_PORTAL=1, false otherwise)
16184 - name: widget.use-xdg-desktop-portal.file-picker
16185   type: int32_t
16186   value: 2
16187   mirror: always
16189 # Whether to use gtk portal for the mime handler.
16190 #  - 0: never
16191 #  - 1: always
16192 #  - 2: auto (for now only true for flatpak, see bug 1516290)
16193 - name: widget.use-xdg-desktop-portal.mime-handler
16194   type: int32_t
16195   value: 2
16196   mirror: always
16198 # Whether to try to use XDG portal for settings / look-and-feel information.
16199 # https://flatpak.github.io/xdg-desktop-portal/#gdbus-org.freedesktop.portal.Settings
16200 #  - 0: never
16201 #  - 1: always
16202 #  - 2: auto
16203 - name: widget.use-xdg-desktop-portal.settings
16204   type: int32_t
16205   value: 2
16206   mirror: always
16208 # Whether to use XDG portal for geolocation.
16209 # https://flatpak.github.io/xdg-desktop-portal/#gdbus-org.freedesktop.portal.Location
16210 #  - 0: never
16211 #  - 1: always
16212 #  - 2: auto
16213 - name: widget.use-xdg-desktop-portal.location
16214   type: int32_t
16215   value: 2
16216   mirror: always
16217 # Whether to use XDG portal for opening to a file.
16218 # https://flatpak.github.io/xdg-desktop-portal/#gdbus-org.freedesktop.portal.OpenURI
16219 #  - 0: never
16220 #  - 1: always
16221 #  - 2: auto (true for flatpak or GTK_USE_PORTAL=1, false otherwise)
16222 - name: widget.use-xdg-desktop-portal.open-uri
16223   type: int32_t
16224   value: 2
16225   mirror: always
16226 #endif
16228 #ifdef XP_WIN
16229 # WindowsUIUtils::Share to wait for user action on Windows share dialog
16230 # `true` means the promise resolves when user completes or cancels the share
16231 # action. This can be unsafe since selecting copy action fires no DataPackage
16232 # event as of 21H1.
16233 # `false` means the promise resolves when the share data is passed to
16234 # DataPackage.
16235 # This affects the behavior of `navigator.share()`.
16236 - name: widget.windows.share.wait_action.enabled
16237   type: bool
16238   value: false
16239   mirror: always
16241 - name: widget.windows.window_occlusion_tracking.enabled
16242   type: bool
16243   value: true
16244   mirror: always
16246 # Whether overlay scrollbars respect the system settings.
16247 # Note that these can be overridden by the ui.useOverlayScrollbars pref.
16248 - name: widget.windows.overlay-scrollbars.enabled
16249   type: bool
16250   value: true
16251   mirror: always
16253 # Whether we allow accessing the UWP system color pallete.
16254 - name: widget.windows.uwp-system-colors.enabled
16255   type: bool
16256   value: true
16257   mirror: always
16259 # Whether we use the accent color for highlight as some other UWP apps do.
16261 # false for now since it can cause some contrast-with-background issues
16262 # specially with grey accents, see bug 1776588.
16263 - name: widget.windows.uwp-system-colors.highlight-accent
16264   type: bool
16265   value: false
16266   mirror: always
16268 - name: widget.windows.window_occlusion_tracking_display_state.enabled
16269   type: bool
16270   value: false
16271   mirror: always
16273 - name: widget.windows.window_occlusion_tracking_session_lock.enabled
16274   type: bool
16275   value: true
16276   mirror: always
16278 # Whether to give explorer.exe a delated nudge to recalculate the fullscreenness
16279 # of a window after maximizing it.
16280 - name: widget.windows.fullscreen_remind_taskbar
16281   type: RelaxedAtomicBool
16282   value: true
16283   mirror: always
16285 # Whether to open the Windows file and folder pickers "remotely" (in a utility
16286 # process) or "locally" (in the main process).
16288 # Valid values:
16289 #  *  0: auto (possibly release-channel-dependent)
16290 #  *  1: remotely, falling back to locally
16291 #  *  2: remotely, no fallback
16292 #  * -1: locally, no fallback
16293 - name: widget.windows.utility_process_file_picker
16294   type: RelaxedAtomicInt32
16295   value: 0
16296   mirror: always
16298 # The number of messages of each type to keep for display in
16299 # about:windows-messages
16300 - name: widget.windows.messages_to_log
16301   type: RelaxedAtomicUint32
16302   value: 6
16303   mirror: always
16305 # Whether to flush the Ole clipboard synchronously.
16306 # Possible values are:
16307 #  * 0: never
16308 #  * 1: always
16309 #  * 2 (or others): when needed
16310 - name: widget.windows.sync-clipboard-flush
16311   type: uint32_t
16312   value: 2
16313   mirror: always
16315 # Whether to apply a hack (adjusting the window height by -1px and back again)
16316 # upon first entering fullscreen intended to work around a bug exhibited under
16317 # on some Windows 11 machines under some configurations. (See bug 1763981.)
16319 # Semantics:
16320 #  * 0: never
16321 #  * 1: always
16322 #  * 2: auto
16323 - name: widget.windows.apply-dwm-resize-hack
16324   type: RelaxedAtomicInt32
16325   value: 2
16326   mirror: always
16327 #endif
16329 # Whether to disable SwipeTracker (e.g. swipe-to-nav).
16330 - name: widget.disable-swipe-tracker
16331   type: bool
16332   value: false
16333   mirror: always
16335 # Various metrics to control SwipeTracker.
16336 - name: widget.swipe.velocity-twitch-tolerance
16337   type: float
16338   value: 0.0000001f
16339   mirror: always
16341 - name: widget.swipe.success-velocity-contribution
16342   type: float
16343   value: 0.05f
16344   mirror: always
16346 # When using pixel deltas for pan input, how many pixels do we consider a whole
16347 # swipe?
16349 # The values for this pref are derived from trial and error in an effort to
16350 # match the existing behavior on the respective platforms.
16351 - name: widget.swipe.pixel-size
16352   type: float
16353 #if defined(XP_MACOSX)
16354   value: 550.0f
16355 #else
16356   value: 1100.0f
16357 #endif
16358   mirror: always
16360 # When using page deltas for pan input, how many pages do we consider a whole
16361 # swipe navigation?
16363 # This is only relevant for GTK which is as of right now the only platform
16364 # which supports page-based pan gestures.
16365 - name: widget.swipe.page-size
16366   type: float
16367   value: 40.0f
16368   mirror: always
16370 - name: widget.transparent-windows
16371   type: bool
16372   value: true
16373   mirror: once
16375 # Whether the clipboard cached are used while getting system clipboard data.
16376 - name: widget.clipboard.use-cached-data.enabled
16377   type: bool
16378 #if defined(XP_MACOSX)
16379   value: true
16380 #else
16381   value: false
16382 #endif
16383   mirror: always
16385 # Whether to render in to a child SurfaceControl rather than directly into the SurfaceView
16386 - name: widget.android.use-surfacecontrol
16387   type: bool
16388   value: false
16389   mirror: once
16391 #---------------------------------------------------------------------------
16392 # Prefs starting with "zoom."
16393 #---------------------------------------------------------------------------
16395 - name: zoom.maxPercent
16396   type: uint32_t
16397 #ifdef ANDROID
16398   value: 400
16399 #else
16400   value: 500
16401 #endif
16402   mirror: always
16404 - name: zoom.minPercent
16405   type: uint32_t
16406 #ifdef ANDROID
16407   value: 20
16408 #else
16409   value: 30
16410 #endif
16411   mirror: always
16413 #---------------------------------------------------------------------------
16414 # End of prefs
16415 #---------------------------------------------------------------------------