Backed out changeset 4191b252db9b (bug 1886734) for causing build bustages @netwerk...
[gecko.git] / modules / libpref / init / StaticPrefList.yaml
blobc67762ed73cff1d838bfd8f13b4871fcc66bb01d
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.touch.enabled
482   type: RelaxedAtomicBool
483   value: true
484   mirror: always
486 - name: apz.enlarge_displayport_when_clipped
487   type: RelaxedAtomicBool
488   value: @IS_ANDROID@
489   mirror: always
491 # Test only.
492 - name: apz.fixed-margin-override.enabled
493   type: RelaxedAtomicBool
494   value: false
495   mirror: always
497 # Test only.
498 - name: apz.fixed-margin-override.bottom
499   type: RelaxedAtomicInt32
500   value: 0
501   mirror: always
503 # Test only.
504 - name: apz.fixed-margin-override.top
505   type: RelaxedAtomicInt32
506   value: 0
507   mirror: always
509 - name: apz.fling_accel_base_mult
510   type: AtomicFloat
511   value: 1.0f
512   mirror: always
514 - name: apz.fling_accel_supplemental_mult
515   type: AtomicFloat
516   value: 1.0f
517   mirror: always
519 - name: apz.fling_accel_min_fling_velocity
520   type: AtomicFloat
521   value: 1.5f
522   mirror: always
524 - name: apz.fling_accel_min_pan_velocity
525   type: AtomicFloat
526   value: 0.8f
527   mirror: always
529 - name: apz.fling_accel_max_pause_interval_ms
530   type: RelaxedAtomicInt32
531   value: 50
532   mirror: always
534 - name: apz.fling_curve_function_x1
535   type: float
536   value: 0.0f
537   mirror: once
539 - name: apz.fling_curve_function_x2
540   type: float
541   value: 1.0f
542   mirror: once
544 - name: apz.fling_curve_function_y1
545   type: float
546   value: 0.0f
547   mirror: once
549 - name: apz.fling_curve_function_y2
550   type: float
551   value: 1.0f
552   mirror: once
554 - name: apz.fling_curve_threshold_inches_per_ms
555   type: AtomicFloat
556   value: -1.0f
557   mirror: always
559 - name: apz.fling_friction
560   type: AtomicFloat
561   value: 0.002f
562   mirror: always
564 - name: apz.fling_min_velocity_threshold
565   type: AtomicFloat
566   value: 0.5f
567   mirror: always
569 - name: apz.fling_stop_on_tap_threshold
570   type: AtomicFloat
571   value: 0.05f
572   mirror: always
574 - name: apz.fling_stopped_threshold
575   type: AtomicFloat
576   value: 0.01f
577   mirror: always
579 - name: apz.touch_acceleration_factor_x
580   type: float
581   value: 1.0f
582   mirror: always
584 - name: apz.touch_acceleration_factor_y
585   type: float
586   value: 1.0f
587   mirror: always
589 #ifdef MOZ_WIDGET_GTK
590 -   name: apz.gtk.kinetic_scroll.enabled
591     type: RelaxedAtomicBool
592     value: true
593     mirror: always
595 -   name: apz.gtk.pangesture.enabled
596     type: RelaxedAtomicBool
597     value: true
598     mirror: always
600 # Mode to use when receiving pan gesture input.
602 #  * 0: Auto mode (uses the default behavior, subject to change).
603 #  * 1: Page mode: Uses gtk deltas as a percentage of the page size to scroll. This mode matches:
605 #    https://gitlab.gnome.org/GNOME/gtk/blob/c734c7e9188b56f56c3a504abee05fa40c5475ac/gtk/gtkrange.c#L3063-3074
607 #  * 2: Pixel mode: Uses gtk deltas as a fixed pixel multiplier. This mode matches e.g. GNOME web.
609 #    https://webkit-search.igalia.com/webkit/rev/215039ef09d6bfd6e088175bfe30788d95b9705d/Source/WebKit/Shared/gtk/WebEventFactory.cpp#265-296
610 #    (multiplied then by pixelsPerLineStep which in GNOME-web is 40).
611 -   name: apz.gtk.pangesture.delta_mode
612     type: uint32_t
613     value: 0
614     mirror: always
616 -   name: apz.gtk.pangesture.page_delta_mode_multiplier
617     type: float
618     value: 1.0f
619     mirror: always
621 -   name: apz.gtk.pangesture.pixel_delta_mode_multiplier
622     type: float
623     value: 40.0f
624     mirror: always
626 -   name: apz.gtk.touchpad_pinch.enabled
627     type: RelaxedAtomicBool
628     value: true
629     mirror: always
631 -   name: apz.gtk.touchpad_pinch.three_fingers.enabled
632     type: RelaxedAtomicBool
633     value: false
634     mirror: always
635 #endif
637 - name: apz.keyboard.enabled
638   type: bool
639   value: @IS_NOT_ANDROID@
640   mirror: once
642 - name: apz.keyboard.passive-listeners
643   type: RelaxedAtomicBool
644   value: @IS_NOT_ANDROID@
645   mirror: always
647 - name: apz.max_tap_time
648   type: RelaxedAtomicInt32
649   value: 300
650   mirror: always
652 - name: apz.max_velocity_inches_per_ms
653   type: AtomicFloat
654   value: -1.0f
655   mirror: always
657 - name: apz.max_velocity_queue_size
658   type: uint32_t
659   value: 5
660   mirror: once
662 - name: apz.min_skate_speed
663   type: AtomicFloat
664   value: 1.0f
665   mirror: always
667 - name: apz.minimap.enabled
668   type: RelaxedAtomicBool
669   value: false
670   mirror: always
672 - name: apz.one_touch_pinch.enabled
673   type: RelaxedAtomicBool
674   value: @IS_ANDROID@
675   mirror: always
677 - name: apz.overscroll.enabled
678   type: RelaxedAtomicBool
679 #if defined(XP_MACOSX) || defined(XP_WIN)
680   value: true
681 #else
682   value: false
683 #endif
684   mirror: always
686 # The "test async scroll offset" (used via reftest-async-scroll
687 # or nsIDOMWindowUtils.setAsyncScrollOffset()) can be used to
688 # trigger overscroll. Used for tests only.
689 - name: apz.overscroll.test_async_scroll_offset.enabled
690   type: RelaxedAtomicBool
691   value: false
692   mirror: always
694 - name: apz.overscroll.min_pan_distance_ratio
695   type: AtomicFloat
696   value: 1.0f
697   mirror: always
699 - name: apz.overscroll.stop_distance_threshold
700   type: AtomicFloat
701   value: 5.0f
702   mirror: always
704 - name: apz.overscroll.spring_stiffness
705   type: AtomicFloat
706   value: 200
707   mirror: always
709 - name: apz.overscroll.damping
710   type: AtomicFloat
711   value: 1.1
712   mirror: always
714 - name: apz.overscroll.max_velocity
715   type: AtomicFloat
716   value: 10
717   mirror: always
719 - name: apz.paint_skipping.enabled
720   type: RelaxedAtomicBool
721   value: true
722   mirror: always
724 # Fetch displayport updates early from the message queue.
725 - name: apz.pinch_lock.mode
726   type: RelaxedAtomicInt32
727   value: 2
728   mirror: always
730 - name: apz.pinch_lock.scroll_lock_threshold
731   type: AtomicFloat
732   value: 1.0f / 16.0f   # 1/16 inches
733   mirror: always
735 - name: apz.pinch_lock.span_breakout_threshold
736   type: AtomicFloat
737   value: 1.0f / 32.0f   # 1/32 inches
738   mirror: always
740 - name: apz.pinch_lock.span_lock_threshold
741   type: AtomicFloat
742   value: 1.0f / 32.0f   # 1/32 inches
743   mirror: always
745 - name: apz.pinch_lock.buffer_max_age
746   type: int32_t
747   value: 80   # milliseconds
748   mirror: once
750 - name: apz.popups.enabled
751   type: RelaxedAtomicBool
752   value: true
753   mirror: always
755 # Whether to print the APZC tree for debugging.
756 - name: apz.printtree
757   type: RelaxedAtomicBool
758   value: false
759   mirror: always
761 - name: apz.record_checkerboarding
762   type: RelaxedAtomicBool
763   value: @IS_NIGHTLY_BUILD@
764   mirror: always
766 - name: apz.second_tap_tolerance
767   type: AtomicFloat
768   value: 0.5f
769   mirror: always
771 # If this is true, APZ fully recalculates the scroll thumb size and
772 # position in the compositor. This leads to the size and position
773 # being more accurate in scenarios such as async zooming.
774 - name: apz.scrollthumb.recalc
775   type: RelaxedAtomicBool
776   value: true
777   mirror: always
779 - name: apz.test.fails_with_native_injection
780   type: RelaxedAtomicBool
781   value: false
782   mirror: always
784 - name: apz.test.logging_enabled
785   type: RelaxedAtomicBool
786   value: false
787   mirror: always
789 - name: apz.touch_move_tolerance
790   type: AtomicFloat
791   value: 0.1f
792   mirror: always
794 - name: apz.touch_start_tolerance
795   type: AtomicFloat
796   value: 0.1f
797   mirror: always
799 - name: apz.velocity_bias
800   type: AtomicFloat
801   value: 0.0f
802   mirror: always
804 - name: apz.velocity_relevance_time_ms
805   type: RelaxedAtomicUint32
806   value: 100
807   mirror: always
809 - name: apz.windows.force_disable_direct_manipulation
810   type: RelaxedAtomicBool
811   value: false
812   mirror: always
814 - name: apz.windows.use_direct_manipulation
815   type: RelaxedAtomicBool
816   value: true
817   mirror: always
819 - name: apz.windows.check_for_pan_gesture_conversion
820   type: RelaxedAtomicBool
821   value: true
822   mirror: always
824 - name: apz.x_skate_highmem_adjust
825   type: AtomicFloat
826   value: 0.0f
827   mirror: always
829 - name: apz.x_skate_size_multiplier
830   type: AtomicFloat
831   value: 1.25f
832   mirror: always
834 - name: apz.x_stationary_size_multiplier
835   type: AtomicFloat
836   value: 1.5f
837   mirror: always
839 - name: apz.y_skate_highmem_adjust
840   type: AtomicFloat
841   value: 0.0f
842   mirror: always
844 - name: apz.y_skate_size_multiplier
845   type: AtomicFloat
846 #if defined(MOZ_WIDGET_ANDROID)
847   value: 1.5f
848 #else
849   value: 3.5f
850 #endif
851   mirror: always
853 - name: apz.y_stationary_size_multiplier
854   type: AtomicFloat
855 #if defined(MOZ_WIDGET_ANDROID)
856   value: 1.5f
857 #else
858   value: 3.5f
859 #endif
860   mirror: always
862 - name: apz.zoom_animation_duration_ms
863   type: RelaxedAtomicInt32
864 #if defined(MOZ_WIDGET_ANDROID)
865   value: 250
866 #else
867   value: 350
868 #endif
869   mirror: always
871 - name: apz.scale_repaint_delay_ms
872   type: RelaxedAtomicInt32
873   value: 500
874   mirror: always
876 # Whether to use rounded external scroll offsets.
877 - name: apz.rounded_external_scroll_offset
878   type: bool
879   value: false
880   mirror: always
882 #---------------------------------------------------------------------------
883 # Prefs starting with "beacon."
884 #---------------------------------------------------------------------------
886 # Is support for Navigator.sendBeacon enabled?
887 - name: beacon.enabled
888   type: bool
889   value: true
890   mirror: always
892 #---------------------------------------------------------------------------
893 # Prefs starting with "bidi."
894 #---------------------------------------------------------------------------
896 # Whether delete and backspace should immediately delete characters not
897 # visually adjacent to the caret, or adjust the visual position of the caret
898 # on the first keypress and delete the character on a second keypress
899 - name: bidi.edit.delete_immediately
900   type: bool
901   value: true
902   mirror: always
904 # Bidi caret movement style:
905 # 0 = logical
906 # 1 = visual
907 # 2 = visual, but logical during selection
908 - name: bidi.edit.caret_movement_style
909   type: int32_t
910 #if !defined(XP_LINUX) && defined(NIGHTLY_BUILD)
911   value: 1
912 #else
913   value: 2 # See Bug 1638240
914 #endif
915   mirror: always
917 # Bidi numeral style:
918 # 0 = nominalnumeralBidi *
919 # 1 = regularcontextnumeralBidi
920 # 2 = hindicontextnumeralBidi
921 # 3 = arabicnumeralBidi
922 # 4 = hindinumeralBidi
923 # 5 = persiancontextnumeralBidi
924 # 6 = persiannumeralBidi
925 - name: bidi.numeral
926   type: RelaxedAtomicUint32
927   value: 0
928   mirror: always
930 # Bidi text type
931 # 1 = charsettexttypeBidi *
932 # 2 = logicaltexttypeBidi
933 # 3 = visualtexttypeBidi
934 - name: bidi.texttype
935   type: RelaxedAtomicUint32
936   value: 1
937   mirror: always
939 # Bidi direction
940 # 1 = directionLTRBidi *
941 # 2 = directionRTLBidi
942 - name: bidi.direction
943   type: RelaxedAtomicUint32
944   value: 1
945   mirror: always
947 # Setting this pref to |true| forces Bidi UI menu items and keyboard shortcuts
948 # to be exposed, and enables the directional caret hook. By default, only
949 # expose it for bidi-associated system locales.
950 - name: bidi.browser.ui
951   type: bool
952   value: false
953   mirror: always
955 #---------------------------------------------------------------------------
956 # Prefs starting with "browser."
957 #---------------------------------------------------------------------------
959 - name: browser.active_color
960   type: String
961   value: "#EE0000"
962   mirror: never
964 - name: browser.active_color.dark
965   type: String
966   value: "#FF6666"
967   mirror: never
969 - name: browser.anchor_color
970   type: String
971   value: "#0000EE"
972   mirror: never
974 # If you change this, you probably also want to change
975 # nsXPLookAndFeel::GenericDarkColor for MozNativehyperlinktext.
976 - name: browser.anchor_color.dark
977   type: String
978   value: "#8C8CFF"
979   mirror: never
981 # See http://dev.w3.org/html5/spec/forms.html#attr-fe-autofocus
982 - name: browser.autofocus
983   type: bool
984   value: true
985   mirror: always
987 - name: browser.cache.disk.enable
988   type: RelaxedAtomicBool
989   value: true
990   mirror: always
992 - name: browser.cache.memory.enable
993   type: RelaxedAtomicBool
994   value: true
995   mirror: always
997 # Limit of recent metadata we keep in memory for faster access, in KB.
998 - name: browser.cache.disk.metadata_memory_limit
999   type: RelaxedAtomicUint32
1000   value: 250   # 0.25 MB
1001   mirror: always
1003 # Does the user want smart-sizing?
1004 - name: browser.cache.disk.smart_size.enabled
1005   type: RelaxedAtomicBool
1006   value: true
1007   mirror: always
1009 # Disk cache capacity in kilobytes. It's used only when
1010 # browser.cache.disk.smart_size.enabled == false
1011 - name: browser.cache.disk.capacity
1012   type: RelaxedAtomicUint32
1013   value: 256000
1014   mirror: always
1016 # -1 = determine dynamically, 0 = none, n = memory capacity in kilobytes.
1017 - name: browser.cache.memory.capacity
1018   type: RelaxedAtomicInt32
1019   value: -1
1020   mirror: always
1022 # When smartsizing is disabled we could potentially fill all disk space by
1023 # cache data when the disk capacity is not set correctly. To avoid that we
1024 # check the free space every time we write some data to the cache. The free
1025 # space is checked against two limits. Once the soft limit is reached we start
1026 # evicting the least useful entries, when we reach the hard limit writing to
1027 # the entry fails.
1028 - name: browser.cache.disk.free_space_soft_limit
1029   type: RelaxedAtomicUint32
1030   value: 5 * 1024   # 5MB
1031   mirror: always
1033 - name: browser.cache.disk.free_space_hard_limit
1034   type: RelaxedAtomicUint32
1035   value: 1024    # 1MB
1036   mirror: always
1038 # The number of chunks we preload ahead of read. One chunk currently has
1039 # 256kB.
1040 - name: browser.cache.disk.preload_chunk_count
1041   type: RelaxedAtomicUint32
1042   value: 4    # 1 MB of read ahead
1043   mirror: always
1045 # Max-size (in KB) for entries in disk cache. Set to -1 for no limit.
1046 # (Note: entries bigger than 1/8 of disk-cache are never cached)
1047 - name: browser.cache.disk.max_entry_size
1048   type: RelaxedAtomicUint32
1049   value: 50 * 1024    # 50 MB
1050   mirror: always
1052 # Max-size (in KB) for entries in memory cache. Set to -1 for no limit.
1053 # (Note: entries bigger than than 90% of the mem-cache are never cached.)
1054 - name: browser.cache.memory.max_entry_size
1055   type: RelaxedAtomicInt32
1056   value: 5 * 1024
1057   mirror: always
1059 # Memory limit (in kB) for new cache data not yet written to disk. Writes to
1060 # the cache are buffered and written to disk on background with low priority.
1061 # With a slow persistent storage these buffers may grow when data is coming
1062 # fast from the network. When the amount of unwritten data is exceeded, new
1063 # writes will simply fail. We have two buckets, one for important data
1064 # (priority) like html, css, fonts and js, and one for other data like images,
1065 # video, etc.
1066 # Note: 0 means no limit.
1067 - name: browser.cache.disk.max_chunks_memory_usage
1068   type: RelaxedAtomicUint32
1069   value: 40 * 1024
1070   mirror: always
1071 - name: browser.cache.disk.max_priority_chunks_memory_usage
1072   type: RelaxedAtomicUint32
1073   value: 40 * 1024
1074   mirror: always
1077 # Number of seconds the cache spends writing pending data and closing files
1078 # after shutdown has been signalled. Past that time data is not written and
1079 # files are left open for the OS to clean up.
1080 - name: browser.cache.max_shutdown_io_lag
1081   type: RelaxedAtomicUint32
1082   value: 2
1083   mirror: always
1085 # After the max_shutdown_io_lag has passed, we will attempt to cancel
1086 # blocking IO (on windows). The CacheIOThread may pick up more blocking
1087 # tasks so we want to cancel those too. The main thread will be woken
1088 # up every shutdown_io_time_between_cancellations_ms to cancel the IO
1089 # on the other thread.
1090 - name: browser.cache.shutdown_io_time_between_cancellations_ms
1091   type: RelaxedAtomicUint32
1092   value: 5
1093   mirror: always
1095 # A percentage limit for media content type in the disk cache. When some entries
1096 # need to be evicted and media is over the limit, it's evicted first.
1097 - name: browser.cache.disk.content_type_media_limit
1098   type: RelaxedAtomicInt32
1099   value: 50
1100   mirror: always
1102 # How often to validate document in cache
1103 #   0 = once-per-session,
1104 #   1 = each-time,
1105 #   2 = never,
1106 #   3 = when-appropriate/automatically
1107 - name: browser.cache.check_doc_frequency
1108   type: RelaxedAtomicUint32
1109   value: 3
1110   mirror: always
1112 # Compression level for cached JavaScript bytecode
1113 #   0 = do not compress,
1114 #   1 = minimal compression,
1115 #   9 = maximal compression
1116 - name: browser.cache.jsbc_compression_level
1117   type: RelaxedAtomicUint32
1118   value: 0
1119   mirror: always
1121 # Whether tooltips are enabled.
1122 - name: browser.chrome.toolbar_tips
1123   type: bool
1124   value: true
1125   mirror: always
1127 # Whether tooltips are hidden on keydown.
1128 #  0: never
1129 #  1: always
1130 #  2: only on non-modifier keys
1131 - name: browser.chrome.toolbar_tips.hide_on_keydown
1132   type: uint32_t
1133 #if defined(XP_WIN)
1134   value: 0
1135 #else
1136   value: 2
1137 #endif
1138   mirror: always
1140 # DLP agent name, for display in the browser
1141 - name: browser.contentanalysis.agent_name
1142   type: String
1143   value: "A DLP agent"
1144   mirror: never
1146 # (optional) The organization name that the DLP agent should have. If this is
1147 # non-empty and the DLP agent is not signed with this organization name,
1148 # Firefox will fail the connection.
1149 - name: browser.contentanalysis.client_signature
1150   type: String
1151   value: ""
1152   mirror: never
1154 # Content analysis by external applications, e.g. data-loss prevention apps
1155 - name: browser.contentanalysis.enabled
1156   type: bool
1157   value: false
1158   mirror: never
1160 # Whether content analysis should allow content if there is a problem communicating
1161 # with the agent.
1162 - name: browser.contentanalysis.default_allow
1163   type: bool
1164   value: false
1165   mirror: never
1167 # Is the IPC pipe to the DLP tool specific to the user or to the system?
1168 - name: browser.contentanalysis.is_per_user
1169   type: bool
1170   value: true
1171   mirror: never
1173 # Path name of pipe used to connect to a configured DLP agent.
1174 - name: browser.contentanalysis.pipe_path_name
1175   type: String
1176   value: "path_user"
1177   mirror: never
1179 # Space-separated list of regexs that are compared to URLs of resources
1180 # being checked by content-analysis.  Resources that match are not checked
1181 # and are always permitted.
1182 - name: browser.contentanalysis.allow_url_regex_list
1183   type: String
1184   value: ""
1185   mirror: never
1187 # Space-separated list of regexs that are compared to URLs of resources
1188 # being checked by content-analysis.  Resources that match are not checked
1189 # and are always denied.
1190 - name: browser.contentanalysis.deny_url_regex_list
1191   type: String
1192   value: ""
1193   mirror: never
1195 # Should CA ignore the system setting and use silent notifications?
1196 - name: browser.contentanalysis.silent_notifications
1197   type: bool
1198   value: false
1199   mirror: always
1201 # Time (secs) after which content analysis operations are considered timed-out
1202 - name: browser.contentanalysis.agent_timeout
1203   type: uint32_t
1204   value: 30
1205   mirror: always
1207 # Should Firefox show a notification or dialog when content analysis blocks
1208 # access?
1209 - name: browser.contentanalysis.show_blocked_result
1210   type: bool
1211   value: true
1212   mirror: always
1214 # Content blocking for Enhanced Tracking Protection
1215 - name: browser.contentblocking.database.enabled
1216   type: bool
1217   value: false
1218   mirror: always
1220 # How many recent block/unblock actions per origins we remember in the
1221 # Content Blocking log for each top-level window.
1222 - name: browser.contentblocking.originlog.length
1223   type: uint32_t
1224   value: 32
1225   mirror: always
1227 # Min font device pixel size at which to turn on high quality.
1228 - name: browser.display.auto_quality_min_font_size
1229   type: RelaxedAtomicUint32
1230   value: 20
1231   mirror: always
1233 - name: browser.display.background_color
1234   type: String
1235   value: "#FFFFFF"
1236   mirror: never
1238 - name: browser.display.background_color.dark
1239   type: String
1240   value: "#1C1B22"
1241   mirror: never
1243 # This preference is a bit confusing because we use the opposite
1244 # string value in the colors dialog to indicate to users how FF HCM
1245 # will behave.
1246 # With resect to document colors, these values mean:
1247 # 0 = "default" = always, except in high contrast mode
1248 # 1 = "always"
1249 # 2 = "never"
1251 # On windows, we set this to 0, which means FF HCM will mirror OS HCM.
1252 # Everywhere else, we set this to 1, disabling FF HCM.
1253 - name: browser.display.document_color_use
1254   type: RelaxedAtomicUint32
1255 #if defined(XP_WIN)
1256   value: 0
1257 #else
1258   value: 1
1259 #endif
1260   mirror: always
1261   rust: true
1263 # 0 = always native
1264 # 1 = never native
1265 # other = default
1266 - name: browser.display.windows.non_native_menus
1267   type: RelaxedAtomicUint32
1268   value: 2
1269   mirror: always
1270   rust: true
1272 # This pref dictates whether or not backplates and background images
1273 # are to be drawn, when in high-contrast mode:
1274 #   false: do not draw backplates or render background images
1275 #   true: render background images and draw backplates
1276 # This condition is only considered when high-contrast mode is enabled
1277 # in Firefox, ie. when the user has:
1278 #   (1) mUseAccessibilityMode set to true (Widows high-contrast mode is on)
1279 #       AND browser.display.document_color_use set to 0
1280 #       (only with high-contrast themes) OR
1281 #   (2) browser.display.document_color_use set to 2 (always)
1282 - name: browser.display.permit_backplate
1283   type: RelaxedAtomicBool
1284   value: true
1285   mirror: always
1286   rust: true
1288 # Whether we should suppress the background-image of the canvas (the root
1289 # frame) if we're in forced colors mode.
1291 # This is important because some sites use background-image with a plain color
1292 # and it causes undesirable results in high-contrast mode.
1294 # See bug 1614921 for example.
1295 - name: browser.display.suppress_canvas_background_image_on_forced_colors
1296   type: bool
1297   value: true
1298   mirror: always
1300 - name: browser.display.foreground_color
1301   type: String
1302   value: "#000000"
1303   mirror: never
1305 - name: browser.display.foreground_color.dark
1306   type: String
1307   value: "#FBFBFE"
1308   mirror: never
1310 # Determines the behavior of OS zoom settings.
1312 #   0: doesn't affect rendering at all
1313 #   1: affects full zoom (dpi, effectively).
1314 #   2: affects text zoom.
1316 # Default is (1): Historical behavior on Linux, matches other browsers on
1317 # Windows, and generally creates more consistent rendering.
1318 - name: browser.display.os-zoom-behavior
1319   type: RelaxedAtomicInt32
1320   value: 1
1321   mirror: always
1322   rust: true
1324 # Whether focus rings are always shown by default.
1326 # This is the initial value of nsWindowRoot::mShowFocusRings, but it can be
1327 # overridden by system preferences.
1328 - name: browser.display.show_focus_rings
1329   type: bool
1330   value: false
1331   mirror: always
1333 # Enable showing image placeholders while image is loading or when image is broken.
1334 - name: browser.display.show_image_placeholders
1335   type: bool
1336   value: true
1337   mirror: always
1339 # Whether we should always enable focus rings after focus was moved by keyboard.
1341 # This behavior matches both historical and GTK / Windows focus behavior.
1343 # :focus-visible is intended to provide better heuristics than this.
1344 - name: browser.display.always_show_rings_after_key_focus
1345   type: bool
1346   value: false
1347   mirror: always
1349 # In theory: 0 = never, 1 = quick, 2 = always, though we always just use it as
1350 # a bool!
1351 - name: browser.display.use_document_fonts
1352   type: RelaxedAtomicInt32
1353   value: 1
1354   mirror: always
1355   rust: true
1357 # font-family names for which we'll override use_document_fonts=0, and always
1358 # use the specified font.
1359 # This is to support ligature-icon fonts, which render literal strings like
1360 # "arrow_drop_down" with an icon, even when use_document_fonts is disabled.
1361 # If an author provides & uses such a font, and we decline to use it, we'll end
1362 # up rendering these literal strings where the author intended an icon, which
1363 # can cause all sorts of overlapping/unreadable content.
1364 - name: browser.display.use_document_fonts.icon_font_allowlist
1365   type: String
1366   value: >-
1367     Material Icons,
1368     Material Icons Extended,
1369     Material Icons Outlined,
1370     Material Icons Round,
1371     Material Icons Sharp,
1372     Material Icons Two Tone,
1373     Google Material Icons,
1374     Material Symbols Outlined,
1375     Material Symbols Round,
1376     Material Symbols Rounded,
1377     Material Symbols Sharp
1378   mirror: never
1380 - name: browser.display.use_system_colors
1381   type: RelaxedAtomicBool
1382 #ifdef XP_WIN
1383   value: true
1384 #else
1385   value: false
1386 #endif
1387   mirror: always
1389 - name: browser.dom.window.dump.enabled
1390   type: RelaxedAtomicBool
1391   value: @IS_NOT_MOZILLA_OFFICIAL@
1392   mirror: always
1394 # See bug 1738574
1395 - name: browser.download.start_downloads_in_tmp_dir
1396   type: bool
1397   value: false
1398   mirror: always
1400 # See bug 1747343
1401 - name: browser.download.always_ask_before_handling_new_types
1402   type: bool
1403   value: false
1404   mirror: always
1406 # See bug 1731668
1407 - name: browser.download.enable_spam_prevention
1408   type: bool
1409   value: false
1410   mirror: always
1412 # See bug 1772569
1413 - name: browser.download.open_pdf_attachments_inline
1414   type: bool
1415   value: false
1416   mirror: always
1418 # See bug 1811830
1419 - name: browser.download.force_save_internally_handled_attachments
1420   type: bool
1421   value: false
1422   mirror: always
1424 - name: browser.download.sanitize_non_media_extensions
1425   type: bool
1426   value: true
1427   mirror: always
1429 # Image document's automatic image sizing.
1430 - name: browser.enable_automatic_image_resizing
1431   type: bool
1432   value: true
1433   mirror: always
1435 # Image document's click-to-resize.
1436 - name: browser.enable_click_image_resizing
1437   type: bool
1438   value: @IS_NOT_ANDROID@
1439   mirror: always
1441 - name: browser.find.ignore_ruby_annotations
1442   type: bool
1443   value: true
1444   mirror: always
1446 #if defined(XP_MACOSX)
1447 # Whether pressing Esc will exit fullscreen.
1448 - name: browser.fullscreen.exit_on_escape
1449   type: bool
1450   value: true
1451   mirror: always
1452 #endif
1454 # The max url length we'll store in history.
1456 # The default value is mostly a guess based on various facts:
1458 # * IE didn't support urls longer than 2083 chars
1459 # * Sitemaps protocol used to support a maximum of 2048 chars
1460 # * Various SEO guides suggest to not go over 2000 chars
1461 # * Various apps/services are known to have issues over 2000 chars
1462 # * RFC 2616 - HTTP/1.1 suggests being cautious about depending
1463 #   on URI lengths above 255 bytes
1465 - name: browser.history.maxUrlLength
1466   type: uint32_t
1467   value: 2000
1468   mirror: always
1470 # Max size of push/replaceState data parameter
1471 - name: browser.history.maxStateObjectSize
1472   type: int32_t
1473   value: 16777216
1474   mirror: always
1476 # True to collect wireframes upon navigations / pushState
1477 - name: browser.history.collectWireframes
1478   type: bool
1479   value: false
1480   mirror: always
1482 # The minimum area for a rect to be included in a wireframe, in CSS pixels.
1484 # The current value of 50 is pretty arbitrary, and will be tuned as we refine
1485 # and test the wireframing capability.
1486 - name: browser.history.wireframeAreaThreshold
1487   type: uint32_t
1488   value: 50
1489   mirror: always
1491 #if defined(XP_WIN) || defined(XP_LINUX)
1492   # Notify TabUnloader or send the memory pressure if the memory resource
1493   # notification is signaled AND the available commit space is lower than
1494   # this value.
1495 -   name: browser.low_commit_space_threshold_mb
1496     type: RelaxedAtomicUint32
1497     value: 200
1498     mirror: always
1499 #endif
1501 #ifdef XP_LINUX
1502   # On Linux we also check available memory in comparison to total memory,
1503   # and use this percent value (out of 100) to determine if we are in a
1504   # low memory scenario.
1505 -   name: browser.low_commit_space_threshold_percent
1506     type: RelaxedAtomicUint32
1507     value: 5
1508     mirror: always
1509 #endif
1511 # Render animations and videos as a solid color
1512 - name: browser.measurement.render_anims_and_video_solid
1513   type: RelaxedAtomicBool
1514   value: false
1515   mirror: always
1517 - name: browser.navigation.requireUserInteraction
1518   type: bool
1519   value: false
1520   mirror: always
1522 # Indicates if about:newtab shows content (enabled) or just blank.
1523 - name: browser.newtabpage.enabled
1524   type: bool
1525   value: true
1526   mirror: always
1528 # Open PDFs in Edge with the --app flag if it is the default.
1529 - name: browser.pdf.launchDefaultEdgeAsApp
1530   type: bool
1531   value: true
1532   mirror: always
1534 # Maximium delay between keystrokes that will be considered typing (milliseconds).
1535 - name: browser.places.interactions.typing_timeout_ms
1536   type: RelaxedAtomicUint32
1537   value: 3000
1538   mirror: always
1540 # Maximum delay between scroll input events that will be considered a scrolling interaction (milliseconds).
1541 - name: browser.places.interactions.scrolling_timeout_ms
1542   type: RelaxedAtomicUint32
1543   value: 5000
1544   mirror: always
1546 # Number of seconds till the sponsored session is timeout.
1547 - name: browser.places.sponsoredSession.timeoutSecs
1548   type: RelaxedAtomicUint32
1549   value: 3600
1550   mirror: always
1552 # Whether to start the private browsing mode at application startup
1553 - name: browser.privatebrowsing.autostart
1554   type: bool
1555   value: false
1556   mirror: always
1558 # Force usage of in-memory (rather than file on disk) media cache for video streaming when private browsing
1559 - name: browser.privatebrowsing.forceMediaMemoryCache
1560   type: bool
1561   value: false
1562   mirror: always
1564 # Communicates the toolbar color to platform (for e.g., prefers-color-scheme).
1566 # Returns whether the toolbar is dark (0), light (1), or system (2). The
1567 # theming code overrides it if appropriate.
1568 - name: browser.theme.toolbar-theme
1569   type: RelaxedAtomicUint32
1570   value: 2
1571   mirror: always
1573 # Communicates the preferred content theme color to platform (for e.g.,
1574 # prefers-color-scheme).
1576 # dark (0), light (1), system (2), or toolbar (3).
1578 # Default to "toolbar", the theming code sets it appropriately.
1579 - name: browser.theme.content-theme
1580   type: RelaxedAtomicUint32
1581   value: 2
1582   mirror: always
1583   rust: true
1585 # Whether the firefox titlebar respects the
1586 # -moz-windows-accent-color-in-titlebar setting on the tab strip.
1587 - name: browser.theme.windows.accent-color-in-tabs.enabled
1588   type: RelaxedAtomicBool
1589   value: false
1590   mirror: always
1591   rust: true
1593 # Blocked plugin content
1594 - name: browser.safebrowsing.blockedURIs.enabled
1595   type: bool
1596   value: true
1597   mirror: always
1599 # Malware protection
1600 - name: browser.safebrowsing.malware.enabled
1601   type: bool
1602   value: true
1603   mirror: always
1605 # Phishing protection
1606 - name: browser.safebrowsing.phishing.enabled
1607   type: bool
1608   value: true
1609   mirror: always
1611 # Maximum size for an array to store the safebrowsing prefixset.
1612 - name: browser.safebrowsing.prefixset_max_array_size
1613   type: RelaxedAtomicUint32
1614   value: 512*1024
1615   mirror: always
1617 # SessionStore prefs
1618 # Maximum number of bytes of DOMSessionStorage data we collect per origin.
1619 - name: browser.sessionstore.dom_storage_limit
1620   type: uint32_t
1621   value: 2048
1622   mirror: always
1624 # Maximum number of characters of form field data per field we collect.
1625 - name: browser.sessionstore.dom_form_limit
1626   type: uint32_t
1627   value: 1024*1024*2
1628   mirror: always
1630 # Maximum number of characters of form data we collect per origin.
1631 - name: browser.sessionstore.dom_form_max_limit
1632   type: uint32_t
1633   value: 1024*1024*50
1634   mirror: always
1636 # Minimal interval between two save operations in milliseconds (while the user is active).
1637 - name: browser.sessionstore.interval
1638   type: RelaxedAtomicUint32
1639   value: 15000
1640   mirror: always
1642 # Disable collection of data for session store using the native collector code,
1643 # instead use the older implementation that's not compatible with session
1644 # history in the parent (and thus Fission).
1645 - name: browser.sessionstore.disable_platform_collection
1646   type: bool
1647 #if defined(MOZ_THUNDERBIRD)
1648   value: true
1649 #else
1650   value: false
1651 #endif
1652   mirror: once
1653   do_not_use_directly: true
1655 # Causes SessionStore to ignore non-final update messages from
1656 # browser tabs that were not caused by a flush from the parent.
1657 # This is a testing flag and should not be used by end-users.
1658 - name: browser.sessionstore.debug.no_auto_updates
1659   type: RelaxedAtomicBool
1660   value: false
1661   mirror: always
1663 # Whether we should draw the tabs on top of the titlebar.
1665 # no (0), yes (1), or default (2), which is true everywhere except Linux.
1666 - name: browser.tabs.inTitlebar
1667   type: int32_t
1668   value: 2
1669   mirror: always
1671 # If set, use DocumentChannel to directly initiate loads entirely
1672 # from parent-process BrowsingContexts
1673 - name: browser.tabs.documentchannel.parent-controlled
1674   type: bool
1675   value: false
1676   mirror: always
1678 # Testing-only pref which makes data: URIs be loaded in a "web" content process
1679 # instead of within a process based on the URI's loader.
1680 - name: browser.tabs.remote.dataUriInDefaultWebProcess
1681   type: bool
1682   value: false
1683   mirror: always
1685 # Testing-only pref to force system-triggered about:blank loads to not change
1686 # content processes. This is used for performance tests which load an
1687 # about:blank document between navigations for historical reasons to avoid
1688 # unnecessary process switches.
1689 - name: browser.tabs.remote.systemTriggeredAboutBlankAnywhere
1690   type: bool
1691   value: false
1692   mirror: always
1694 # Testing-only pref to cause PBrowser creation for a specific BrowsingContext to
1695 # fail, to test the errored codepath.
1696 - name: browser.tabs.remote.testOnly.failPBrowserCreation.enabled
1697   type: bool
1698   value: false
1699   mirror: always
1701 - name: browser.tabs.remote.force-paint
1702   type: bool
1703   value: true
1704   mirror: always
1706 # When this pref is enabled document loads with a mismatched
1707 # Cross-Origin-Embedder-Policy header will fail to load
1708 - name: browser.tabs.remote.useCrossOriginEmbedderPolicy
1709   type: RelaxedAtomicBool
1710   value: true
1711   mirror: always
1713 # This pref makes `credentialless` a valid value for
1714 # Cross-Origin-Embedder-Policy header
1715 - name: browser.tabs.remote.coep.credentialless
1716   type: RelaxedAtomicBool
1717 #if defined(ANDROID)
1718   value: @IS_NIGHTLY_BUILD@
1719 #else
1720   value: true
1721 #endif
1722   mirror: always
1723   do_not_use_directly: true
1725 # When this pref is enabled top level loads with a mismatched
1726 # Cross-Origin-Opener-Policy header will be loaded in a separate process.
1727 - name: browser.tabs.remote.useCrossOriginOpenerPolicy
1728   type: RelaxedAtomicBool
1729   value: true
1730   mirror: always
1732 # When this pref is enabled then we use a separate content process for
1733 # top-level load of file:// URIs
1734 - name: browser.tabs.remote.separateFileUriProcess
1735   type: RelaxedAtomicBool
1736 #if !defined(ANDROID)
1737   value: true
1738 #else
1739   value: false
1740 #endif
1741   mirror: always
1743 # Pref to control whether we use a separate privileged content process
1744 # for certain mozilla webpages (which are listed in the pref
1745 # browser.tabs.remote.separatedMozillaDomains).
1746 - name: browser.tabs.remote.separatePrivilegedMozillaWebContentProcess
1747   type: bool
1748   value: false
1749   mirror: always
1751 # Whether or not process selection for subframes will prefer re-using an
1752 # existing content process over creating a new one. Enabling this pref should
1753 # reduce the number of processes allocated for non-first-party domains if
1754 # dom.ipc.processCount.webIsolated > 1.
1755 - name: browser.tabs.remote.subframesPreferUsed
1756   type: bool
1757   value: true
1758   mirror: always
1760 # When this pref is enabled, opaque response is only allowed to enter the
1761 # content process if it's a response for media (audio, image, video), CSS, or
1762 # JavaScript.
1763 - name: browser.opaqueResponseBlocking
1764   type: RelaxedAtomicBool
1765 #if defined(ANDROID)
1766   value: false
1767 #else
1768   value: true
1769 #endif
1770   mirror: always
1772 # When this pref is enabled, the JS validator will be enabled for
1773 # ORB.
1774 - name: browser.opaqueResponseBlocking.javascriptValidator
1775   type: bool
1776   value: true
1777   mirror: always
1779 # This pref controls how filtering of opaque responses for calls to `Window.fetch`.
1780 # (and similar) is performed in the parent process. This is intended to make sure
1781 # that data that would be filtered in a content process never actually reaches that
1782 # content process.
1783 # See https://fetch.spec.whatwg.org/#concept-filtered-response-opaque
1784 #   0) Don't filter in the parent process at all, and let content processes handle
1785 #      opaque filtering. Regardless of if ORB is enabled or not. N.B. that if ORB
1786 #      is enabled opaque responses will be blocked.
1787 #   1) If ORB is enabled, in the parent process, filter the responses that ORB allows.
1788 #      N.B. any responses ORB doesn't allow will not send data to a content process
1789 #      since they will return a NetworkError. If the request is allowed by ORB, the
1790 #      internal response will be intact and sent to the content process as is.
1791 #   2) If ORB is enabled, in the parent process, filter the responses that ORB blocks,
1792 #      when they were issued by `Window.fetch` (and similar).
1793 #   3) Filter all responses in the parent, regardless of if ORB is enabled or not.
1794 #      This means that opaque responses coming from `Window.fetch` won't even be
1795 #      considered for being blocked by ORB.
1796 - name: browser.opaqueResponseBlocking.filterFetchResponse
1797   type: uint32_t
1798   value: 2
1799   mirror: always
1800   do_not_use_directly: true
1802 # This pref controls how exceptions to opaque response blocking for the media MIME types
1803 # `audio/*` and `video/*` are handled. This is because step 8 in the spec that performs
1804 # audio or video type pattern matching cannot handle certain MIME types (yet).
1805 # See https://whatpr.org/fetch/1442.html#orb-algorithm
1806 #   0) No exceptions
1807 #   1) Some exceptions, explicitly hard coded in `IsOpaqueSafeListedSpecBreakingMIMEType`
1808 #   2) Allow all MIME types beginning with `audio/*` or `video/*`.
1809 - name: browser.opaqueResponseBlocking.mediaExceptionsStrategy
1810   type: uint32_t
1811   value: 1
1812   mirror: always
1813   do_not_use_directly: true
1815 # When true, zooming will be enabled on all sites, even ones that declare
1816 # user-scalable=no.
1817 - name: browser.ui.zoom.force-user-scalable
1818   type: RelaxedAtomicBool
1819   value: false
1820   mirror: always
1822 - name: browser.viewport.desktopWidth
1823   type: RelaxedAtomicInt32
1824   value: 980
1825   mirror: always
1827 - name: browser.visited_color
1828   type: String
1829   value: "#551A8B"
1830   mirror: never
1832 # If you change this, you probably also want to change
1833 # nsXPLookAndFeel::GenericDarkColor for MozNativevisitedhyperlinktext.
1834 - name: browser.visited_color.dark
1835   type: String
1836   value: "#FFADFF"
1837   mirror: never
1839 # When true, soft reloads (including location.reload())
1840 # will only froce validate the top level document, subresources will
1841 # be loaded normally as-if users normally navigated to the page.
1842 - name: browser.soft_reload.only_force_validate_top_level_document
1843   type: bool
1844   value: true
1845   mirror: always
1847 # Whether or not to save and restore zoom levels on a per-site basis.
1848 - name: browser.zoom.siteSpecific
1849   type: bool
1850   value: @IS_NOT_ANDROID@
1851   mirror: always
1853 #---------------------------------------------------------------------------
1854 # Prefs starting with "channelclassifier."
1855 #---------------------------------------------------------------------------
1857 - name: channelclassifier.allowlist_example
1858   type: bool
1859   value: false
1860   mirror: always
1862 #---------------------------------------------------------------------------
1863 # Prefs starting with "clipboard."
1864 #---------------------------------------------------------------------------
1866 # Clipboard behavior.
1867 - name: clipboard.autocopy
1868   type: bool
1869 #if !defined(ANDROID) && !defined(XP_MACOSX) && defined(XP_UNIX)
1870   value: true
1871 #else
1872   value: false
1873 #endif
1874   mirror: always
1876 #ifdef XP_WIN
1877   # allow to copy clipboard data to Clipboard History/Cloud
1878   # (used on sensitive data in about:logins and Private Browsing)
1879 -   name: clipboard.copyPrivateDataToClipboardCloudOrHistory
1880     type: bool
1881     value: false
1882     mirror: always
1884   # Whether to put a file promise onto the clipboard when copying images on Windows
1885 -   name: clipboard.imageAsFile.enabled
1886     type: bool
1887     value: @IS_NOT_EARLY_BETA_OR_EARLIER@
1888     mirror: always
1889 #endif
1891 #---------------------------------------------------------------------------
1892 # Prefs starting with "consoleservice."
1893 #---------------------------------------------------------------------------
1895 #if defined(ANDROID)
1896   # Disable sending console to logcat on release builds.
1897 -   name: consoleservice.logcat
1898     type: RelaxedAtomicBool
1899     value: @IS_NOT_RELEASE_OR_BETA@
1900     mirror: always
1901 #endif
1903 #---------------------------------------------------------------------------
1904 # Prefs starting with "content."
1905 #---------------------------------------------------------------------------
1907 - name: content.cors.disable
1908   type: bool
1909   value: false
1910   mirror: always
1912 # Back off timer notification after count.
1913 # -1 means never.
1914 - name: content.notify.backoffcount
1915   type: int32_t
1916   value: -1
1917   mirror: always
1919 # Notification interval in microseconds.
1920 # The notification interval has a dramatic effect on how long it takes to
1921 # initially display content for slow connections. The current value
1922 # provides good incremental display of content without causing an increase
1923 # in page load time. If this value is set below 1/10 of a second it starts
1924 # to impact page load performance.
1925 # See bugzilla bug 72138 for more info.
1926 - name: content.notify.interval
1927   type: int32_t
1928   value: 120000
1929   mirror: always
1931 # Do we notify based on time?
1932 - name: content.notify.ontimer
1933   type: bool
1934   value: true
1935   mirror: always
1937 # How many times to deflect in interactive mode.
1938 - name: content.sink.interactive_deflect_count
1939   type: int32_t
1940   value: 0
1941   mirror: always
1943 # How many times to deflect in perf mode.
1944 - name: content.sink.perf_deflect_count
1945   type: int32_t
1946   value: 200
1947   mirror: always
1949 # Parse mode for handling pending events.
1950 # 0 = don't check for pending events
1951 # 1 = don't deflect if there are pending events
1952 # 2 = bail if there are pending events
1953 - name: content.sink.pending_event_mode
1954   type: int32_t
1955 #ifdef XP_WIN
1956   value: 1
1957 #else
1958   value: 0
1959 #endif
1960   mirror: always
1962 # How often to probe for pending events. 1 = every token.
1963 - name: content.sink.event_probe_rate
1964   type: int32_t
1965   value: 1
1966   mirror: always
1968 # How long to stay off the event loop in interactive mode (microseconds).
1969 - name: content.sink.interactive_parse_time
1970   type: int32_t
1971   value: 3000
1972   mirror: always
1974 # How long to stay off the event loop in perf mode.
1975 - name: content.sink.perf_parse_time
1976   type: int32_t
1977   value: 30000
1978   mirror: always
1980 #  How long to be in interactive mode after an event.
1981 - name: content.sink.interactive_time
1982   type: uint32_t
1983   value: 750000
1984   mirror: always
1986 # How long to stay in perf mode after initial loading.
1987 - name: content.sink.initial_perf_time
1988   type: uint32_t
1989   value: 2000000
1990   mirror: always
1992 # Should we switch between perf-mode and interactive-mode?
1993 # 0 = Switch
1994 # 1 = Interactive mode
1995 # 2 = Perf mode
1996 - name: content.sink.enable_perf_mode
1997   type: int32_t
1998   value: 0
1999   mirror: always
2001 #---------------------------------------------------------------------------
2002 # Prefs starting with "converter."
2003 #---------------------------------------------------------------------------
2005 # Whether we include ruby annotation in the text despite whether it
2006 # is requested. This was true because we didn't explicitly strip out
2007 # annotations. Set false by default to provide a better behavior, but
2008 # we want to be able to pref-off it if user doesn't like it.
2009 - name: converter.html2txt.always_include_ruby
2010   type: bool
2011   value: false
2012   mirror: always
2014 #---------------------------------------------------------------------------
2015 # Prefs starting with "cookiebanners."
2016 #---------------------------------------------------------------------------
2018 # Controls the cookie banner handling mode in normal browsing.
2019 # 0: Disables all cookie banner handling.
2020 # 1: Reject-all if possible, otherwise do nothing.
2021 # 2: Reject-all if possible, otherwise accept-all.
2022 - name: cookiebanners.service.mode
2023   type: uint32_t
2024   value: 0
2025   mirror: always
2027 # When set to true, cookie banners are detected and detection events are
2028 # dispatched, but they will not be handled. Requires the service to be enabled
2029 # for the desired mode via pref cookiebanners.service.mode*
2030 - name: cookiebanners.service.detectOnly
2031   type: bool
2032   value: false
2033   mirror: always
2035 # Controls the cookie banner handling mode in private browsing. Same mode
2036 # options as the normal browsing pref above.
2037 - name: cookiebanners.service.mode.privateBrowsing
2038   type: uint32_t
2039   value: 0
2040   mirror: always
2042 # Enables use of global CookieBannerRules, which apply to all sites. This is
2043 # used for click rules that can handle common Consent Management Providers
2044 # (CMP).
2045 # Enabling this (when the cookie handling feature is enabled) may negatively
2046 # impact site performance since it requires us to run rule-defined query
2047 # selectors for every page.
2048 - name: cookiebanners.service.enableGlobalRules
2049   type: bool
2050   value: true
2051   mirror: always
2053 # Whether global rules are allowed to run in sub-frames. Running query selectors
2054 # in every sub-frame may negatively impact performance, but is required for some
2055 # CMPs.
2056 - name: cookiebanners.service.enableGlobalRules.subFrames
2057   type: bool
2058   value: true
2059   mirror: always
2061 # Enables the cookie banner cookie injector. The cookie banner cookie injector
2062 # depends on the `cookiebanners.service.mode` pref above.
2063 - name: cookiebanners.cookieInjector.enabled
2064   type: bool
2065   value: true
2066   mirror: always
2068 # By default, how many seconds in the future cookies should expire after they
2069 # have been injected. Defaults to 12 months. Individual cookie rules may
2070 # override this.
2071 - name: cookiebanners.cookieInjector.defaultExpiryRelative
2072   type: uint32_t
2073   value: 31536000
2074   mirror: always
2076 # How many times per site and site load to check for cookie banners after which
2077 # the mechanism is considered on cooldown for the site in the current browsing
2078 # session. If the threshold is set to zero, banner clicking won't be considered
2079 # as being on cooldown regardless of how many times the site is loaded. The
2080 # maximum value for the retry is 255, any value over than that will be capped.
2081 - name: cookiebanners.bannerClicking.maxTriesPerSiteAndSession
2082   type: uint32_t
2083   value: 3
2084   mirror: always
2086 #---------------------------------------------------------------------------
2087 # Prefs starting with "datareporting."
2088 #---------------------------------------------------------------------------
2090 - name: datareporting.healthreport.uploadEnabled
2091   type: RelaxedAtomicBool
2092   value: false
2093   mirror: always
2094   rust: true
2096 #---------------------------------------------------------------------------
2097 # Prefs starting with "device."
2098 #---------------------------------------------------------------------------
2100 # Is support for the device sensors API enabled?
2101 - name: device.sensors.enabled
2102   type: bool
2103   value: true
2104   mirror: always
2106 # KaiOS-only, see https://bugzilla.mozilla.org/show_bug.cgi?id=1699707#c10
2107 - name: device.sensors.ambientLight.enabled
2108   type: bool
2109   value: false
2110   mirror: always
2112 - name: device.sensors.motion.enabled
2113   type: bool
2114   value: true
2115   mirror: always
2117 - name: device.sensors.orientation.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.proximity.enabled
2124   type: bool
2125   value: false
2126   mirror: always
2128 - name: device.sensors.test.events
2129   type: bool
2130   value: false
2131   mirror: always
2133 #---------------------------------------------------------------------------
2134 # Prefs starting with "devtools."
2135 #---------------------------------------------------------------------------
2137 - name: devtools.console.stdout.chrome
2138   type: RelaxedAtomicBool
2139   value: @IS_NOT_MOZILLA_OFFICIAL@
2140   mirror: always
2142 - name: devtools.console.stdout.content
2143   type: RelaxedAtomicBool
2144   value: false
2145   mirror: always
2147 #---------------------------------------------------------------------------
2148 # Prefs starting with "docshell."
2149 #---------------------------------------------------------------------------
2151 # Used to indicate whether session history listeners should be notified
2152 # about content viewer eviction. Used only for testing.
2153 - name: docshell.shistory.testing.bfevict
2154   type: bool
2155   value: false
2156   mirror: always
2158 # If true, pages with an opener won't be bfcached.
2159 - name: docshell.shistory.bfcache.require_no_opener
2160   type: bool
2161   value: @IS_ANDROID@
2162   mirror: always
2164 # If true, page with beforeunload or unload event listeners can be bfcached.
2165 - name: docshell.shistory.bfcache.allow_unload_listeners
2166   type: bool
2167   value: @IS_ANDROID@
2168   mirror: always
2170 # If true, page with beforeunload event listeners can be bfcached.
2171 # This only works when sessionHistoryInParent is enabled.
2172 - name: docshell.shistory.bfcache.ship_allow_beforeunload_listeners
2173   type: bool
2174   value: true
2175   mirror: always
2177 #---------------------------------------------------------------------------
2178 # Prefs starting with "dom."
2179 #---------------------------------------------------------------------------
2181 # Allow cut/copy
2182 - name: dom.allow_cut_copy
2183   type: bool
2184   value: true
2185   mirror: always
2187 # Checks if offscreen animation throttling is enabled.
2188 - name: dom.animations.offscreen-throttling
2189   type: bool
2190   value: true
2191   mirror: always
2193 # Is support for composite operations from the Web Animations API enabled?
2194 - name: dom.animations-api.compositing.enabled
2195   type: bool
2196   value: true
2197   mirror: always
2199 # Is support for timelines from the Web Animations API enabled?
2200 - name: dom.animations-api.timelines.enabled
2201   type: bool
2202   value: true
2203   mirror: always
2205 # Is support for Navigator.getBattery enabled?
2206 - name: dom.battery.enabled
2207   type: bool
2208   value: true
2209   mirror: always
2211 # Block multiple external protocol URLs in iframes per single event.
2212 - name: dom.block_external_protocol_in_iframes
2213   type: bool
2214   value: true
2215   mirror: always
2217 # Block sandboxed BrowsingContexts from navigating to external protocols.
2218 - name: dom.block_external_protocol_navigation_from_sandbox
2219   type: bool
2220   value: true
2221   mirror: always
2223 # Block Insecure downloads from Secure Origins
2224 - name: dom.block_download_insecure
2225   type: bool
2226   value: true
2227   mirror: always
2229 # Block multiple window.open() per single event.
2230 - name: dom.block_multiple_popups
2231   type: bool
2232   value: true
2233   mirror: always
2235 # The maximum number of popup that is allowed to be opened. Set to -1 for no
2236 # limit.
2237 - name: dom.popup_maximum
2238   type: int32_t
2239   value: 20
2240   mirror: always
2242   # Enable CacheAPI in private browsing mode with encryption
2243 - name: dom.cache.privateBrowsing.enabled
2244   type: RelaxedAtomicBool
2245   value: true
2246   mirror: always
2248 # Exposes window.caches and skips SecureContext check.
2249 # dom.serviceWorkers.testing.enabled also includes the same effect.
2250 - name: dom.caches.testing.enabled
2251   type: RelaxedAtomicBool
2252   value: false
2253   mirror: always
2255 # Disable capture attribute for input elements; only supported on GeckoView.
2256 - name: dom.capture.enabled
2257   type: bool
2258   value: false
2259   mirror: always
2261 # HTML specification says the level should be 5
2262 # https://html.spec.whatwg.org/#timer-initialisation-steps
2263 - name: dom.clamp.timeout.nesting.level
2264   type: uint32_t
2265   value: 5
2266   mirror: once
2268 # Disable custom highlight API; implementation pending.
2269 - name: dom.customHighlightAPI.enabled
2270   type: RelaxedAtomicBool
2271   value: @IS_NIGHTLY_BUILD@
2272   mirror: always
2273   rust: true
2275 # Allow control characters appear in composition string.
2276 # When this is false, control characters except
2277 # CHARACTER TABULATION (horizontal tab) are removed from
2278 # both composition string and data attribute of compositionupdate
2279 # and compositionend events.
2280 - name: dom.compositionevent.allow_control_characters
2281   type: bool
2282   value: false
2283   mirror: always
2285 # Compression Streams (CompressionStream/DecompressionStream)
2286 - name: dom.compression_streams.enabled
2287   type: RelaxedAtomicBool
2288   value: true
2289   mirror: always
2291 # Is support for CSSPseudoElement enabled?
2292 - name: dom.css_pseudo_element.enabled
2293   type: bool
2294   value: false
2295   mirror: always
2297 # After how many seconds we allow external protocol URLs in iframe when not in
2298 # single events
2299 - name: dom.delay.block_external_protocol_in_iframes
2300   type: uint32_t
2301   value: 10   # in seconds
2302   mirror: always
2304 # Whether the above pref has any effect at all.
2305 # Make sure cases like bug 1795380 work before trying to turn this off. See
2306 # bug 1680721 for some other context that might be relevant.
2307 - name: dom.delay.block_external_protocol_in_iframes.enabled
2308   type: bool
2309   value: true
2310   mirror: always
2312 # Only propagate the open window click permission if the setTimeout() is equal
2313 # to or less than this value.
2314 - name: dom.disable_open_click_delay
2315   type: int32_t
2316   value: 1000
2317   mirror: always
2319 - name: dom.disable_open_during_load
2320   type: bool
2321   value: false
2322   mirror: always
2324 - name: dom.disable_beforeunload
2325   type: bool
2326   value: false
2327   mirror: always
2329 - name: dom.require_user_interaction_for_beforeunload
2330   type: bool
2331   value: true
2332   mirror: always
2334 # Enable/disable Gecko specific edit commands
2335 - name: dom.document.edit_command.contentReadOnly.enabled
2336   type: bool
2337   value: @IS_NOT_EARLY_BETA_OR_EARLIER@
2338   mirror: always
2340 - name: dom.document.edit_command.insertBrOnReturn.enabled
2341   type: bool
2342   value: @IS_NOT_EARLY_BETA_OR_EARLIER@
2343   mirror: always
2345 # If set this to true, `Document.execCommand` may be performed nestedly.
2346 # Otherwise, nested calls just return false.
2347 - name: dom.document.exec_command.nested_calls_allowed
2348   type: bool
2349   value: false
2350   mirror: always
2352 # Only intended for fuzzing purposes, this will break mozPrintCallback, etc.
2353 - name: dom.window_print.fuzzing.block_while_printing
2354   type: bool
2355   value: false
2356   mirror: always
2358 - name: dom.element.transform-getters.enabled
2359   type: bool
2360   value: false
2361   mirror: always
2363 # Whether the popover attribute implementation is enabled,
2364 # see https://html.spec.whatwg.org/#the-popover-attribute
2365 - name: dom.element.popover.enabled
2366   type: RelaxedAtomicBool
2367   value: true
2368   mirror: always
2369   rust: true
2371 # Whether the blocking attribute implementation is enabled,
2372 # see https://html.spec.whatwg.org/#blocking-attributes
2373 - name: dom.element.blocking.enabled
2374   type: bool
2375   value: false
2376   mirror: always
2378 # Whether CustomStateSet is enabled
2379 - name: dom.element.customstateset.enabled
2380   type: RelaxedAtomicBool
2381   value: @IS_NIGHTLY_BUILD@
2382   mirror: always
2383   rust: true
2385 # Whether the invoketarget attribute implementation is enabled
2386 - name: dom.element.invokers.enabled
2387   type: bool
2388   value: false
2389   mirror: always
2391 - name: dom.mouse_capture.enabled
2392   type: bool
2393   value: true
2394   mirror: always
2396 # Is support for Performance.mozMemory enabled?
2397 - name: dom.enable_memory_stats
2398   type: bool
2399   value: false
2400   mirror: always
2402 # Enable Performance API
2403 # Whether nonzero values can be returned from performance.timing.*
2404 - name: dom.enable_performance
2405   type: RelaxedAtomicBool
2406   value: true
2407   mirror: always
2409 # Enable Performance Observer API
2410 - name: dom.enable_performance_observer
2411   type: RelaxedAtomicBool
2412   value: true
2413   mirror: always
2415 # Whether resource timing will be gathered and returned by performance.GetEntries*
2416 - name: dom.enable_resource_timing
2417   type: bool
2418   value: true
2419   mirror: always
2421 # Whether event timing will be gathered and returned by performance observer*
2422 - name: dom.enable_event_timing
2423   type: RelaxedAtomicBool
2424   value: true
2425   mirror: always
2427 # Whether the LargestContentfulPaint API will be gathered and returned by performance observer*
2428 - name: dom.enable_largest_contentful_paint
2429   type: RelaxedAtomicBool
2430   value: true
2431   mirror: always
2433 # Whether performance.GetEntries* will contain an entry for the active document
2434 - name: dom.enable_performance_navigation_timing
2435   type: bool
2436   value: true
2437   mirror: always
2439 # Whether the scheduler interface will be exposed
2440 - name: dom.enable_web_task_scheduling
2441   type: RelaxedAtomicBool
2442   value: @IS_NIGHTLY_BUILD@
2443   mirror: always
2445 # If this is true, it's allowed to fire "cut", "copy" and "paste" events.
2446 # Additionally, "input" events may expose clipboard content when inputType
2447 # is "insertFromPaste" or something.
2448 - name: dom.event.clipboardevents.enabled
2449   type: bool
2450   value: true
2451   mirror: always
2453 # Whether Shift+Right click force-opens the context menu
2454 - name: dom.event.contextmenu.shift_suppresses_event
2455   type: bool
2456   value: true
2457   mirror: always
2459 - name: dom.event.dragexit.enabled
2460   type: bool
2461   value: @IS_NOT_NIGHTLY_BUILD@
2462   mirror: always
2464 # If this pref is set to true, typing a surrogate pair causes one `keypress`
2465 # event whose `charCode` stores the unicode code point over 0xFFFF.  This is
2466 # compatible with Safari and Chrome in non-Windows platforms.
2467 # Otherwise, typing a surrogate pair causes two `keypress` events.  This is
2468 # compatible with legacy web apps which does
2469 # `String.fromCharCode(event.charCode)`.
2470 - name: dom.event.keypress.dispatch_once_per_surrogate_pair
2471   type: bool
2472   value: false
2473   mirror: always
2475 # This is meaningful only when `dispatch_once_per_surrogate_pair` is false.
2476 # If this pref is set to true, `.key` of the first `keypress` is set to the
2477 # high-surrogate and `.key` of the other is set to the low-surrogate.
2478 # Therefore, setting this exposing ill-formed UTF-16 string with `.key`.
2479 # (And also `InputEvent.data` if pressed in an editable element.)
2480 # Otherwise, `.key` of the first `keypress` is set to the surrogate pair, and
2481 # `.key` of the second `keypress` is set to the empty string.
2482 - name: dom.event.keypress.key.allow_lone_surrogate
2483   type: bool
2484   value: @IS_NOT_EARLY_BETA_OR_EARLIER@
2485   mirror: always
2487 # Whether wheel event target's should be grouped. When enabled, all wheel
2488 # events that occur in a given wheel transaction have the same event target.
2489 - name: dom.event.wheel-event-groups.enabled
2490   type: bool
2491   value: true
2492   mirror: always
2494 # Whether WheelEvent should return pixels instead of lines for
2495 # WheelEvent.deltaX/Y/Z, when deltaMode hasn't been checked.
2497 # Other browsers don't use line deltas and websites forget to check for it, see
2498 # bug 1392460.
2499 - name: dom.event.wheel-deltaMode-lines.disabled
2500   type: bool
2501   value: true
2502   mirror: always
2504 # Mostly for debugging. Whether we should do the same as
2505 # dom.event.wheel-deltaMode-lines.disabled, but unconditionally rather than
2506 # only when deltaMode hasn't been checked.
2507 - name: dom.event.wheel-deltaMode-lines.always-disabled
2508   type: bool
2509   value: false
2510   mirror: always
2512 # A blocklist (list of domains) for the
2513 # dom.event.wheel-deltaMode-lines.disabled behavior, in case potential
2514 # unforeseen problems with it arrive.
2515 - name: dom.event.wheel-deltaMode-lines.always-enabled
2516   type: String
2517   value: ""
2518   mirror: never
2520 #if defined(XP_MACOSX)
2521 # Whether to disable treating ctrl click as right click
2522 - name: dom.event.treat_ctrl_click_as_right_click.disabled
2523   type: bool
2524   value: @IS_NIGHTLY_BUILD@
2525   mirror: always
2526 #endif
2528 # Whether Gecko keeps store or forgets the last deepest "enter" event target for
2529 # the next "enter" or "leave" event dispatching when the last "over" event
2530 # target is removed from the DOM tree.
2531 - name: dom.events.mouse-pointer-boundary.keep-enter-targets-after-over-target-removed
2532   type: bool
2533   value: @IS_EARLY_BETA_OR_EARLIER@
2534   mirror: always
2536 # Whether .offset{X,Y} for events targeted at SVG nodes returns bounds relative
2537 # to the outer SVG.
2538 - name: dom.events.offset-in-svg-relative-to-svg-root
2539   type: bool
2540   value: true
2541   mirror: always
2543 # Control whether clipboard.read(), clipboard.write() and ClipboardItem are exposed
2544 # to content.
2545 - name: dom.events.asyncClipboard.clipboardItem
2546   type: bool
2547   value: @IS_EARLY_BETA_OR_EARLIER@
2548   mirror: always
2550 # Skips checking permission and user activation when accessing the clipboard.
2551 # Should only be enabled in tests.
2552 # Access with Clipboard::IsTestingPrefEnabled().
2553 - name: dom.events.testing.asyncClipboard
2554   type: bool
2555   value: false
2556   mirror: always
2557   do_not_use_directly: true
2559 # Control whether `navigator.clipboard.readText()` is exposed to content.
2560 - name: dom.events.asyncClipboard.readText
2561   type: bool
2562   value: true
2563   mirror: always
2564   do_not_use_directly: true
2566 # This pref controls whether or not the `protected` dataTransfer state is
2567 # enabled. If the `protected` dataTransfer stae is disabled, then the
2568 # DataTransfer will be read-only whenever it should be protected, and will not
2569 # be disconnected after a drag event is completed.
2570 - name: dom.events.dataTransfer.protected.enabled
2571   type: bool
2572   value: false
2573   mirror: always
2575 # Whether to hide normal files (i.e. non-images) in dataTransfer inside
2576 # the content process.
2577 - name: dom.events.dataTransfer.mozFile.enabled
2578   type: bool
2579   value: true
2580   mirror: always
2582 - name: dom.events.dataTransfer.imageAsFile.enabled
2583   type: bool
2584   value: false
2585   mirror: always
2587 # User interaction timer interval, in ms
2588 - name: dom.events.user_interaction_interval
2589   type: uint32_t
2590   value: 5000
2591   mirror: always
2593 # Whether to try to compress touchmove events on IPC layer.
2594 - name: dom.events.compress.touchmove
2595   type: bool
2596   value: true
2597   mirror: always
2599 # In addition to the above IPC layer compresison, allow touchmove
2600 # events to be further coalesced in the child side after they
2601 # are sent.
2602 - name: dom.events.coalesce.touchmove
2603   type: bool
2604   value: true
2605   mirror: always
2607 # Allow mousemove events to be coalesced in the child side after they are sent.
2608 - name: dom.events.coalesce.mousemove
2609   type: bool
2610   value: true
2611   mirror: always
2613 # Whether to expose test interfaces of various sorts
2614 - name: dom.expose_test_interfaces
2615   type: bool
2616   value: false
2617   mirror: always
2619 - name: dom.fetchKeepalive.enabled
2620   type: RelaxedAtomicBool
2621   value: false
2622   mirror: always
2624 - name: dom.fetchObserver.enabled
2625   type: RelaxedAtomicBool
2626   value: false
2627   mirror: always
2629 # Allow the content process to create a File from a path. This is allowed just
2630 # on parent process, on 'file' Content process, or for testing.
2631 - name: dom.file.createInChild
2632   type: RelaxedAtomicBool
2633   value: false
2634   mirror: always
2636 # Support @autocomplete values for form autofill feature.
2637 - name: dom.forms.autocomplete.formautofill
2638   type: bool
2639   value: false
2640   mirror: always
2642 # Only trusted submit event could trigger form submission.
2643 - name: dom.forms.submit.trusted_event_only
2644   type: bool
2645   value: false
2646   mirror: always
2648 # This pref just controls whether we format the number with grouping separator
2649 # characters when the internal value is set or updated. It does not stop the
2650 # user from typing in a number and using grouping separators.
2651 - name: dom.forms.number.grouping
2652   type: bool
2653   value: false
2654   mirror: always
2656 # Whether the spin buttons will always appear, or if they
2657 # will only appear when the input is focused or hovered.
2658 - name: dom.forms.number.hide_spin_buttons_when_no_hover_or_focus
2659   type: bool
2660   value: @IS_NIGHTLY_BUILD@
2661   mirror: always
2663 # Whether the Gamepad API is enabled
2664 - name: dom.gamepad.enabled
2665   type: bool
2666   value: true
2667   mirror: always
2669 # Is Gamepad Extension API enabled?
2670 - name: dom.gamepad.extensions.enabled
2671   type: bool
2672   value: true
2673   mirror: always
2675 # Is LightIndicator API enabled in Gamepad Extension API?
2676 - name: dom.gamepad.extensions.lightindicator
2677   type: bool
2678   value: false
2679   mirror: always
2681 # Is MultiTouch API enabled in Gamepad Extension API?
2682 - name: dom.gamepad.extensions.multitouch
2683   type: bool
2684   value: false
2685   mirror: always
2687 # Is Gamepad vibrate haptic feedback function enabled?
2688 - name: dom.gamepad.haptic_feedback.enabled
2689   type: bool
2690   value: true
2691   mirror: always
2693 - name: dom.gamepad.non_standard_events.enabled
2694   type: bool
2695   value: @IS_NOT_RELEASE_OR_BETA@
2696   mirror: always
2698 - name: dom.gamepad.test.enabled
2699   type: RelaxedAtomicBool
2700   value: false
2701   mirror: always
2703 # W3C draft ImageCapture API
2704 - name: dom.imagecapture.enabled
2705   type: bool
2706   value: false
2707   mirror: always
2709 # The root margin for image lazy loading, defined as four (value, percentage)
2710 # pairs.
2711 - name: dom.image-lazy-loading.root-margin.top
2712   type: float
2713   value: 600
2714   mirror: always
2716 - name: dom.image-lazy-loading.root-margin.top.percentage
2717   type: bool
2718   value: false
2719   mirror: always
2721 - name: dom.image-lazy-loading.root-margin.bottom
2722   type: float
2723   value: 600
2724   mirror: always
2726 - name: dom.image-lazy-loading.root-margin.bottom.percentage
2727   type: bool
2728   value: false
2729   mirror: always
2731 - name: dom.image-lazy-loading.root-margin.left
2732   type: float
2733   value: 600
2734   mirror: always
2736 - name: dom.image-lazy-loading.root-margin.left.percentage
2737   type: bool
2738   value: false
2739   mirror: always
2741 - name: dom.image-lazy-loading.root-margin.right
2742   type: float
2743   value: 600
2744   mirror: always
2746 - name: dom.image-lazy-loading.root-margin.right.percentage
2747   type: bool
2748   value: false
2749   mirror: always
2751 # Enable indexedDB in private browsing mode with encryption
2752 - name: dom.indexedDB.privateBrowsing.enabled
2753   type: RelaxedAtomicBool
2754   value: true
2755   mirror: always
2757 # A pref that is used to slow down connection idle maintenance for testing
2758 # purposes.
2759 - name: dom.indexedDB.connectionIdleMaintenance.pauseOnConnectionThreadMs
2760   type: RelaxedAtomicUint32
2761   value: 0
2762   mirror: always
2764 # Whether or not indexedDB test mode is enabled.
2765 - name: dom.indexedDB.testing
2766   type: RelaxedAtomicBool
2767   value: false
2768   mirror: always
2770 # Whether or not indexedDB experimental features are enabled.
2771 - name: dom.indexedDB.experimental
2772   type: RelaxedAtomicBool
2773   value: false
2774   mirror: always
2776 # Whether or not indexedDB preprocessing is enabled.
2777 - name: dom.indexedDB.preprocessing
2778   type: RelaxedAtomicBool
2779   value: false
2780   mirror: always
2782 # How innerWidth / innerHeight return rounded or fractional sizes.
2784 #   0 or others: Do not round at all.
2785 #   1: Round.
2786 #   2: Truncate.
2788 # NOTE(emilio): Fractional sizes are not web-compatible, see the regressions
2789 # from bug 1676843, but we want to expose the fractional sizes (probably in
2790 # another API) one way or another, see [1], so we're keeping the code for the
2791 # time being.
2793 # [1]: https://github.com/w3c/csswg-drafts/issues/5260
2794 - name: dom.innerSize.rounding
2795   type: uint32_t
2796   value: 2
2797   mirror: always
2799 # Whether we conform to Input Events Level 1 or Input Events Level 2.
2800 # true:  conforming to Level 1
2801 # false: conforming to Level 2
2802 - name: dom.input_events.conform_to_level_1
2803   type: bool
2804   value: true
2805   mirror: always
2807 # Whether we allow BrowsingContextGroup to suspend input events
2808 - name: dom.input_events.canSuspendInBCG.enabled
2809   type: bool
2810   value: false
2811   mirror: always
2813 # The minimum number of ticks after page navigation
2814 # that need to occur before user input events are allowed to be handled.
2815 - name: dom.input_events.security.minNumTicks
2816   type: uint32_t
2817   value: 3
2818   mirror: always
2820 # The minimum elapsed time (in milliseconds) after page navigation
2821 # for user input events are allowed to be handled.
2822 - name: dom.input_events.security.minTimeElapsedInMS
2823   type: uint32_t
2824   value: 100
2825   mirror: always
2827 # By default user input handling delay is disabled (mostly) for testing ,
2828 # this is used for forcefully enable it for certain tests.
2829 - name: dom.input_events.security.isUserInputHandlingDelayTest
2830   type: bool
2831   value: false
2832   mirror: always
2834 # The maximum time (milliseconds) we reserve for handling input events in each
2835 # frame.
2836 - name: dom.input_event_queue.duration.max
2837   type: uint32_t
2838   value: 8
2839   mirror: always
2841 # Enable not moving the cursor to end when a text input or textarea has .value
2842 # set to the value it already has.  By default, enabled.
2843 - name: dom.input.skip_cursor_move_for_same_value_set
2844   type: bool
2845   value: true
2846   mirror: always
2848 # How often to check for CPOW timeouts (ms). CPOWs are only timed
2849 # out by the hang monitor.
2850 - name: dom.ipc.cpow.timeout
2851   type: uint32_t
2852   value: 500
2853   mirror: always
2855 #ifdef MOZ_ENABLE_FORKSERVER
2856 - name: dom.ipc.forkserver.enable
2857   type: bool
2858   value: false
2859   mirror: once
2860 #endif
2862 #ifdef MOZ_WIDGET_GTK
2864 # Avoid the use of GTK in content processes if possible, by running
2865 # them in headless mode, to conserve resources (e.g., connections to
2866 # the X server).  See the usage in `ContentParent.cpp` for the full
2867 # definition of "if possible".
2869 # This does not affect sandbox policies; content processes may still
2870 # dynamically connect to the display server for, e.g., WebGL.
2871 - name: dom.ipc.avoid-gtk
2872   type: bool
2873   value: true
2874   mirror: always
2875 #endif
2877 # Whether or not to collect a paired minidump when force-killing a
2878 # content process.
2879 - name: dom.ipc.tabs.createKillHardCrashReports
2880   type: bool
2881   value: @IS_NOT_RELEASE_OR_BETA@
2882   mirror: once
2884 # Enable e10s hang monitoring (slow script checking and plugin hang detection).
2885 - name: dom.ipc.processHangMonitor
2886   type: bool
2887   value: true
2888   mirror: once
2890 # Whether we report such process hangs
2891 - name: dom.ipc.reportProcessHangs
2892   type: RelaxedAtomicBool
2893 # Don't report hangs in DEBUG builds. They're too slow and often a
2894 # debugger is attached.
2895 #ifdef DEBUG
2896   value: false
2897 #else
2898   value: true
2899 #endif
2900   mirror: always
2902 # Process launch delay (in milliseconds).
2903 - name: dom.ipc.processPrelaunch.delayMs
2904   type: uint32_t
2905 # This number is fairly arbitrary ... the intention is to put off
2906 # launching another app process until the last one has finished
2907 # loading its content, to reduce CPU/memory/IO contention.
2908   value: 1000
2909   mirror: always
2911 - name: dom.ipc.processPrelaunch.startupDelayMs
2912   type: uint32_t
2913 # delay starting content processes for a short time after browser start
2914 # to provide time for the UI to come up
2915   value: 1000
2916   mirror: always
2918 # Process preallocation cache
2919 # Only used in fission; in e10s we use 1 always
2920 - name: dom.ipc.processPrelaunch.fission.number
2921   type: uint32_t
2922   value: 3
2923   mirror: always
2925 # Limit preallocated processes below this memory size (in MB)
2926 - name: dom.ipc.processPrelaunch.lowmem_mb
2927   type: uint32_t
2928   value: 4096
2929   mirror: always
2931 - name: dom.ipc.processPriorityManager.enabled
2932   type: bool
2933   value: true
2934   mirror: always
2936 - name: dom.ipc.processPriorityManager.testMode
2937   type: bool
2938   value: false
2939   mirror: always
2941 - name: dom.ipc.processPriorityManager.backgroundPerceivableGracePeriodMS
2942   type: uint32_t
2943 #if defined(MOZ_WIDGET_ANDROID) && defined(NIGHTLY_BUILD)
2944   value: 3000
2945 #else
2946   value: 0
2947 #endif
2948   mirror: always
2950 - name: dom.ipc.processPriorityManager.backgroundGracePeriodMS
2951   type: uint32_t
2952 #if defined(MOZ_WIDGET_ANDROID) && defined(NIGHTLY_BUILD)
2953   value: 3000
2954 #else
2955   value: 0
2956 #endif
2957   mirror: always
2959 #ifdef XP_WIN
2960 - name: dom.ipc.processPriorityManager.backgroundUsesEcoQoS
2961   type: bool
2962   value: false
2963   mirror: always
2964 #endif
2966 # Support for input type=month, type=week. By default, disabled.
2967 - name: dom.forms.datetime.others
2968   type: bool
2969   value: @IS_ANDROID@
2970   mirror: always
2972 - name: dom.forms.always_allow_pointer_events.enabled
2973   type: bool
2974   value: true
2975   mirror: always
2977 # Is support for key events and focus events on disabled elements enabled?
2978 - name: dom.forms.always_allow_key_and_focus_events.enabled
2979   type: bool
2980   value: @IS_EARLY_BETA_OR_EARLIER@
2981   mirror: always
2983 # Whether to disable only the descendants or the parent fieldset element too
2984 # Note that this still allows it to be selected by `:disable`.
2985 - name: dom.forms.fieldset_disable_only_descendants.enabled
2986   type: bool
2987   value: @IS_EARLY_BETA_OR_EARLIER@
2988   mirror: always
2990 # Whether to allow or disallow web apps to cancel `beforeinput` events caused
2991 # by MozEditableElement#setUserInput() which is used by autocomplete, autofill
2992 # and password manager.
2993 - name: dom.input_event.allow_to_cancel_set_user_input
2994   type: bool
2995   value: false
2996   mirror: always
2998 # How long a content process can take before closing its IPC channel
2999 # after shutdown is initiated.  If the process exceeds the timeout,
3000 # we fear the worst and kill it.
3001 - name: dom.ipc.tabs.shutdownTimeoutSecs
3002   type: RelaxedAtomicUint32
3003 #if !defined(DEBUG) && !defined(MOZ_ASAN) && !defined(MOZ_VALGRIND) && !defined(MOZ_TSAN)
3004   value: 20
3005 #else
3006   value: 0
3007 #endif
3008   mirror: always
3010 # Whether a native event loop should be used in the content process.
3011 - name: dom.ipc.useNativeEventProcessing.content
3012   type: RelaxedAtomicBool
3013 #if defined(XP_WIN) || defined(XP_MACOSX)
3014   value: false
3015 #else
3016   value: true
3017 #endif
3018   mirror: always
3020 # If this is true, TextEventDispatcher dispatches keydown and keyup events
3021 # even during composition (keypress events are never fired during composition
3022 # even if this is true).
3023 - name: dom.keyboardevent.dispatch_during_composition
3024   type: bool
3025   value: true
3026   mirror: always
3028 # Enable/disable KeyboardEvent.initKeyEvent function
3029 - name: dom.keyboardevent.init_key_event.enabled
3030   type: bool
3031   value: false
3032   mirror: always
3034 # Enable/disable KeyboardEvent.initKeyEvent function in addons even if it's
3035 # disabled.
3036 - name: dom.keyboardevent.init_key_event.enabled_in_addons
3037   type: bool
3038   value: @IS_NOT_NIGHTLY_BUILD@
3039   mirror: always
3041 # If this is true, keypress events for non-printable keys are dispatched only
3042 # for event listeners of the system event group in web content.
3043 - name: dom.keyboardevent.keypress.dispatch_non_printable_keys_only_system_group_in_content
3044   type: bool
3045   value: true
3046   mirror: always
3048 # If this is true, "keypress" event's keyCode value and charCode value always
3049 # become same if the event is not created/initialized by JS.
3050 - name: dom.keyboardevent.keypress.set_keycode_and_charcode_to_same_value
3051   type: bool
3052   value: true
3053   mirror: always
3055 # Whether "W3C Web Manifest" processing is enabled
3056 - name: dom.manifest.enabled
3057   type: bool
3058   value: true
3059   mirror: always
3061 # Enable mapped array buffer by default.
3062 - name: dom.mapped_arraybuffer.enabled
3063   type: bool
3064   value: true
3065   mirror: always
3067 # Autoplay Policy Detection https://w3c.github.io/autoplay/
3068 - name: dom.media.autoplay-policy-detection.enabled
3069   type: RelaxedAtomicBool
3070   value: true
3071   mirror: always
3073 # WebCodecs API
3074 - name: dom.media.webcodecs.enabled
3075   type: RelaxedAtomicBool
3076   value: @IS_NIGHTLY_BUILD@
3077   mirror: always
3079 # Number of seconds of very quiet or silent audio before considering the audio
3080 # inaudible.
3081 - name: dom.media.silence_duration_for_audibility
3082   type: AtomicFloat
3083   value: 2.0f
3084   mirror: always
3086 # Inform mozjemalloc that the foreground content processes can keep more dirty
3087 # pages in memory.
3088 - name: dom.memory.foreground_content_processes_have_larger_page_cache
3089   type: bool
3090   value: true
3091   mirror: always
3093 # Enable meta-viewport support in remote APZ-enabled frames.
3094 - name: dom.meta-viewport.enabled
3095   type: RelaxedAtomicBool
3096   value: false
3097   mirror: always
3099 # Timeout clamp in ms for timeouts we clamp.
3100 - name: dom.min_timeout_value
3101   type: RelaxedAtomicInt32
3102   value: 4
3103   mirror: always
3105 # Timeout clamp in ms for background windows.
3106 - name: dom.min_background_timeout_value
3107   type: int32_t
3108   value: 1000
3109   mirror: always
3111 # Timeout clamp in ms for background windows when throttling isn't enabled.
3112 - name: dom.min_background_timeout_value_without_budget_throttling
3113   type: int32_t
3114   value: 1000
3115   mirror: always
3117 # Are missing-property use counters for certain DOM attributes enabled?
3118 - name: dom.missing_prop_counters.enabled
3119   type: bool
3120   value: true
3121   mirror: always
3123 # Whether we disable triggering mutation events for changes to style
3124 # attribute via CSSOM.
3125 # NOTE: This preference is used in unit tests. If it is removed or its default
3126 # value changes, please update test_sharedMap_static_prefs.js accordingly.
3127 - name: dom.mutation-events.cssom.disabled
3128   type: bool
3129   value: true
3130   mirror: always
3132 # Limit of location change caused by content scripts in a time span per
3133 # BrowsingContext. This includes calls to History and Location APIs.
3134 - name: dom.navigation.locationChangeRateLimit.count
3135   type: uint32_t
3136   value: 200
3137   mirror: always
3139 # Time span in seconds for location change rate limit.
3140 - name: dom.navigation.locationChangeRateLimit.timespan
3141   type: uint32_t
3142   value: 10
3143   mirror: always
3145 # Whether to allow <object> and <embed> element loads to be retargeted to an
3146 # external application or download.
3147 - name: dom.navigation.object_embed.allow_retargeting
3148   type: bool
3149   value: false
3150   mirror: always
3152 # Network Information API
3153 # This feature is not available on Firefox desktop. It exposes too much
3154 # user information. Let's be consistent and disable it on Android.
3155 # But let's keep it around in case it becomes necessary for webcompat
3156 # reasons
3157 # https://bugzilla.mozilla.org/show_bug.cgi?id=1637922
3158 - name: dom.netinfo.enabled
3159   type: RelaxedAtomicBool
3160   value: false
3161   mirror: always
3163 # Whether we should open noopener links in a new process.
3164 - name: dom.noopener.newprocess.enabled
3165   type: bool
3166   value: true
3167   mirror: always
3169 # Whether we shouldn't show an error page for unknown protocols (and should
3170 # show a console warning instead).
3171 - name: dom.no_unknown_protocol_error.enabled
3172   type: bool
3173   value: true
3174   mirror: always
3176 # Whether origin trials are enabled.
3177 - name: dom.origin-trials.enabled
3178   type: bool
3179   value: true
3180   mirror: always
3182 # Whether we use the test key to verify tokens.
3183 - name: dom.origin-trials.test-key.enabled
3184   type: bool
3185   value: false
3186   mirror: always
3188 # Origin trial state for "TestTrial".
3189 # 0: normal, 1: always-enabled, 2: always-disabled
3190 - name: dom.origin-trials.test-trial.state
3191   type: RelaxedAtomicInt32
3192   value: 0
3193   mirror: always
3195 # Origin trial state for COEP: Credentialless.
3196 # 0: normal, 1: always-enabled, 2: always-disabled
3197 - name: dom.origin-trials.coep-credentialless.state
3198   type: RelaxedAtomicInt32
3199   value: 0
3200   mirror: always
3202 # Is support for Window.paintWorklet enabled?
3203 - name: dom.paintWorklet.enabled
3204   type: bool
3205   value: false
3206   mirror: always
3208 # Enable/disable the PaymentRequest API
3209 - name: dom.payments.request.enabled
3210   type: bool
3211   value: false
3212   mirror: always
3214 # Whether a user gesture is required to call PaymentRequest.prototype.show().
3215 - name: dom.payments.request.user_interaction_required
3216   type: bool
3217   value: true
3218   mirror: always
3220 # Time in milliseconds for PaymentResponse to wait for
3221 # the Web page to call complete().
3222 - name: dom.payments.response.timeout
3223   type: uint32_t
3224   value: 5000
3225   mirror: always
3227 # Enable printing performance marks/measures to log
3228 - name: dom.performance.enable_user_timing_logging
3229   type: RelaxedAtomicBool
3230   value: false
3231   mirror: always
3233 # Enable notification of performance timing
3234 - name: dom.performance.enable_notify_performance_timing
3235   type: bool
3236   value: false
3237   mirror: always
3239 # Is support for PerformanceTiming.timeToContentfulPaint enabled?
3240 - name: dom.performance.time_to_contentful_paint.enabled
3241   type: bool
3242   value: false
3243   mirror: always
3245 # Is support for PerformanceTiming.timeToDOMContentFlushed enabled?
3246 - name: dom.performance.time_to_dom_content_flushed.enabled
3247   type: bool
3248   value: false
3249   mirror: always
3251 # Is support for PerformanceTiming.timeToFirstInteractive enabled?
3252 - name: dom.performance.time_to_first_interactive.enabled
3253   type: bool
3254   value: false
3255   mirror: always
3257 # Is support for PerformanceTiming.timeToNonBlankPaint enabled?
3258 - name: dom.performance.time_to_non_blank_paint.enabled
3259   type: bool
3260   value: false
3261   mirror: always
3263 # Is support for Permissions.revoke enabled?
3264 - name: dom.permissions.revoke.enable
3265   type: bool
3266   value: false
3267   mirror: always
3269 # Is support for Element.requestPointerLock enabled?
3270 # This is added for accessibility purpose. When user has no way to exit
3271 # pointer lock (e.g. no keyboard available), they can use this pref to
3272 # disable the Pointer Lock API altogether.
3273 - name: dom.pointer-lock.enabled
3274   type: bool
3275   value: true
3276   mirror: always
3278 # re-SAB: Whether to allow postMessage of a SharedArrayBuffer if various
3279 # preconditions related to COOP and COEP are met
3280 - name: dom.postMessage.sharedArrayBuffer.withCOOP_COEP
3281   type: bool
3282   value: true
3283   mirror: once
3285 # Overridden in all.js on RELEASE_OR_BETA in order to add the locked attribute.
3286 - name: dom.postMessage.sharedArrayBuffer.bypassCOOP_COEP.insecure.enabled
3287   type: RelaxedAtomicBool
3288   value: false
3289   mirror: always
3291 # This currently only affects XHTML. For XUL the cache is always allowed.
3292 - name: dom.prototype_document_cache.enabled
3293   type: bool
3294   value: true
3295   mirror: always
3297 # Push
3298 - name: dom.push.enabled
3299   type: RelaxedAtomicBool
3300   value: true
3301   mirror: always
3303 # This enables the SVGPathSeg APIs
3304 - name: dom.svg.pathSeg.enabled
3305   type: bool
3306   value: false
3307   mirror: always
3309 # Preference that is primarily used for testing of problematic file paths.
3310 # It can also be used for switching between different storage directories, but
3311 # such feature is not officially supported.
3312 - name: dom.quotaManager.storageName
3313   type: String
3314   value: "storage"
3315   mirror: never
3317 # An upper limit for the "age" of an origin. Any origin which is older than the
3318 # threshold is considered as unaccessed. That doesn't necessarily mean that
3319 # such origins will be immediatelly archived. They will be archived only when
3320 # dom.quotaManager.checkQuotaInfoLoadTime is true and loading of quota info
3321 # takes a long time (dom.quotaManager.longQuotaInfoLoadTimeThresholdMs is used
3322 # to decide what is a long quota info load time).
3323 - name: dom.quotaManager.unaccessedForLongTimeThresholdSec
3324   type: RelaxedAtomicUint32
3325   value: 33696000 # 13 months
3326   mirror: always
3328 # Should we try to load origin information from the cache?
3329 # See bug 1563023 for more details.
3330 - name: dom.quotaManager.loadQuotaFromCache
3331   type: RelaxedAtomicBool
3332   value: true
3333   mirror: always
3335 # Should we check build ID as part of the cache validation?
3336 # When enabled, the cache is invalidated on any upgrade (or downgrade),
3337 # ensuring that changes in how quota usage is calculated can't cause
3338 # inconsistencies at the cost of a slower initialization. Currently, this
3339 # should only be set to false in tests using a packaged profile that inherently
3340 # includes a build id different from the building running the tests. In the
3341 # future this may be set to false if we are confident that we have sufficiently
3342 # thorough schema versioning.
3343 - name: dom.quotaManager.caching.checkBuildId
3344   type: RelaxedAtomicBool
3345   value: true
3346   mirror: always
3348 # Should we check quota info load time and eventually archive some unaccessed
3349 # origins if loading of quota info takes a long time ?
3350 - name: dom.quotaManager.checkQuotaInfoLoadTime
3351   type: RelaxedAtomicBool
3352   value: true
3353   mirror: always
3355 # An upper limit for quota info load time, anything which takes longer than the
3356 # threshold is considered as long quota info load time.
3357 - name: dom.quotaManager.longQuotaInfoLoadTimeThresholdMs
3358   type: RelaxedAtomicUint32
3359   value: 21000 # 21 seconds
3360   mirror: always
3362 # Preference that users can set to override temporary storage smart limit
3363 # calculation.
3364 - name: dom.quotaManager.temporaryStorage.fixedLimit
3365   type: RelaxedAtomicInt32
3366   value: -1
3367   mirror: always
3369 # A pref that is used to enable testing features.
3370 - name: dom.quotaManager.testing
3371   type: SequentiallyConsistentAtomicBool
3372   value: false
3373   mirror: always
3375 #if defined(XP_WIN)
3376   # Preference that is used to set nsILocalFileWin::useDOSDevicePathSyntax
3377   # attribute for all local file instances created by QuotaManager and its
3378   # clients. The value of this preference is cached so changing the preference
3379   # during runtime has no effect.
3380   # See bug 1626846 for setting this to false by default.
3381 -   name: dom.quotaManager.useDOSDevicePathSyntax
3382     type: RelaxedAtomicBool
3383     value: true
3384     mirror: always
3385     do_not_use_directly: true
3387   # Preference that is used to enable the hack for overrriding xFullPathname in
3388   # QuotaVFS.
3389 -   name: dom.quotaManager.overrideXFullPathname
3390     type: RelaxedAtomicBool
3391     value: true
3392     mirror: always
3393 #elif defined(XP_UNIX)
3394   # Preference that is used to enable the overriding of Unix xFullPathname
3395   # implementation in QuotaVFS.
3396 -   name: dom.quotaManager.overrideXFullPathnameUnix
3397     type: RelaxedAtomicBool
3398     value: true
3399     mirror: always
3400 #endif
3402 # How many times we should retry directory removal or renaming if access was
3403 # denied?
3404 - name: dom.quotaManager.directoryRemovalOrRenaming.maxRetries
3405   type: RelaxedAtomicUint32
3406 #ifdef XP_WIN
3407   value: 10
3408 #else
3409   value: 0
3410 #endif
3411   mirror: always
3413 # How long we should wait between retries (in milliseconds)?
3414 - name: dom.quotaManager.directoryRemovalOrRenaming.delayMs
3415   type: RelaxedAtomicUint32
3416   value: 200
3417   mirror: always
3419 #ifdef MOZ_BACKGROUNDTASKS
3420 # Use a Background Task to delete files at shutdown.
3421 - name: dom.quotaManager.backgroundTask.enabled
3422   type: bool
3423 #ifdef XP_MACOSX
3424 # Needs to figure out how to prevent bug 1827486.
3425   value: false
3426 #else
3427   value: true
3428 #endif
3429   mirror: never
3430 #endif
3432 # Use to control to dump CheckedUnsafePtr creation stack and assignment stacks.
3433 - name: dom.checkedUnsafePtr.dumpStacks.enabled
3434   type: RelaxedAtomicBool
3435   value: false
3436   mirror: always
3438 # Determines within what distance of a tick mark, in pixels, dragging an input
3439 # range range will snap the range's value to that tick mark. By default, this is
3440 # half the default width of the range thumb.
3441 - name: dom.range_element.magnet_effect_threshold
3442   type: float
3443   value: 10.0f
3444   mirror: always
3446 # Reporting API.
3447 - name: dom.reporting.enabled
3448   type: RelaxedAtomicBool
3449   value: false
3450   mirror: always
3452 - name: dom.reporting.testing.enabled
3453   type: RelaxedAtomicBool
3454   value: false
3455   mirror: always
3457 - name: dom.reporting.featurePolicy.enabled
3458   type: RelaxedAtomicBool
3459   value: false
3460   mirror: always
3462 - name: dom.reporting.crash.enabled
3463   type: RelaxedAtomicBool
3464   value: false
3465   mirror: always
3467 - name: dom.reporting.header.enabled
3468   type: RelaxedAtomicBool
3469   value: false
3470   mirror: always
3472 # In seconds. The timeout to remove not-active report-to endpoints.
3473 - name: dom.reporting.cleanup.timeout
3474   type: uint32_t
3475   value: 3600
3476   mirror: always
3478 # Any X seconds the reports are dispatched to endpoints.
3479 - name: dom.reporting.delivering.timeout
3480   type: uint32_t
3481   value: 5
3482   mirror: always
3484 # How many times the delivering of a report should be tried.
3485 - name: dom.reporting.delivering.maxFailures
3486   type: uint32_t
3487   value: 3
3488   mirror: always
3490 # How many reports should be stored in the report queue before being delivered.
3491 - name: dom.reporting.delivering.maxReports
3492   type: uint32_t
3493   value: 100
3494   mirror: always
3496 # Enable Screen Orientation lock
3497 - name: dom.screenorientation.allow-lock
3498   type: bool
3499   value: @IS_NIGHTLY_BUILD@
3500   mirror: always
3502 # Enable Screen Wake Lock API
3503 - name: dom.screenwakelock.enabled
3504   type: bool
3505   value: @IS_EARLY_BETA_OR_EARLIER@
3506   mirror: always
3508 # Whether to enable the JavaScript start-up cache. This causes one of the first
3509 # execution to record the bytecode of the JavaScript function used, and save it
3510 # in the existing cache entry. On the following loads of the same script, the
3511 # bytecode would be loaded from the cache instead of being generated once more.
3512 - name: dom.script_loader.bytecode_cache.enabled
3513   type: bool
3514   value: true
3515   mirror: always
3517 # Ignore the heuristics of the bytecode cache, and always record on the first
3518 # visit. (used for testing purposes).
3520 # Choose one strategy to use to decide when the bytecode should be encoded and
3521 # saved. The following strategies are available right now:
3522 #   * -2 : (reader mode) The bytecode cache would be read, but it would never
3523 #          be saved.
3524 #   * -1 : (eager mode) The bytecode would be saved as soon as the script is
3525 #          seen for the first time, independently of the size or last access
3526 #          time.
3527 #   *  0 : (default) The bytecode would be saved in order to minimize the
3528 #          page-load time.
3530 # Other values might lead to experimental strategies. For more details, have a
3531 # look at: ScriptLoader::ShouldCacheBytecode function.
3532 - name: dom.script_loader.bytecode_cache.strategy
3533   type: int32_t
3534   value: 0
3535   mirror: always
3537 # Select which parse/delazification strategy should be used while parsing
3538 # scripts off-main-thread. (see CompileOptions.h, DelazificationOption enum)
3540 #   0: On-demand only. Delazification will be triggered only on the main thread
3541 #      before the execution of the function.
3543 #   1: Compare on-demand delazification (= 0) with concurrent depth-first
3544 #      delazification (= 2).
3546 #   2: Depth-first. Delazify all functions off-thread in the order of appearance
3547 #      in the source.
3549 #   3: Large-first. Delazify all functions off-thread starting with the largest
3550 #      functions first, and the smallest as the last one to be delazified, where
3551 #      the size of function is measured in bytes between the start to the end of
3552 #      the function.
3554 # 255: Parse everything eagerly, from the first parse. All functions are parsed
3555 #      at the same time as the top-level of a file.
3556 - name: dom.script_loader.delazification.strategy
3557   type: uint32_t
3558   value: 255
3559   mirror: always
3561 # Maximum total size after which the delazification strategy, specified by
3562 # `dom.script_loader.delazification.strategy`, is no longer applied, and the
3563 # on-demand strategy is used by default.
3565 # -1 disable the threshold, and delazification strategy is applied to all
3566 # scripts.
3568 # Default value is 10MB for utf8 scripts.
3569 - name: dom.script_loader.delazification.max_size
3570   type: int32_t
3571   value: 10485760
3572   mirror: always
3574 # Minimum memory, in GB, required to enable delazification strategy, specified
3575 # by `dom.script_loader.delazification.strategy`. Otherwise, the on-demand
3576 # delazification strategy is used.
3577 - name: dom.script_loader.delazification.min_mem
3578   type: int32_t
3579   value: 2
3580   mirror: always
3582 # Enable  speculative off main thread parsing of external scripts as
3583 # soon as they are fetched.
3584 - name: dom.script_loader.external_scripts.speculative_omt_parse.enabled
3585   type: bool
3586   value: true
3587   mirror: always
3589 # Speculatively compile non parser inserted scripts
3590 - name: dom.script_loader.external_scripts.speculate_non_parser_inserted.enabled
3591   type: bool
3592   value: false
3593   mirror: always
3595 # Speculatively compile async scripts
3596 - name: dom.script_loader.external_scripts.speculate_async.enabled
3597   type: bool
3598   value: false
3599   mirror: always
3601 # Speculatively compile link preload scripts
3602 - name: dom.script_loader.external_scripts.speculate_link_preload.enabled
3603   type: bool
3604   value: false
3605   mirror: always
3607 - name: dom.securecontext.allowlist_onions
3608   type: bool
3609   value: false
3610   mirror: always
3612 # This pref enables the featurePolicy header support.
3613 - name: dom.security.featurePolicy.header.enabled
3614   type: bool
3615   value: false
3616   mirror: always
3618 - name: dom.security.featurePolicy.experimental.enabled
3619   type: bool
3620   value: false
3621   mirror: always
3623 # Expose the 'featurePolicy' attribute in document and HTMLIFrameElement
3624 - name: dom.security.featurePolicy.webidl.enabled
3625   type: bool
3626   value: false
3627   mirror: always
3629 # Perform IPC based Principal vetting in ContentParent
3630 - name: dom.security.enforceIPCBasedPrincipalVetting
3631   type: RelaxedAtomicBool
3632   value: true
3633   mirror: always
3635 # For testing purposes only: Flipping this pref to true allows
3636 # to skip the allowlist for about: pages and do not ship with a
3637 # CSP and NS_ASSERT right away.
3638 - name: dom.security.skip_about_page_csp_allowlist_and_assert
3639   type: RelaxedAtomicBool
3640   value: false
3641   mirror: always
3643 # For testing purposes only: Flipping this pref to true allows
3644 # to skip the assertion that every about page ships with a CSP.
3645 - name: dom.security.skip_about_page_has_csp_assert
3646   type: RelaxedAtomicBool
3647   value: false
3648   mirror: always
3650 # For testing purposes only: Flipping this pref to true allows
3651 # to skip the assertion that HTML fragments (e.g. innerHTML) can
3652 # not be used within chrome code or about: pages.
3653 - name: dom.security.skip_html_fragment_assertion
3654   type: RelaxedAtomicBool
3655   value: false
3656   mirror: always
3658 # For testing purposes only; Flipping this pref to true allows
3659 # to skip the assertion that remote scripts can not be loaded
3660 # in system privileged contexts.
3661 - name: dom.security.skip_remote_script_assertion_in_system_priv_context
3662   type: RelaxedAtomicBool
3663   value: false
3664   mirror: always
3666 # If and only if true, support for Trusted Types
3667 # (https://w3c.github.io/trusted-types/dist/spec/) is enabled.
3668 - name: dom.security.trusted_types.enabled
3669   type: RelaxedAtomicBool
3670   value: False
3671   mirror: always
3673 # If true, all content requests will get upgraded to HTTPS://
3674 # (some Firefox functionality requests, like OCSP will not be affected)
3675 - name: dom.security.https_only_mode
3676   type: RelaxedAtomicBool
3677   value: false
3678   mirror: always
3680 # If true, all content requests in Private Browsing Mode will get
3681 # upgraded to HTTPS://. (If dom.security.https_only_mode is set
3682 # to true then this pref has no effect)
3683 - name: dom.security.https_only_mode_pbm
3684   type: RelaxedAtomicBool
3685   value: false
3686   mirror: always
3688 # If true, sends http background request for top-level sites to
3689 # counter long timeouts.
3690 - name: dom.security.https_only_mode_send_http_background_request
3691   type: RelaxedAtomicBool
3692   value: true
3693   mirror: always
3695 # Time limit, in milliseconds, before sending the http background
3696 # request for HTTPS-Only and HTTPS-First
3697 - name: dom.security.https_only_fire_http_request_background_timer_ms
3698   type: RelaxedAtomicUint32
3699   value: 3000
3700   mirror: always
3702 # If true, tries to break upgrade downgrade cycles where https-only tries
3703 # to upgrad ethe connection, but the website tries to downgrade again.
3704 - name: dom.security.https_only_mode_break_upgrade_downgrade_endless_loop
3705   type: RelaxedAtomicBool
3706   value: true
3707   mirror: always
3709 # If true, when checking if it's upgrade downgrade cycles, the URI path will be
3710 # also checked.
3711 - name: dom.security.https_only_check_path_upgrade_downgrade_endless_loop
3712   type: RelaxedAtomicBool
3713   value: true
3714   mirror: always
3716 # If true and HTTPS-only mode is enabled, requests
3717 # to local IP addresses are also upgraded
3718 - name: dom.security.https_only_mode.upgrade_local
3719   type: RelaxedAtomicBool
3720   value: false
3721   mirror: always
3723 # If true and HTTPS-only mode is enabled, requests
3724 # to .onion hosts are also upgraded
3725 - name: dom.security.https_only_mode.upgrade_onion
3726   type: RelaxedAtomicBool
3727   value: false
3728   mirror: always
3730 # WARNING: Don't ever update that pref manually! It is only used
3731 # for telemetry purposes and allows to reason about retention of
3732 # the pref dom.security.https_only_mode from above.
3733 - name: dom.security.https_only_mode_ever_enabled
3734   type: RelaxedAtomicBool
3735   value: false
3736   mirror: always
3738 # WARNING: Don't ever update that pref manually! It is only used
3739 # for telemetry purposes and allows to reason about retention of
3740 # the pref dom.security.https_only_mode_pbm from above.
3741 - name: dom.security.https_only_mode_ever_enabled_pbm
3742   type: RelaxedAtomicBool
3743   value: false
3744   mirror: always
3746 # If true checks for secure www connections when https fails
3747 # and gives the user suggestions on the error page
3748 - name: dom.security.https_only_mode_error_page_user_suggestions
3749   type: RelaxedAtomicBool
3750   value: false
3751   mirror: always
3753 # If true, top-level request will get upgraded to HTTPS and
3754 # downgraded again if the request failed.
3755 - name: dom.security.https_first
3756   type: RelaxedAtomicBool
3757   value: false
3758   mirror: always
3760 # If true, top-level requests in Private Browsing Mode will get
3761 # upgraded to HTTPS. (If dom.security.https_first
3762 # is set to true then this pref has no effect)
3763 - name: dom.security.https_first_pbm
3764   type: RelaxedAtomicBool
3765   value: true
3766   mirror: always
3768 # If true, top-level requests that are initiated from the address
3769 # bar and with an empty scheme get upgraded to HTTPS
3770 # with a fallback
3771 - name: dom.security.https_first_schemeless
3772   type: RelaxedAtomicBool
3773   value: @IS_EARLY_BETA_OR_EARLIER@
3774   mirror: always
3776 - name: dom.security.unexpected_system_load_telemetry_enabled
3777   type: bool
3778   value: true
3779   mirror: always
3781 # pref controls `Sanitizer` API being exposed
3782 # https://wicg.github.io/sanitizer-api/
3783 - name: dom.security.sanitizer.enabled
3784   type: bool
3785   value: false
3786   mirror: always
3788 # Pref that controls the Element.setHTML API idenpendetly of the sanitizer
3789 # API.
3790 - name: dom.security.setHTML.enabled
3791   type: bool
3792   value: false
3793   mirror: always
3795 # Logs elements and attributes removed by the Sanitizer API to the console.
3796 - name: dom.security.sanitizer.logging
3797   type: bool
3798   value: false
3799   mirror: always
3801 # pref controls `identity` credentials being exposed
3802 - name: dom.security.credentialmanagement.identity.enabled
3803   type: bool
3804   value: false
3805   mirror: always
3807 # pref controls `identity` credential UI for testing. When true, UI is not shown and
3808 # the first option in the account and provider lists are chosen
3809 - name: dom.security.credentialmanagement.identity.select_first_in_ui_lists
3810   type: bool
3811   value: false
3812   mirror: always
3814 # pref controls `identity` credential platform behavior for testing. When true,
3815 # the .well-known file check is not performed.
3816 - name: dom.security.credentialmanagement.identity.test_ignore_well_known
3817   type: bool
3818   value: false
3819   mirror: always
3821 # pref controls whether we should delay identity credential rejections at all
3822 - name: dom.security.credentialmanagement.identity.reject_delay.enabled
3823   type: bool
3824   value: true
3825   mirror: always
3827 # pref controls how long we should delay identity credential rejections if enabled
3828 - name: dom.security.credentialmanagement.identity.reject_delay.duration_ms
3829   type: uint32_t
3830   value: 120000
3831   mirror: always
3833 # SetDocumentURI security option, enforces origin check
3834 - name: dom.security.setdocumenturi
3835   type: bool
3836   value: @IS_EARLY_BETA_OR_EARLIER@
3837   mirror: always
3839 # Whether or not selection events on text controls are enabled.
3840 - name: dom.select_events.textcontrols.selectionchange.enabled
3841   type: bool
3842   value: true
3843   mirror: always
3845 - name: dom.select_events.textcontrols.selectstart.enabled
3846   type: bool
3847   value: false
3848   mirror: always
3850 - name: dom.select.showPicker.enabled
3851   type: bool
3852   value: true
3853   mirror: always
3855 - name: dom.send_after_paint_to_content
3856   type: bool
3857   value: false
3858   mirror: always
3860 - name: dom.separate_event_queue_for_post_message.enabled
3861   type: bool
3862   value: true
3863   mirror: always
3865 - name: dom.arena_allocator.enabled
3866   type: bool
3867   value: true
3868   mirror: once
3870 - name: dom.serviceWorkers.enabled
3871   type: RelaxedAtomicBool
3872   value: true
3873   mirror: always
3875 - name: dom.serviceWorkers.navigationPreload.enabled
3876   type: RelaxedAtomicBool
3877   value: true
3878   mirror: always
3880 # Mitigates ServiceWorker navigation faults by bypassing the ServiceWorker on
3881 # navigation faults.  This is more extensive than just resetting interception
3882 # because we also mark the page as uncontrolled so that subresources will not
3883 # go to the ServiceWorker either.
3884 - name: dom.serviceWorkers.mitigations.bypass_on_fault
3885   type: bool
3886   value: true
3887   mirror: always
3889 # Additional ServiceWorker navigation mitigation control to unregister the
3890 # ServiceWorker after multiple faults are encountered. The mitigation is
3891 # disabled when this is set to zero, otherwise this is the number of faults that
3892 # need to occur for a specific ServiceWorker before it will be unregistered.
3893 - name: dom.serviceWorkers.mitigations.navigation_fault_threshold
3894   type: uint32_t
3895   value: 3
3896   mirror: always
3898 # This is the group usage head room for service workers.
3899 # The quota usage mitigation algorithm uses this preference to determine if the
3900 # origin or also group data should be cleared or not.
3901 # The default value is 400 MiB.
3902 - name: dom.serviceWorkers.mitigations.group_usage_headroom_kb
3903   type: uint32_t
3904   value: 400 * 1024
3905   mirror: always
3907 - name: dom.serviceWorkers.testing.enabled
3908   type: RelaxedAtomicBool
3909   value: false
3910   mirror: always
3912 # Whether ServiceWorkerManager should persist the service worker
3913 # registered by temporary installed extension (only meant to be used
3914 # for testing purpose, to make it easier to test some particular scenario
3915 # with a temporary installed addon, which doesn't need to be signed to be
3916 # installed on release channel builds).
3917 - name: dom.serviceWorkers.testing.persistTemporarilyInstalledAddons
3918   type: RelaxedAtomicBool
3919   value: false
3920   mirror: always
3922 - name: dom.storage.enabled
3923   type: RelaxedAtomicBool
3924   value: true
3925   mirror: always
3927 # ReadableStream.from(asyncIterable)
3928 - name: dom.streams.from.enabled
3929   type: RelaxedAtomicBool
3930   value: true
3931   mirror: always
3933 - name: dom.workers.pFetch.enabled
3934   type: RelaxedAtomicBool
3935   value: true
3936   mirror: always
3938 - name: dom.workers.importScripts.enforceStrictMimeType
3939   type: RelaxedAtomicBool
3940   value: true
3941   mirror: always
3943 # Is support for modules (new Worker(..., {type: "module"})) enabled for workers?
3944 - name: dom.workers.modules.enabled
3945   type: RelaxedAtomicBool
3946   value: true
3947   mirror: always
3949 - name: dom.workers.serialized-sab-access
3950   type: RelaxedAtomicBool
3951   value: false
3952   mirror: always
3954 # Enable stronger diagnostics on worker shutdown.
3955 # If this is true, we will potentially run an extra GCCC when a  worker should
3956 # exit its DoRunLoop but holds any WorkerRef and we will MOZ_DIAGNOSTIC_ASSERT
3957 # when during that extra GCCC such a WorkerRef is freed.
3958 - name: dom.workers.GCCC_on_potentially_last_event
3959   type: RelaxedAtomicBool
3960 #if defined(FUZZING) || defined(DEBUG)
3961   value: true
3962 #else
3963   value: false
3964 #endif
3965   mirror: always
3967 - name: dom.sitepermsaddon-provider.enabled
3968   type: bool
3969   value: @IS_NOT_ANDROID@
3970   mirror: always
3972 # Whether automatic storage access granting heuristics should be turned on.
3973 - name: dom.storage_access.auto_grants
3974   type: bool
3975   value: true
3976   mirror: always
3978 - name: dom.storage_access.auto_grants.delayed
3979   type: bool
3980   value: true
3981   mirror: always
3983 # Storage-access API.
3984 - name: dom.storage_access.enabled
3985   type: bool
3986   value: true
3987   mirror: always
3989 # Forward-Declared Storage-access API.
3990 - name: dom.storage_access.forward_declared.enabled
3991   type: bool
3992   value: false
3993   mirror: always
3995 # How long the Forward-Declared Storage-access API allows between pair requests
3996 # in seconds
3997 - name: dom.storage_access.forward_declared.lifetime
3998   type: uint32_t
3999   value: 15 * 60
4000   mirror: always
4002 # The maximum number of origins that a given third-party tracker is allowed
4003 # to have concurrent access to before the user is presented with a storage
4004 # access prompt.  Only effective when the auto_grants pref is turned on.
4005 - name: dom.storage_access.max_concurrent_auto_grants
4006   type: int32_t
4007   value: 5
4008   mirror: always
4010 - name: dom.storage_access.frame_only
4011   type: bool
4012   value: true
4013   mirror: always
4015 # Only grant storage access to secure contexts.
4016 - name: dom.storage_access.dont_grant_insecure_contexts
4017   type: RelaxedAtomicBool
4018   value: true
4019   mirror: always
4021 # Whether the File System API is enabled
4022 - name: dom.fs.enabled
4023   type: RelaxedAtomicBool
4024   value: true
4025   mirror: always
4027 # Whether the WritableFileStream is enabled or disabled.
4028 - name: dom.fs.writable_file_stream.enabled
4029   type: RelaxedAtomicBool
4030   value: true
4031   mirror: always
4033 # LocalStorage data limit as determined by summing up the lengths of all string
4034 # keys and values. This is consistent with the legacy implementation and other
4035 # browser engines. This value should really only ever change in unit testing
4036 # where being able to lower it makes it easier for us to test certain edge
4037 # cases. Measured in KiBs.
4038 - name: dom.storage.default_quota
4039   type: RelaxedAtomicUint32
4040   # Only allow relatively small amounts of data since performance of the
4041   # synchronous IO is very bad. We are enforcing simple per-origin quota only.
4042   value: 5 * 1024
4043   mirror: always
4045 # Per-site quota for legacy LocalStorage implementation.
4046 - name: dom.storage.default_site_quota
4047   type: RelaxedAtomicUint32
4048   value: 25 * 1024
4049   mirror: always
4051 # Whether or not the unsupported legacy implemenation should be enabled. Please
4052 # don't advertise this pref as a way for disabling LSNG. This pref is intended
4053 # for internal testing only and will be removed in near future. Accidental
4054 # disabling of LSNG can lead to a data loss in a combination with disabled
4055 # shadow writes. Disabling of shadow writes is the initial step towards
4056 # removing legacy implementation and will be done soon.
4057 - name: dom.storage.enable_unsupported_legacy_implementation
4058   type: RelaxedAtomicBool
4059   value: false
4060   mirror: always
4061   do_not_use_directly: true
4063 # The amount of snapshot peak usage which is attempted to be pre-incremented
4064 # during snapshot creation.
4065 - name: dom.storage.snapshot_peak_usage.initial_preincrement
4066   type: RelaxedAtomicUint32
4067   value: 16384
4068   mirror: always
4070 # The amount of snapshot peak usage which is attempted to be pre-incremented
4071 # during snapshot creation if the LocalStorage usage was already close to the
4072 # limit (a fallback for dom.storage.snapshot_peak_usage.initial_preincrement).
4073 - name: dom.storage.snapshot_peak_usage.reduced_initial_preincrement
4074   type: RelaxedAtomicUint32
4075   value: 4096
4076   mirror: always
4078 # The amount of snapshot peak usage which is attempted to be pre-incremented
4079 # beyond the specific values which are subsequently requested after snapshot
4080 # creation.
4081 - name: dom.storage.snapshot_peak_usage.gradual_preincrement
4082   type: RelaxedAtomicUint32
4083   value: 4096
4084   mirror: always
4086 # The amount of snapshot peak usage which is attempted to be pre-incremented
4087 # beyond the specific values which are subsequently requested after snapshot
4088 # creation if the LocalStorage total usage was already close to the limit
4089 # (a fallback for dom.storage.snapshot_peak_usage.gradual_preincrement).
4090 - name: dom.storage.snapshot_peak_usage.reduced_gradual_preincrement
4091   type: RelaxedAtomicUint32
4092   value: 1024
4093   mirror: always
4095 # How long between a snapshot becomes idle and when we actually finish the
4096 # snapshot. This preference is only used when "dom.storage.snapshot_reusing"
4097 # is true.
4098 - name: dom.storage.snapshot_idle_timeout_ms
4099   type: uint32_t
4100   value: 5000
4101   mirror: always
4103 # Is support for Storage test APIs enabled?
4104 - name: dom.storage.testing
4105   type: bool
4106   value: false
4107   mirror: always
4109 # For area and anchor elements with target=_blank and no rel set to
4110 # opener/noopener.
4111 - name: dom.targetBlankNoOpener.enabled
4112   type: bool
4113   value: true
4114   mirror: always
4116 # Is support for Selection.GetRangesForInterval enabled?
4117 - name: dom.testing.selection.GetRangesForInterval
4118   type: bool
4119   value: false
4120   mirror: always
4122 - name: dom.testing.structuredclonetester.enabled
4123   type: RelaxedAtomicBool
4124   value: false
4125   mirror: always
4127 - name: dom.testing.sync-content-blocking-notifications
4128   type: bool
4129   value: false
4130   mirror: always
4132 # To enable TestUtils interface on WPT
4133 - name: dom.testing.testutils.enabled
4134   type: RelaxedAtomicBool
4135   value: false
4136   mirror: always
4138 - name: dom.textMetrics.actualBoundingBox.enabled
4139   type: RelaxedAtomicBool
4140   value: true
4141   mirror: always
4143 - name: dom.textMetrics.baselines.enabled
4144   type: RelaxedAtomicBool
4145   value: true
4146   mirror: always
4148 - name: dom.textMetrics.emHeight.enabled
4149   type: RelaxedAtomicBool
4150   value: true
4151   mirror: always
4153 - name: dom.textMetrics.fontBoundingBox.enabled
4154   type: RelaxedAtomicBool
4155   value: true
4156   mirror: always
4158 # Time (in ms) that it takes to regenerate 1ms.
4159 - name: dom.timeout.background_budget_regeneration_rate
4160   type: int32_t
4161   value: 100
4162   mirror: always
4164 # Time (in ms) that it takes to regenerate 1ms.
4165 - name: dom.timeout.foreground_budget_regeneration_rate
4166   type: int32_t
4167   value: 1
4168   mirror: always
4170 # Maximum value (in ms) for the background budget. Only valid for
4171 # values greater than 0.
4172 - name: dom.timeout.background_throttling_max_budget
4173   type: int32_t
4174   value: 50
4175   mirror: always
4177 # Maximum value (in ms) for the foreground budget. Only valid for
4178 # values greater than 0.
4179 - name: dom.timeout.foreground_throttling_max_budget
4180   type: int32_t
4181   value: -1
4182   mirror: always
4184 # The maximum amount a timeout can be delayed by budget throttling.
4185 - name: dom.timeout.budget_throttling_max_delay
4186   type: int32_t
4187   value: 15000
4188   mirror: always
4190 # Turn on budget throttling by default.
4191 - name: dom.timeout.enable_budget_timer_throttling
4192   type: bool
4193   value: true
4194   mirror: always
4196 # Should we defer timeouts and intervals while loading a page.  Released
4197 # on Idle or when the page is loaded.
4198 - name: dom.timeout.defer_during_load
4199   type: bool
4200   value: true
4201   mirror: always
4203 # Maximum amount of time in milliseconds consecutive setTimeout()/setInterval()
4204 # callback are allowed to run before yielding the event loop.
4205 - name: dom.timeout.max_consecutive_callbacks_ms
4206   type: uint32_t
4207   value: 4
4208   mirror: always
4210 # Maximum deferral time for setTimeout/Interval in milliseconds
4211 - name: dom.timeout.max_idle_defer_ms
4212   type: uint32_t
4213   value: 10*1000
4214   mirror: always
4216 # Delay in ms from document load until we start throttling background timeouts.
4217 - name: dom.timeout.throttling_delay
4218   type: int32_t
4219   value: 30000
4220   mirror: always
4222 # UDPSocket API
4223 - name: dom.udpsocket.enabled
4224   type: bool
4225   value: false
4226   mirror: always
4228 # Whether to dump worker use counters
4229 - name: dom.use_counters.dump.worker
4230   type: RelaxedAtomicBool
4231   value: false
4232   mirror: always
4234 # Whether to dump document use counters
4235 - name: dom.use_counters.dump.document
4236   type: bool
4237   value: false
4238   mirror: always
4240 # Whether to dump page use counters
4241 - name: dom.use_counters.dump.page
4242   type: bool
4243   value: false
4244   mirror: always
4246 # Time limit, in milliseconds, for user gesture transient activation.
4247 - name: dom.user_activation.transient.timeout
4248   type: uint32_t
4249   value: 5000
4250   mirror: always
4252 # Whether to treat the clicks on scrollbars as user interaction with web content.
4253 - name: dom.user_activation.ignore_scrollbars
4254   type: bool
4255   value: true
4256   mirror: always
4258 # Whether to shim a Components object on untrusted windows.
4259 - name: dom.use_components_shim
4260   type: bool
4261   value: @IS_NOT_NIGHTLY_BUILD@
4262   mirror: always
4264 - name: dom.vibrator.enabled
4265   type: bool
4266   value: true
4267   mirror: always
4269 - name: dom.vibrator.max_vibrate_ms
4270   type: RelaxedAtomicUint32
4271   value: 10000
4272   mirror: always
4274 - name: dom.vibrator.max_vibrate_list_len
4275   type: RelaxedAtomicUint32
4276   value: 128
4277   mirror: always
4279 # Is support for WebVR APIs enabled?
4280 # Disabled everywhere, but not removed.
4281 - name: dom.vr.enabled
4282   type: RelaxedAtomicBool
4283   value: false
4284   mirror: always
4286 # Should VR sessions always be reported as supported, without first
4287 # checking for VR runtimes?  This will prevent permission prompts
4288 # from being suppressed on machines without VR runtimes and cause
4289 # navigator.xr.isSessionSupported to always report that immersive-vr
4290 # is supported.
4291 - name: dom.vr.always_support_vr
4292   type: RelaxedAtomicBool
4293   value: false
4294   mirror: always
4296 # Should AR sessions always be reported as supported, without first
4297 # checking for AR runtimes?  This will prevent permission prompts
4298 # from being suppressed on machines without AR runtimes and cause
4299 # navigator.xr.isSessionSupported to always report that immersive-ar
4300 # is supported.
4301 - name: dom.vr.always_support_ar
4302   type: RelaxedAtomicBool
4303   value: false
4304   mirror: always
4306 # It is often desirable to automatically start vr presentation when
4307 # a user puts on the VR headset.  This is done by emitting the
4308 # Window.vrdisplayactivate event when the headset's sensors detect it
4309 # being worn.  This can result in WebVR content taking over the headset
4310 # when the user is using it outside the browser or inadvertent start of
4311 # presentation due to the high sensitivity of the proximity sensor in some
4312 # headsets, so it is off by default.
4313 - name: dom.vr.autoactivate.enabled
4314   type: RelaxedAtomicBool
4315   value: false
4316   mirror: always
4318 # Minimum number of milliseconds that the browser will wait before
4319 # attempting to poll again for connected VR controllers.  The browser
4320 # will not attempt to poll for VR controllers until it needs to use them.
4321 - name: dom.vr.controller.enumerate.interval
4322   type: RelaxedAtomicInt32
4323   value: 1000
4324   mirror: always
4326 # The threshold value of trigger inputs for VR controllers.
4327 - name: dom.vr.controller_trigger_threshold
4328   type: AtomicFloat
4329   value: 0.1f
4330   mirror: always
4332 # Minimum number of milliseconds that the browser will wait before
4333 # attempting to poll again for connected VR displays.  The browser
4334 # will not attempt to poll for VR displays until it needs to use
4335 # them, such as when detecting a WebVR site.
4336 - name: dom.vr.display.enumerate.interval
4337   type: RelaxedAtomicInt32
4338   value: 5000
4339   mirror: always
4341 # The number of milliseconds since last frame start before triggering a new
4342 # frame. When content is failing to submit frames on time or the lower level
4343 # VR platform APIs are rejecting frames, it determines the rate at which RAF
4344 # callbacks will be called.
4345 - name: dom.vr.display.rafMaxDuration
4346   type: RelaxedAtomicUint32
4347   value: 50
4348   mirror: always
4350 # Minimum number of milliseconds the browser will wait before attempting
4351 # to re-start the VR service after an enumeration returned no devices.
4352 - name: dom.vr.external.notdetected.timeout
4353   type: RelaxedAtomicInt32
4354   value: 60000
4355   mirror: always
4357 # Minimum number of milliseconds the browser will wait before attempting
4358 # to re-start the VR service after a VR API (eg, OpenVR or Oculus)
4359 # requests that we shutdown and unload its libraries.
4360 # To ensure that we don't interfere with VR runtime software auto-updates,
4361 # we will not attempt to re-load the service until this timeout has elapsed.
4362 - name: dom.vr.external.quit.timeout
4363   type: RelaxedAtomicInt32
4364   value: 10000
4365   mirror: always
4367 # Minimum number of milliseconds that the VR session will be kept
4368 # alive after the browser and content no longer are using the
4369 # hardware.  If a VR multitasking environment, this should be set
4370 # very low or set to 0.
4371 - name: dom.vr.inactive.timeout
4372   type: RelaxedAtomicInt32
4373   value: 5000
4374   mirror: always
4376 # Maximum number of milliseconds the browser will wait for content to call
4377 # VRDisplay.requestPresent after emitting vrdisplayactivate during VR
4378 # link traversal.  This prevents a long running event handler for
4379 # vrdisplayactivate from later calling VRDisplay.requestPresent, which would
4380 # result in a non-responsive browser in the VR headset.
4381 - name: dom.vr.navigation.timeout
4382   type: RelaxedAtomicInt32
4383   value: 5000
4384   mirror: always
4386 # Oculus device
4387 - name: dom.vr.oculus.enabled
4388   type: RelaxedAtomicBool
4389 #if defined(HAVE_64BIT_BUILD) && !defined(ANDROID)
4390   # We are only enabling WebVR by default on 64-bit builds (Bug 1384459).
4391   value: true
4392 #else
4393   # On Android, this pref is irrelevant.
4394   value: false
4395 #endif
4396   mirror: always
4398 # When enabled, Oculus sessions may be created with the ovrInit_Invisible
4399 # flag if a page is using tracking but not presenting.  When a page
4400 # begins presenting VR frames, the session will be re-initialized without
4401 # the flag.  This eliminates the "Firefox not responding" warnings in
4402 # the headset, but might not be compatible with all versions of the Oculus
4403 # runtime.
4404 - name: dom.vr.oculus.invisible.enabled
4405   type: RelaxedAtomicBool
4406   value: true
4407   mirror: always
4409 # Minimum number of milliseconds after content has stopped VR presentation
4410 # before the Oculus session is re-initialized to an invisible / tracking
4411 # only mode.  If this value is too high, users will need to wait longer
4412 # after stopping WebVR presentation before automatically returning to the
4413 # Oculus home interface.  (They can immediately return to the Oculus Home
4414 # interface through the Oculus HUD without waiting this duration)
4415 # If this value is too low, the Oculus Home interface may be visible
4416 # momentarily during VR link navigation.
4417 - name: dom.vr.oculus.present.timeout
4418   type: RelaxedAtomicInt32
4419   value: 500
4420   mirror: always
4422 # OpenVR device
4423 - name: dom.vr.openvr.enabled
4424   type: RelaxedAtomicBool
4425 #if !defined(HAVE_64BIT_BUILD) && !defined(ANDROID)
4426   # We are only enabling WebVR by default on 64-bit builds (Bug 1384459).
4427   value: false
4428 #elif defined(XP_WIN) || defined(XP_MACOSX)
4429   # We enable OpenVR by default for Windows and macOS.
4430   value: true
4431 #else
4432   # See Bug 1310663 (Linux).  On Android, this pref is irrelevant.
4433   value: false
4434 #endif
4435   mirror: always
4437 # OSVR device
4438 - name: dom.vr.osvr.enabled
4439   type: RelaxedAtomicBool
4440   value: false
4441   mirror: always
4443 # Pose prediction reduces latency effects by returning future predicted HMD
4444 # poses to callers of the WebVR API.  This currently only has an effect for
4445 # Oculus Rift on SDK 0.8 or greater.
4446 - name: dom.vr.poseprediction.enabled
4447   type: RelaxedAtomicBool
4448   value: true
4449   mirror: always
4451 # Enable a separate process for VR module.
4452 - name: dom.vr.process.enabled
4453   type: bool
4454 #if defined(XP_WIN)
4455   value: true
4456 #else
4457   value: false
4458 #endif
4459   mirror: once
4461 - name: dom.vr.process.startup_timeout_ms
4462   type: int32_t
4463   value: 5000
4464   mirror: once
4466 # Puppet device, used for simulating VR hardware within tests and dev tools.
4467 - name: dom.vr.puppet.enabled
4468   type: RelaxedAtomicBool
4469   value: false
4470   mirror: always
4472 # Starting VR presentation is only allowed within a user gesture or event such
4473 # as VRDisplayActivate triggered by the system. dom.vr.require-gesture allows
4474 # this requirement to be disabled for special cases such as during automated
4475 # tests or in a headless kiosk system.
4476 - name: dom.vr.require-gesture
4477   type: RelaxedAtomicBool
4478   value: true
4479   mirror: always
4481 # Is support for WebXR APIs enabled?
4482 - name: dom.vr.webxr.enabled
4483   type: RelaxedAtomicBool
4484   value: false
4485   mirror: always
4487 # Points in the native bounds geometry are required to be quantized
4488 # sufficiently to prevent fingerprinting. The WebXR spec suggests
4489 # quantizing to the nearest 5 centimeters.
4490 - name: dom.vr.webxr.quantization
4491   type: AtomicFloat
4492   value: 0.05f
4493   mirror: always
4495 #ifdef XP_WIN
4496   # Control firing WidgetMouseEvent by handling Windows pointer messages or
4497   # mouse messages.
4498 -   name: dom.w3c_pointer_events.dispatch_by_pointer_messages
4499     type: bool
4500     value: true
4501     mirror: always
4503 -   name: dom.w3c_pointer_events.scroll_by_pen.enabled
4504     type: bool
4505     value: true
4506     mirror: always
4507 #endif
4509 # If the value is >= 0, it will be used for max touch points in child processes.
4510 - name: dom.maxtouchpoints.testing.value
4511   type: int32_t
4512   value: -1
4513   mirror: always
4515 # Maximum value of navigator.hardwareConcurrency.
4516 - name: dom.maxHardwareConcurrency
4517   type: RelaxedAtomicUint32
4518 #ifdef NIGHTLY_BUILD
4519   value: 128
4520 #else
4521   value: 16
4522 #endif
4523   mirror: always
4525 # W3C pointer events draft.
4526 - name: dom.w3c_pointer_events.implicit_capture
4527   type: bool
4528   value: true
4529   mirror: always
4531 - name: dom.w3c_pointer_events.getcoalescedevents_only_in_securecontext
4532   type: bool
4533   value: @IS_NIGHTLY_BUILD@
4534   mirror: always
4536 # In case Touch API is enabled, this pref controls whether to support
4537 # ontouch* event handlers, document.createTouch, document.createTouchList and
4538 # document.createEvent("TouchEvent").
4539 - name: dom.w3c_touch_events.legacy_apis.enabled
4540   type: bool
4541   value: @IS_ANDROID@
4542   mirror: always
4544 # W3C touch events
4545 # 0 - disabled, 1 - enabled, 2 - autodetect
4546 # Autodetection is currently only supported on Windows and GTK3 (and assumed on
4547 # Android).
4548 - name: dom.w3c_touch_events.enabled
4549   type: int32_t
4550 #if defined(XP_MACOSX)
4551   value: 0
4552 #else
4553   value: 2
4554 #endif
4555   mirror: always
4557 # Is support for the Web Audio API enabled?
4558 - name: dom.webaudio.enabled
4559   type: bool
4560   value: true
4561   mirror: always
4563 - name: dom.webkitBlink.dirPicker.enabled
4564   type: RelaxedAtomicBool
4565   value: @IS_NOT_ANDROID@
4566   mirror: always
4568 # Whether allowing selection across the boundary
4569 # between shadow DOM and light DOM.
4570 # This is based on https://github.com/mfreed7/shadow-dom-selection
4571 - name: dom.shadowdom.selection_across_boundary.enabled
4572   type: bool
4573   value: @IS_NIGHTLY_BUILD@
4574   mirror: always
4576 # NOTE: This preference is used in unit tests. If it is removed or its default
4577 # value changes, please update test_sharedMap_static_prefs.js accordingly.
4578 - name: dom.webcomponents.shadowdom.report_usage
4579   type: bool
4580   value: false
4581   mirror: always
4583 # Is support for Declarative ShadowDOM enabled?
4584 - name: dom.webcomponents.shadowdom.declarative.enabled
4585   type: bool
4586   value: true
4587   mirror: always
4589 # Is support for the Web GPU API enabled?
4590 - name: dom.webgpu.enabled
4591   type: RelaxedAtomicBool
4592   value: @IS_NIGHTLY_BUILD@
4593   mirror: always
4595 # Is support for the Web GPU API enabled on DOM workers?
4596 - name: dom.webgpu.workers.enabled
4597   type: RelaxedAtomicBool
4598   value: false
4599   mirror: always
4601 # Are WebGPU indirect draws/dispatches enabled?
4602 - name: dom.webgpu.indirect-dispatch.enabled
4603   type: RelaxedAtomicBool
4604   value: false
4605   mirror: always
4607 # Comma-separated list of wgpu backend names to permit in WebGPU adapters.
4609 # If non-empty, this is parsed by `wgpu_core::instance::parse_backends_from_comma_list` to
4610 # produce a `wgpu_types::Backends` bitset used to create a `wgpu_core::hub::Global`. As of
4611 # 2023-3-22, recognized names are:
4613 #     "vulkan" | "vk" => Backends::VULKAN,
4614 #     "dx12" | "d3d12" => Backends::DX12,
4615 #     "dx11" | "d3d11" => Backends::DX11,
4616 #     "metal" | "mtl" => Backends::METAL,
4617 #     "opengl" | "gles" | "gl" => Backends::GL,
4618 #     "webgpu" => Backends::BROWSER_WEBGPU,
4619 - name: dom.webgpu.wgpu-backend
4620   type: DataMutexString
4621   value: ""
4622   mirror: always
4623   rust: true
4625 - name: dom.webgpu.allow-present-without-readback
4626   type: RelaxedAtomicBool
4627 #if defined(XP_WIN)
4628   value: true
4629 #else
4630   value: false
4631 #endif
4632   mirror: always
4634 # For testing purposes, crash if we don't get a hardware adapter.
4635 - name: dom.webgpu.testing.assert-hardware-adapter
4636   type: RelaxedAtomicBool
4637   value: false
4638   mirror: always
4639   rust: true
4641 # Whether to pass labels to the hardware abstraction layer. This is only useful when
4642 # inspecting a WebGPU workload in a GPU debugging tool like renderdoc. Enabling it
4643 # exposes poorly tested driver API surfaces so it should not be enabled by default.
4644 - name: dom.webgpu.hal-labels
4645   type: bool
4646   value: false
4647   mirror: once
4648   rust: true
4650 # Is support for HTMLInputElement.webkitEntries enabled?
4651 - name: dom.webkitBlink.filesystem.enabled
4652   type: bool
4653   value: @IS_NOT_ANDROID@
4654   mirror: always
4656 # Whether the WebMIDI API is enabled
4657 - name: dom.webmidi.enabled
4658   type: bool
4659   value: @IS_NOT_ANDROID@
4660   mirror: always
4662 # midi permission is addon-gated
4663 - name: dom.webmidi.gated
4664   type: bool
4665   value: true
4666   mirror: always
4668 - name: dom.webnotifications.allowcrossoriginiframe
4669   type: RelaxedAtomicBool
4670   value: false
4671   mirror: always
4673 - name: dom.webnotifications.enabled
4674   type: RelaxedAtomicBool
4675   value: true
4676   mirror: always
4678 - name: dom.webnotifications.privateBrowsing.enableDespiteLimitations
4679   type: RelaxedAtomicBool
4680   value: false
4681   mirror: always
4683 - name: dom.webnotifications.requireuserinteraction
4684   type: RelaxedAtomicBool
4685   value: true
4686   mirror: always
4688 - name: dom.webnotifications.requireinteraction.enabled
4689   type: RelaxedAtomicBool
4690 #if defined(XP_WIN)
4691   value: true
4692 #else
4693   value: @IS_NIGHTLY_BUILD@
4694 #endif
4695   mirror: always
4697 - name: dom.webnotifications.silent.enabled
4698   type: RelaxedAtomicBool
4699   value: @IS_NIGHTLY_BUILD@
4700   mirror: always
4702 - name: dom.webnotifications.vibrate.enabled
4703   type: RelaxedAtomicBool
4704 #if defined(MOZ_WIDGET_ANDROID)
4705   value: @IS_NIGHTLY_BUILD@
4706 #else
4707   value: false
4708 #endif
4709   mirror: always
4711 # Is support for Window.event enabled?
4712 - name: dom.window.event.enabled
4713   type: bool
4714   value: true
4715   mirror: always
4717 - name: dom.window.clientinformation.enabled
4718   type: bool
4719   value: true
4720   mirror: always
4722 # Whether Window.sizeToContent() is enabled.
4723 - name: dom.window.sizeToContent.enabled
4724   type: bool
4725   value: false
4726   mirror: always
4728 - name: dom.worker.canceling.timeoutMilliseconds
4729   type: RelaxedAtomicUint32
4730   value: 30000    # 30 seconds
4731   mirror: always
4733 - name: dom.worker.use_medium_high_event_queue
4734   type: RelaxedAtomicBool
4735   value: true
4736   mirror: always
4738 # Enables the dispatching of console log events from worker threads to the
4739 # main-thread.
4740 - name: dom.worker.console.dispatch_events_to_main_thread
4741   type: RelaxedAtomicBool
4742   value: true
4743   mirror: always
4745 - name: dom.workers.testing.enabled
4746   type: RelaxedAtomicBool
4747   value: false
4748   mirror: always
4750 # WebIDL test prefs.
4751 - name: dom.webidl.test1
4752   type: bool
4753   value: true
4754   mirror: always
4755 - name: dom.webidl.test2
4756   type: bool
4757   value: true
4758   mirror: always
4760 # WebShare API - exposes navigator.share()
4761 - name: dom.webshare.enabled
4762   type: bool
4763 #ifdef XP_WIN
4764   value: @IS_EARLY_BETA_OR_EARLIER@
4765 #else
4766   value: false
4767 #endif
4768   mirror: always
4770 # WebShare API - allows WebShare without user interaction (for tests only).
4771 - name: dom.webshare.requireinteraction
4772   type: bool
4773   value: true
4774   mirror: always
4776 # Hide the confirm dialog when a POST request is reloaded.
4777 - name: dom.confirm_repost.testing.always_accept
4778   type: bool
4779   value: false
4780   mirror: always
4782 # Whether we should suspend inactive tabs or not
4783 - name: dom.suspend_inactive.enabled
4784   type: bool
4785   value: @IS_ANDROID@
4786   mirror: always
4788 # The following three prefs control the maximum script run time before slow
4789 # script warning.
4791 # Controls the time that a content script can run before showing a
4792 # notification.
4793 - name: dom.max_script_run_time
4794   type: int32_t
4795   value: 10
4796   mirror: always
4798 # Controls whether we want to wait for user input before surfacing notifying
4799 # the parent process about a long-running script.
4800 - name: dom.max_script_run_time.require_critical_input
4801   type: bool
4802 # On desktop, we don't want to annoy the user with a notification if they're
4803 # not interacting with the browser. On Android however, we automatically
4804 # terminate long-running scripts, so we want to make sure we don't get in the
4805 # way of that by waiting for input.
4806 #if defined(MOZ_WIDGET_ANDROID)
4807   value: false
4808 #else
4809   value: true
4810 #endif
4811   mirror: always
4813 # Controls if a content script will be aborted on child process shutdown.
4814 - name: dom.abort_script_on_child_shutdown
4815   type: bool
4816   value: true
4817   mirror: always
4819 - name: dom.max_chrome_script_run_time
4820   type: int32_t
4821   value: 0
4822   mirror: always
4824 - name: dom.max_ext_content_script_run_time
4825   type: int32_t
4826   value: 5
4827   mirror: always
4829 # Let Resize Observer report the size of all fragments, and not just the
4830 # first one, as per CSSWG resolution:
4831 # https://github.com/w3c/csswg-drafts/issues/3673#issuecomment-467221565
4832 - name: dom.resize_observer.support_fragments
4833   type: bool
4834   value: false
4835   mirror: always
4837 # <iframe loading="lazy">
4838 - name: dom.iframe_lazy_loading.enabled
4839   type: RelaxedAtomicBool
4840   value: true
4841   mirror: always
4843 # Whether allowing using <tab> to move focus to root elements
4844 - name: dom.disable_tab_focus_to_root_element
4845   type: bool
4846   value: true
4847   mirror: always
4849 #---------------------------------------------------------------------------
4850 # Prefs starting with "editor"
4851 #---------------------------------------------------------------------------
4853 # Default background color of HTML editor.  This is referred only when
4854 # "editor.use_custom_colors" is set to `true`.
4855 - name: editor.background_color
4856   type: String
4857   value: "#FFFFFF"
4858   mirror: never
4860 # Whether HTMLEditor consides block or inline element with computed style or
4861 # only with the default style of HTML definition.
4862 - name: editor.block_inline_check.use_computed_style
4863   type: bool
4864   value: true
4865   mirror: always
4867 # Delay to mask last input character in password fields.
4868 # If negative value, to use platform's default behavior.
4869 # If 0, no delay to mask password.
4870 # Otherwise, password fields unmask last input character(s) during specified
4871 # time (in milliseconds).
4872 - name: editor.password.mask_delay
4873   type: int32_t
4874   value: -1
4875   mirror: always
4877 # Set to true when you test mask_delay of password editor.  If this is set
4878 # to true, "MozLastInputMasked" is fired when last input characters are
4879 # masked by timeout.
4880 - name: editor.password.testing.mask_delay
4881   type: bool
4882   value: false
4883   mirror: always
4885 # How line breakers are treated in single line editor:
4886 # * 0: Only remove the leading and trailing newlines.
4887 # * 1: Remove the first newline and all characters following it.
4888 # * 2: Replace newlines with spaces (default of Firefox).
4889 # * 3: Remove newlines from the string.
4890 # * 4: Replace newlines with commas (default of Thunderbird).
4891 # * 5: Collapse newlines and surrounding white space characters and
4892 #      remove them from the string.
4893 # Other values are treated as 1.
4894 - name: editor.singleLine.pasteNewlines
4895   type: int32_t
4896   value: 2
4897   mirror: always
4899 # Whether user pastes should be truncated.
4900 - name: editor.truncate_user_pastes
4901   type: bool
4902   value: true
4903   mirror: always
4905 # When this is set to `true`, "editor.background_color" must be set, then,
4906 # the value is treated as default background color of the HTML editor.
4907 # If `false` and "browser.display.use_system_colors" is set to `true`,
4908 # "browser.display.background_color" is used instead.
4909 # Otherwise, no color is used as default background color.
4910 # This pref is for Thunderbird and SeaMonkey.
4911 - name: editor.use_custom_colors
4912   type: bool
4913   value: false
4914   mirror: always
4916 # If this is set to `true`, CSS mode of style editor is enabled by default
4917 # unless it's a mail editor.
4918 # This pref is for Thunderbird and SeaMonkey.
4919 - name: editor.use_css
4920   type: bool
4921   value: false
4922   mirror: always
4924 # Whether enabling blink compatible white-space normalizer or keep using
4925 # Gecko's traditional white-space normalizer.
4926 - name: editor.white_space_normalization.blink_compatible
4927   type: bool
4928   value: false
4929   mirror: always
4931 # General prefs for editor, indicating whether Gecko-specific editing UI is
4932 # enabled by default. Those UIs are not implemented by any other browsers.  So,
4933 # only Firefox users can change some styles with them. This means that Firefox
4934 # users may get unexpected result of some web apps if they assume that users
4935 # cannot change such styles.
4936 - name: editor.resizing.enabled_by_default
4937   type: bool
4938   value: false
4939   mirror: always
4940 - name: editor.inline_table_editing.enabled_by_default
4941   type: bool
4942   value: false
4943   mirror: always
4944 - name: editor.positioning.enabled_by_default
4945   type: bool
4946   value: false
4947   mirror: always
4949 # Controls if a double click word selection also deletes one adjacent whitespace
4950 # (if feasible). This mimics native behaviour on MacOS.
4951 - name: editor.word_select.delete_space_after_doubleclick_selection
4952   type: bool
4953 #ifdef XP_MACOSX
4954   value: true
4955 #else
4956   value: false
4957 #endif
4958   mirror: always
4960 #---------------------------------------------------------------------------
4961 # Prefs starting with "extensions."
4962 #---------------------------------------------------------------------------
4964 # Pref that enforces the use of web_accessible_resources for content loads.
4965 # This behavior is default for MV3.  The pref controls this for MV2.
4966 - name: extensions.content_web_accessible.enabled
4967   type: bool
4968   value: false
4969   mirror: always
4971 # Whether the InstallTrigger implementation should be enabled (or hidden and
4972 # none of its methods available).
4973 - name: extensions.InstallTriggerImpl.enabled
4974   type: bool
4975   value: false
4976   mirror: always
4978 # Whether the InstallTrigger implementation should be enabled (or completely
4979 # hidden), separate from InstallTriggerImpl because InstallTrigger is improperly
4980 # used also for UA detection.
4981 - name: extensions.InstallTrigger.enabled
4982   type: bool
4983   value: @IS_NOT_EARLY_BETA_OR_EARLIER@
4984   mirror: always
4987 # Whether the background.service_worker in the extension manifest.json file
4988 # is enabled.
4989 # all.js locks the pref to false when MOZ_WEBEXT_WEBIDL_ENABLED is false.
4990 - name: extensions.backgroundServiceWorker.enabled
4991   type: bool
4992   value: false
4993   mirror: once
4995 # Maximum number of misspelled words in a text.
4996 - name: extensions.spellcheck.inline.max-misspellings
4997   type: int32_t
4998   value: 500
4999   mirror: always
5001 # Whether the extensions can register a service worker on its own.
5002 # NOTE: WebExtensions Framework ability to register a background service worker
5003 # is not controlled by this pref, only the extension code ability to use
5004 # navigator.serviceWorker.register is locked behind this pref.
5005 - name: extensions.serviceWorkerRegister.allowed
5006   type: bool
5007   value: false
5008   mirror: always
5010 # Temporary pref to allow reverting the fix to bug 1853409.
5011 # TODO bug 1856071: Remove this pref.
5012 # When true, extensions can run content scripts in about:blank documents that
5013 # have a null principal. When false, extensions require permissions to all URLs.
5014 - name: extensions.script_about_blank_without_permission
5015   type: bool
5016   value: false
5017   mirror: always
5019 # Legacy behavior on filterResponse calls on intercepted sw script requests.
5020 - name: extensions.filterResponseServiceWorkerScript.disabled
5021   type: bool
5022   value: false
5023   mirror: always
5025 # This pref governs whether we run webextensions in a separate process (true)
5026 # or the parent/main process (false)
5027 - name: extensions.webextensions.remote
5028   type: RelaxedAtomicBool
5029   value: false
5030   mirror: always
5032 # Whether to expose the MockExtensionAPI test interface in tests.
5033 # The interface MockExtensionAPI doesn't represent a real extension API,
5034 # it is only available in test and does include a series of cases useful
5035 # to test the API request handling without tying the unit test to a
5036 # specific WebExtensions API.
5037 - name: extensions.webidl-api.expose_mock_interface
5038   type: RelaxedAtomicBool
5039   value: false
5040   mirror: always
5042 # Whether to allow acccess to AddonManager to developer sites for testing
5043 # NOTE: We'd like this to be a "hidden" pref once StaticPrefs supports it.
5044 - name: extensions.webapi.testing
5045   type: RelaxedAtomicBool
5046   value: false
5047   mirror: always
5049 # Automation-only pref to allow AddonManager over insecure protocols.
5050 # NOTE: We'd like this to be a "hidden" pref once StaticPrefs supports it.
5051 - name: extensions.webapi.testing.http
5052   type: RelaxedAtomicBool
5053   value: false
5054   mirror: always
5056 # Whether to expose the AddonManager web API.
5057 - name: extensions.webapi.enabled
5058   type: RelaxedAtomicBool
5059   value: @IS_NOT_ANDROID@
5060   mirror: always
5062 #---------------------------------------------------------------------------
5063 # Prefs starting with "fission."
5064 #---------------------------------------------------------------------------
5066 # Whether to enable Fission in new windows by default.
5067 # IMPORTANT: This preference should *never* be checked directly, since any
5068 # session can contain a mix of Fission and non-Fission windows. Instead,
5069 # callers should check whether the relevant nsILoadContext has the
5070 # `useRemoteSubframes` flag set.
5071 # Callers which cannot use `useRemoteSubframes` must use
5072 # `Services.appinfo.fissionAutostart` or `mozilla::FissionAutostart()` to check
5073 # whether fission is enabled by default.
5074 - name: fission.autostart
5075   type: bool
5076   value: @IS_NOT_ANDROID@
5077   mirror: never
5079 # Disable storing the session history in the parent process, and accessing it
5080 # over IPC from the child processes.
5081 - name: fission.disableSessionHistoryInParent
5082   type: bool
5083   value: @IS_ANDROID@
5084   mirror: once
5085   do_not_use_directly: true
5087 # If session history is stored in the parent process, enable bfcache for it.
5088 - name: fission.bfcacheInParent
5089   type: bool
5090   value: true
5091   mirror: always
5092   do_not_use_directly: true
5094 # Allow renaming of processes from Private Windows to the eTLD+1 on nightly
5095 # Setting this pref creates a privacy leak, but helps greatly with
5096 # debugging.
5097 - name: fission.processPrivateWindowSiteNames
5098   type: bool
5099   value: false
5100   mirror: always
5102 # Allow renaming of process names to the eTLD+1 on all versions, NOT
5103 # including processes from Private Windows
5104 # Setting this pref creates a privacy leak, but helps greatly with
5105 # debugging
5106 - name: fission.processSiteNames
5107   type: bool
5108   value: false
5109   mirror: always
5111 # Allow showing of current profile along with process names, NOT
5112 # including processes from Private Windows
5113 # Setting this pref creates a privacy leak, but helps greatly with
5114 # debugging
5115 - name: fission.processProfileName
5116   type: bool
5117   value: false
5118   mirror: always
5120 # If true, allow process-switching documents loaded by <object> and <embed>
5121 # elements into a remote process.
5122 # NOTE: This pref has no impact outside of windows with the
5123 # `useRemoteSubframes` flag set.
5124 - name: fission.remoteObjectEmbed
5125   type: bool
5126   value: true
5127   mirror: always
5129 # The strategy used to control how sites are isolated into separate processes
5130 # when Fisison is enabled. This pref has no effect if Fission is disabled.
5131 # See the `WebContentIsolationStrategy` enum in `ProcessIsolation.cpp`.
5132 - name: fission.webContentIsolationStrategy
5133   type: uint32_t
5134   value: 1
5135   mirror: always
5137 # Time in seconds before a site loaded with the Cross-Origin-Opener-Policy
5138 # header is no longer considered high-value and isolated in the "highValueCOOP"
5139 # configuration.
5140 - name: fission.highValue.coop.expiration
5141   type: uint32_t
5142   value: 2592000   # 30 days (in seconds)
5143   mirror: always
5145 # Time in seconds before a site are considered high-value by the login detection
5146 # service is no longer considered high-value and isolated in the "highValueHasSavedLogin"
5147 # or "highValueIsLoggedIn" configuration.
5148 - name: fission.highValue.login.expiration
5149   type: uint32_t
5150   value: 2592000   # 30 days (in seconds)
5151   mirror: always
5153 # If true, capture login attemp, and add "highValueIsLoggedIn" permission to
5154 # the permission manager no matter whether fission is enabled and
5155 # WebContentIsolationStrateg is set to IsolateHighvalue.
5156 - name: fission.highValue.login.monitor
5157   type: bool
5158   value: @IS_ANDROID@
5159   mirror: always
5161 # If true, do not send blocklisted preference values to the subprocess
5162 - name: fission.omitBlocklistedPrefsInSubprocesses
5163   type: RelaxedAtomicBool
5164   value: true
5165   mirror: always
5167 # If true, crash when a blocklisted preference is accessed in a subprocess
5168 - name: fission.enforceBlocklistedPrefsInSubprocesses
5169   type: RelaxedAtomicBool
5170   value: @IS_EARLY_BETA_OR_EARLIER@
5171   mirror: always
5173 #---------------------------------------------------------------------------
5174 # Prefs starting with "font."
5175 #---------------------------------------------------------------------------
5177 # A value greater than zero enables font size inflation for
5178 # pan-and-zoom UIs, so that the fonts in a block are at least the size
5179 # that, if a block's width is scaled to match the device's width, the
5180 # fonts in the block are big enough that at most the pref value ems of
5181 # text fit in *the width of the device*.
5183 # When both this pref and the next are set, the larger inflation is used.
5184 - name: font.size.inflation.emPerLine
5185   type: uint32_t
5186   value: 0
5187   mirror: always
5189 # A value greater than zero enables font size inflation for
5190 # pan-and-zoom UIs, so that if a block's width is scaled to match the
5191 # device's width, the fonts in a block are at least the given font size.
5192 # The value given is in twips, i.e., 1/20 of a point, or 1/1440 of an inch.
5194 # When both this pref and the previous are set, the larger inflation is used.
5195 - name: font.size.inflation.minTwips
5196   type: uint32_t
5197   value: 0
5198   mirror: always
5200 # In products with multi-mode pan-and-zoom and non-pan-and-zoom UIs,
5201 # this pref forces font inflation to always be enabled in all modes.
5202 # That is, any heuristics used to detect pan-and-zoom
5203 # vs. non-pan-and-zoom modes are disabled and all content is treated
5204 # as pan-and-zoom mode wrt font inflation.
5206 # This pref has no effect if font inflation is not enabled through
5207 # either of the prefs above.  It has no meaning in single-mode UIs.
5208 - name: font.size.inflation.forceEnabled
5209   type: bool
5210   value: false
5211   mirror: always
5213 # In products with multi-mode pan-and-zoom and non-pan-and-zoom UIs,
5214 # this pref disables font inflation in master-process contexts where
5215 # existing heuristics can't be used determine enabled-ness.
5217 # This pref has no effect if font inflation is not enabled through
5218 # either of the prefs above.  The "forceEnabled" pref above overrides
5219 # this pref.
5220 - name: font.size.inflation.disabledInMasterProcess
5221   type: bool
5222   value: false
5223   mirror: always
5225 # Defines the font size inflation mapping intercept parameter.
5227 # Font size inflation computes a minimum font size, m, based on
5228 # other preferences (see font.size.inflation.minTwips and
5229 # font.size.inflation.emPerLine, above) and the width of the
5230 # frame in which the text resides. Using this minimum, a specified
5231 # font size, s, is mapped to an inflated font size, i, using an
5232 # equation that varies depending on the value of the font size
5233 # inflation mapping intercept parameter, P.
5235 # If the intercept parameter is negative, then the following mapping
5236 # function is used:
5238 # i = m + s
5240 # If the intercept parameter is non-negative, then the mapping function
5241 # is a function such that its graph meets the graph of i = s at the
5242 # point where both i and s are (1 + P/2) * m for values of s that are
5243 # large enough. This means that when s=0, i is always equal to m.
5244 - name: font.size.inflation.mappingIntercept
5245   type: int32_t
5246   value: 1
5247   mirror: always
5249 # Since the goal of font size inflation is to avoid having to
5250 # repeatedly scroll side to side to read a block of text, and there are
5251 # a number of page layouts where a relatively small chunk of text is
5252 # better off not being inflated according to the same algorithm we use
5253 # for larger chunks of text, we want a threshold for an amount of text
5254 # that triggers font size inflation.  This preference controls that
5255 # threshold.
5257 # It controls the threshold used within an *approximation* of the
5258 # number of lines of text we use.  In particular, if we assume that
5259 # each character (collapsing collapsible whitespace) has a width the
5260 # same as the em-size of the font (when, normally, it's actually quite
5261 # a bit smaller on average), this preference gives the percentage of a
5262 # number of lines of text we'd need to trigger inflation.  This means
5263 # that a percentage of 100 means that we'd need a number of characters
5264 # (we know the font size and the width) equivalent to one line of
5265 # square text (which is actually a lot less than a real line of text).
5267 # A value of 0 means there's no character length threshold.
5268 - name: font.size.inflation.lineThreshold
5269   type: uint32_t
5270   value: 400
5271   mirror: always
5273 # This controls the percentage that fonts will be inflated, if font
5274 # size inflation is enabled. Essentially, if we have a specified font
5275 # size, s, and an inflated font size, i, this specifies that the ratio
5276 # i/s * 100 should never exceed the value of this preference. In order
5277 # for this preference to have any effect, its value must be greater
5278 # than 100, since font inflation can never decrease the ratio i/s.
5279 - name: font.size.inflation.maxRatio
5280   type: uint32_t
5281   value: 0
5282   mirror: always
5284 #---------------------------------------------------------------------------
5285 # Prefs starting with "full-screen-api."
5286 #---------------------------------------------------------------------------
5288 - name: full-screen-api.enabled
5289   type: bool
5290   value: true
5291   mirror: always
5293 - name: full-screen-api.allow-trusted-requests-only
5294   type: bool
5295   value: true
5296   mirror: always
5298 - name: full-screen-api.mouse-event-allow-left-button-only
5299   type: bool
5300   value: true
5301   mirror: always
5303 - name: full-screen-api.exit-on.windowOpen
5304   type: bool
5305   value: true
5306   mirror: always
5308 - name: full-screen-api.exit-on.windowRaise
5309   type: bool
5310   value: true
5311   mirror: always
5313 - name: full-screen-api.pointer-lock.enabled
5314   type: bool
5315   value: true
5316   mirror: always
5318 # whether to prevent the top level widget from going fullscreen
5319 - name: full-screen-api.ignore-widgets
5320   type: bool
5321   value: false
5322   mirror: always
5324 #---------------------------------------------------------------------------
5325 # Prefs starting with "fuzzing.". It's important that these can only be
5326 # checked in fuzzing builds (when FUZZING is defined), otherwise you could
5327 # enable the fuzzing stuff on your regular build which would be bad :)
5328 #---------------------------------------------------------------------------
5330 #ifdef FUZZING
5331 -   name: fuzzing.enabled
5332     type: bool
5333 #ifdef FUZZING_SNAPSHOT
5334     value: true
5335 #else
5336     value: false
5337 #endif
5338     mirror: always
5340 -   name: fuzzing.necko.enabled
5341     type: RelaxedAtomicBool
5342     value: false
5343     mirror: always
5345 -   name: fuzzing.necko.http3
5346     type: RelaxedAtomicBool
5347     value: false
5348     mirror: always
5349     rust: true
5351 # This configures a virtual authenticator for WebAuthn. The value encodes the
5352 # arguments to the WebDriver "Add Virtual Authenticator" extension command.
5353 # Bits 0, 1, 2, and 3 encode "is_user_verified", "is_user_consenting",
5354 # "has_user_verification", and "has_resident_key" in that order. Bit 5 encodes
5355 # the transport, either "usb" (0) or "internal" (1). Bits 6 and 7 encode the
5356 # protocol, either "ctap1/u2f" (1), "ctap2" (2), or "ctap2_1" (3). Note that
5357 # the valid protocol values are non-zero---an authenticator will not be
5358 # configured if this pref is set to zero. Changing this pref requires
5359 # a restart.
5360 - name: fuzzing.webauthn.authenticator_config
5361   type: RelaxedAtomicUint32
5362   value: 0
5363   mirror: always
5364   rust: true
5365 #endif
5367 #---------------------------------------------------------------------------
5368 # Prefs starting with "general."
5369 #---------------------------------------------------------------------------
5371 - name: general.aboutConfig.enable
5372   type: bool
5373   value: true
5374   mirror: always
5376 # Limits the depth of recursive conversion of data when opening
5377 # a content to view.  This is mostly intended to prevent infinite
5378 # loops with faulty converters involved.
5379 - name: general.document_open_conversion_depth_limit
5380   type: uint32_t
5381   value: 20
5382   mirror: always
5384 - name: general.smoothScroll
5385   type: RelaxedAtomicBool
5386   value: true
5387   mirror: always
5389 # This pref and general.smoothScroll.stopDecelerationWeighting determine
5390 # the timing function.
5391 - name: general.smoothScroll.currentVelocityWeighting
5392   type: AtomicFloat
5393   value: 0.25
5394   mirror: always
5396 # To connect consecutive scroll events into a continuous flow, the animation's
5397 # duration should be longer than scroll events intervals (or else the scroll
5398 # will stop before the next event arrives - we're guessing the next interval
5399 # by averaging recent intervals).
5400 # This defines how much longer the duration is compared to the events
5401 # interval (percentage).
5402 - name: general.smoothScroll.durationToIntervalRatio
5403   type: RelaxedAtomicInt32
5404   value: 200
5405   mirror: always
5407 - name: general.smoothScroll.lines
5408   type: RelaxedAtomicBool
5409   value: true
5410   mirror: always
5412 - name: general.smoothScroll.lines.durationMaxMS
5413   type: RelaxedAtomicInt32
5414   value: 150
5415   mirror: always
5417 - name: general.smoothScroll.lines.durationMinMS
5418   type: RelaxedAtomicInt32
5419   value: 150
5420   mirror: always
5422 - name: general.smoothScroll.mouseWheel
5423   type: RelaxedAtomicBool
5424   value: true
5425   mirror: always
5427 - name: general.smoothScroll.mouseWheel.durationMaxMS
5428   type: RelaxedAtomicInt32
5429   value: 200
5430   mirror: always
5432 - name: general.smoothScroll.mouseWheel.durationMinMS
5433   type: RelaxedAtomicInt32
5434   value: 50
5435   mirror: always
5437 - name: general.smoothScroll.other
5438   type: RelaxedAtomicBool
5439   value: true
5440   mirror: always
5442 - name: general.smoothScroll.other.durationMaxMS
5443   type: RelaxedAtomicInt32
5444   value: 150
5445   mirror: always
5447 - name: general.smoothScroll.other.durationMinMS
5448   type: RelaxedAtomicInt32
5449   value: 150
5450   mirror: always
5452 - name: general.smoothScroll.pages
5453   type: RelaxedAtomicBool
5454   value: true
5455   mirror: always
5457 - name: general.smoothScroll.pages.durationMaxMS
5458   type: RelaxedAtomicInt32
5459   value: 150
5460   mirror: always
5462 - name: general.smoothScroll.pages.durationMinMS
5463   type: RelaxedAtomicInt32
5464   value: 150
5465   mirror: always
5467 - name: general.smoothScroll.scrollbars
5468   type: RelaxedAtomicBool
5469   value: true
5470   mirror: always
5472 - name: general.smoothScroll.scrollbars.durationMaxMS
5473   type: RelaxedAtomicInt32
5474   value: 150
5475   mirror: always
5477 - name: general.smoothScroll.scrollbars.durationMinMS
5478   type: RelaxedAtomicInt32
5479   value: 150
5480   mirror: always
5482 - name: general.smoothScroll.pixels
5483   type: RelaxedAtomicBool
5484   value: true
5485   mirror: always
5487 - name: general.smoothScroll.pixels.durationMaxMS
5488   type: RelaxedAtomicInt32
5489   value: 150
5490   mirror: always
5492 - name: general.smoothScroll.pixels.durationMinMS
5493   type: RelaxedAtomicInt32
5494   value: 150
5495   mirror: always
5497 # This pref and general.smoothScroll.currentVelocityWeighting determine
5498 # the timing function.
5499 - name: general.smoothScroll.stopDecelerationWeighting
5500   type: AtomicFloat
5501   value: 0.4f
5502   mirror: always
5504 # Alternative smooth scroll physics. ("MSD" = Mass-Spring-Damper)
5505 - name: general.smoothScroll.msdPhysics.enabled
5506   type: RelaxedAtomicBool
5507   value: @IS_NIGHTLY_BUILD@
5508   mirror: always
5510 - name: general.smoothScroll.msdPhysics.continuousMotionMaxDeltaMS
5511   type: RelaxedAtomicInt32
5512   value: 120
5513   mirror: always
5515 - name: general.smoothScroll.msdPhysics.motionBeginSpringConstant
5516   type: RelaxedAtomicInt32
5517   value: 1250
5518   mirror: always
5520 - name: general.smoothScroll.msdPhysics.slowdownMinDeltaMS
5521   type: RelaxedAtomicInt32
5522   value: 12
5523   mirror: always
5525 - name: general.smoothScroll.msdPhysics.slowdownMinDeltaRatio
5526   type: AtomicFloat
5527   value: 1.3f
5528   mirror: always
5530 - name: general.smoothScroll.msdPhysics.slowdownSpringConstant
5531   type: RelaxedAtomicInt32
5532   value: 2000
5533   mirror: always
5535 - name: general.smoothScroll.msdPhysics.regularSpringConstant
5536   type: RelaxedAtomicInt32
5537   value: 1000
5538   mirror: always
5540 #---------------------------------------------------------------------------
5541 # Prefs starting with "geo."
5542 #---------------------------------------------------------------------------
5544 # Is support for Navigator.geolocation enabled?
5545 - name: geo.enabled
5546   type: bool
5547   value: true
5548   mirror: always
5550 # Time, in milliseconds, to wait for the location provider to spin up.
5551 - name: geo.timeout
5552   type: int32_t
5553   value: 6000
5554   mirror: always
5556 #ifdef MOZ_ENABLE_DBUS
5557 # Whether to use Geoclue location provider (if available on the system).
5558 - name: geo.provider.use_geoclue
5559   type: bool
5560   value: true
5561   mirror: always
5563 # Whether to always provide high location accuracy, even if site
5564 # doesn't actually request this level of accuracy.
5565 # Almost no site correctly requests high accuracy so force it by default
5566 # for compatibility with other geolocation providers.
5567 - name: geo.provider.geoclue.always_high_accuracy
5568   type: bool
5569   value: true
5570   mirror: always
5571 #endif
5573 #---------------------------------------------------------------------------
5574 # Prefs starting with "gfx."
5575 #---------------------------------------------------------------------------
5577 # Allow 24-bit colour when the hardware supports it.
5578 - name: gfx.android.rgb16.force
5579   type: bool
5580   value: false
5581   mirror: once
5583 - name: gfx.apitrace.enabled
5584   type: bool
5585   value: false
5586   mirror: once
5588 - name: gfx.blithelper.precision
5589   type: RelaxedAtomicUint32
5590   value: 2 # { 0: lowp, 1: mediump, 2: highp }
5591   mirror: always
5593 - name: gfx.blithelper.lut-size.rgb.b
5594   type: RelaxedAtomicUint32
5595   value: 15
5596   mirror: always
5597 - name: gfx.blithelper.lut-size.rgb.g
5598   type: RelaxedAtomicUint32
5599   value: 31
5600   mirror: always
5601 - name: gfx.blithelper.lut-size.rgb.r
5602   type: RelaxedAtomicUint32
5603   value: 31
5604   mirror: always
5606 - name: gfx.blithelper.lut-size.ycbcr.cb
5607   type: RelaxedAtomicUint32
5608   value: 15
5609   mirror: always
5610 - name: gfx.blithelper.lut-size.ycbcr.cr
5611   type: RelaxedAtomicUint32
5612   value: 31
5613   mirror: always
5614 - name: gfx.blithelper.lut-size.ycbcr.y
5615   type: RelaxedAtomicUint32
5616   value: 31
5617   mirror: always
5619 # Nb: we ignore this pref on release and beta.
5620 - name: gfx.blocklist.all
5621   type: int32_t
5622   value: 0
5623   mirror: once
5625 #if defined(XP_DARWIN)
5626 - name: gfx.cairo_quartz_cg_layer.enabled
5627   type: bool
5628   value: true
5629   mirror: always
5630 #endif
5632 - name: gfx.canvas.accelerated
5633   type: bool
5634 #if defined(XP_MACOSX) || defined(XP_LINUX) && !defined(ANDROID)
5635   value: true
5636 #elif defined(MOZ_WIDGET_ANDROID)
5637   value: true
5638 #else
5639   value: false
5640 #endif
5641   mirror: always
5643 # Whether to attempt to enable Accelerated Canvas2D regardless of blocklisting.
5644 - name: gfx.canvas.accelerated.force-enabled
5645   type: bool
5646   value: false
5647   mirror: always
5649 - name: gfx.canvas.accelerated.async-present
5650   type: RelaxedAtomicBool
5651   value: true
5652   mirror: always
5654 - name: gfx.canvas.accelerated.cache-items
5655   type: RelaxedAtomicUint32
5656   value: 2048
5657   mirror: always
5659 - name: gfx.canvas.accelerated.cache-size
5660   type: RelaxedAtomicUint32
5661   value: 256
5662   mirror: always
5664 - name: gfx.canvas.accelerated.reserve-empty-cache
5665   type: RelaxedAtomicUint32
5666   value: 36
5667   mirror: always
5669 - name: gfx.canvas.accelerated.max-draw-target-count
5670   type: RelaxedAtomicUint32
5671   value: 200
5672   mirror: always
5674 - name: gfx.canvas.accelerated.max-size
5675   type: RelaxedAtomicInt32
5676   value: 8192
5677   mirror: always
5679 - name: gfx.canvas.accelerated.min-size
5680   type: RelaxedAtomicInt32
5681   value: 128
5682   mirror: always
5684 - name: gfx.canvas.accelerated.max-surface-size
5685   type: RelaxedAtomicUint32
5686   value: 5280
5687   mirror: always
5689 - name: gfx.canvas.accelerated.shared-page-size
5690   type: RelaxedAtomicUint32
5691   value: 1024
5692   mirror: always
5694 # The minimum number of frames before acting on performance profile info
5695 - name: gfx.canvas.accelerated.profile-frames
5696   type: RelaxedAtomicUint32
5697   value: 10
5698   mirror: always
5700 # The ratio of failed frames to total frames when to fall back from acceleration
5701 - name: gfx.canvas.accelerated.profile-fallback-ratio
5702   type: AtomicFloat
5703   value: 0.3
5704   mirror: always
5706 # The ratio of cache misses at which to fail a profile frame
5707 - name: gfx.canvas.accelerated.profile-cache-miss-ratio
5708   type: AtomicFloat
5709   value: 0.66
5710   mirror: always
5712 # The maximum size of the GPU path cache in MB.
5713 - name: gfx.canvas.accelerated.gpu-path-size
5714   type: RelaxedAtomicUint32
5715   value: 4
5716   mirror: always
5718 # The maximum allowed complexity of a GPU path.
5719 - name: gfx.canvas.accelerated.gpu-path-complexity
5720   type: RelaxedAtomicUint32
5721   value: 4000
5722   mirror: always
5724 # Whether to accelerate stroked paths by converting them to fill paths.
5725 - name: gfx.canvas.accelerated.stroke-to-fill-path
5726   type: RelaxedAtomicBool
5727   value: false
5728   mirror: always
5730 # Whether to use aa-stroke to accelerate stroked paths.
5731 - name: gfx.canvas.accelerated.aa-stroke.enabled
5732   type: RelaxedAtomicBool
5733   value: true
5734   mirror: always
5736 # Draws an indicator if acceleration is used.
5737 - name: gfx.canvas.accelerated.debug
5738   type: RelaxedAtomicBool
5739   value: false
5740   mirror: always
5742 # 0x7fff is the maximum supported xlib surface size and is more than enough for canvases.
5743 - name: gfx.canvas.max-size
5744   type: RelaxedAtomicInt32
5745   value: 0x7fff
5746   mirror: always
5748 - name: gfx.canvas.remote
5749   type: bool
5750 #if defined(XP_WIN)
5751   value: true
5752 #else
5753   value: false
5754 #endif
5755   mirror: once
5757 - name: gfx.canvas.remote.allow-in-parent
5758   type: bool
5759   value: false
5760   mirror: once
5762 # Whether OffscreenCanvas can use remote canvas
5763 - name: gfx.canvas.remote.allow-offscreen
5764   type: RelaxedAtomicBool
5765   value: true
5766   mirror: always
5768 # How many worker threads spawned for remote canvas
5769 #  -1 - Calculate based on processor cores
5770 #   0 - No worker threads spawned, will do work on CanvasRenderThread
5771 #  >0 - Create worker thread pool with given size
5772 - name: gfx.canvas.remote.worker-threads
5773   type: int32_t
5774 #if defined(XP_WIN)
5775   value: -1
5776 #else
5777   value: 0
5778 #endif
5779   mirror: once
5781 # Default size of the shmem buffers used for recording
5782 - name: gfx.canvas.remote.default-buffer-size
5783   type: RelaxedAtomicUint32
5784   value: 32 * 1024
5785   mirror: always
5787 # Maximum number of Default size shmem buffers to use
5788 - name: gfx.canvas.remote.max_default_buffers
5789   type: RelaxedAtomicUint32
5790   value: 256
5791   mirror: always
5793 # How many times to spin before waiting in remote canvas
5794 - name: gfx.canvas.remote.max-spin-count
5795   type: RelaxedAtomicUint32
5796   value: 500
5797   mirror: always
5799 # How long to wait in milliseconds for the next event while in a transaction
5800 - name: gfx.canvas.remote.event-timeout-ms
5801   type: RelaxedAtomicUint32
5802   value: 2
5803   mirror: always
5805 # How many times we have a spare buffer before we drop one
5806 - name: gfx.canvas.remote.drop-buffer-limit
5807   type: RelaxedAtomicUint32
5808   value: 100
5809   mirror: always
5811 # Delay in milliseconds to drop buffers when there have been no non-empty transactions
5812 - name: gfx.canvas.remote.drop-buffer-milliseconds
5813   type: RelaxedAtomicUint32
5814   value: 10000
5815   mirror: always
5817 - name: gfx.canvas.remote.use-draw-image-fast-path
5818   type: RelaxedAtomicBool
5819   value: true
5820   mirror: always
5822 - name: gfx.canvas.willreadfrequently.enabled
5823   type: bool
5824 #if defined(XP_WIN)
5825   value: false
5826 #else
5827   value: true
5828 #endif
5829   mirror: once
5832 - name: gfx.color_management.display_profile
5833   type: DataMutexString
5834   value: ""
5835   mirror: always # But be warned: We cache the result.
5837 - name: gfx.color_management.force_srgb
5838   type: RelaxedAtomicBool
5839   value: false
5840   mirror: always
5842 - name: gfx.color_management.native_srgb
5843   type: RelaxedAtomicBool
5844 #if defined(XP_MACOSX)
5845   value: true
5846 #else
5847   value: false
5848 #endif
5849   mirror: always
5851 - name: gfx.color_management.enablev4
5852   type: RelaxedAtomicBool
5853   value: true
5854   mirror: always
5856 # 0 = Off, 1 = Full, 2 = Tagged Images Only.
5857 # See CMSMode in gfx/thebes/gfxPlatform.h.
5858 - name: gfx.color_management.mode
5859   type: RelaxedAtomicInt32
5860   value: 2
5861   mirror: always
5863 # The zero default here should match QCMS_INTENT_DEFAULT from qcms.h
5864 - name: gfx.color_management.rendering_intent
5865   type: RelaxedAtomicInt32
5866   value: 0
5867   mirror: always
5869 - name: gfx.color_management.rec709_gamma_as_srgb
5870   type: RelaxedAtomicBool
5871   value: true # Tragic backwards compat.
5872   mirror: always
5874 - name: gfx.color_management.rec2020_gamma_as_rec709
5875   type: RelaxedAtomicBool
5876   value: true # Match naive behavior, but hopefully we can stop soon!
5877   mirror: always
5879 # Whether GL contexts can be migrated to a different GPU (to match the one the
5880 # OS is using for composition).
5882 # 0 = force disable migration
5883 # 1 = use migration where in safe configurations (the default)
5884 # 2 = force enable migration (for testing)
5885 - name: gfx.compositor.gpu-migration
5886   type: RelaxedAtomicInt32
5887   value: 1
5888   mirror: always
5890 - name: gfx.core-animation.tint-opaque
5891   type: RelaxedAtomicBool
5892   value: false
5893   mirror: always
5895 #ifdef XP_DARWIN
5896   # Create specialized video-only layers for video content in
5897   # fullscreen windows. Consistently works well on Apple Silicon,
5898   # some issues remain on Intel hardware.
5899 -   name: gfx.core-animation.specialize-video
5900     type: RelaxedAtomicBool
5901 #if defined(MOZ_AARCH64)
5902     value: true
5903 #else
5904     value: false
5905 #endif
5906     mirror: always
5907 #endif
5909 #if defined(XP_DARWIN) && defined(NIGHTLY_BUILD)
5910   # Spoof the timing of the video sample instead of marking the untimed
5911   # sample to be displayed immediately.
5912 -   name: gfx.core-animation.specialize-video.spoof-timing
5913     type: RelaxedAtomicBool
5914     value: false
5915     mirror: always
5917   # Check that the sample has a color space and if it doesn't, log that
5918   # and supply the default color space from the main display.
5919 -   name: gfx.core-animation.specialize-video.check-color-space
5920     type: RelaxedAtomicBool
5921     value: false
5922     mirror: always
5924   # Log properties of the video surface, buffer, and format.
5925 -   name: gfx.core-animation.specialize-video.log
5926     type: RelaxedAtomicBool
5927     value: false
5928     mirror: always
5929 #endif
5931 #ifdef XP_DARWIN
5932 -   name: gfx.core-animation.low-power-telemetry-frames
5933     type: int32_t
5934     value: 600
5935     mirror: once
5936 #endif
5938 #if defined(MOZ_WIDGET_ANDROID)
5939   # Overrides the glClear color used when the surface origin is not (0, 0)
5940   # Used for drawing a border around the content.
5941 -   name: gfx.compositor.override.clear-color.r
5942     type: AtomicFloat
5943     value: 0.0f
5944     mirror: always
5946 -   name: gfx.compositor.override.clear-color.g
5947     type: AtomicFloat
5948     value: 0.0f
5949     mirror: always
5951 -   name: gfx.compositor.override.clear-color.b
5952     type: AtomicFloat
5953     value: 0.0f
5954     mirror: always
5956 -   name: gfx.compositor.override.clear-color.a
5957     type: AtomicFloat
5958     value: 0.0f
5959     mirror: always
5960 #endif  # defined(MOZ_WIDGET_ANDROID)
5962 - name: gfx.content.always-paint
5963   type: RelaxedAtomicBool
5964   value: false
5965   mirror: always
5967 # Size in megabytes
5968 - name: gfx.content.skia-font-cache-size
5969   type: int32_t
5970   value: 5
5971   mirror: once
5973 - name: gfx.device-reset.limit
5974   type: int32_t
5975   value: 10
5976   mirror: once
5978 - name: gfx.device-reset.threshold-ms
5979   type: int32_t
5980   value: -1
5981   mirror: once
5984 # Whether to disable the automatic detection and use of direct2d.
5985 - name: gfx.direct2d.disabled
5986   type: bool
5987   value: false
5988   mirror: once
5990 # Whether to attempt to enable Direct2D regardless of automatic detection or
5991 # blacklisting.
5992 - name: gfx.direct2d.force-enabled
5993   type: bool
5994   value: false
5995   mirror: once
5997 - name: gfx.direct2d.target-independent-rasterization.disabled
5998   type: bool
5999   value: false
6000   mirror: once
6002 - name: gfx.direct3d11.reuse-decoder-device
6003   type: bool
6004   value: true
6005   mirror: once
6006 # Enable reuse decoder device even when it is blocked.
6007 - name: gfx.direct3d11.reuse-decoder-device-force-enabled
6008   type: bool
6009   value: false
6010   mirror: once
6012 - name: gfx.direct3d11.allow-keyed-mutex
6013   type: RelaxedAtomicBool
6014   value: true
6015   mirror: always
6017 - name: gfx.direct3d11.use-double-buffering
6018   type: RelaxedAtomicBool
6019   value: false
6020   mirror: always
6022 - name: gfx.direct3d11.enable-debug-layer
6023   type: bool
6024   value: false
6025   mirror: once
6027 - name: gfx.direct3d11.break-on-error
6028   type: bool
6029   value: false
6030   mirror: once
6032 - name: gfx.direct3d11.sleep-on-create-device
6033   type: int32_t
6034   value: 0
6035   mirror: once
6037 # Rate by which the frame rate is divided. I.e. at a number higher than 1 we
6038 # will only refresh every <x> frames.
6039 - name: gfx.display.frame-rate-divisor
6040   type: RelaxedAtomicInt32
6041   value: 1
6042   mirror: always
6044 - name: gfx.display.max-frame-rate
6045   type: RelaxedAtomicInt32
6046   value: 0
6047   mirror: always
6049 # Whether to preserve color bitmap tables in fonts (bypassing OTS).
6050 # Currently these are supported only on platforms where we use Freetype
6051 # to render fonts (Linux/Gtk and Android).
6052 - name: gfx.downloadable_fonts.keep_color_bitmaps
6053   type: RelaxedAtomicBool
6054   value: false
6055   mirror: always
6057 # Whether to validate OpenType variation tables in fonts.
6058 - name: gfx.downloadable_fonts.validate_variation_tables
6059   type: RelaxedAtomicBool
6060   value: true
6061   mirror: always
6063 # Whether OTS validation should be applied to OpenType Layout (OTL) tables.
6064 - name: gfx.downloadable_fonts.otl_validation
6065   type: RelaxedAtomicBool
6066   value: @IS_NOT_RELEASE_OR_BETA@
6067   mirror: always
6069 - name: gfx.e10s.font-list.shared
6070   type: bool
6071   value: true
6072   mirror: once
6074 # Do we fire a notification about missing fonts, so the front-end can decide
6075 # whether to try and do something about it (e.g. download additional fonts)?
6076 - name: gfx.missing_fonts.notify
6077   type: RelaxedAtomicBool
6078   value: false
6079   mirror: always
6081 #if !defined(MOZ_WIDGET_ANDROID)
6082 - name: gfx.egl.prefer-gles.enabled
6083   type: bool
6084 #if defined(MOZ_WIDGET_GTK) && defined(MOZ_AARCH64)
6085   value: true
6086 #else
6087   value: false
6088 #endif
6089   mirror: once
6090 #endif
6092 # [Windows] Whether registry FontSubstitutes entries are used unconditionally,
6093 # or only if the original font is not available.
6094 #if defined(XP_WIN)
6095 - name: gfx.windows-font-substitutes.always
6096   type: bool
6097   value: false
6098   mirror: once
6099 #endif
6101 - name: gfx.font-list-omt.enabled
6102   type: bool
6103 #if defined(XP_MACOSX)
6104   value: true
6105 #else
6106   value: false
6107 #endif
6108   mirror: once
6110 # [Android] OPPO, realme and OnePlus device seem to crash when using Font
6111 # Match API. We turn off this feature on these devices. Set true if you want to
6112 # turn on it at force.
6113 #if defined(MOZ_WIDGET_ANDROID)
6114 - name: gfx.font-list.use_font_match_api.force-enabled
6115   type: bool
6116   value: false
6117   mirror: once
6118 #endif
6120 # Whether to load fonts (e.g. Twemoji Mozilla) bundled with the application:
6121 #  -1 - Auto behavior based on OS version (currently, disables loading on
6122 #       "low-memory" Android devices)
6123 #   0 - Skip loading any bundled fonts
6124 #   1 - Always load bundled fonts
6125 - name: gfx.bundled-fonts.activate
6126   type: int32_t
6127   value: -1
6128   mirror: once
6130 - name: gfx.font_loader.delay
6131   type: RelaxedAtomicUint32
6132 #if defined(XP_WIN)
6133   value: 60000
6134 #else
6135   value: 8000
6136 #endif
6137   mirror: always
6139 # Disable antialiasing of Ahem, for use in tests.
6140 - name: gfx.font_rendering.ahem_antialias_none
6141   type: RelaxedAtomicBool
6142   value: false
6143   mirror: always
6145 #if defined(XP_DARWIN)
6146   # Set to true to revert from HarfBuzz AAT shaping to the old Core Text
6147   # backend.
6148 -   name: gfx.font_rendering.coretext.enabled
6149     type: RelaxedAtomicBool
6150     value: false
6151     mirror: always
6152 #endif
6154 - name: gfx.font_rendering.colr_v1.enabled
6155   type: RelaxedAtomicBool
6156   value: true
6157   mirror: always
6159 - name: gfx.font_rendering.opentype_svg.enabled
6160   type: RelaxedAtomicBool
6161   value: true
6162   mirror: always
6163   rust: true
6165 - name: gfx.font_rendering.fallback.async
6166   type: RelaxedAtomicBool
6167   value: true
6168   mirror: always
6170 # whether to always search all font cmaps during system font fallback
6171 - name: gfx.font_rendering.fallback.always_use_cmaps
6172   type: RelaxedAtomicBool
6173   value: false
6174   mirror: always
6176 # whether to do font fallback for codepoints with General Category = Unassigned
6177 - name: gfx.font_rendering.fallback.unassigned_chars
6178   type: RelaxedAtomicBool
6179   value: false
6180   mirror: always
6182 #ifdef MOZ_WIDGET_GTK
6183 -   name: gfx.font_rendering.fontconfig.max_generic_substitutions
6184     type: RelaxedAtomicUint32
6185     value: 3
6186     mirror: always
6187 #endif
6189 #if defined(XP_WIN)
6190 # Whether the DirectWrite bold simulation should be used when a bold font-weight
6191 # is requested but no bold face available in the family. This renders poorly with
6192 # some third-party fonts, so by default we disable it for webfonts and allow it
6193 # only with locally-installed fonts.
6194 # Values:
6195 #   0 - never use DWrite bold simulation; always multi-strike instead
6196 #   1 - use DWrite bold for installed fonts, multi-strike for webfont resources
6197 #   2 - use DWrite bold for all fonts
6198 - name: gfx.font_rendering.directwrite.bold_simulation
6199   type: RelaxedAtomicUint32
6200   value: 1
6201   mirror: always
6202 #endif
6204 - name: gfx.font_rendering.graphite.enabled
6205   type: RelaxedAtomicBool
6206   value: true
6207   mirror: always
6209 # Cache shaped word results
6210 - name: gfx.font_rendering.wordcache.charlimit
6211   type: RelaxedAtomicUint32
6212   value: 32
6213   mirror: always
6215 # Cache shaped word results
6216 - name: gfx.font_rendering.wordcache.maxentries
6217   type: RelaxedAtomicUint32
6218   value: 10000
6219   mirror: always
6221 # The level of logging:
6222 # - 0: no logging;
6223 # - 1: adds errors;
6224 # - 2: adds warnings;
6225 # - 3 or 4: adds debug logging.
6226 # If you set the value to 4, you will also need to set the environment
6227 # variable MOZ_LOG to gfx:4. See mozilla/Logging.h for details.
6228 - name: gfx.logging.level
6229   type: RelaxedAtomicInt32
6230   value: mozilla::gfx::LOG_DEFAULT
6231   mirror: always
6232   include: mozilla/gfx/LoggingConstants.h
6234 - name: gfx.logging.crash.length
6235   type: uint32_t
6236   value: 16
6237   mirror: once
6239 # The maximums here are quite conservative, we can tighten them if problems show up.
6240 - name: gfx.logging.texture-usage.enabled
6241   type: bool
6242   value: false
6243   mirror: once
6245 - name: gfx.logging.peak-texture-usage.enabled
6246   type: bool
6247   value: false
6248   mirror: once
6250 - name: gfx.logging.slow-frames.enabled
6251   type: bool
6252   value: false
6253   mirror: once
6255 # Use gfxPlatform::MaxAllocSize instead of the pref directly.
6256 - name: gfx.max-alloc-size
6257   type: int32_t
6258   value: (int32_t)0x7FFFFFFF
6259   mirror: once
6260   do_not_use_directly: true
6262 # Use gfxPlatform::MaxTextureSize instead of the pref directly.
6263 - name: gfx.max-texture-size
6264   type: int32_t
6265   value: (int32_t)32767
6266   mirror: once
6267   do_not_use_directly: true
6269 # Enable OffscreenCanvas everywhere.
6270 - name: gfx.offscreencanvas.enabled
6271   type: RelaxedAtomicBool
6272   value: true
6273   mirror: always
6275 - name: gfx.offscreencanvas.shared-provider
6276   type: RelaxedAtomicBool
6277   value: true
6278   mirror: always
6280 - name: gfx.offscreencanvas.snapshot-timeout-ms
6281   type: int32_t
6282   value: 10000
6283   mirror: always
6285 - name: gfx.omta.background-color
6286   type: bool
6287   value: true
6288   mirror: always
6290 - name: gfx.partialpresent.force
6291   type: RelaxedAtomicInt32
6292   value: 0
6293   mirror: always
6295 # SwapInterval
6296 - name: gfx.swap-interval.glx
6297   type: RelaxedAtomicBool
6298   value: true
6299   mirror: always
6301 - name: gfx.swap-interval.egl
6302   type: RelaxedAtomicBool
6303   mirror: always
6304 #ifdef MOZ_WIDGET_ANDROID
6305   value: true
6306 #else
6307   value: false
6308 #endif
6311 # Log severe performance warnings to the error console and profiles.
6312 # This should be use to quickly find which slow paths are used by test cases.
6313 - name: gfx.perf-warnings.enabled
6314   type: RelaxedAtomicBool
6315   value: false
6316   mirror: always
6318 #ifdef MOZ_X11
6319 # Whether to force using GLX over EGL.
6320 - name: gfx.x11-egl.force-disabled
6321   type: bool
6322   value: false
6323   mirror: once
6325 # Whether to force using EGL over GLX.
6326 - name: gfx.x11-egl.force-enabled
6327   type: bool
6328   value: false
6329   mirror: once
6331 - name: gfx.x11.glx_sgi_video_sync
6332   type: bool
6333   value: false
6334   mirror: once
6335 #endif
6337 - name: gfx.testing.device-fail
6338   type: RelaxedAtomicBool
6339   value: false
6340   mirror: always
6342 - name: gfx.testing.device-reset
6343   type: RelaxedAtomicInt32
6344   value: 0
6345   mirror: always
6347 - name: gfx.text.disable-aa
6348   type: bool
6349   value: false
6350   mirror: once
6352 - name: gfx.text.subpixel-position.force-enabled
6353   type: bool
6354   value: false
6355   mirror: once
6357 - name: gfx.text.subpixel-position.force-disabled
6358   type: bool
6359   value: false
6360   mirror: once
6362 - name: gfx.use-iosurface-textures
6363   type: bool
6364   value: false
6365   mirror: once
6367 - name: gfx.use-mutex-on-present
6368   type: bool
6369   value: false
6370   mirror: once
6372 # Use SurfaceTextures as preferred backend for TextureClient/Host.
6373 - name: gfx.use-surfacetexture-textures
6374   type: bool
6375   value: false
6376   mirror: once
6378 - name: gfx.vsync.compositor.unobserve-count
6379   type: int32_t
6380   value: 10
6381   mirror: once
6383 - name: gfx.vsync.force-disable-waitforvblank
6384   type: RelaxedAtomicBool
6385   value: false
6386   mirror: always
6388 - name: gfx.will-change.ignore-opacity
6389   type: RelaxedAtomicBool
6390   value: true
6391   mirror: always
6393 # Should we override the blocklist to enable WebGPU?
6394 - name: gfx.webgpu.ignore-blocklist
6395   type: bool
6396   value: false
6397   mirror: once
6399 # Whether to use the WebRender hardware backend
6400 - name: gfx.webrender.all
6401   type: bool
6402   value: false
6403   mirror: once
6405 #ifdef XP_WIN
6406 - name: gfx.webrender.force-angle
6407   type: bool
6408   value: true
6409   mirror: once
6410 #endif
6412 # WebRender is not enabled when there is no GPU process on window when
6413 # WebRender uses ANGLE. It is for avoiding that WebGL and WebRender use ANGLE
6414 # at once. But there is a case that we want to enable WebRender for testing.
6415 #ifdef XP_WIN
6416 - name: gfx.webrender.enabled-no-gpu-process-with-angle-win
6417   type: bool
6418   value: true
6419   mirror: once
6420 #endif
6422 - name: gfx.webrender.svg-images
6423   type: RelaxedAtomicBool
6424   value: true
6425   mirror: always
6427 - name: gfx.webrender.svg-shapes
6428   type: RelaxedAtomicBool
6429   value: true
6430   mirror: always
6432 - name: gfx.webrender.debug.blob.paint-flashing
6433   type: RelaxedAtomicBool
6434   value: false
6435   mirror: always
6437 - name: gfx.webrender.debug.enable-capture
6438   type: bool
6439   value: false
6440   mirror: once
6442 - name: gfx.webrender.debug.dl.dump-parent
6443   type: RelaxedAtomicBool
6444   value: false
6445   mirror: always
6447 - name: gfx.webrender.debug.dl.dump-content
6448   type: RelaxedAtomicBool
6449   value: false
6450   mirror: always
6452 - name: gfx.webrender.debug.dl.dump-content-serialized
6453   type: RelaxedAtomicBool
6454   value: false
6455   mirror: always
6457 #ifdef MOZ_WIDGET_GTK
6458 - name: gfx.webrender.reject-software-driver
6459   type: bool
6460   value: true
6461   mirror: once
6462 #endif
6464 - name: gfx.webrender.debug.highlight-painted-layers
6465   type: RelaxedAtomicBool
6466   value: false
6467   mirror: always
6469 - name: gfx.webrender.late-scenebuild-threshold
6470   type: RelaxedAtomicInt32
6471   value: 4
6472   mirror: always
6474 - name: gfx.webrender.max-filter-ops-per-chain
6475   type: RelaxedAtomicUint32
6476   value: 64
6477   mirror: always
6479 - name: gfx.webrender.batching.lookback
6480   type: uint32_t
6481   value: 10
6482   mirror: always
6484 - name: gfx.webrender.blob-tile-size
6485   type: uint32_t
6486   value: 256
6487   mirror: always
6489 - name: gfx.webrender.batched-upload-threshold
6490   type: int32_t
6491 #if defined(MOZ_WIDGET_ANDROID)
6492   value: 262144
6493 #else
6494   value: 65536
6495 #endif
6496   mirror: always
6498 - name: gfx.webrender.compositor
6499   type: bool
6500 #if defined(XP_WIN) || defined(XP_MACOSX)
6501   value: true
6502 #else
6503   value: false
6504 #endif
6505   mirror: once
6507 - name: gfx.webrender.scissored-cache-clears.enabled
6508   type: bool
6509   value: true
6510   mirror: once
6512 - name: gfx.webrender.scissored-cache-clears.force-enabled
6513   type: bool
6514   value: false
6515   mirror: once
6517 - name: gfx.webrender.compositor.force-enabled
6518   type: bool
6519   value: false
6520   mirror: once
6522 - name: gfx.webrender.compositor.max_update_rects
6523   type: uint32_t
6524   value: 1
6525   mirror: once
6527 - name: gfx.webrender.compositor.surface-pool-size
6528   type: uint32_t
6529   value: 25
6530   mirror: once
6532 # Number of damage rects we can give to the compositor for a new frame with
6533 # partial present. This controls whether partial present is used or not.
6534 - name: gfx.webrender.max-partial-present-rects
6535   type: uint32_t
6536 #if defined(XP_WIN) || defined(MOZ_WIDGET_ANDROID) || defined(MOZ_WIDGET_GTK)
6537   value: 1
6538 #else
6539   value: 0
6540 #endif
6541   mirror: once
6543 # Whether or not we can reuse the buffer contents using the GL buffer age
6544 # extension, if supported by the platform. This requires partial present
6545 # to be used.
6546 - name: gfx.webrender.allow-partial-present-buffer-age
6547   type: bool
6548   value: true
6549   mirror: once
6551 # Whether or not we should force partial present on.
6552 - name: gfx.webrender.force-partial-present
6553   type: bool
6554   value: false
6555   mirror: once
6557 - name: gfx.webrender.enable-gpu-markers
6558   type: bool
6559 #ifdef DEBUG
6560   value: true
6561 #else
6562   value: false
6563 #endif
6564   mirror: once
6566 - name: gfx.webrender.enable-item-cache
6567   type: bool
6568   value: true
6569   mirror: once
6571 # Whether or not to fallback from WebRender to Software WebRender.
6572 - name: gfx.webrender.fallback.software
6573   type: bool
6574   value: true
6575   mirror: once
6577 #ifdef XP_WIN
6578   # Whether to use an overlay of hardware decoded video with DirectComposition
6579 -   name: gfx.webrender.dcomp-video-hw-overlay-win
6580     type: bool
6581     value: true
6582     mirror: once
6583   # Enable hardware decoded video overlay even when it is blocked.
6584 -   name: gfx.webrender.dcomp-video-hw-overlay-win-force-enabled
6585     type: bool
6586     value: false
6587     mirror: once
6588   # Whether to use a yuv video overlay layers with DirectComposition
6589 -   name: gfx.webrender.dcomp-video-yuv-overlay-win
6590     type: bool
6591     value: false
6592     mirror: once
6593 -   name: gfx.webrender.dcomp-video-vp-scaling-win
6594     type: bool
6595     value: true
6596     mirror: once
6597   # Whether to use virtual surfaces, as opposed to each tile owning a surface.
6598 -   name: gfx.webrender.dcomp-use-virtual-surfaces
6599     type: bool
6600     value: true
6601     mirror: once
6602   # Whether to use an overlay of software decoded video with DirectComposition
6603 -   name: gfx.webrender.dcomp-video-sw-overlay-win
6604     type: bool
6605     value: true
6606     mirror: once
6607   # Enable software decoded video overlay even when it is blocked.
6608 -   name: gfx.webrender.dcomp-video-sw-overlay-win-force-enabled
6609     type: bool
6610     value: false
6611     mirror: once
6612 -   name: gfx.webrender.dcomp-video-check-slow-present
6613     type: RelaxedAtomicBool
6614     value: true
6615     mirror: always
6616   # Force triple buffering in overlay's video swap chain
6617 -   name: gfx.webrender.dcomp-video-force-triple-buffering
6618     type: RelaxedAtomicBool
6619     value: false
6620     mirror: always
6621 -   name: gfx.webrender.dcomp-video-swap-chain-present-interval-0
6622     type: RelaxedAtomicBool
6623     value: false
6624     mirror: always
6625 -   name: gfx.video.convert-yuv-to-nv12.image-host-win
6626     type: RelaxedAtomicBool
6627     value: true
6628     mirror: always
6629 #endif
6631 # Whether or not fallback to Software WebRender requires the GPU process.
6632 - name: gfx.webrender.fallback.software.requires-gpu-process
6633   type: bool
6634   value: false
6635   mirror: once
6637 - name: gfx.webrender.program-binary-disk
6638   type: bool
6639 #if defined(XP_WIN) || defined(ANDROID)
6640   value: true
6641 #else
6642   value: false
6643 #endif
6644   mirror: once
6646 - name: gfx.webrender.use-optimized-shaders
6647   type: bool
6648   value: true
6649   mirror: once
6651 - name: gfx.webrender.precache-shaders
6652   type: bool
6653   value: false
6654   mirror: once
6656 # When gl debug message is a high severity message, forwward it to gfx critical
6657 # note.
6658 - name: gfx.webrender.gl-debug-message-critical-note
6659   type: bool
6660 #if defined(XP_WIN) && defined(NIGHTLY_BUILD)
6661   value: true
6662 #else
6663   value: false
6664 #endif
6665   mirror: once
6667 # Enable printing gl debug messages
6668 - name: gfx.webrender.gl-debug-message-print
6669   type: bool
6670   value: false
6671   mirror: once
6673 #ifdef NIGHTLY_BUILD
6674   # Keep this pref hidden on non-nightly builds to avoid people accidentally
6675   # turning it on.
6676 - name: gfx.webrender.panic-on-gl-error
6677   type: bool
6678   value: false
6679   mirror: once
6680 #endif
6682 #ifdef XP_WIN
6683   # Enables display of performance debugging counters when DirectComposition
6684   # is used.
6685   # Performance counters are displayed on the top-right corner of the screen.
6686 -   name: gfx.webrender.debug.dcomp-counter
6687     type: RelaxedAtomicBool
6688     value: false
6689     mirror: always
6690   # Enables highlighting redraw regions of DCompositionVisual
6691 -   name: gfx.webrender.debug.dcomp-redraw-regions
6692     type: RelaxedAtomicBool
6693     value: false
6694     mirror: always
6695 #endif
6697 #ifdef XP_DARWIN
6698   # Files show up in $HOME/Desktop/nativelayerdumps-PID/frame-123.html
6699 -   name: gfx.webrender.debug.dump-native-layer-tree-to-file
6700     type: RelaxedAtomicBool
6701     value: false
6702     mirror: always
6703 #endif
6705 - name: gfx.webrender.enable-low-priority-pool
6706   type: RelaxedAtomicBool
6707 #if defined(ANDROID)
6708   value: false
6709 #else
6710   value: true
6711 #endif
6712   mirror: always
6714   # Force subpixel anti-aliasing as much as possible, despite performance cost.
6715 - name: gfx.webrender.quality.force-subpixel-aa-where-possible
6716   type: bool
6717   value: false
6718   mirror: always
6720 - name: gfx.webrender.enable-subpixel-aa
6721   type: bool
6722   mirror: once
6723 #ifdef MOZ_WIDGET_ANDROID
6724   value: false
6725 #else
6726   value: true
6727 #endif
6729 #ifdef XP_MACOSX
6730 - name: gfx.webrender.enable-client-storage
6731   type: bool
6732   value: true
6733   mirror: once
6734 #endif
6736  # Width of WebRender tile size
6737 - name: gfx.webrender.picture-tile-width
6738   type: RelaxedAtomicInt32
6739   value: 1024
6740   mirror: always
6742  # Width of WebRender tile size
6743 - name: gfx.webrender.picture-tile-height
6744   type: RelaxedAtomicInt32
6745   value: 512
6746   mirror: always
6748 # WebRender upper bound for shared surface size
6749 # According to apitrace, textures larger than 2048 break fast clear
6750 # optimizations on some intel drivers. We sometimes need to go larger, but
6751 # we try to avoid it.
6752 - name: gfx.webrender.max-shared-surface-size
6753   type: int32_t
6754   value: 2048
6755   mirror: once
6757 # Whether to use EGL robustness or not.
6758 - name: gfx.webrender.prefer-robustness
6759   type: bool
6760 #if defined(XP_WIN) || defined(MOZ_WIDGET_GTK)
6761   value: true
6762 #else
6763   value: false
6764 #endif
6765   mirror: once
6767 # Whether to use the WebRender software backend
6768 - name: gfx.webrender.software
6769   type: bool
6770   value: false
6771   mirror: once
6773 # Whether to use the D3D11 RenderCompositor when using WebRender software backend
6774 - name: gfx.webrender.software.d3d11
6775   type: bool
6776   value: true
6777   mirror: once
6779 - name: gfx.webrender.software.opengl
6780   type: bool
6781 #if defined(MOZ_WIDGET_ANDROID)
6782   value: true
6783 #else
6784   value: false
6785 #endif
6786   mirror: once
6788 - name: gfx.webrender.software.d3d11.upload-mode
6789   type: RelaxedAtomicInt32
6790   value: 4
6791   mirror: always
6793 # Whether to force widgets to don't support acceleration to use WebRender
6794 # despite that
6795 - name: gfx.webrender.unaccelerated-widget.force
6796   type: RelaxedAtomicBool
6797   value: false
6798   mirror: always
6800 # Enable a lower quality, but higher performance pinch-zoom mode. Primarily
6801 # for devices with weak GPUs, or when running SWGL.
6802 - name: gfx.webrender.low-quality-pinch-zoom
6803   type: bool
6804 #if defined(MOZ_WIDGET_ANDROID)
6805   value: true
6806 #else
6807   value: false
6808 #endif
6809   mirror: once
6811 # Disable wait of GPU execution completion
6812 - name: gfx.webrender.wait-gpu-finished.disabled
6813   type: bool
6814 #if defined(XP_WIN)
6815   value: true
6816 #else
6817   value: false
6818 #endif
6819   mirror: once
6821 # Enable VideoProcessor Super Resolution for video overlay
6822 - name: gfx.webrender.overlay-vp-super-resolution
6823   type: bool
6824   value: @IS_NIGHTLY_BUILD@
6825   mirror: once
6827 # Enable VideoProcessor-HDR on SDR content for video overlay
6828 - name: gfx.webrender.overlay-vp-auto-hdr
6829   type: bool
6830   value: @IS_NIGHTLY_BUILD@
6831   mirror: once
6833 # Use vsync events generated by hardware
6834 - name: gfx.work-around-driver-bugs
6835   type: bool
6836   value: true
6837   mirror: once
6839 - name: gfx.ycbcr.accurate-conversion
6840   type: RelaxedAtomicBool
6841   value: false
6842   mirror: always
6844 - name: gfx.remote-texture.recycle.disabled
6845   type: RelaxedAtomicBool
6846   value: false
6847   mirror: always
6849 #---------------------------------------------------------------------------
6850 # Prefs starting with "gl." (OpenGL)
6851 #---------------------------------------------------------------------------
6853 - name: gl.allow-high-power
6854   type: RelaxedAtomicBool
6855   value: true
6856   mirror: always
6858 - name: gl.ignore-dx-interop2-blacklist
6859   type: RelaxedAtomicBool
6860   value: false
6861   mirror: always
6863 - name: gl.use-tls-is-current
6864   type: RelaxedAtomicInt32
6865   value: 0
6866   mirror: always
6868 #---------------------------------------------------------------------------
6869 # Prefs starting with "html5."
6870 #---------------------------------------------------------------------------
6872 # Time in milliseconds between the time a network buffer is seen and the timer
6873 # firing when the timer hasn't fired previously in this parse in the
6874 # off-the-main-thread HTML5 parser.
6875 - name: html5.flushtimer.initialdelay
6876   type: RelaxedAtomicInt32
6877   value: 16
6878   mirror: always
6880 # Time in milliseconds between the time a network buffer is seen and the timer
6881 # firing when the timer has already fired previously in this parse.
6882 - name: html5.flushtimer.subsequentdelay
6883   type: RelaxedAtomicInt32
6884   value: 16
6885   mirror: always
6887 #---------------------------------------------------------------------------
6888 # Prefs starting with "idle_period."
6889 #---------------------------------------------------------------------------
6891 - name: idle_period.min
6892   type: uint32_t
6893   value: 3
6894   mirror: always
6896 - name: idle_period.during_page_load.min
6897   type: uint32_t
6898   value: 12
6899   mirror: always
6901 - name: idle_period.cross_process_scheduling
6902   type: RelaxedAtomicBool
6903   value: true
6904   mirror: always
6906 #---------------------------------------------------------------------------
6907 # Prefs starting with "image."
6908 #---------------------------------------------------------------------------
6910 # The maximum size (in kB) that the aggregate frames of an animation can use
6911 # before it starts to discard already displayed frames and redecode them as
6912 # necessary.
6913 - name: image.animated.decode-on-demand.threshold-kb
6914   type: RelaxedAtomicUint32
6915   value: 20*1024
6916   mirror: always
6918 # The minimum number of frames we want to have buffered ahead of an
6919 # animation's currently displayed frame.
6920 - name: image.animated.decode-on-demand.batch-size
6921   type: RelaxedAtomicUint32
6922   value: 6
6923   mirror: always
6925 # Whether we should recycle already displayed frames instead of discarding
6926 # them. This saves on the allocation itself, and may be able to reuse the
6927 # contents as well. Only applies if generating full frames.
6928 - name: image.animated.decode-on-demand.recycle
6929   type: bool
6930   value: true
6931   mirror: once
6933 # Resume an animated image from the last displayed frame rather than
6934 # advancing when out of view.
6935 - name: image.animated.resume-from-last-displayed
6936   type: RelaxedAtomicBool
6937   value: true
6938   mirror: always
6940 # Maximum number of surfaces for an image before entering "factor of 2" mode.
6941 # This in addition to the number of "native" sizes of an image. A native size
6942 # is a size for which we can decode a frame without up or downscaling. Most
6943 # images only have 1, but some (i.e. ICOs) may have multiple frames for the
6944 # same data at different sizes.
6945 - name: image.cache.factor2.threshold-surfaces
6946   type: RelaxedAtomicInt32
6947   value: 4
6948   mirror: always
6950 # Maximum size of a surface in KB we are willing to produce when rasterizing
6951 # an SVG.
6952 - name: image.cache.max-rasterized-svg-threshold-kb
6953   type: RelaxedAtomicInt32
6954   value: 200*1024
6955   mirror: always
6957 # The maximum size, in bytes, of the decoded images we cache.
6958 - name: image.cache.size
6959   type: int32_t
6960   value: 5*1024*1024
6961   mirror: once
6963 # A weight, from 0-1000, to place on time when comparing to size.
6964 # Size is given a weight of 1000 - timeweight.
6965 - name: image.cache.timeweight
6966   type: int32_t
6967   value: 500
6968   mirror: once
6970 # Decode all images automatically on load, ignoring our normal heuristics.
6971 - name: image.decode-immediately.enabled
6972   type: RelaxedAtomicBool
6973   value: false
6974   mirror: always
6976 # Decode all images synchronously
6977 - name: image.decode-sync.enabled
6978   type: bool
6979   value: false
6980   mirror: always
6982 # Whether we attempt to downscale images during decoding.
6983 - name: image.downscale-during-decode.enabled
6984   type: RelaxedAtomicBool
6985   value: true
6986   mirror: always
6988 # Whether we use EXIF metadata for image density.
6989 - name: image.exif-density-correction.enabled
6990   type: RelaxedAtomicBool
6991   value: true
6992   mirror: always
6994 # Whether EXIF density metadata is sanity checked against PixelXDimension and PixelYDimension
6995 - name: image.exif-density-correction.sanity-check.enabled
6996   type: RelaxedAtomicBool
6997   value: true
6998   mirror: always
7000 # The threshold for inferring that changes to an <img> element's |src|
7001 # attribute by JavaScript represent an animation, in milliseconds. If the |src|
7002 # attribute is changing more frequently than this value, then we enter a
7003 # special "animation mode" which is designed to eliminate flicker. Set to 0 to
7004 # disable.
7005 - name: image.infer-src-animation.threshold-ms
7006   type: RelaxedAtomicUint32
7007   value: 2000
7008   mirror: always
7010 # Whether the network request priority should be adjusted according
7011 # the layout and view frame position of each particular image.
7012 - name: image.layout_network_priority
7013   type: RelaxedAtomicBool
7014   value: true
7015   mirror: always
7017 # Chunk size for calls to the image decoders.
7018 - name: image.mem.decode_bytes_at_a_time
7019   type: uint32_t
7020   value: 16384
7021   mirror: once
7023 # Discards inactive image frames and re-decodes them on demand from
7024 # compressed data.
7025 - name: image.mem.discardable
7026   type: RelaxedAtomicBool
7027   value: true
7028   mirror: always
7030 # Discards inactive image frames of _animated_ images and re-decodes them on
7031 # demand from compressed data. Has no effect if image.mem.discardable is false.
7032 - name: image.mem.animated.discardable
7033   type: bool
7034   value: true
7035   mirror: once
7037 # Enable extra information for debugging in the image memory reports.
7038 - name: image.mem.debug-reporting
7039   type: RelaxedAtomicBool
7040   value: false
7041   mirror: always
7043 # Force unmapping of unused shared surfaces after a timeout period or when we
7044 # encounter virtual memory pressure. By default this is only enabled on 32-bit
7045 # Firefox.
7046 - name: image.mem.shared.unmap.force-enabled
7047   type: bool
7048   value: false
7049   mirror: once
7051 # Minimum timeout to unmap shared surfaces since they have been last used,
7052 # in milliseconds.
7053 - name: image.mem.shared.unmap.min_expiration_ms
7054   type: uint32_t
7055   value: 60*1000
7056   mirror: once
7058 # Mininum size for shared surfaces to consider unmapping, in kilobytes.
7059 - name: image.mem.shared.unmap.min_threshold_kb
7060   type: uint32_t
7061   value: 100
7062   mirror: once
7064 # How much of the data in the surface cache is discarded when we get a memory
7065 # pressure notification, as a fraction. The discard factor is interpreted as a
7066 # reciprocal, so a discard factor of 1 means to discard everything in the
7067 # surface cache on memory pressure, a discard factor of 2 means to discard half
7068 # of the data, and so forth. The default should be a good balance for desktop
7069 # and laptop systems, where we never discard visible images.
7070 - name: image.mem.surfacecache.discard_factor
7071   type: uint32_t
7072   value: 1
7073   mirror: once
7075 # Maximum size for the surface cache, in kilobytes.
7076 - name: image.mem.surfacecache.max_size_kb
7077   type: uint32_t
7078   value: 2024 * 1024
7079   mirror: once
7081 # Minimum timeout for expiring unused images from the surface cache, in
7082 # milliseconds. This controls how long we store cached temporary surfaces.
7083 - name: image.mem.surfacecache.min_expiration_ms
7084   type: uint32_t
7085   value: 60*1000
7086   mirror: once
7088 # The surface cache's size, within the constraints of the maximum size set
7089 # above, is determined as a fraction of main memory size. The size factor is
7090 # interpreted as a reciprocal, so a size factor of 4 means to use no more than
7091 # 1/4 of main memory.  The default should be a good balance for most systems.
7092 - name: image.mem.surfacecache.size_factor
7093   type: uint32_t
7094   value: 4
7095   mirror: once
7097 # Maximum size in kilobytes that we allow to allocate an imgFrame, meant for
7098 # testing/fuzzing purposes. -1 disables this limit (there are other limits in
7099 # place).
7100 - name: image.mem.max_legal_imgframe_size_kb
7101   type: RelaxedAtomicInt32
7102   value: -1
7103   mirror: always
7105 # Whether we record SVG images as blobs or not.
7106 - name: image.svg.blob-image
7107   type: RelaxedAtomicBool
7108   value: false
7109   mirror: always
7111 # Whether we attempt to decode AVIF images or not.
7112 - name: image.avif.enabled
7113   type: RelaxedAtomicBool
7114 #if defined(MOZ_AV1)
7115   value: true
7116 #else
7117   value: false
7118 #endif
7119   mirror: always
7121 # How strict we are in accepting/rejecting AVIF inputs according to whether they
7122 # conform to the specification
7123 # 0 = Permissive: accept whatever we can simply, unambiguously interpret
7124 # 1 = Normal: reject violations of "shall" specification directives
7125 # 2 = Strict: reject violations of "should" specification directives
7126 - name: image.avif.compliance_strictness
7127   type: RelaxedAtomicInt32
7128   value: 1
7129   mirror: always
7131 # Whether we apply container-level transforms like mirroring and rotation
7132 - name: image.avif.apply_transforms
7133   type: RelaxedAtomicBool
7134   value: true
7135   mirror: always
7137 # Whether we use dav1d (true) or libaom (false) to decode AVIF image
7138 - name: image.avif.use-dav1d
7139   type: RelaxedAtomicBool
7140   value: true
7141   mirror: always
7143 # Whether to allow decoding of animated AVIF sequences.
7144 - name: image.avif.sequence.enabled
7145   type: RelaxedAtomicBool
7146   value: true
7147   mirror: always
7149 # Whether AVIF files containing sequences should be animated even when the
7150 # major brand is set to 'avif'.
7151 - name: image.avif.sequence.animate_avif_major_branded_images
7152   type: RelaxedAtomicBool
7153   value: false
7154   mirror: always
7156 # Whether we attempt to decode JXL images or not.
7157 - name: image.jxl.enabled
7158   type: RelaxedAtomicBool
7159   value: false
7160   mirror: always
7162 #---------------------------------------------------------------------------
7163 # Prefs starting with "intl."
7164 #---------------------------------------------------------------------------
7166 #ifdef XP_WIN
7167   # Whether making Gecko TSF-aware or only working with IMM.  TSF is a modern
7168   # IME API set of Windows which replaces IMM APIs.  Unless you can avoid the
7169   # problem which you see with enabling TSF, you shouldn't change this pref
7170   # to false since IMM handler is now not maintained nor tested with latest
7171   # Windows.  If you need to change this pref to false, please file a bug to
7172   # <https://bugzilla.mozilla.org>.
7173   # Restart required to apply this pref change.
7174 -   name: intl.tsf.enabled
7175     type: bool
7176     value: true
7177     mirror: once
7179   # Whether Gecko creates or does not create native caret for legacy ATOK
7180   # (2011 - 2015).
7181 -   name: intl.tsf.hack.atok.create_native_caret
7182     type: bool
7183     value: true
7184     mirror: always
7186   # Whether Gecko returns available composition string rect or TS_E_NOLAYOUT
7187   # from ITextStoreACP::GetTextExt() when the specified range is same as the
7188   # range of composition string but some character rects in it are still
7189   # dirty if and only if ATOK is active TIP.
7190   # Note that this is ignored if active ATOK is or older than 2016 and
7191   # create_native_caret is true.
7192 -   name: intl.tsf.hack.atok.do_not_return_no_layout_error_of_composition_string
7193     type: bool
7194     value: true
7195     mirror: always
7197   # Whether Gecko sets input scope of ATOK to "search" or never does it.
7198   # When "search" is set to the input scope, ATOK may stop their suggestions.
7199   # To avoid it, turn this pref on, or changing the settings in ATOK.
7200   # Note that if you enable this pref and you use the touch keyboard for touch
7201   # screens, you cannot access some specific features for a "search" input
7202   # field.
7203 -   name: intl.tsf.hack.atok.search_input_scope_disabled
7204     type: bool
7205     value: false
7206     mirror: always
7208   # Whether Gecko returns caret rect before composition string or TS_E_NOLAYOUT
7209   # from ITextStoreACP::GetTextExt() when the specified range is larger than
7210   # composition start offset if and only if Free ChangJie is active TIP.
7211 -   name: intl.tsf.hack.free_chang_jie.do_not_return_no_layout_error
7212     type: bool
7213     value: true
7214     mirror: always
7216   # Whether Gecko returns available composition string rect or TS_E_NOLAYOUT
7217   # from ITextStoreACP::GetTextExt() when the specified range is same as the
7218   # range of composition string but some character rects in it are still
7219   # dirty if and only if Japanist 10 is active TIP.
7220 -   name: intl.tsf.hack.japanist10.do_not_return_no_layout_error_of_composition_string
7221     type: bool
7222     value: true
7223     mirror: always
7225   # Whether Gecko returns previous character rect or TS_E_NOLAYOUT from
7226   # ITfContextView::GetTextExt() when the specified range is the first
7227   # character of selected clause of composition string if and only if Japanese TIP
7228   # of Microsoft is active.
7229 -   name: intl.tsf.hack.ms_japanese_ime.do_not_return_no_layout_error_at_first_char
7230     type: bool
7231     value: true
7232     mirror: always
7234   # Whether Gecko returns previous character rect or TS_E_NOLAYOUT from
7235   # ITfContextView::GetTextExt() when the specified range is the caret of
7236   # composition string if and only if Japanese TIP of Microsoft is active.
7237 -   name: intl.tsf.hack.ms_japanese_ime.do_not_return_no_layout_error_at_caret
7238     type: bool
7239     value: true
7240     mirror: always
7242   # Whether Gecko returns caret rect before composition string or TS_E_NOLAYOUT
7243   # from ITfContextView::GetTextExt() when the specified range is larger than
7244   # composition start offset if and only Simplified Chinese TIP of Microsoft
7245   # is active.
7246 -   name: intl.tsf.hack.ms_simplified_chinese.do_not_return_no_layout_error
7247     type: bool
7248     value: true
7249     mirror: always
7251   # Whether Geckos hacks ITextStoreACP::QueryInsert() or not.  The method should
7252   # return new selection after specified length text is inserted at specified
7253   # range.  However, Microsoft Pinyin and Microsoft Wubi expect that the result
7254   # is same as specified range.  If following prefs are true,
7255   # ITextStoreACP::QueryInsert() returns specified range only when one of the
7256   # TIPs is active.
7257 -   name: intl.tsf.hack.ms_simplified_chinese.query_insert_result
7258     type: bool
7259     value: true
7260     mirror: always
7262   # Whether Gecko returns caret rect before composition string or TS_E_NOLAYOUT
7263   # from ITfContextView::GetTextExt() when the specified range is larger than
7264   # composition start offset if and only Traditional Chinese TIP of Microsoft
7265   # is active.
7266 -   name: intl.tsf.hack.ms_traditional_chinese.do_not_return_no_layout_error
7267     type: bool
7268     value: true
7269     mirror: always
7271   # Whether Geckos hacks ITextStoreACP::QueryInsert() or not.  The method should
7272   # return new selection after specified length text is inserted at specified
7273   # range.  However, Microsoft ChangJie and Microsoft Quick expect that the
7274   # result is same as specified range.  If following prefs are true,
7275   # ITextStoreACP::QueryInsert() returns specified range only when one of the
7276   # TIPs is active.
7277 -   name: intl.tsf.hack.ms_traditional_chinese.query_insert_result
7278     type: bool
7279     value: true
7280     mirror: always
7282   # Whether Gecko sets input scope of the URL bar to IS_DEFAULT when black
7283   # listed IMEs are active or does not.  If you use tablet mode mainly and you
7284   # want to use touch keyboard for URL when you set focus to the URL bar, you
7285   # can set this to false.  Then, you'll see, e.g., ".com" key on the keyboard.
7286   # However, if you set this to false, such IMEs set its open state to "closed"
7287   # when you set focus to the URL bar.  I.e., input mode is automatically
7288   # changed to English input mode.
7289   # Known buggy IME list:
7290   #   - Microsoft IME for Japanese
7291   #   - Google Japanese Input
7292   #   - Microsoft Bopomofo
7293   #   - Microsoft ChangJie
7294   #   - Microsoft Phonetic
7295   #   - Microsoft Quick
7296   #   - Microsoft New ChangJie
7297   #   - Microsoft New Phonetic
7298   #   - Microsoft New Quick
7299   #   - Microsoft Pinyin
7300   #   - Microsoft Pinyin New Experience Input Style
7301   #   - Microsoft Wubi
7302   #   - Microsoft IME for Korean (except on Win7)
7303   #   - Microsoft Old Hangul
7304 -   name: intl.ime.hack.set_input_scope_of_url_bar_to_default
7305     type: bool
7306     value: true
7307     mirror: always
7309   # On Windows 10 Build 17643 (an Insider Preview build of RS5), Microsoft
7310   # have fixed the caller of ITextACPStore::GetTextExt() to return
7311   # TS_E_NOLAYOUT to TIP as-is, rather than converting to E_FAIL.
7312   # Therefore, if TIP supports asynchronous layout computation perfectly, we
7313   # can return TS_E_NOLAYOUT and TIP waits next OnLayoutChange()
7314   # notification.  However, some TIPs still have some bugs of asynchronous
7315   # layout support.  We keep hacking the result of GetTextExt() like running
7316   # on Windows 10, however, there could be unknown TIP bugs if we stop
7317   # hacking the result.  So, user can stop checking build ID to make Gecko
7318   # hack the result forcibly.
7319 -   name: intl.tsf.hack.allow_to_stop_hacking_on_build_17643_or_later
7320     type: bool
7321     value: @IS_EARLY_BETA_OR_EARLIER@
7322     mirror: always
7324   # If true, automatically extend selection to cluster boundaries when
7325   # TSF/TIP requests to select from/by middle of a cluster.
7326 -   name: intl.tsf.hack.extend_setting_selection_range_to_cluster_boundaries
7327     type: bool
7328     value: @IS_NOT_EARLY_BETA_OR_EARLIER@
7329     mirror: always
7331   # Whether Gecko supports IMM even if TSF is enabled.  This pref exists
7332   # only for check TSF behavior of new versions.  Therefore, users should
7333   # not set this to false for daily use.
7334 -   name: intl.tsf.support_imm
7335     type: bool
7336     value: true
7337     mirror: once
7339   # If true, TSF and TIP (IME) can retrieve URL of the document containing
7340   # the focused element.  When this is set to true, Gecko exposes the spec
7341   # of the URL.
7342   # And Gecko exposes only "http" and "https" URLs.  E.g., "data", "blob",
7343   # "file" URLs are never exposed.
7344 -  name: intl.tsf.expose_url.allowed
7345    type: bool
7346    value: true
7347    mirror: always
7349   # If true, TSF and TIP (IME) can retrieve URL of the document containing
7350   # the focused element in the private browsing mode too.
7351 -  name: intl.tsf.expose_url_in_private_browsing.allowed
7352    type: bool
7353    value: false
7354    mirror: always
7356 #if defined(ENABLE_TESTS)
7357   # If true, NS_GetComplexLineBreaks compares the line breaks produced in the
7358   # content process using the Uniscribe line breaker, with those from a
7359   # brokered call to the parent.
7360 -   name: intl.compare_against_brokered_complex_line_breaks
7361     type: bool
7362     value: false
7363     mirror: always
7364 #endif
7365 #endif
7367 # If you use legacy Chinese IME which puts an ideographic space to composition
7368 # string as placeholder, this pref might be useful.  If this is true and when
7369 # web contents forcibly commits composition (e.g., moving focus), the
7370 # ideographic space will be ignored (i.e., commits with empty string).
7371 - name: intl.ime.remove_placeholder_character_at_commit
7372   type: bool
7373   value: false
7374   mirror: always
7377 #if defined(XP_MACOSX) || defined(MOZ_WIDGET_GTK)
7378 # Whether text input without keyboard press nor IME composition should cause a
7379 # set of composition events or not.  E.g., when you use Emoji picker on macOS,
7380 # it inserts an Emoji character directly.  If set to true, `compositionstart`,
7381 # `compositionupdate` and `compositionend` events will be fired, and the
7382 # correspnding `beforeinput` events are not cancelable.  Otherwise, if set to
7383 # false, any user input events are not exposed to web apps but only
7384 # `beforeinput` event is fired as "insert text" as a cancelable event.
7385 - name: intl.ime.use_composition_events_for_insert_text
7386   type: bool
7387   value: false
7388   mirror: always
7389 #endif
7391 # If true, we use UAX14/29 compatible segmenter rules using ICU4X
7392 - name: intl.icu4x.segmenter.enabled
7393   type: RelaxedAtomicBool
7394   value: true
7395   mirror: always
7397 #---------------------------------------------------------------------------
7398 # Prefs starting with "javascript."
7400 # NOTE: SpiderMonkey starts up before `mirror: once` preferences are sealed and
7401 #       we cannot use them (Bug 1698311). Instead, we use `mirror: always`
7402 #       prefs but mark as `do_not_use_directly` and `LoadStartupJSPrefs` will
7403 #       mirror them into SpiderMonkey.
7404 #---------------------------------------------------------------------------
7406 # The JavaScript JIT compilers. These are read once on startup so a browser may
7407 # need to be restarted if toggling them. In general each subsequent JIT depends
7408 # on the ones before it being enabled.
7409 - name: javascript.options.blinterp
7410   type: bool
7411   value: true
7412   mirror: always  # LoadStartupJSPrefs
7413   do_not_use_directly: true
7415 - name: javascript.options.baselinejit
7416   type: bool
7417   value: true
7418   mirror: always  # LoadStartupJSPrefs
7419   do_not_use_directly: true
7421 - name: javascript.options.ion
7422   type: bool
7423   value: true
7424   mirror: always  # LoadStartupJSPrefs
7425   do_not_use_directly: true
7427 # The irregexp JIT for regex evaluation.
7428 - name: javascript.options.native_regexp
7429   type: bool
7430   value: true
7431   mirror: always  # LoadStartupJSPrefs
7432   do_not_use_directly: true
7434 # Jit Hints Cache - An in-process cache for the
7435 # content process to accelerate repeated baseline
7436 # compilations
7437 - name: javascript.options.jithints
7438   type: bool
7439   value: true
7440   mirror: always  # LoadStartupJSPrefs
7441   do_not_use_directly: true
7443 # "Warm-up" thresholds at which we attempt to compile a script/function with
7444 # the next JIT tier.
7446 # NOTE: These must match JitOptions defaults.
7447 - name: javascript.options.blinterp.threshold
7448   type: int32_t
7449   value: 10
7450   mirror: always  # LoadStartupJSPrefs
7451   do_not_use_directly: true
7453 - name: javascript.options.baselinejit.threshold
7454   type: int32_t
7455   value: 100
7456   mirror: always  # LoadStartupJSPrefs
7457   do_not_use_directly: true
7459 - name: javascript.options.ion.threshold
7460   type: int32_t
7461   value: 1500
7462   mirror: always  # LoadStartupJSPrefs
7463   do_not_use_directly: true
7465 # Enable off-main-thread Warp compilation.
7466 - name: javascript.options.ion.offthread_compilation
7467   type: bool
7468   value: true
7469   mirror: always  # LoadStartupJSPrefs
7470   do_not_use_directly: true
7472 #ifdef DEBUG
7473   # Enable extra correctness checks in the JITs that are slow and only available
7474   # in debug builds.
7475 -   name: javascript.options.jit.full_debug_checks
7476     type: bool
7477     value: false
7478     mirror: always  # LoadStartupJSPrefs
7479     do_not_use_directly: true
7480 #endif
7482 # Heuristic threshold for Warp/Ion to decide that too many bailouts are
7483 # happening and an IonScript should be discarded.
7485 # NOTE: This must match JitOptions defaults.
7486 - name: javascript.options.ion.frequent_bailout_threshold
7487   type: int32_t
7488   value: 10
7489   mirror: always  # LoadStartupJSPrefs
7490   do_not_use_directly: true
7492 # A threshold for Warp to decide whether a function can be inlined.
7493 # If the size of a function is smaller than this threshold, then it
7494 # may be inlined.
7496 # NOTE: These must match JitOptions defaults.
7497 - name: javascript.options.inlining_bytecode_max_length
7498   type: uint32_t
7499   value: 130
7500   mirror: always
7501   do_not_use_directly: true
7503 - name: javascript.options.use_emulates_undefined_fuse
7504   type: bool
7505   value: true
7506   mirror: always
7507   do_not_use_directly: true
7508   set_spidermonkey_pref: startup
7510 - name: javascript.options.compact_on_user_inactive
7511   type: bool
7512   value: true
7513   mirror: always
7515 # No-op pref for testing the SpiderMonkey pref system.
7516 - name: javascript.options.tests.uint32-pref
7517   type: uint32_t
7518   value: 1
7519   mirror: always
7520   set_spidermonkey_pref: always
7522 # Enable fuse based destructuring
7523 - name: javascript.options.destructuring_fuse
7524   type: bool
7525   value: true
7526   mirror: always
7527   set_spidermonkey_pref: startup
7529 # The default amount of time to wait from the user being idle to starting a
7530 # shrinking GC. Measured in milliseconds.
7531 - name: javascript.options.compact_on_user_inactive_delay
7532   type: uint32_t
7533 #ifdef NIGHTLY_BUILD
7534   value: 15000
7535 #else
7536   value: 300000
7537 #endif
7538   mirror: always
7540 # Use better error message when accessing property of null or undefined.
7541 - name: javascript.options.property_error_message_fix
7542   type: bool
7543   value: @IS_NIGHTLY_OR_DEV_EDITION@
7544   mirror: always
7545   set_spidermonkey_pref: startup
7547 # Support for weak references in JavaScript (WeakRef and FinalizationRegistry).
7548 - name: javascript.options.weakrefs
7549   type: bool
7550   value: true
7551   mirror: always
7552   set_spidermonkey_pref: startup
7554 # Whether to expose the FinalizationRegistry.prototype.cleanupSome method.
7555 - name: javascript.options.experimental.weakrefs.expose_cleanupSome
7556   type: bool
7557   value: false
7558   mirror: always
7559   set_spidermonkey_pref: startup
7561 # ShadowRealms: https://github.com/tc39/proposal-shadowrealm
7562 - name: javascript.options.experimental.shadow_realms
7563   # Atomic, as we assert the preference, and that assertion may happen
7564   # in a worker.
7565   type: RelaxedAtomicBool
7566   value: false
7567   mirror: always
7568   # Non-startup pref because the WPT test harness sets prefs after startup.
7569   set_spidermonkey_pref: always
7571 # Support for String.prototype.{is,to}WellFormed in JavaScript.
7572 - name: javascript.options.well_formed_unicode_strings
7573   type: bool
7574   value: true
7575   mirror: always
7576   set_spidermonkey_pref: startup
7578 # Support for Object.groupBy/Map.groupBy in JavaScript.
7579 -  name: javascript.options.array_grouping
7580    type: bool
7581    value: true
7582    mirror: always
7583    set_spidermonkey_pref: startup
7585 #ifdef NIGHTLY_BUILD
7586   # Experimental support for Iterator Helpers in JavaScript.
7587 -   name: javascript.options.experimental.iterator_helpers
7588     type: bool
7589     value: false
7590     mirror: always
7591     set_spidermonkey_pref: startup
7593   # Experimental support for New Set methods
7594 -   name: javascript.options.experimental.new_set_methods
7595     type: bool
7596     value: false
7597     mirror: always
7598     set_spidermonkey_pref: startup
7600   # Experimental support for Symbols as WeakMap keys in JavaScript.
7601 -   name: javascript.options.experimental.symbols_as_weakmap_keys
7602     type: bool
7603     value: false
7604     mirror: always
7605     set_spidermonkey_pref: startup
7607   # Experimental support for resizable ArrayBuffers in JavaScript.
7608 -   name: javascript.options.experimental.arraybuffer_resizable
7609     type: bool
7610     value: false
7611     mirror: always
7612     set_spidermonkey_pref: startup
7614   # Experimental support for growable SharedArrayBuffers in JavaScript.
7615 -   name: javascript.options.experimental.sharedarraybuffer_growable
7616     type: bool
7617     value: false
7618     mirror: always
7619     set_spidermonkey_pref: startup
7621   # Experimental support for Uint8Array base64/hex in JavaScript.
7622 -   name: javascript.options.experimental.uint8array_base64
7623     type: bool
7624     value: false
7625     mirror: always
7626     set_spidermonkey_pref: startup
7627 #endif  // NIGHTLY_BUILD
7629 # Experimental support for ArrayBuffer.prototype.transfer{,ToFixedLength}() in JavaScript.
7630 -   name: javascript.options.arraybuffer_transfer
7631     type: bool
7632     value: true
7633     mirror: always
7634     set_spidermonkey_pref: startup
7636 #ifdef NIGHTLY_BUILD
7637   # Experimental support for Import Assertions in JavaScript.
7638 -   name: javascript.options.experimental.import_attributes
7639     type: bool
7640     value: false
7641     mirror: always
7642   # Import attributes were developed under the 'assert' keyword.
7643   # We have that keyword under a pref, as we'd rather not ship it if we
7644   # can avoid it, but in the case we can't, we'd like access to it quickly.
7645 -   name: javascript.options.experimental.import_attributes.assert_syntax
7646     type: bool
7647     value: false
7648     mirror: always
7649 #endif  // NIGHTLY_BUILD
7651 #ifdef ENABLE_JSON_PARSE_WITH_SOURCE
7652 -   name: javascript.options.experimental.json_parse_with_source
7653     type: bool
7654     value: false
7655     mirror: always
7656     set_spidermonkey_pref: startup
7657 #endif  // ENABLE_JSON_PARSE_WITH_SOURCE
7659 - name: javascript.options.wasm_caching
7660   type: bool
7661   value: true
7662   mirror: always
7664 # The amount of time we wait between a request to GC (due to leaving a page) and doing the actual GC, in ms.
7665 - name: javascript.options.gc_delay
7666   type: uint32_t
7667   value: 4000
7668   mirror: always
7670 # The amount of time we wait from the first request to GC to actually doing the first GC, in ms.
7671 - name: javascript.options.gc_delay.first
7672   type: uint32_t
7673   value: 10000
7674   mirror: always
7676 # After doing a zonal GC, wait this much time (in ms) and then do a full GC,
7677 # unless one is already pending.
7678 - name: javascript.options.gc_delay.full
7679   type: uint32_t
7680   value: 60000
7681   mirror: always
7683 # Maximum amount of time that should elapse between incremental GC slices, in ms.
7684 - name: javascript.options.gc_delay.interslice
7685   type: uint32_t
7686   value: 250
7687   mirror: always
7689 # nsJSEnvironmentObserver observes the memory-pressure notifications and
7690 # forces a garbage collection and cycle collection when it happens, if the
7691 # appropriate pref is set.
7692 - name: javascript.options.gc_on_memory_pressure
7693   type: bool
7694   # Disable the JS engine's GC on memory pressure, since we do one in the
7695   # mobile browser (bug 669346).
7696   # XXX: this value possibly should be changed, or the pref removed entirely.
7697   #      See bug 1450787.
7698   value: @IS_NOT_ANDROID@
7699   mirror: always
7701 # We allow at most MIN(max, MAX(NUM_CPUS / cpu_divisor, 1)) concurrent GCs
7702 # between processes
7703 - name: javascript.options.concurrent_multiprocess_gcs.cpu_divisor
7704   type: RelaxedAtomicUint32
7705   value: 4
7706   mirror: always
7708 # See 'cpu_divisor' above, 0 means UINT_32_MAX.
7709 - name: javascript.options.concurrent_multiprocess_gcs.max
7710   type: RelaxedAtomicUint32
7711   value: 0
7712   mirror: always
7714 - name: javascript.options.mem.log
7715   type: bool
7716   value: false
7717   mirror: always
7719 - name: javascript.options.mem.notify
7720   type: bool
7721   value: false
7722   mirror: always
7724 # Whether the Parent process allocates and shares memory with all content
7725 # processes. This is mirrored once, as the parent process will do this
7726 # allocation early on.
7727 - name: javascript.options.self_hosted.use_shared_memory
7728   type: bool
7729   value: true
7730   mirror: always  # LoadStartupJSPrefs
7731   do_not_use_directly: true
7733 - name: javascript.options.main_thread_stack_quota_cap
7734   type: uint32_t
7735 #if defined(MOZ_ASAN)
7736   value: 6 * 1024 * 1024
7737 #else
7738   value: 2 * 1024 * 1024
7739 #endif
7740   mirror: always
7742 - name: javascript.options.wasm_optimizingjit
7743   type: bool
7744   value: true
7745   mirror: always
7747 -   name: javascript.options.wasm_relaxed_simd
7748     type: bool
7749 #if defined(ENABLE_WASM_RELAXED_SIMD)
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_moz_intgemm
7758     type: bool
7759 #if defined(ENABLE_WASM_MOZ_INTGEMM)
7760     value: @IS_NIGHTLY_BUILD@
7761 #else
7762     value: false
7763 #endif
7764     mirror: always
7765     set_spidermonkey_pref: startup
7767 -   name: javascript.options.wasm_exnref
7768     type: bool
7769     value: @IS_EARLY_BETA_OR_EARLIER@
7770     mirror: always
7771     set_spidermonkey_pref: startup
7773 -   name: javascript.options.wasm_gc
7774     type: bool
7775 #if defined(ENABLE_WASM_GC)
7776     value: true
7777 #else
7778     value: false
7779 #endif
7780     mirror: always
7781     set_spidermonkey_pref: startup
7783 -   name: javascript.options.wasm_memory_control
7784     type: bool
7785     value: false
7786     mirror: always
7787     set_spidermonkey_pref: startup
7789 #if defined(ENABLE_WASM_SIMD)
7790 #if defined(JS_CODEGEN_X64) || defined(JS_CODEGEN_X86)
7791   # Enables AVX instructions support on X86/X64 platforms.
7792   # Changing these prefs requires a restart.
7793 -   name: javascript.options.wasm_simd_avx
7794     type: bool
7795     value: true
7796     mirror: always
7797 #endif
7798 #endif
7800 -   name: javascript.options.wasm_memory64
7801     type: bool
7802 #if defined(ENABLE_WASM_MEMORY64)
7803     value: @IS_NIGHTLY_BUILD@
7804 #else
7805     value: false
7806 #endif
7807     mirror: always
7808     set_spidermonkey_pref: startup
7810 -   name: javascript.options.wasm_multi_memory
7811     type: bool
7812 #if defined(ENABLE_WASM_MULTI_MEMORY)
7813     value: true
7814 #else
7815     value: false
7816 #endif
7817     mirror: always
7818     set_spidermonkey_pref: startup
7820 -   name: javascript.options.wasm_js_string_builtins
7821     type: bool
7822     value: false
7823     mirror: always
7824     set_spidermonkey_pref: startup
7826 -   name: javascript.options.wasm_tail_calls
7827     type: bool
7828 #if defined(ENABLE_WASM_TAIL_CALLS)
7829     value: true
7830 #else
7831     value: false
7832 #endif
7833     mirror: always
7834     set_spidermonkey_pref: startup
7836 -   name: javascript.options.wasm_test_serialization
7837     type: bool
7838     value: false
7839     mirror: always
7840     set_spidermonkey_pref: startup
7842 # Support for pretenuring allocations based on their allocation site.
7843 - name: javascript.options.site_based_pretenuring
7844   type: bool
7845   value: true
7846   mirror: always
7847   do_not_use_directly: true
7848   set_spidermonkey_pref: startup
7850 #if !defined(JS_CODEGEN_MIPS32) && !defined(JS_CODEGEN_MIPS64) && !defined(JS_CODEGEN_LOONG64)
7851   # Spectre security vulnerability mitigations for the JS JITs.
7852   #
7853   # NOTE: The MIPS and LoongArch backends do not support these mitigations (and generally
7854   #       do not need them). In that case, leave the pref unlisted with its
7855   #       default value of false.
7856 -   name: javascript.options.spectre.index_masking
7857     type: bool
7858     value: true
7859     mirror: always  # LoadStartupJSPrefs
7860     do_not_use_directly: true
7862 -   name: javascript.options.spectre.object_mitigations
7863     type: bool
7864     value: true
7865     mirror: always  # LoadStartupJSPrefs
7866     do_not_use_directly: true
7868 -   name: javascript.options.spectre.string_mitigations
7869     type: bool
7870     value: true
7871     mirror: always  # LoadStartupJSPrefs
7872     do_not_use_directly: true
7874 -   name: javascript.options.spectre.value_masking
7875     type: bool
7876     value: true
7877     mirror: always  # LoadStartupJSPrefs
7878     do_not_use_directly: true
7880 -   name: javascript.options.spectre.jit_to_cxx_calls
7881     type: bool
7882     value: false
7883     mirror: always  # LoadStartupJSPrefs
7884     do_not_use_directly: true
7885 #endif  // !defined(JS_CODEGEN_MIPSXX) && !defined(JS_CODEGEN_LOONG64)
7887 # Separate pref to override the values of the Spectre-related prefs above for
7888 # isolated web content processes, where we don't need these mitigations.
7889 - name: javascript.options.spectre.disable_for_isolated_content
7890   type: bool
7891   value: true
7892   mirror: always
7894 # Whether the W^X policy is enforced to mark JIT code pages as either writable
7895 # or executable but never both at the same time. OpenBSD defaults to W^X.
7896 - name: javascript.options.content_process_write_protect_code
7897   type: bool
7898 #if defined(XP_OPENBSD)
7899   value: true
7900 #else
7901   value: false
7902 #endif
7903   mirror: always
7905 # Whether to use the XPCOM thread pool for JS helper tasks.
7906 - name: javascript.options.external_thread_pool
7907   type: bool
7908   value: true
7909   mirror: always
7910   do_not_use_directly: true
7912 # Whether to use the off-thread script compilation and decoding.
7913 - name: javascript.options.parallel_parsing
7914   type: bool
7915   value: true
7916   mirror: always
7918 # Whether to use fdlibm for Math.sin, Math.cos, and Math.tan. When
7919 # privacy.resistFingerprinting is true, this pref is ignored and fdlibm is used
7920 # anyway.
7921 - name: javascript.options.use_fdlibm_for_sin_cos_tan
7922   type: bool
7923   value: @IS_EARLY_BETA_OR_EARLIER@
7924   mirror: always
7925   set_spidermonkey_pref: always
7927 # Whether to support parsing '//(#@) source(Mapping)?URL=' pragmas.
7928 - name: javascript.options.source_pragmas
7929   type: bool
7930   value: true
7931   mirror: always
7933 # asm.js
7934 - name: javascript.options.asmjs
7935   type: bool
7936   value: true
7937   mirror: always
7939 # Whether to throw a TypeError if asm.js code hits validation failure.
7940 - name: javascript.options.throw_on_asmjs_validation_failure
7941   type: bool
7942   value: false
7943   mirror: always
7945 # Whether to disable the jit within the main process
7946 - name: javascript.options.main_process_disable_jit
7947   type: bool
7948 #ifdef XP_IOS
7949   value: true
7950 #else
7951   value: false
7952 #endif
7953   mirror: always
7955 #---------------------------------------------------------------------------
7956 # Prefs starting with "layers."
7957 #---------------------------------------------------------------------------
7959 # Whether to disable acceleration for all widgets.
7960 - name: layers.acceleration.disabled
7961   type: bool
7962   value: false
7963   mirror: once
7964   do_not_use_directly: true
7965 # Instead, use gfxConfig::IsEnabled(Feature::HW_COMPOSITING).
7967 # Whether to force acceleration on, ignoring blacklists.
7969 # bug 838603 -- on Android, accidentally blacklisting OpenGL layers
7970 # means a startup crash for everyone.
7971 # Temporarily force-enable GL compositing.  This is default-disabled
7972 # deep within the bowels of the widgetry system.  Remove me when GL
7973 # compositing isn't default disabled in widget/android.
7974 - name: layers.acceleration.force-enabled
7975   type: bool
7976   value: @IS_ANDROID@
7977   mirror: once
7978   do_not_use_directly: true
7980 # Whether we allow AMD switchable graphics.
7981 - name: layers.amd-switchable-gfx.enabled
7982   type: bool
7983   value: true
7984   mirror: once
7986 # Whether to use async panning and zooming.
7987 - name: layers.async-pan-zoom.enabled
7988   type: bool
7989   value: true
7990   mirror: once
7991   do_not_use_directly: true
7993 - name: layers.child-process-shutdown
7994   type: RelaxedAtomicBool
7995   value: true
7996   mirror: always
7998 - name: layers.d3d11.force-warp
7999   type: bool
8000   value: false
8001   mirror: once
8003 - name: layers.d3d11.enable-blacklist
8004   type: bool
8005   value: true
8006   mirror: once
8008 # Enable DEAA antialiasing for transformed layers in the compositor.
8009 - name: layers.deaa.enabled
8010   type: RelaxedAtomicBool
8011 #if defined(MOZ_WIDGET_ANDROID)
8012   value: false
8013 #else
8014   value: true
8015 #endif
8016   mirror: always
8018 # Force all possible layers to be always active layers.
8019 - name: layers.force-active
8020   type: bool
8021   value: false
8022   mirror: always
8024 - name: layers.force-shmem-tiles
8025   type: bool
8026   value: false
8027   mirror: once
8029 - name: layers.draw-mask-debug
8030   type: RelaxedAtomicBool
8031   value: false
8032   mirror: always
8034 - name: layers.force-synchronous-resize
8035   type: RelaxedAtomicBool
8036 #ifdef MOZ_WAYLAND
8037   # We want to control it by nsWindow::SynchronouslyRepaintOnResize() on Linux/Wayland.
8038   value: false
8039 #else
8040   value: true
8041 #endif
8042   mirror: always
8044 - name: layers.gpu-process.allow-software
8045   type: bool
8046 #if defined(XP_WIN)
8047   value: true
8048 #else
8049   value: false
8050 #endif
8051   mirror: once
8053 - name: layers.gpu-process.enabled
8054   type: bool
8055 #if defined(XP_WIN) || defined(MOZ_WIDGET_ANDROID)
8056   value: true
8057 #else
8058   value: false
8059 #endif
8060   mirror: once
8062 - name: layers.gpu-process.force-enabled
8063   type: bool
8064   value: false
8065   mirror: once
8067 - name: layers.gpu-process.ipc_reply_timeout_ms
8068   type: int32_t
8069   value: 10000
8070   mirror: once
8072 # How many unstable GPU process restarts we allow for a given configuration.
8073 - name: layers.gpu-process.max_restarts
8074   type: RelaxedAtomicInt32
8075 #if defined(XP_WIN) || defined(MOZ_WIDGET_GTK) || defined(MOZ_WIDGET_ANDROID)
8076   value: 6
8077 #else
8078   value: 1
8079 #endif
8080   mirror: always
8082 # How many frames we must render before declaring the GPU process stable, and
8083 # allow restarts without it counting against our maximum restarts.
8084 - name: layers.gpu-process.stable.frame-threshold
8085   type: RelaxedAtomicUint32
8086   value: 10
8087   mirror: always
8089 # How many milliseconds the GPU process must have lived before we accept that
8090 # it is stable, and allow restarts without it counting against our maximum
8091 # restarts.
8092 - name: layers.gpu-process.stable.min-uptime-ms
8093   type: RelaxedAtomicInt32
8094   value: 4 * 60000
8095   mirror: always
8097 # Note: This pref will only be used if it is less than layers.gpu-process.max_restarts.
8098 - name: layers.gpu-process.max_restarts_with_decoder
8099   type: RelaxedAtomicInt32
8100   value: 0
8101   mirror: always
8103 - name: layers.gpu-process.startup_timeout_ms
8104   type: int32_t
8105   value: 5000
8106   mirror: once
8108 - name: layers.gpu-process.crash-also-crashes-browser
8109   type: bool
8110   value: false
8111   mirror: always
8113 # Whether to animate simple opacity and transforms on the compositor.
8114 - name: layers.offmainthreadcomposition.async-animations
8115   type: bool
8116   value: true
8117   mirror: always
8119 # Whether to log information about off main thread animations to stderr.
8120 - name: layers.offmainthreadcomposition.log-animations
8121   type: bool
8122   value: false
8123   mirror: always
8125 - name: layers.offmainthreadcomposition.force-disabled
8126   type: bool
8127   value: false
8128   mirror: once
8130 # Compositor target frame rate. NOTE: If vsync is enabled the compositor
8131 # frame rate will still be capped.
8132 # -1 -> default (match layout.frame_rate or 60 FPS)
8133 # 0  -> full-tilt mode: Recomposite even if not transaction occured.
8134 - name: layers.offmainthreadcomposition.frame-rate
8135   type: RelaxedAtomicInt32
8136   value: -1
8137   mirror: always
8139 #ifdef XP_WIN
8140 -   name: layers.prefer-opengl
8141     type: bool
8142     value: false
8143     mirror: once
8144 #endif
8146 # Copy-on-write canvas.
8147 - name: layers.shared-buffer-provider.enabled
8148   type: RelaxedAtomicBool
8149   value: true
8150   mirror: always
8152 - name: layers.recycle-allocator-rdd
8153   type: bool
8154   value: true
8155   mirror: once
8157 - name: layers.iosurfaceimage.recycle-limit
8158   type: RelaxedAtomicUint32
8159   value: 15
8160   mirror: always
8162 - name: layers.iosurfaceimage.use-nv12
8163   type: bool
8164   value: true
8165   mirror: once
8167 #---------------------------------------------------------------------------
8168 # Prefs starting with "layout."
8169 #---------------------------------------------------------------------------
8171 # Debug-only pref to force enable the AccessibleCaret. If you want to
8172 # control AccessibleCaret by mouse, you'll need to set
8173 # "layout.accessiblecaret.hide_carets_for_mouse_input" to false.
8174 - name: layout.accessiblecaret.enabled
8175   type: bool
8176   value: false
8177   mirror: always
8179 # Enable the accessible caret on platforms/devices
8180 # that we detect have touch support. Note that this pref is an
8181 # additional way to enable the accessible carets, rather than
8182 # overriding the layout.accessiblecaret.enabled pref.
8183 - name: layout.accessiblecaret.enabled_on_touch
8184   type: bool
8185   value: true
8186   mirror: always
8188 # By default, carets become tilt only when they are overlapping.
8189 - name: layout.accessiblecaret.always_tilt
8190   type: bool
8191   value: false
8192   mirror: always
8194 # Show caret in cursor mode when long tapping on an empty content. This
8195 # also changes the default update behavior in cursor mode, which is based
8196 # on the emptiness of the content, into something more heuristic. See
8197 # AccessibleCaretManager::UpdateCaretsForCursorMode() for the details.
8198 - name: layout.accessiblecaret.caret_shown_when_long_tapping_on_empty_content
8199   type: bool
8200   value: false
8201   mirror: always
8203 # 0 = by default, always hide carets for selection changes due to JS calls.
8204 # 1 = update any visible carets for selection changes due to JS calls,
8205 #     but don't show carets if carets are hidden.
8206 # 2 = always show carets for selection changes due to JS calls.
8207 - name: layout.accessiblecaret.script_change_update_mode
8208   type: int32_t
8209   value: 0
8210   mirror: always
8212 # Allow one caret to be dragged across the other caret without any limitation.
8213 # This matches the built-in convention for all desktop platforms.
8214 - name: layout.accessiblecaret.allow_dragging_across_other_caret
8215   type: bool
8216   value: true
8217   mirror: always
8219 # Optionally provide haptic feedback on long-press selection events.
8220 - name: layout.accessiblecaret.hapticfeedback
8221   type: bool
8222   value: false
8223   mirror: always
8225 # Smart phone-number selection on long-press is not enabled by default.
8226 - name: layout.accessiblecaret.extend_selection_for_phone_number
8227   type: bool
8228   value: false
8229   mirror: always
8231 # Keep the accessible carets hidden when the user is using mouse input (as
8232 # opposed to touch/pen/etc.).
8233 - name: layout.accessiblecaret.hide_carets_for_mouse_input
8234   type: bool
8235   value: true
8236   mirror: always
8238 # CSS attributes (width, height, margin-left) of the AccessibleCaret in CSS
8239 # pixels.
8240 - name: layout.accessiblecaret.width
8241   type: float
8242   value: 34.0f
8243   mirror: always
8245 - name: layout.accessiblecaret.height
8246   type: float
8247   value: 36.0f
8248   mirror: always
8250 - name: layout.accessiblecaret.margin-left
8251   type: float
8252   value: -18.5f
8253   mirror: always
8255 - name: layout.accessiblecaret.transition-duration
8256   type: float
8257   value: 250.0f
8258   mirror: always
8260 # Simulate long tap events to select words. Mainly used in manual testing
8261 # with mouse.
8262 - name: layout.accessiblecaret.use_long_tap_injector
8263   type: bool
8264   value: false
8265   mirror: always
8267 # To support magnify glass, whether we dispatch additional chrome event such as
8268 # dragcaret.
8269 - name: layout.accessiblecaret.magnifier.enabled
8270   type: bool
8271   value: @IS_ANDROID@
8272   mirror: always
8274 # One of several prefs affecting the maximum area to pre-render when animating
8275 # a large element on the compositor.
8276 # This pref enables transform (and transform like properties) animations on a
8277 # large element run on the compositor with rendering partial area of the
8278 # element on the main thread instead of rendering the whole area.  Once the
8279 # animation tried to composite out of the partial rendered area, the animation
8280 # is rendered again with the latest visible partial area.
8281 - name: layout.animation.prerender.partial
8282   type: RelaxedAtomicBool
8283   value: false
8284   mirror: always
8286 # One of several prefs affecting the maximum area to pre-render when animating
8287 # a large element on the compositor.
8288 # This value is applied to both x and y axes and a perfect square contructed
8289 # by the greater axis value which will be capped by the absolute limits is used
8290 # for the partial pre-render area.
8291 - name: layout.animation.prerender.viewport-ratio-limit
8292   type: AtomicFloat
8293   value: 1.125f
8294   mirror: always
8296 # One of several prefs affecting the maximum area to pre-render when animating
8297 # a large element on the compositor.
8298 - name: layout.animation.prerender.absolute-limit-x
8299   type: RelaxedAtomicUint32
8300   value: 4096
8301   mirror: always
8303 # One of several prefs affecting the maximum area to pre-render when animating
8304 # a large element on the compositor.
8305 - name: layout.animation.prerender.absolute-limit-y
8306   type: RelaxedAtomicUint32
8307   value: 4096
8308   mirror: always
8310 # Test-only pref, if this is true, partial pre-rendered transform animations
8311 # get stuck when it reaches to the pre-rendered boundaries and the pre-render
8312 # region is never updated.
8313 - name: layout.animation.prerender.partial.jank
8314   type: RelaxedAtomicBool
8315   value: false
8316   mirror: always
8318 # Override DPI. A value of -1 means use the maximum of 96 and the system DPI.
8319 # A value of 0 means use the system DPI. A positive value is used as the DPI.
8320 # This sets the physical size of a device pixel and thus controls the
8321 # interpretation of physical units such as "pt".
8322 - name: layout.css.dpi
8323   type: int32_t
8324   value: -1
8325   mirror: always
8327 # Whether to always underline links.
8328 - name: layout.css.always_underline_links
8329   type: RelaxedAtomicBool
8330   value: false
8331   mirror: always
8332   rust: true
8334 # Whether to respect align-content on blocks.
8335 - name: layout.css.align-content.blocks.enabled
8336   type: RelaxedAtomicBool
8337   value: true
8338   mirror: always
8339   rust: true
8341 # Whether Container Queries are enabled
8342 - name: layout.css.container-queries.enabled
8343   type: RelaxedAtomicBool
8344   value: true
8345   mirror: always
8346   rust: true
8348 # Whether content-box and stroke-box are enabled for transform-box.
8349 - name: layout.css.transform-box-content-stroke.enabled
8350   type: RelaxedAtomicBool
8351   value: true
8352   mirror: always
8353   rust: true
8355 # Whether transition-behavior property is enabled?
8356 - name: layout.css.transition-behavior.enabled
8357   type: RelaxedAtomicBool
8358   value: @IS_NIGHTLY_BUILD@
8359   mirror: always
8360   rust: true
8362 # Should we look for counter ancestor scopes first?
8363 - name: layout.css.counter-ancestor-scope.enabled
8364   type: bool
8365   value: true
8366   mirror: always
8368 # Whether the `-moz-control-character-visibility` property is exposed to
8369 # content.
8371 # Only for testing purposes.
8372 - name: layout.css.moz-control-character-visibility.enabled
8373   type: RelaxedAtomicBool
8374   value: false
8375   mirror: always
8376   rust: true
8378 # This pref controls whether the `prefers-color-scheme` value of iframes images
8379 # reacts to the embedder `color-scheme` in content.
8380 - name: layout.css.iframe-embedder-prefers-color-scheme.content.enabled
8381   type: RelaxedAtomicBool
8382   value: true
8383   mirror: always
8385 # Controls the transparency of the initial about:blank document. Generally you
8386 # don't ever want a white flash in dark mode, but due to backwards compat we
8387 # have some extra control over this, for now at least.
8389 # See https://github.com/w3c/csswg-drafts/issues/9624 for iframes.
8391 # Values:
8392 #  1: content-inaccessible top-level only.
8393 #  2: frames and content-inaccessible top-level only.
8394 #  3: always
8395 #  Others: don't treat this document specially.
8396 - name: layout.css.initial-document-transparency
8397   type: RelaxedAtomicInt32
8398   value: 3
8399   mirror: always
8401 # The minimum contrast ratio between the accent color foreground and background
8402 # colors.
8404 # We don't use this for text, so we need a contrast of at least AA (for user
8405 # interface components and graphical objects), which per WCAG is 3:1
8406 - name: layout.css.accent-color.min-contrast-ratio
8407   type: AtomicFloat
8408   value: 3.0
8409   mirror: always
8411 # The target contrast ratio between the accent color foreground and background
8412 # colors when darkening.
8414 # We aim a bit further than the minimum contrast ratio, which seems to provide
8415 # nice results in practice.
8416 - name: layout.css.accent-color.darkening-target-contrast-ratio
8417   type: AtomicFloat
8418   value: 6.0
8419   mirror: always
8421 # Whether the `animation-composition` in css-animations-2 is enabled.
8422 - name: layout.css.animation-composition.enabled
8423   type: bool
8424   value: true
8425   mirror: always
8427 # Is the codepath for using cached scrollbar styles enabled?
8428 - name: layout.css.cached-scrollbar-styles.enabled
8429   type: bool
8430   value: true
8431   mirror: always
8433 # Whether we cache inline styles in a document unconditionally or not.
8434 - name: layout.css.inline-style-caching.always-enabled
8435   type: bool
8436   value: true
8437   mirror: always
8439 # Whether computed local-fragment-only image urls serialize using the same
8440 # rules as filter/mask/etc (not resolving the URL for local refs).
8442 # See https://github.com/w3c/csswg-drafts/issues/3195
8443 - name: layout.css.computed-style.dont-resolve-image-local-refs
8444   type: RelaxedAtomicBool
8445   value: true
8446   mirror: always
8447   rust: true
8449 # Whether we should expose all shorthands in getComputedStyle().
8450 - name: layout.css.computed-style.shorthands
8451   type: bool
8452   value: true
8453   mirror: always
8455 # Are implicit tracks in computed grid templates serialized?
8456 - name: layout.css.serialize-grid-implicit-tracks
8457   type: RelaxedAtomicBool
8458   value: true
8459   mirror: always
8461 # Whether the system-ui generic family is enabled.
8462 - name: layout.css.system-ui.enabled
8463   type: RelaxedAtomicBool
8464   value: true
8465   mirror: always
8466   rust: true
8468 # Set the number of device pixels per CSS pixel. A value <= 0 means choose
8469 # automatically based on user settings for the platform (e.g., "UI scale factor"
8470 # on Mac). If browser.display.os-zoom-behavior == 1, then a positive value
8471 # will be multiplied by the text scale factor; otherwise a positive value is
8472 # used as-is. This controls the size of a CSS "px" at 100% full-zoom.
8473 # The size of system fonts is also changed in proportion with the change in
8474 # "px" sizes. Use "ui.textScaleFactor" instead to only change the size of "px".
8475 # This is only used for windows on the screen, not for printing.
8476 - name: layout.css.devPixelsPerPx
8477   type: AtomicFloat
8478   value: -1.0f
8479   mirror: always
8481 # Is support for CSS backdrop-filter enabled?
8482 - name: layout.css.backdrop-filter.enabled
8483   type: bool
8484   value: true
8485   mirror: always
8487 # Do we override the blocklist for CSS backdrop-filter?
8488 - name: layout.css.backdrop-filter.force-enabled
8489   type: bool
8490   value: false
8491   mirror: always
8493 # Is support for rect() enabled?
8494 - name: layout.css.basic-shape-rect.enabled
8495   type: RelaxedAtomicBool
8496   value: true
8497   mirror: always
8498   rust: true
8500 # Is support for shape() enabled?
8501 - name: layout.css.basic-shape-shape.enabled
8502   type: RelaxedAtomicBool
8503   value: @IS_NIGHTLY_BUILD@
8504   mirror: always
8505   rust: true
8507 # Is support for xywh() enabled?
8508 - name: layout.css.basic-shape-xywh.enabled
8509   type: RelaxedAtomicBool
8510   value: true
8511   mirror: always
8512   rust: true
8514 # Should stray control characters be rendered visibly?
8515 - name: layout.css.control-characters.visible
8516   type: RelaxedAtomicBool
8517   value: @IS_NOT_RELEASE_OR_BETA@
8518   mirror: always
8519   rust: true
8521 # Whether the `content-visibility` CSS property is enabled
8522 - name: layout.css.content-visibility.enabled
8523   type: RelaxedAtomicBool
8524   value: true
8525   mirror: always
8526   rust: true
8528 # Whether the `contain-intrinsic-size` CSS property is enabled
8529 - name: layout.css.contain-intrinsic-size.enabled
8530   type: RelaxedAtomicBool
8531   value: true
8532   mirror: always
8533   rust: true
8535 # Is support for GeometryUtils.convert*FromNode enabled?
8536 - name: layout.css.convertFromNode.enabled
8537   type: bool
8538   value: @IS_NOT_RELEASE_OR_BETA@
8539   mirror: always
8541 - name: layout.css.cross-fade.enabled
8542   type: RelaxedAtomicBool
8543   value: false
8544   mirror: always
8545   rust: true
8547 # Is support for light-dark() on content enabled?
8548 - name: layout.css.light-dark.enabled
8549   type: RelaxedAtomicBool
8550   value: true
8551   mirror: always
8552   rust: true
8554 # Is support for fit-content() enabled?
8555 - name: layout.css.fit-content-function.enabled
8556   type: RelaxedAtomicBool
8557   value: false
8558   mirror: always
8559   rust: true
8561 # Whether to use tight bounds for floating ::first-letter (legacy Gecko behavior)
8562 # or loose bounds based on overall font metrics (WebKit/Blink-like behavior)?
8563 # Values mean:
8564 #     1   legacy Gecko behavior (tight bounds)
8565 #     0   loose typographic bounds (similar to webkit/blink)
8566 #    -1   auto behavior: use loose bounds if reduced line-height (<1em) or negative
8567 #         block-start margin is present; otherwise use tight bounds.
8568 - name: layout.css.floating-first-letter.tight-glyph-bounds
8569   type: int32_t
8570 #ifdef NIGHTLY_BUILD
8571   value: -1
8572 #else
8573   value: 1
8574 #endif
8575   mirror: always
8577 # Is support for the @font-palette-values rule and font-palette property enabled?
8578 - name: layout.css.font-palette.enabled
8579   type: RelaxedAtomicBool
8580   value: true
8581   mirror: always
8582   rust: true
8584 # Is support for variation fonts enabled?
8585 - name: layout.css.font-variations.enabled
8586   type: RelaxedAtomicBool
8587   value: true
8588   mirror: always
8589   rust: true
8591 # Is support for the size-adjust @font-face descriptor enabled?
8592 - name: layout.css.size-adjust.enabled
8593   type: RelaxedAtomicBool
8594   value: true
8595   mirror: always
8596   rust: true
8598 # Is support for the tech() function in the @font-face src descriptor enabled?
8599 - name: layout.css.font-tech.enabled
8600   type: RelaxedAtomicBool
8601   value: true
8602   mirror: always
8603   rust: true
8605 # Is support for font-variant-emoji enabled?
8606 - name: layout.css.font-variant-emoji.enabled
8607   type: RelaxedAtomicBool
8608   value: @IS_NIGHTLY_BUILD@
8609   mirror: always
8610   rust: true
8612 # Visibility level of font families available to CSS font-matching:
8613 #   1 - only base system fonts
8614 #   2 - also fonts from optional language packs
8615 #   3 - also user-installed fonts
8616 - name: layout.css.font-visibility
8617   type: int32_t
8618   value: 3
8619   mirror: always
8621 # Is support for GeometryUtils.getBoxQuads enabled?
8622 - name: layout.css.getBoxQuads.enabled
8623   type: bool
8624   value: @IS_NOT_RELEASE_OR_BETA@
8625   mirror: always
8627 # Is support for (linear|radial|conic)-gradient color interpolation methods enabled?
8628 - name: layout.css.gradient-color-interpolation-method.enabled
8629   type: RelaxedAtomicBool
8630   value: @IS_NIGHTLY_BUILD@
8631   mirror: always
8632   rust: true
8634 # Should we propagate baseline alignment information from a parent grid into
8635 # its subgrids?
8636 - name: layout.css.grid-subgrid-baselines.enabled
8637   type: RelaxedAtomicBool
8638   value: @IS_NIGHTLY_BUILD@
8639   mirror: always
8641 # Is support for CSS masonry layout enabled?
8642 - name: layout.css.grid-template-masonry-value.enabled
8643   type: RelaxedAtomicBool
8644   value: @IS_NIGHTLY_BUILD@
8645   mirror: always
8646   rust: true
8648 # Is support for :has() enabled?
8649 - name: layout.css.has-selector.enabled
8650   type: RelaxedAtomicBool
8651   value: true
8652   mirror: always
8653   rust: true
8655 # Is support for CSS individual transform enabled?
8656 - name: layout.css.individual-transform.enabled
8657   type: bool
8658   value: true
8659   mirror: always
8661 # Is support for CSS initial-letter property enabled?
8662 - name: layout.css.initial-letter.enabled
8663   type: bool
8664   value: false
8665   mirror: always
8667 # Is support for motion-path url enabled?
8668 - name: layout.css.motion-path-url.enabled
8669   type: RelaxedAtomicBool
8670   value: true
8671   mirror: always
8672   rust: true
8674 # Pref to control whether the ::marker property restrictions defined in [1]
8675 # apply.
8677 # [1]: https://drafts.csswg.org/css-pseudo-4/#selectordef-marker
8678 - name: layout.css.marker.restricted
8679   type: RelaxedAtomicBool
8680   value: true
8681   mirror: always
8682   rust: true
8684 # Is -moz-osx-font-smoothing enabled? (Only supported in OSX builds)
8685 - name: layout.css.osx-font-smoothing.enabled
8686   type: bool
8687 #if defined(XP_MACOSX)
8688   value: true
8689 #else
8690   value: false
8691 #endif
8692   mirror: always
8694 # Is support for CSS overflow-clip-box enabled for non-UA sheets?
8695 - name: layout.css.overflow-clip-box.enabled
8696   type: bool
8697   value: false
8698   mirror: always
8700 # Is support for CSS overflow: -moz-hidden-unscrollable enabled
8701 - name: layout.css.overflow-moz-hidden-unscrollable.enabled
8702   type: RelaxedAtomicBool
8703   value: @IS_NOT_NIGHTLY_BUILD@
8704   mirror: always
8705   rust: true
8707 # Is support for overscroll-behavior enabled?
8708 - name: layout.css.overscroll-behavior.enabled
8709   type: bool
8710   value: true
8711   mirror: always
8713 # Enables support for the page-orientation  property inside of CSS @page rules.
8714 - name: layout.css.page-orientation.enabled
8715   type: RelaxedAtomicBool
8716   value: true
8717   mirror: always
8718   rust: true
8720 # Enables support for different CSS page sizes on each page when printing.
8721 - name: layout.css.allow-mixed-page-sizes
8722   type: RelaxedAtomicBool
8723   value: true
8724   mirror: always
8726 # Enables support for @margin rules.
8727 - name: layout.css.margin-rules.enabled
8728   type: RelaxedAtomicBool
8729   value: false
8730   mirror: always
8731   rust: true
8733 # Whether Properties and Values is enabled
8734 - name: layout.css.properties-and-values.enabled
8735   type: RelaxedAtomicBool
8736   value: @IS_NIGHTLY_BUILD@
8737   mirror: always
8738   rust: true
8740 # Whether @scope rule is enabled
8741 - name: layout.css.at-scope.enabled
8742   type: RelaxedAtomicBool
8743   value: false
8744   mirror: always
8745   rust: true
8747 # Dictates whether or not the prefers contrast media query will be
8748 # usable.
8749 #   true: prefers-contrast will toggle based on OS and browser settings.
8750 #   false: prefers-contrast will only parse and toggle in the browser
8751 #   chrome and ua.
8752 - name: layout.css.prefers-contrast.enabled
8753   type: RelaxedAtomicBool
8754   value: true
8755   mirror: always
8756   rust: true
8758 # An override for prefers-color-scheme for content documents.
8759 #   0: Dark
8760 #   1: Light
8761 #   2: Auto (system color scheme unless overridden by browser theme)
8762 - name: layout.css.prefers-color-scheme.content-override
8763   type: RelaxedAtomicInt32
8764   value: 2
8765   mirror: always
8767 # Dictates whether or not the forced-colors media query is enabled.
8768 - name: layout.css.forced-colors.enabled
8769   type: RelaxedAtomicBool
8770   value: true
8771   mirror: always
8772   rust: true
8774 # Dictates whether or not the prefers-reduced-transparency media query is enabled.
8775 - name: layout.css.prefers-reduced-transparency.enabled
8776   type: RelaxedAtomicBool
8777   value: false
8778   mirror: always
8779   rust: true
8781 # Dictates whether or not the inverted-colors media query is enabled.
8782 - name: layout.css.inverted-colors.enabled
8783   type: RelaxedAtomicBool
8784   value: false
8785   mirror: always
8786   rust: true
8788 # Is support for forced-color-adjust properties enabled?
8789 - name: layout.css.forced-color-adjust.enabled
8790   type: RelaxedAtomicBool
8791   value: true
8792   mirror: always
8793   rust: true
8795 # Is support for -moz-prefixed animation properties enabled?
8796 - name: layout.css.prefixes.animations
8797   type: bool
8798   value: true
8799   mirror: always
8801 # Is support for -moz-border-image enabled?
8802 - name: layout.css.prefixes.border-image
8803   type: bool
8804   value: true
8805   mirror: always
8807 # Is support for -moz-box-sizing enabled?
8808 - name: layout.css.prefixes.box-sizing
8809   type: bool
8810   value: true
8811   mirror: always
8813 # Is support for -moz-prefixed font feature properties enabled?
8814 - name: layout.css.prefixes.font-features
8815   type: bool
8816   value: true
8817   mirror: always
8819 # Is support for -moz-prefixed transform properties enabled?
8820 - name: layout.css.prefixes.transforms
8821   type: bool
8822   value: false
8823   mirror: always
8825 # Is support for -moz-prefixed transition properties enabled?
8826 - name: layout.css.prefixes.transitions
8827   type: bool
8828   value: false
8829   mirror: always
8831 # Is CSS error reporting enabled?
8832 - name: layout.css.report_errors
8833   type: bool
8834   value: true
8835   mirror: always
8837 # Are inter-character ruby annotations enabled?
8838 - name: layout.css.ruby.intercharacter.enabled
8839   type: bool
8840   value: false
8841   mirror: always
8843 - name: layout.css.scroll-behavior.damping-ratio
8844   type: AtomicFloat
8845   value: 1.0f
8846   mirror: always
8848 # Tuning of the smooth scroll motion used by CSSOM-View scroll-behavior.
8849 # Spring-constant controls the strength of the simulated MSD
8850 # (Mass-Spring-Damper).
8851 - name: layout.css.scroll-behavior.spring-constant
8852   type: AtomicFloat
8853   value: 250.0f
8854   mirror: always
8856 # Whether the scroll-driven animations generated by CSS is enabled. This
8857 # also include animation-timelime property.
8858 - name: layout.css.scroll-driven-animations.enabled
8859   type: RelaxedAtomicBool
8860   value: false
8861   mirror: always
8862   rust: true
8864 # When selecting the snap point for CSS scroll snapping, the velocity of the
8865 # scroll frame is clamped to this speed, in CSS pixels / s.
8866 - name: layout.css.scroll-snap.prediction-max-velocity
8867   type: RelaxedAtomicInt32
8868   value: 2000
8869   mirror: always
8871 #  When selecting the snap point for CSS scroll snapping, the velocity of the
8872 # scroll frame is integrated over this duration, in seconds.  The snap point
8873 # best suited for this position is selected, enabling the user to perform fling
8874 # gestures.
8875 - name: layout.css.scroll-snap.prediction-sensitivity
8876   type: AtomicFloat
8877   value: 0.750f
8878   mirror: always
8880 # Stylo thread-pool size.
8881 # Negative means auto, 0 disables the thread-pool (main-thread styling), other
8882 # numbers override as specified.
8883 # Note that 1 still creates a thread-pool of one thread!
8884 - name: layout.css.stylo-threads
8885   type: RelaxedAtomicInt32
8886   value: -1
8887   mirror: always
8888   rust: true
8890 # Stylo work unit size. This is the amount of nodes we'll process in a single
8891 # unit of work of the thread-pool.
8893 # Larger values will increase style sharing cache hits and general DOM locality
8894 # at the expense of decreased opportunities for parallelism.  There are some
8895 # measurements in bug 1385982 comments 11, 12, 13 that investigate some
8896 # slightly different values for the work unit size.
8898 # If the size is significantly increased, make sure to also review
8899 # stylo-local-work-queue prefs, since we might end up doing too much work
8900 # sequentially.
8902 # A value of 0 disables parallelism altogether.
8903 - name: layout.css.stylo-work-unit-size
8904   type: RelaxedAtomicUint32
8905   value: 16
8906   mirror: always
8907   rust: true
8909 # The minimum amount of work that a thread doing styling will try to keep
8910 # locally before sending work to other threads, in a worker.
8911 - name: layout.css.stylo-local-work-queue.in-worker
8912   type: RelaxedAtomicUint32
8913   value: 0
8914   mirror: always
8915   rust: true
8917 # As above but for the main thread. The main thread can't really steal from
8918 # other threads so it might want a bigger min queue size before giving work to
8919 # other threads.
8920 - name: layout.css.stylo-local-work-queue.in-main-thread
8921   type: RelaxedAtomicUint32
8922   value: 32
8923   mirror: always
8924   rust: true
8926 # Are counters for implemented CSS properties enabled?
8927 - name: layout.css.use-counters.enabled
8928   type: bool
8929   value: true
8930   mirror: always
8932 # Are counters for unimplemented CSS properties enabled?
8933 - name: layout.css.use-counters-unimplemented.enabled
8934   type: RelaxedAtomicBool
8935   value: true
8936   mirror: always
8937   rust: true
8939 # Should the :visited selector ever match (otherwise :link matches instead)?
8940 - name: layout.css.visited_links_enabled
8941   type: bool
8942   value: true
8943   mirror: always
8945 # The margin used for detecting relevancy for `content-visibility: auto`.
8946 - name: layout.css.content-visibility-relevant-content-margin
8947   type: float
8948   value: 50 # 50%
8949   mirror: always
8951 # Whether the `hanging` and `each-line` keywords are supported by `text-indent`
8952 - name: layout.css.text-indent-keywords.enabled
8953   type: RelaxedAtomicBool
8954   value: true
8955   mirror: always
8956   rust: true
8958 # Whether the "modern" uppercase mapping of ÃŸ to áºž (rather than SS) is used.
8959 - name: layout.css.text-transform.uppercase-eszett.enabled
8960   type: bool
8961   value: false
8962   mirror: always
8964 - name: layout.css.text-wrap-balance.enabled
8965   type: bool
8966   value: true
8967   mirror: always
8969 # Maximum number of lines to try balancing.
8970 - name: layout.css.text-wrap-balance.limit
8971   type: int32_t
8972   value: 10
8973   mirror: always
8975 - name: layout.css.text-wrap-balance-after-clamp.enabled
8976   type: bool
8977   value: true
8978   mirror: always
8980 - name: layout.css.text-align.justify-only-after-last-tab
8981   type: bool
8982   value: true
8983   mirror: always
8985 # Support for the css Zoom property.
8986 - name: layout.css.zoom.enabled
8987   type: RelaxedAtomicBool
8988   value: true
8989   mirror: always
8990   rust: true
8992 # UA styles for h1 in article/aside/nav/section. See bug 1883896.
8993 - name: layout.css.h1-in-section-ua-styles.enabled
8994   type: RelaxedAtomicBool
8995   value: @IS_NOT_NIGHTLY_BUILD@
8996   mirror: always
8998 # The maximum width or height of the cursor we should allow when intersecting
8999 # the UI, in CSS pixels.
9000 - name: layout.cursor.block.max-size
9001   type: uint32_t
9002   value: 32
9003   mirror: always
9005 - name: layout.cursor.disable-for-popups
9006   type: bool
9007   value: true
9008   mirror: always
9010 - name: layout.display-list.build-twice
9011   type: RelaxedAtomicBool
9012   value: false
9013   mirror: always
9015 # Toggle retaining display lists between paints.
9016 - name: layout.display-list.retain
9017   type: RelaxedAtomicBool
9018   value: true
9019   mirror: always
9021 # Toggle retaining display lists between paints.
9022 - name: layout.display-list.retain.chrome
9023   type: RelaxedAtomicBool
9024   value: true
9025   mirror: always
9027 - name: layout.display-list.retain.sc
9028   type: RelaxedAtomicBool
9029   value: false
9030   mirror: always
9032 # Set the maximum number of modified frames allowed before doing a full
9033 # display list rebuild.
9034 - name: layout.display-list.rebuild-frame-limit
9035   type: RelaxedAtomicUint32
9036   value: 500
9037   mirror: always
9039 # Pref to dump the display list to the log. Useful for debugging drawing.
9040 - name: layout.display-list.dump
9041   type: RelaxedAtomicBool
9042   value: false
9043   mirror: always
9045 # Pref to dump the display list to the log. Useful for debugging drawing.
9046 - name: layout.display-list.dump-content
9047   type: RelaxedAtomicBool
9048   value: false
9049   mirror: always
9051 # Pref to dump the display list to the log. Useful for debugging drawing.
9052 - name: layout.display-list.dump-parent
9053   type: RelaxedAtomicBool
9054   value: false
9055   mirror: always
9057 - name: layout.display-list.show-rebuild-area
9058   type: RelaxedAtomicBool
9059   value: false
9060   mirror: always
9062 - name: layout.display-list.improve-fragmentation
9063   type: RelaxedAtomicBool
9064   value: true
9065   mirror: always
9067 # Are dynamic reflow roots enabled?
9068 - name: layout.dynamic-reflow-roots.enabled
9069   type: bool
9070   value: @IS_EARLY_BETA_OR_EARLIER@
9071   mirror: always
9073 # Enables the mechanism to optimize away flex item's final reflow.
9074 # Warning: Disabling the pref will impact the performance. This is useful only for
9075 # debugging flexbox issues.
9076 - name: layout.flexbox.item-final-reflow-optimization.enabled
9077   type: bool
9078   value: true
9079   mirror: always
9081 # Enables the <input type=search> custom layout frame with a clear icon.
9082 # Still needs tests and a web-exposed way to remove that icon, see bug 1654288.
9083 - name: layout.forms.input-type-search.enabled
9084   type: bool
9085   value: false
9086   mirror: always
9088 # Enables the Reveal Password button inside a <input type=password>.
9089 - name: layout.forms.reveal-password-button.enabled
9090   type: bool
9091   value: false
9092   mirror: always
9094 # Enables the Reveal Password context-menu entry.
9095 - name: layout.forms.reveal-password-context-menu.enabled
9096   type: bool
9097   value: true
9098   mirror: always
9100 # Pref to control browser frame rate, in Hz. A value <= 0 means choose
9101 # automatically based on knowledge of the platform (or 60Hz if no platform-
9102 # specific information is available).
9103 - name: layout.frame_rate
9104   type: RelaxedAtomicInt32
9105   value: -1
9106   mirror: always
9108 # If it has been this many frame periods since a refresh, assume that painting
9109 # is quiescent (will not happen again soon).
9110 - name: layout.idle_period.required_quiescent_frames
9111   type: uint32_t
9112   value: 2
9113   mirror: always
9115 # The amount of time (milliseconds) needed between an idle period's
9116 # end and the start of the next tick to avoid jank.
9117 - name: layout.idle_period.time_limit
9118   type: uint32_t
9119   value: 1
9120   mirror: always
9122 # The minimum amount of time (milliseconds) required to be remaining
9123 # in the current vsync interval for us to attempt an extra tick, or
9124 # <0 to disable extra ticks entirely.
9125 - name: layout.extra-tick.minimum-ms
9126   type: int32_t
9127   value: 4
9128   mirror: always
9130 # Whether to load the broken image icon eagerly. This is mostly needed for
9131 # reftests, since the broken image icon doesn't block the load event and thus
9132 # there's no easy way to guarantee it's loaded.
9133 - name: layout.image.eager_broken_image_icon
9134   type: bool
9135   value: false
9136   mirror: always
9138 # Enable/disable interruptible reflow, which allows reflows to stop
9139 # before completion (and display the partial results) when user events
9140 # are pending.
9141 - name: layout.interruptible-reflow.enabled
9142   type: bool
9143   value: true
9144   mirror: always
9146 # On Android, don't synth mouse move events after scrolling, as they cause
9147 # unexpected user-visible behaviour. Can remove this after bug 1633450 is
9148 # satisfactorily resolved.
9149 - name: layout.reflow.synthMouseMove
9150   type: bool
9151   value: @IS_NOT_ANDROID@
9152   mirror: always
9154 # This pref determines which side vertical scrollbars should be on.
9155 # 0 = end-side in UI direction
9156 # 1 = end-side in document/content direction
9157 # 2 = right
9158 # 3 = left
9159 - name: layout.scrollbar.side
9160   type: int32_t
9161   value: 0
9162   mirror: always
9164 # This pref is to be set by test code only.
9165 - name: layout.scrollbars.always-layerize-track
9166   type: RelaxedAtomicBool
9167   value: false
9168   mirror: always
9170 - name: layout.scrollbars.click_and_hold_track.continue_to_end
9171   type: bool
9172 # On Linux, click-and-hold on the scrollbar track should continue scrolling
9173 # until the mouse is released. On the other platforms we want to stop
9174 # scrolling as soon as the scrollbar thumb has reached the current mouse
9175 # position.
9176 #ifdef MOZ_WIDGET_GTK
9177   value: true
9178 #else
9179   value: false
9180 #endif
9181   mirror: always
9183 # Whether anchor is kept selected.
9184 - name: layout.selectanchor
9185   type: bool
9186   value: false
9187   mirror: always
9189 # Controls caret style and word-delete during text selection.
9190 # 0: Use platform default
9191 # 1: Caret moves and blinks as when there is no selection; word
9192 #    delete deselects the selection and then deletes word.
9193 # 2: Caret moves to selection edge and is not visible during selection;
9194 #    word delete deletes the selection (Mac and Linux default).
9195 # 3: Caret moves and blinks as when there is no selection; word delete
9196 #    deletes the selection.
9197 # Windows default is 1 for word delete behavior, the rest as for 2.
9198 - name: layout.selection.caret_style
9199   type: int32_t
9200   value: 0
9201   mirror: always
9203 # If layout.show_previous_page is true then during loading of a new page we
9204 # will draw the previous page if the new page has painting suppressed.
9205 - name: layout.show_previous_page
9206   type: bool
9207   value: true
9208   mirror: always
9210 # Pref to stop overlay scrollbars from fading out, for testing purposes.
9211 - name: layout.testing.overlay-scrollbars.always-visible
9212   type: bool
9213   value: false
9214   mirror: always
9216 # Throttled frame rate, in frames per second.
9217 - name: layout.throttled_frame_rate
9218   type: uint32_t
9219   value: 1
9220   mirror: always
9222 # Whether we should throttle in-process iframes in the active tab.
9223 - name: layout.throttle_in_process_iframes
9224   type: bool
9225   value: true
9226   mirror: always
9228 - name: layout.lower_priority_refresh_driver_during_load
9229   type: bool
9230   value: true
9231   mirror: always
9233 # If > 0, nsRefreshDriver will keep ticking this amount of milliseconds after
9234 # top level page load.
9235 - name: layout.keep_ticking_after_load_ms
9236   type: uint32_t
9237   value: 1000
9238   mirror: always
9240 # Pref to control enabling scroll anchoring.
9241 - name: layout.css.scroll-anchoring.enabled
9242   type: bool
9243   value: true
9244   mirror: always
9246 # Pref to control whether to suspend also RefreshDriver::Tick when the page
9247 # itself is suspended because of some synchronous operation, like sync XHR.
9248 - name: layout.skip_ticks_while_page_suspended
9249   type: bool
9250   value: true
9251   mirror: always
9253 # Pref to control how many consecutive scroll-anchoring adjustments (since the
9254 # most recent user scroll or timeout) we'll average, before we consider whether
9255 # to automatically turn off scroll anchoring. When we hit this threshold, the
9256 # actual decision to disable also depends on the
9257 # min-average-adjustment-threshold pref, see below for more details.
9259 # Zero disables the heuristic.
9260 - name: layout.css.scroll-anchoring.max-consecutive-adjustments
9261   type: uint32_t
9262   value: 10
9263   mirror: always
9265 # Whether to reset counting the consecutive scroll-anchoring adjustments during
9266 # running async scrolling by APZ.
9267 - name: layout.css.scroll-anchoring.reset-heuristic-during-animation
9268   type: bool
9269   value: false
9270   mirror: always
9272 # The time after which we reset the max-consecutive-adjustments period, in
9273 # milliseconds.
9275 # This prevents sporadic back-and-forth scroll anchoring to trigger the
9276 # max-consecutive-adjustments heuristic.
9277 - name: layout.css.scroll-anchoring.max-consecutive-adjustments-timeout-ms
9278   type: uint32_t
9279   value: 500
9280   mirror: always
9282 # Pref to control whether we should disable scroll anchoring on a scroller
9283 # where at least max-consecutive-adjustments have happened, and which the
9284 # average adjustment ends up being less than this number, in CSS pixels.
9286 # So, for example, given max-consecutive-adjustments=10 and
9287 # min-average-adjustment-treshold=3, we'll block scroll anchoring if there have
9288 # been 10 consecutive adjustments without a user scroll or more, and the
9289 # average offset difference between them amount to less than 3 CSS pixels.
9290 - name: layout.css.scroll-anchoring.min-average-adjustment-threshold
9291   type: uint32_t
9292   value: 2
9293   mirror: always
9295 # Pref to control disabling scroll anchoring suppression triggers, see
9297 # https://drafts.csswg.org/css-scroll-anchoring/#suppression-triggers
9299 # Those triggers should be unnecessary after bug 1561450.
9300 - name: layout.css.scroll-anchoring.suppressions.enabled
9301   type: bool
9302   value: true
9303   mirror: always
9305 - name: layout.css.scroll-anchoring.highlight
9306   type: bool
9307   value: false
9308   mirror: always
9310 # Pref to control whether we reselect scroll anchors if sub-optimal
9312 # See https://github.com/w3c/csswg-drafts/issues/6787
9313 - name: layout.css.scroll-anchoring.reselect-if-suboptimal
9314   type: bool
9315   value: true
9316   mirror: always
9318 # Are shared memory User Agent style sheets enabled?
9319 - name: layout.css.shared-memory-ua-sheets.enabled
9320   type: bool
9321   value: true
9322   mirror: always
9324 # Is support for -webkit-line-clamp on regular blocks enabled?
9325 - name: layout.css.webkit-line-clamp.block.enabled
9326   type: bool
9327   value: false
9328   mirror: always
9330 # Is 'content:none' supported on (non-pseudo) elements?
9331 - name: layout.css.element-content-none.enabled
9332   type: RelaxedAtomicBool
9333   value: false
9334   mirror: always
9335   rust: true
9337 # Whether we want scrollbar-width: thin to behave as scrollbar-width: auto.
9338 - name: layout.css.scrollbar-width-thin.disabled
9339   type: RelaxedAtomicBool
9340   value: false
9341   mirror: always
9343 # Whether supports() conditions in @import is enabled
9344 - name: layout.css.import-supports.enabled
9345   type: RelaxedAtomicBool
9346   value: true
9347   mirror: always
9348   rust: true
9350 # Whether :-moz-broken is supported in content.
9351 - name: layout.css.moz-broken.content.enabled
9352   type: RelaxedAtomicBool
9353   value: false
9354   mirror: always
9355   rust: true
9357 # Whether the modern ::slider-* pseudos are enabled.
9358 - name: layout.css.modern-range-pseudos.enabled
9359   type: RelaxedAtomicBool
9360   value: false
9361   mirror: always
9362   rust: true
9364 # Is matching video-dynamic-range: high allowed?
9365 - name: layout.css.video-dynamic-range.allows-high
9366   type: RelaxedAtomicBool
9367 #if defined(XP_MACOSX) || defined(NIGHTLY_BUILD)
9368   value: true
9369 #else
9370   value: false
9371 #endif
9372   mirror: always
9374 # Whether frame visibility tracking is enabled globally.
9375 - name: layout.framevisibility.enabled
9376   type: bool
9377   value: true
9378   mirror: always
9380 # The fraction of the scrollport we allow to horizontally scroll by before we
9381 # schedule an update of frame visibility.
9382 - name: layout.framevisibility.amountscrollbeforeupdatehorizontal
9383   type: int32_t
9384   value: 2
9385   mirror: always
9387 # The fraction of the scrollport we allow to vertically scroll by before we
9388 # schedule an update of frame visibility.
9389 - name: layout.framevisibility.amountscrollbeforeupdatevertical
9390   type: int32_t
9391   value: 2
9392   mirror: always
9394 # The number of scrollports wide to expand when tracking frame visibility.
9395 - name: layout.framevisibility.numscrollportwidths
9396   type: uint32_t
9397 #ifdef ANDROID
9398   value: 1
9399 #else
9400   value: 0
9401 #endif
9402   mirror: always
9404 # The number of scrollports high to expand when tracking frame visibility.
9405 - name: layout.framevisibility.numscrollportheights
9406   type: uint32_t
9407   value: 1
9408   mirror: always
9410 # Test only.
9411 - name: layout.dynamic-toolbar-max-height
9412   type: RelaxedAtomicInt32
9413   value: 0
9414   mirror: always
9416 # Whether outlines should include all overflowing descendants, or just the
9417 # border-box of a given element.
9419 # Historically we have included descendants but other browsers have not.
9420 - name: layout.outline.include-overflow
9421   type: bool
9422   value: false
9423   mirror: always
9425 - name: layout.visibility.min-recompute-interval-ms
9426   type: uint32_t
9427   value: 1000
9428   mirror: always
9430 # Controls double click and Alt+Arrow word selection behavior.
9431 - name: layout.word_select.eat_space_to_next_word
9432   type: bool
9433 #ifdef XP_WIN
9434   value: true
9435 #else
9436   value: false
9437 #endif
9438   mirror: always
9440 - name: layout.word_select.stop_at_punctuation
9441   type: RelaxedAtomicBool
9442   value: true
9443   mirror: always
9445 # Whether underscore should be treated as a word-breaking character for
9446 # word selection/arrow-key movement purposes.
9447 - name: layout.word_select.stop_at_underscore
9448   type: bool
9449   value: false
9450   mirror: always
9452 # Whether to draw images in CSS backgrounds if we only have a partial frame.
9453 - name: layout.display_partial_background_images
9454   type: bool
9455   value: true
9456   mirror: always
9458 # Controls whether nsRefreshDriver::IsInHighRateMode() may ever return true.
9459 - name: layout.expose_high_rate_mode_from_refreshdriver
9460   type: bool
9461   value: true
9462   mirror: always
9464 # Whether <details> is forced to be a block, see bug 1856374
9465 - name: layout.details.force-block-layout
9466   type: bool
9467   value: true
9468   mirror: always
9470 # Whether table cells can generate scroll boxes.
9471 - name: layout.tables.scrollable-cells
9472   type: bool
9473   value: @IS_NIGHTLY_BUILD@
9474   mirror: always
9476 # Whether to disable layer pixel alignment in scroll related stuff.
9477 - name: layout.scroll.disable-pixel-alignment
9478   type: RelaxedAtomicBool
9479   value: false
9480   mirror: always
9482 #---------------------------------------------------------------------------
9483 # Prefs starting with "mathml."
9484 #---------------------------------------------------------------------------
9486 # Whether to disable legacy names "thickmathspace", "mediummathspace",
9487 # "thickmathspace" etc for length attributes.
9488 - name: mathml.mathspace_names.disabled
9489   type: bool
9490   value: @IS_NIGHTLY_BUILD@
9491   mirror: always
9493 # Whether to disable support for stretching operators with STIXGeneral fonts.
9494 # macos still has the deprecated STIXGeneral font pre-installed.
9495 - name: mathml.stixgeneral_operator_stretching.disabled
9496   type: bool
9497 #if defined(XP_MACOSX)
9498   value: @IS_NIGHTLY_BUILD@
9499 #else
9500   value: true
9501 #endif
9502   mirror: always
9504 # Whether to disable fallback for mathvariant=italic/bold/bold-italic via
9505 # styling when lacking proper fonts for Mathematical Alphanumeric Symbols.
9506 # We expect all OSes to have relevant fonts, except Android, see bug 1789083.
9507 - name: mathml.mathvariant_styling_fallback.disabled
9508   type: bool
9509 #if defined(ANDROID)
9510   value: false
9511 #else
9512   value: true
9513 #endif
9514   mirror: always
9516 # Whether to disable the MathML3 support for the mathvariant attribute. For
9517 # MathML Core, support is restricted to the <mi> element and to value "normal".
9518 # Corresponding automatic italicization on single-char <mi> element is also
9519 # implemented via text-transform: auto when that flag is enabled.
9520 - name: mathml.legacy_mathvariant_attribute.disabled
9521   type: bool
9522   value: @IS_NIGHTLY_BUILD@
9523   mirror: always
9524   rust: true
9526 #---------------------------------------------------------------------------
9527 # Prefs starting with "media."
9528 #---------------------------------------------------------------------------
9531 # This pref defines what the blocking policy would be used in blocking autoplay.
9532 # 0 : use sticky activation (default)
9533 # https://html.spec.whatwg.org/multipage/interaction.html#sticky-activation
9534 # 1 : use transient activation (the transient activation duration can be
9535 #     adjusted by the pref `dom.user_activation.transient.timeout`)
9536 # https://html.spec.whatwg.org/multipage/interaction.html#transient-activation
9537 # 2 : user input depth (allow autoplay when the play is trigged by user input
9538 #     which is determined by the user input depth)
9539 - name: media.autoplay.blocking_policy
9540   type: uint32_t
9541   value: 0
9542   mirror: always
9544 # Whether to allow autoplay on extension background pages.
9545 - name: media.autoplay.allow-extension-background-pages
9546   type: bool
9547   value: true
9548   mirror: always
9550 # Block autoplay, asking for permission by default.
9551 # 0=Allowed, 1=Blocked, 5=All Blocked
9552 - name: media.autoplay.default
9553   type: int32_t
9554   value: 1
9555   mirror: always
9557 # File-backed MediaCache size.
9558 - name: media.cache_size
9559   type: RelaxedAtomicUint32
9560   value: 512000   # Measured in KiB
9561   mirror: always
9563 # Size of file backed MediaCache while on a connection which is cellular (3G,
9564 # etc), and thus assumed to be "expensive".
9565 - name: media.cache_size.cellular
9566   type: RelaxedAtomicUint32
9567   value: 32768   # Measured in KiB
9568   mirror: always
9570 # Whether cubeb is sandboxed (AudioIPC)
9571 - name: media.cubeb.sandbox
9572   type: bool
9573   mirror: always
9574 #if defined(XP_LINUX) || defined(XP_WIN) || defined(XP_MACOSX)
9575   value: true
9576 #else
9577   value: false
9578 #endif
9580 # Whether or not to pass AUDCLNT_STREAMOPTIONS_RAW when initializing audio
9581 # streams when using WASAPI.
9582 # 0 - don't use RAW streams
9583 # 1 - use RAW streams for input streams only
9584 # 2 - use RAW streams for output streams only
9585 # 3 - use RAW streams for input and output streams
9586 #if defined (XP_WIN)
9587 - name: media.cubeb.wasapi-raw
9588   type: RelaxedAtomicUint32
9589   mirror: always
9590   value: 0
9591 #endif // XP_WIN
9593 # Whether to make the start of cubeb stream slower, and by how many
9594 # milliseconds.
9595 - name: media.cubeb.slow_stream_init_ms
9596   type: RelaxedAtomicUint32
9597   mirror: always
9598   value: 0
9600 # If a resource is known to be smaller than this size (in kilobytes), a
9601 # memory-backed MediaCache may be used; otherwise the (single shared global)
9602 # file-backed MediaCache is used.
9603 - name: media.memory_cache_max_size
9604   type: uint32_t
9605   value: 8192        # Measured in KiB
9606   mirror: always
9608 # Don't create more memory-backed MediaCaches if their combined size would go
9609 # above this absolute size limit.
9610 - name: media.memory_caches_combined_limit_kb
9611   type: uint32_t
9612   value: 524288
9613   mirror: always
9615 # Don't create more memory-backed MediaCaches if their combined size would go
9616 # above this relative size limit (a percentage of physical memory).
9617 - name: media.memory_caches_combined_limit_pc_sysmem
9618   type: uint32_t
9619   value: 5           # A percentage
9620   mirror: always
9622 # When a network connection is suspended, don't resume it until the amount of
9623 # buffered data falls below this threshold (in seconds).
9624 - name: media.cache_resume_threshold
9625   type: RelaxedAtomicUint32
9626   value: 30
9627   mirror: always
9628 - name: media.cache_resume_threshold.cellular
9629   type: RelaxedAtomicUint32
9630   value: 10
9631   mirror: always
9633 # Stop reading ahead when our buffered data is this many seconds ahead of the
9634 # current playback position. This limit can stop us from using arbitrary
9635 # amounts of network bandwidth prefetching huge videos.
9636 - name: media.cache_readahead_limit
9637   type: RelaxedAtomicUint32
9638   value: 60
9639   mirror: always
9640 - name: media.cache_readahead_limit.cellular
9641   type: RelaxedAtomicUint32
9642   value: 30
9643   mirror: always
9645 # MediaCapabilities
9646 - name: media.mediacapabilities.drop-threshold
9647   type: RelaxedAtomicInt32
9648   value: 95
9649   mirror: always
9651 - name: media.mediacapabilities.from-database
9652   type: RelaxedAtomicBool
9653   value: @IS_NIGHTLY_BUILD@
9654   mirror: always
9656 # AudioSink
9657 - name: media.resampling.enabled
9658   type: RelaxedAtomicBool
9659   value: false
9660   mirror: always
9662 # libcubeb backend implements .get_preferred_channel_layout
9663 - name: media.forcestereo.enabled
9664   type: RelaxedAtomicBool
9665 #if defined(XP_WIN) || defined(XP_DARWIN) || defined(MOZ_PULSEAUDIO)
9666   value: false
9667 #else
9668   value: true
9669 #endif
9670   mirror: always
9672 # MediaSource
9674 # Whether to enable MediaSource support.
9675 - name: media.mediasource.enabled
9676   type: RelaxedAtomicBool
9677   value: true
9678   mirror: always
9680 - name: media.mediasource.mp4.enabled
9681   type: RelaxedAtomicBool
9682   value: true
9683   mirror: always
9685 - name: media.mediasource.webm.enabled
9686   type: RelaxedAtomicBool
9687   value: true
9688   mirror: always
9690 # Check if vp9 is enabled by default in mediasource. False on Android.
9691 # If disabled, vp9 will only be enabled under some conditions:
9692 # - h264 HW decoding is not supported
9693 # - mp4 is not enabled
9694 # - Device was deemed fast enough to decode VP9 via the VP9Benchmark utility
9695 # - A VP9 HW decoder is present.
9696 - name: media.mediasource.vp9.enabled
9697   type: RelaxedAtomicBool
9698   value: @IS_NOT_ANDROID@
9699   mirror: always
9701 - name: media.mediasource.webm.audio.enabled
9702   type: RelaxedAtomicBool
9703   value: true
9704   mirror: always
9706 # Whether to enable MediaSource v2 support.
9707 - name: media.mediasource.experimental.enabled
9708   type: RelaxedAtomicBool
9709   value: false
9710   mirror: always
9712 # VideoSink
9713 - name: media.ruin-av-sync.enabled
9714   type: RelaxedAtomicBool
9715   value: false
9716   mirror: always
9718 # Encrypted Media Extensions
9719 - name: media.eme.enabled
9720   type: bool
9721 #if defined(XP_LINUX) && !defined(MOZ_WIDGET_ANDROID)
9722   # On Linux EME is visible but disabled by default. This is so that the "Play
9723   # DRM content" checkbox in the Firefox UI is unchecked by default. DRM
9724   # requires downloading and installing proprietary binaries, which users on an
9725   # open source operating systems didn't opt into. The first time a site using
9726   # EME is encountered, the user will be prompted to enable DRM, whereupon the
9727   # EME plugin binaries will be downloaded if permission is granted.
9728   value: false
9729 #else
9730   value: true
9731 #endif
9732   mirror: always
9734 # Whether we expose the functionality proposed in
9735 # https://github.com/WICG/encrypted-media-encryption-scheme/blob/master/explainer.md
9736 # I.e. if true, apps calling navigator.requestMediaKeySystemAccess() can pass
9737 # an optional encryption scheme as part of MediaKeySystemMediaCapability
9738 # objects. If a scheme is present when we check for support, we must ensure we
9739 # support that scheme in order to provide key system access.
9740 - name: media.eme.encrypted-media-encryption-scheme.enabled
9741   type: bool
9742   value: false
9743   mirror: always
9745 # Do we need explicit approval from the application to allow access to EME?
9746 # If true, Gecko will ask for permission before allowing MediaKeySystemAccess.
9747 # At time of writing this is aimed at GeckoView, and setting this to true
9748 # outside of GeckoView or test environments will likely break EME.
9749 - name: media.eme.require-app-approval
9750   type: bool
9751   value: false
9752   mirror: always
9754 - name: media.eme.audio.blank
9755   type: RelaxedAtomicBool
9756   value: false
9757   mirror: always
9759 - name: media.eme.video.blank
9760   type: RelaxedAtomicBool
9761   value: false
9762   mirror: always
9764 - name: media.eme.chromium-api.video-shmems
9765   type: RelaxedAtomicUint32
9766   value: 6
9767   mirror: always
9769 # Is support for MediaKeys.getStatusForPolicy enabled?
9770 - name: media.eme.hdcp-policy-check.enabled
9771   type: bool
9772   value: @IS_NIGHTLY_OR_DEV_EDITION@
9773   mirror: always
9775 - name: media.eme.max-throughput-ms
9776   type: RelaxedAtomicUint32
9777   value: 500
9778   mirror: always
9780 - name: media.clearkey.persistent-license.enabled
9781   type: bool
9782   value: false
9783   mirror: always
9785 # Are test specific clearkey key systems enabled and exposed?
9786 - name: media.clearkey.test-key-systems.enabled
9787   type: RelaxedAtomicBool
9788   value: false
9789   mirror: always
9791 - name: media.cloneElementVisually.testing
9792   type: bool
9793   value: false
9794   mirror: always
9796 # Does the GMPlugin process initialize minimal XPCOM
9797 - name: media.gmp.use-minimal-xpcom
9798   type: RelaxedAtomicBool
9799   value: true
9800   mirror: always
9802 # Does the GMPlugin process use native event processing
9803 - name: media.gmp.use-native-event-processing
9804   type: RelaxedAtomicBool
9805   value: @IS_NOT_XP_MACOSX@
9806   mirror: always
9808 #if defined(XP_LINUX) && defined(MOZ_SANDBOX)
9809   # Whether to allow, on a Linux system that doesn't support the necessary
9810   # sandboxing features, loading Gecko Media Plugins unsandboxed.  However, EME
9811   # CDMs will not be loaded without sandboxing even if this pref is changed.
9812 -   name: media.gmp.insecure.allow
9813     type: RelaxedAtomicBool
9814     value: false
9815     mirror: always
9816 #endif
9818 # (When reading the next line, know that preprocessor.py doesn't
9819 # understand parentheses, but && is higher precedence than ||.)
9820 #if defined(XP_WIN) && defined(_ARM64_) || defined(XP_MACOSX)
9821   # These prefs control whether or not we will allow x86/x64 plugins
9822   # to run on Windows ARM or Apple Silicon machines. This requires
9823   # launching the GMP child process executable in x86/x64 mode. We
9824   # expect to allow this for Widevine until an arm64 version of
9825   # Widevine and Clearkey is made available. We don't expect to need
9826   # to allow this for OpenH264.
9827   #
9828   # For Apple Silicon and OSX, it will be for universal builds and
9829   # whether or not it can use the x64 Widevine plugin.
9830   #
9831   # For Windows ARM, it will be for ARM builds and whether or not it
9832   # can use x86 Widevine or Clearkey plugins.
9834   # May a Widevine GMP x64 process be executed on ARM builds.
9835 - name: media.gmp-widevinecdm.allow-x64-plugin-on-arm64
9836   type: RelaxedAtomicBool
9837   value: true
9838   mirror: always
9840   # May an OpenH264 GMP x64 process be executed on ARM builds.
9841 - name: media.gmp-gmpopenh264.allow-x64-plugin-on-arm64
9842   type: RelaxedAtomicBool
9843   value: false
9844   mirror: always
9846   # May a Clearkey GMP x64 process be executed on ARM builds.
9847 - name: media.gmp-gmpclearkey.allow-x64-plugin-on-arm64
9848   type: RelaxedAtomicBool
9849   value: false
9850   mirror: always
9851 #endif
9853 # Specifies whether the PDMFactory can create a test decoder that just outputs
9854 # blank frames/audio instead of actually decoding. The blank decoder works on
9855 # all platforms.
9856 - name: media.use-blank-decoder
9857   type: RelaxedAtomicBool
9858   value: false
9859   mirror: always
9861 - name: media.gpu-process-decoder
9862   type: RelaxedAtomicBool
9863 #if defined(XP_WIN)
9864   value: true
9865 #else
9866   value: false
9867 #endif
9868   mirror: always
9870 - name: media.rdd-process.enabled
9871   type: RelaxedAtomicBool
9872 #if defined(XP_WIN)
9873   value: true
9874 #elif defined(XP_MACOSX)
9875   value: true
9876 #elif defined(XP_LINUX) && !defined(ANDROID)
9877   value: true
9878 #elif defined(XP_FREEBSD)
9879   value: true
9880 #elif defined(XP_OPENBSD)
9881   value: true
9882 #else
9883   value: false
9884 #endif
9885   mirror: always
9887 - name: media.rdd-retryonfailure.enabled
9888   type: RelaxedAtomicBool
9889   value: true
9890   mirror: always
9892 - name: media.rdd-process.startup_timeout_ms
9893   type: RelaxedAtomicInt32
9894   value: 5000
9895   mirror: always
9897 # Specifies how many times we restart RDD process after crash till we give up.
9898 # After first RDD restart we disable HW acceleration on Linux.
9899 - name: media.rdd-process.max-crashes
9900   type: RelaxedAtomicInt32
9901   value: 2
9902   mirror: always
9904 #ifdef MOZ_FFMPEG
9905 - name: media.rdd-ffmpeg.enabled
9906   type: RelaxedAtomicBool
9907   value: true
9908   mirror: always
9909 #endif
9912 - name: media.rdd-ffvpx.enabled
9913   type: RelaxedAtomicBool
9914 #if defined(XP_WIN)
9915   value: true
9916 #elif defined(XP_MACOSX)
9917   value: true
9918 #elif defined(XP_LINUX) && !defined(ANDROID)
9919   value: true
9920 #elif defined(XP_FREEBSD)
9921   value: true
9922 #elif defined(XP_OPENBSD)
9923   value: true
9924 #else
9925   value: false
9926 #endif
9927   mirror: always
9929 #ifdef MOZ_WMF
9930 - name: media.rdd-wmf.enabled
9931   type: RelaxedAtomicBool
9932   value: true
9933   mirror: always
9934 #endif
9936 #ifdef MOZ_APPLEMEDIA
9937 - name: media.rdd-applemedia.enabled
9938   type: RelaxedAtomicBool
9939   value: true
9940   mirror: always
9941 #endif
9943 - name: media.rdd-theora.enabled
9944   type: RelaxedAtomicBool
9945 #if defined(XP_WIN)
9946   value: true
9947 #elif defined(XP_MACOSX)
9948   value: true
9949 #elif defined(XP_LINUX) && !defined(ANDROID)
9950   value: true
9951 #elif defined(XP_FREEBSD)
9952   value: true
9953 #elif defined(XP_OPENBSD)
9954   value: true
9955 #else
9956   value: false
9957 #endif
9958   mirror: always
9960 - name: media.rdd-vorbis.enabled
9961   type: RelaxedAtomicBool
9962 #if defined(XP_WIN)
9963   value: true
9964 #elif defined(XP_MACOSX)
9965   value: true
9966 #elif defined(XP_LINUX) && !defined(ANDROID)
9967   value: true
9968 #elif defined(XP_FREEBSD)
9969   value: true
9970 #elif defined(XP_OPENBSD)
9971   value: true
9972 #else
9973   value: false
9974 #endif
9975   mirror: always
9977 - name: media.rdd-vpx.enabled
9978   type: RelaxedAtomicBool
9979 #if defined(XP_WIN)
9980   value: true
9981 #elif defined(XP_MACOSX)
9982   value: true
9983 #elif defined(XP_LINUX) && !defined(ANDROID)
9984   value: true
9985 #elif defined(XP_FREEBSD)
9986   value: true
9987 #elif defined(XP_OPENBSD)
9988   value: true
9989 #else
9990   value: false
9991 #endif
9992   mirror: always
9994 - name: media.rdd-wav.enabled
9995   type: RelaxedAtomicBool
9996 #if defined(XP_WIN)
9997   value: true
9998 #elif defined(XP_MACOSX)
9999   value: true
10000 #elif defined(XP_LINUX) && !defined(ANDROID)
10001   value: true
10002 #elif defined(XP_FREEBSD)
10003   value: true
10004 #elif defined(XP_OPENBSD)
10005   value: true
10006 #else
10007   value: false
10008 #endif
10009   mirror: always
10011 - name: media.rdd-opus.enabled
10012   type: RelaxedAtomicBool
10013 #if defined(XP_WIN)
10014   value: true
10015 #elif defined(XP_MACOSX)
10016   value: true
10017 #elif defined(XP_LINUX) && !defined(ANDROID)
10018   value: true
10019 #elif defined(XP_FREEBSD)
10020   value: true
10021 #elif defined(XP_OPENBSD)
10022   value: true
10023 #else
10024   value: false
10025 #endif
10026   mirror: always
10028 - name: media.rdd-webaudio.batch.size
10029   type: RelaxedAtomicInt32
10030   value: 100
10031   mirror: always
10033 # This pref is here to control whether we want to perform audio decoding by
10034 # using the IPC actor within the Utility process rather than the RDD process.
10035 # When it is set to true, then the utility process will take precedence over RDD
10036 # to perform audio decoding.
10037 # TODO: Enabling for Isolated Processes builds on Android
10038 - name: media.utility-process.enabled
10039   type: RelaxedAtomicBool
10040 #if defined(XP_WIN)
10041   value: true
10042 #elif defined(XP_MACOSX)
10043   value: true
10044 #elif defined(XP_LINUX) && !defined(ANDROID)
10045   value: true
10046 #elif defined(ANDROID) && !defined(MOZ_ANDROID_CONTENT_SERVICE_ISOLATED_PROCESS)
10047   value: true
10048 #elif defined(XP_FREEBSD)
10049   value: true
10050 #elif defined(XP_OPENBSD)
10051   value: true
10052 #else
10053   value: false
10054 #endif
10055   mirror: always
10057 # Specifies how many times we restart Utility process after crash till we give
10058 # up.
10059 - name: media.utility-process.max-crashes
10060   type: RelaxedAtomicInt32
10061   value: 2
10062   mirror: always
10064 #ifdef MOZ_FFMPEG
10065 - name: media.utility-ffmpeg.enabled
10066   type: RelaxedAtomicBool
10067   value: true
10068   mirror: always
10069 #endif
10071 - name: media.utility-ffvpx.enabled
10072   type: RelaxedAtomicBool
10073   value: true
10074   mirror: always
10076 #ifdef MOZ_WMF
10077 - name: media.utility-wmf.enabled
10078   type: RelaxedAtomicBool
10079   value: true
10080   mirror: always
10081 #endif
10083 #ifdef MOZ_APPLEMEDIA
10084 - name: media.utility-applemedia.enabled
10085   type: RelaxedAtomicBool
10086   value: true
10087   mirror: always
10088 #endif
10090 - name: media.utility-vorbis.enabled
10091   type: RelaxedAtomicBool
10092   value: true
10093   mirror: always
10095 - name: media.utility-wav.enabled
10096   type: RelaxedAtomicBool
10097   value: true
10098   mirror: always
10100 - name: media.utility-opus.enabled
10101   type: RelaxedAtomicBool
10102   value: true
10103   mirror: always
10105 #ifdef ANDROID
10106   # Enable the MediaCodec PlatformDecoderModule by default.
10107 -   name: media.android-media-codec.enabled
10108     type: RelaxedAtomicBool
10109     value: true
10110     mirror: always
10112   # Bug 1771196
10113   # Dont yet enable AndroidDecoderModule on Utility
10114 -   name: media.utility-android-media-codec.enabled
10115     type: RelaxedAtomicBool
10116     value: false
10117     mirror: always
10119 -   name: media.android-media-codec.preferred
10120     type: RelaxedAtomicBool
10121     value: true
10122     mirror: always
10123 #endif  # ANDROID
10125 # Now we will completely disable the ability to perform audio decoding outside
10126 # of Utility.
10127 -   name: media.allow-audio-non-utility
10128     type: RelaxedAtomicBool
10129     value: false
10130     mirror: always
10132 #ifdef MOZ_OMX
10133 -   name: media.omx.enabled
10134     type: bool
10135     value: false
10136     mirror: always
10137 #endif
10139 # Allow ffmpeg decoder to decode directly onto shmem buffer
10140 - name: media.ffmpeg.customized-buffer-allocation
10141   type: RelaxedAtomicBool
10142   value: true
10143   mirror: always
10145 #ifdef MOZ_FFMPEG
10146 -   name: media.ffmpeg.enabled
10147     type: RelaxedAtomicBool
10148   #if defined(XP_MACOSX)
10149     value: false
10150   #else
10151     value: true
10152   #endif
10153     mirror: always
10155 -   name: media.libavcodec.allow-obsolete
10156     type: bool
10157     value: false
10158     mirror: always
10159 #endif  # MOZ_FFMPEG
10161 # Allow using ffmpeg encoder
10162 -   name: media.ffmpeg.encoder.enabled
10163     type: RelaxedAtomicBool
10164 #if defined(MOZ_WIDGET_GTK)
10165     value: @IS_NIGHTLY_BUILD@
10166 #else
10167     value: false
10168 #endif
10169     mirror: always
10171 # Allow using openh264 decoding with ffmpeg
10172 -   name: media.ffmpeg.allow-openh264
10173     type: RelaxedAtomicBool
10174     value: @IS_NOT_NIGHTLY_BUILD@
10175     mirror: always
10177 #ifdef MOZ_WIDGET_GTK
10178 # Use VA-API for ffmpeg video playback on Linux
10179 - name: media.ffmpeg.vaapi.enabled
10180   type: bool
10181   value: false
10182   mirror: once
10184 # Force to copy dmabuf video frames
10185 # Used for debugging/troubleshooting only
10186 # 0 - force disable
10187 # 1 - force enable
10188 # 2 - default
10189 - name: media.ffmpeg.vaapi.force-surface-zero-copy
10190   type: uint32_t
10191   value: 2
10192   mirror: once
10193 #endif # MOZ_WIDGET_GTK
10195 # Set to true in marionette tests to disable the sanity test
10196 # which would lead to unnecessary start of the RDD process.
10197 -   name: media.sanity-test.disabled
10198     type: RelaxedAtomicBool
10199     value: false
10200     mirror: always
10202 #ifdef MOZ_WMF
10204 -   name: media.wmf.enabled
10205     type: RelaxedAtomicBool
10206     value: true
10207     mirror: always
10209   # Whether DD should consider WMF-disabled a WMF failure, useful for testing.
10210 -   name: media.decoder-doctor.wmf-disabled-is-failure
10211     type: RelaxedAtomicBool
10212     value: false
10213     mirror: always
10215 -   name: media.wmf.dxva.d3d11.enabled
10216     type: RelaxedAtomicBool
10217     value: true
10218     mirror: always
10220 -   name: media.wmf.dxva.max-videos
10221     type: RelaxedAtomicUint32
10222     value: 8
10223     mirror: always
10225 -   name: media.wmf.use-nv12-format
10226     type: RelaxedAtomicBool
10227     value: true
10228     mirror: always
10230 -   name: media.wmf.zero-copy-nv12-textures
10231     type: bool
10232     value: true
10233     mirror: once
10234 # Enable hardware decoded video no copy even when it is blocked.
10235 -   name: media.wmf.zero-copy-nv12-textures-force-enabled
10236     type: bool
10237     value: false
10238     mirror: once
10240 -   name: media.wmf.force.allow-p010-format
10241     type: RelaxedAtomicBool
10242     value: false
10243     mirror: always
10245 -   name: media.wmf.use-sync-texture
10246     type: bool
10247     value: true
10248     mirror: once
10250 -   name: media.wmf.low-latency.enabled
10251     type: RelaxedAtomicBool
10252     value: true
10253     mirror: always
10255 -   name: media.wmf.skip-blacklist
10256     type: RelaxedAtomicBool
10257     value: false
10258     mirror: always
10260 -   name: media.wmf.amd.highres.enabled
10261     type: RelaxedAtomicBool
10262     value: true
10263     mirror: always
10265 -   name: media.wmf.allow-unsupported-resolutions
10266     type: RelaxedAtomicBool
10267     value: false
10268     mirror: always
10270 -   name: media.wmf.vp9.enabled
10271     type: RelaxedAtomicBool
10272     value: true
10273     mirror: always
10275 -   name: media.wmf.av1.enabled
10276     type: RelaxedAtomicBool
10277     value: true
10278     mirror: always
10280 # Using Windows Media Foundation Media Engine for encrypted playback
10281 # 0 : disable, 1 : enable for encrypted and clear,
10282 # 2 : enable for encrypted only, 3 : enable for clear only
10283 -   name: media.wmf.media-engine.enabled
10284     type: RelaxedAtomicUint32
10285 #if defined(NIGHTLY_BUILD)
10286     value: 2
10287 #else
10288     value: 0
10289 #endif
10290     mirror: always
10292 # Testing purpose, enable media engine on channel decoder as well.
10293 -   name: media.wmf.media-engine.channel-decoder.enabled
10294     type: RelaxedAtomicBool
10295     value: false
10296     mirror: always
10298 # The amount of video raw data the engine stream will queue
10299 -   name: media.wmf.media-engine.raw-data-threshold.video
10300     type: RelaxedAtomicInt32
10301     value: 500000
10302     mirror: always
10304 # The amount of audio raw data the engine stream will queue
10305 -   name: media.wmf.media-engine.raw-data-threshold.audio
10306     type: RelaxedAtomicInt32
10307     value: 2000000
10308     mirror: always
10310 # Specifies how many times we restart MFCDM process after crash till we give up.
10311 -   name: media.wmf.media-engine.max-crashes
10312     type: RelaxedAtomicInt32
10313     value: 2
10314     mirror: always
10316 # Bypass the gfx block list check for the media engine playback.
10317 -   name: media.wmf.media-engine.bypass-gfx-blocklist
10318     type: RelaxedAtomicBool
10319     value: false
10320     mirror: always
10322 # [TEST-ONLY] Use Media Foundation Clearkey CDM for EME related testing.
10323 -   name: media.eme.wmf.clearkey.enabled
10324     type: RelaxedAtomicBool
10325     value: false
10326     mirror: always
10328 # [TEST-ONLY] use Media Foundation clearkey CDM dll to mock as an external CDM,
10329 # external CDM like Widevine and PlayReady so that we won't be interfered by
10330 # unexpected behaviors caused by the external library.
10331 -   name: media.eme.wmf.use-mock-cdm-for-external-cdms
10332     type: RelaxedAtomicBool
10333     value: false
10334     mirror: always
10336 # Enable PlayReady DRM for EME
10337 -   name: media.eme.playready.enabled
10338     type: RelaxedAtomicBool
10339 #if defined(MOZ_WMF_CDM) && defined(IS_NIGHTLY_OR_DEV_EDITION)
10340     value: true
10341 #else
10342     value: false
10343 #endif
10344     mirror: always
10346 # Use IsTypeSupportedEx for PlayReady
10347 -   name: media.eme.playready.istypesupportedex
10348     type: RelaxedAtomicBool
10349     value: true
10350     mirror: always
10352 # Enable HEVC support via the windows media foundation
10353 # 0 : disable, 1 : enable for media engine and MFT,
10354 # 2 : enable for media engine only
10355 -   name: media.wmf.hevc.enabled
10356     type: RelaxedAtomicUint32
10357 #if defined(NIGHTLY_BUILD)
10358     value: 1
10359 #elif defined(MOZ_DEV_EDITION)
10360     value: 2
10361 #else
10362     value: 0
10363 #endif
10364     mirror: always
10366 # Enable Widevine experiment DRM for EME
10367 -   name: media.eme.widevine.experiment.enabled
10368     type: RelaxedAtomicBool
10369     value: false
10370     mirror: always
10372 #endif  # MOZ_WMF
10374 - name: media.decoder-doctor.testing
10375   type: bool
10376   value: false
10377   mirror: always
10379 - name: media.hardware-video-decoding.enabled
10380   type: bool
10381   value: true
10382   mirror: once
10384 - name: media.hardware-video-decoding.force-enabled
10385   type: bool
10386   value: false
10387   mirror: once
10389 # Whether to check the decoder supports recycling.
10390 - name: media.decoder.recycle.enabled
10391   type: RelaxedAtomicBool
10392   value: @IS_ANDROID@
10393   mirror: always
10395 # Should MFR try to skip to the next key frame?
10396 - name: media.decoder.skip-to-next-key-frame.enabled
10397   type: RelaxedAtomicBool
10398   value: true
10399   mirror: always
10401 # When video continues later than the current media time for this period of
10402 # time, then it will trigger skip-to-next-keyframe mechanism. As this aims to
10403 # solve the drop frames issue where video decoding too slow for high
10404 # resolution videos. eg. 4k+. Therefore, the value is is determined by the
10405 # telemetry probe `video_inter_keyframe_max_ms` in the key of `AV,h>2160` which
10406 # shows that 95% video's key frame interval are less than ~5000. We use its
10407 # half value as a threashold to decide whether we should keep decoding in the
10408 # current video position or jump to the next keyframe in order to decode future
10409 # frames in advance.
10410 - name: media.decoder.skip_when_video_too_slow_ms
10411   type: RelaxedAtomicInt32
10412   value: 2500
10413   mirror: always
10415 # True if we want to decode in batches.
10416 - name: media.gmp.decoder.decode_batch
10417   type: RelaxedAtomicBool
10418   value: false
10419   mirror: always
10421 # True if we allow use of any decoders found in GMP plugins.
10422 - name: media.gmp.decoder.enabled
10423   type: RelaxedAtomicBool
10424   value: true
10425   mirror: always
10427 # True if we want to request the multithreaded GMP decoder.
10428 - name: media.gmp.decoder.multithreaded
10429   type: RelaxedAtomicBool
10430   value: false
10431   mirror: always
10433 # True if we want to try using the GMP plugin decoders first.
10434 - name: media.gmp.decoder.preferred
10435   type: RelaxedAtomicBool
10436   value: false
10437   mirror: always
10439 # True if we want to reorder frames from the decoder based on the timestamp.
10440 - name: media.gmp.decoder.reorder_frames
10441   type: RelaxedAtomicBool
10442   value: true
10443   mirror: always
10445 # Whether to suspend decoding of videos in background tabs.
10446 - name: media.suspend-background-video.enabled
10447   type: RelaxedAtomicBool
10448   value: true
10449   mirror: always
10451 # Delay, in ms, from time window goes to background to suspending
10452 # video decoders. Defaults to 10 seconds.
10453 - name: media.suspend-background-video.delay-ms
10454   type: RelaxedAtomicUint32
10455   value: 10000
10456   mirror: always
10458 - name: media.dormant-on-pause-timeout-ms
10459   type: RelaxedAtomicInt32
10460   value: 5000
10461   mirror: always
10463 # AudioTrack and VideoTrack support
10464 - name: media.track.enabled
10465   type: bool
10466   value: false
10467   mirror: always
10469 # This pref disables the reception of RTCP. It is used for testing.
10470 - name: media.webrtc.net.force_disable_rtcp_reception
10471   type: ReleaseAcquireAtomicBool
10472   value: false
10473   mirror: always
10475 # This pref controls whether dispatch testing-only events.
10476 - name: media.webvtt.testing.events
10477   type: bool
10478   value: false
10479   mirror: always
10481 - name: media.webspeech.synth.force_global_queue
10482   type: bool
10483   value: false
10484   mirror: always
10486 - name: media.webspeech.test.enable
10487   type: bool
10488   value: false
10489   mirror: always
10491 - name: media.webspeech.test.fake_fsm_events
10492   type: bool
10493   value: false
10494   mirror: always
10496 - name: media.webspeech.test.fake_recognition_service
10497   type: bool
10498   value: false
10499   mirror: always
10501 #ifdef MOZ_WEBSPEECH
10502 -   name: media.webspeech.recognition.enable
10503     type: bool
10504     value: false
10505     mirror: always
10506 #endif
10508 - name: media.webspeech.recognition.force_enable
10509   type: bool
10510   value: false
10511   mirror: always
10513 #ifdef MOZ_WEBSPEECH
10514 -   name: media.webspeech.synth.enabled
10515     type: bool
10516     value: true
10517     mirror: always
10518 #endif  # MOZ_WEBSPEECH
10520 - name: media.encoder.webm.enabled
10521   type: RelaxedAtomicBool
10522   value: true
10523   mirror: always
10525 - name: media.audio-max-decode-error
10526   type: uint32_t
10527 #if defined(RELEASE_OR_BETA)
10528   value: 3
10529 #else
10530   # Zero tolerance in pre-release builds to detect any decoder regression.
10531   value: 0
10532 #endif
10533   mirror: always
10535 - name: media.video-max-decode-error
10536   type: uint32_t
10537 #if defined(RELEASE_OR_BETA)
10538   value: 2
10539 #else
10540   # Zero tolerance in pre-release builds to detect any decoder regression.
10541   value: 0
10542 #endif
10543   mirror: always
10545 # Are video stats enabled? (Disabling can help prevent fingerprinting.)
10546 - name: media.video_stats.enabled
10547   type: bool
10548   value: true
10549   mirror: always
10551 # forces the number of dropped frames to 0
10552 - name: media.video.dropped_frame_stats.enabled
10553   type: bool
10554   value: true
10555   mirror: always
10557 # Opus
10558 - name: media.opus.enabled
10559   type: RelaxedAtomicBool
10560   value: true
10561   mirror: always
10563 # Wave
10564 - name: media.wave.enabled
10565   type: RelaxedAtomicBool
10566   value: true
10567   mirror: always
10569 # Ogg
10570 - name: media.ogg.enabled
10571   type: RelaxedAtomicBool
10572   value: true
10573   mirror: always
10575 # WebM
10576 - name: media.webm.enabled
10577   type: RelaxedAtomicBool
10578   value: true
10579   mirror: always
10581 # AV1
10582 - name: media.av1.enabled
10583   type: RelaxedAtomicBool
10584 #if defined(XP_WIN) && !defined(_ARM64_)
10585   value: true
10586 #elif defined(XP_MACOSX)
10587   value: true
10588 #elif defined(MOZ_WIDGET_ANDROID)
10589   value: true
10590 #elif defined(XP_UNIX)
10591   value: true
10592 #else
10593   value: false
10594 #endif
10595   mirror: always
10597 - name: media.av1.use-dav1d
10598   type: RelaxedAtomicBool
10599 #if defined(XP_WIN) && !defined(_ARM64_)
10600   value: true
10601 #elif defined(XP_MACOSX)
10602   value: true
10603 #elif defined(XP_UNIX)
10604   value: true
10605 #else
10606   value: false
10607 #endif
10608   mirror: always
10610 - name: media.av1.new-thread-count-strategy
10611   type: RelaxedAtomicBool
10612   value: false
10613   mirror: always
10615 - name: media.av1.force-thread-count
10616   type: RelaxedAtomicInt32
10617   value: 0
10618   mirror: always
10620 - name: media.flac.enabled
10621   type: RelaxedAtomicBool
10622   value: true
10623   mirror: always
10625 # Hls
10626 - name: media.hls.enabled
10627   type: RelaxedAtomicBool
10628   value: @IS_ANDROID@
10629   mirror: always
10631 # Max number of HLS players that can be created concurrently. Used only on
10632 # Android and when "media.hls.enabled" is true.
10633 #ifdef ANDROID
10634 -   name: media.hls.max-allocations
10635     type: uint32_t
10636     value: 20
10637     mirror: always
10638 #endif
10640 - name: media.mp4.enabled
10641   type: RelaxedAtomicBool
10642   value: true
10643   mirror: always
10645 - name: media.mp4.sniff_iso_brand
10646   type: RelaxedAtomicBool
10647   value: true
10648   mirror: always
10650 # Error/warning handling, Decoder Doctor.
10652 # Set to true to force demux/decode warnings to be treated as errors.
10653 - name: media.playback.warnings-as-errors
10654   type: RelaxedAtomicBool
10655   value: false
10656   mirror: always
10658 # Resume video decoding when the cursor is hovering on a background tab to
10659 # reduce the resume latency and improve the user experience.
10660 - name: media.resume-background-video-on-tabhover
10661   type: bool
10662   value: true
10663   mirror: always
10665 # Media Seamless Looping
10666 - name: media.seamless-looping
10667   type: RelaxedAtomicBool
10668   value: true
10669   mirror: always
10671 - name: media.seamless-looping-video
10672   type: RelaxedAtomicBool
10673   value: true
10674   mirror: always
10676 - name: media.autoplay.block-event.enabled
10677   type: bool
10678   value: false
10679   mirror: always
10681 - name: media.media-capabilities.enabled
10682   type: RelaxedAtomicBool
10683   value: true
10684   mirror: always
10686 - name: media.media-capabilities.screen.enabled
10687   type: RelaxedAtomicBool
10688   value: false
10689   mirror: always
10691 - name: media.benchmark.vp9.fps
10692   type: RelaxedAtomicUint32
10693   value: 0
10694   mirror: always
10696 - name: media.benchmark.vp9.threshold
10697   type: RelaxedAtomicUint32
10698   value: 150
10699   mirror: always
10701 - name: media.benchmark.vp9.versioncheck
10702   type: RelaxedAtomicUint32
10703   value: 0
10704   mirror: always
10706 - name: media.benchmark.frames
10707   type: RelaxedAtomicUint32
10708   value: 300
10709   mirror: always
10711 - name: media.benchmark.timeout
10712   type: RelaxedAtomicUint32
10713   value: 1000
10714   mirror: always
10716 - name: media.test.video-suspend
10717   type: RelaxedAtomicBool
10718   value: false
10719   mirror: always
10721 # MediaCapture prefs follow
10723 # Enables navigator.mediaDevices and getUserMedia() support. See also
10724 # media.peerconnection.enabled
10725 - name: media.navigator.enabled
10726   type: bool
10727   value: true
10728   mirror: always
10730 # This pref turns off window-focus checks on the navigator.mediaDevices methods,
10731 # for partner testing frameworks.
10732 # Prefer "focusmanager.testmode", which is already set by default for
10733 # web-platform tests.
10734 - name: media.devices.unfocused.enabled
10735   type: bool
10736   value: false
10737   mirror: always
10739 # This pref turns off [SecureContext] on the navigator.mediaDevices object, for
10740 # more compatible legacy behavior.
10741 - name: media.devices.insecure.enabled
10742   type: bool
10743   value: false
10744   mirror: always
10746 # If the above pref is also enabled, this pref enabled getUserMedia() support
10747 # in http, bypassing the instant NotAllowedError you get otherwise.
10748 - name: media.getusermedia.insecure.enabled
10749   type: bool
10750   value: false
10751   mirror: always
10753 # Enable tab sharing
10754 - name: media.getusermedia.browser.enabled
10755   type: RelaxedAtomicBool
10756   value: false
10757   mirror: always
10759 # The getDisplayMedia method is always SecureContext regardless of the above two
10760 # prefs. But it is not implemented on android, and can be turned off elsewhere.
10761 - name: media.getdisplaymedia.enabled
10762   type: bool
10763   value: @IS_NOT_ANDROID@
10764   mirror: always
10766 # The getDisplayMedia prompt uses getDisplayMedia under the hood to show previews.
10767 # This can be turned off if, e.g. on systems with known issues like X11, or if
10768 # previews are not desired.
10769 - name: media.getdisplaymedia.previews.enabled
10770   type: bool
10771   value: @IS_NOT_ANDROID@
10772   mirror: always
10774 # Turn off any cameras (but not mics) while in the background. This is desirable
10775 # on mobile.
10776 - name: media.getusermedia.camera.background.mute.enabled
10777   type: bool
10778   value: @IS_ANDROID@
10779   mirror: always
10781 # Use the libwebrtc AVFoundation camera backend on Mac by default. When
10782 # disabled, an older forked capture module is used.
10783 - name: media.getusermedia.camera.macavf.enabled
10784   type: bool
10785   value: true
10786   mirror: once
10788 # Tell the audio backend to prefer a stream adapted for voice when processing is
10789 # enabled through constraints (possibly defaults). Whether it has any effect
10790 # depends on the backend.
10791 - name: media.getusermedia.microphone.prefer_voice_stream_with_processing.enabled
10792   type: RelaxedAtomicBool
10793   value: True
10794   mirror: always
10796 # This pref turns on legacy (non-spec) exposure of camera and microphone
10797 # information from enumerateDevices and devicechange ahead of successful
10798 # getUserMedia calls. Should only be turned on to resolve web compat issues,
10799 # since doing so reveals more user fingerprinting information to trackers.
10801 # In this mode, camera and microphone device labels are exposed if the site has a
10802 # persisted permission to either kind, as well as while actively capturing either
10803 # kind (temporary and tab-specific grace-period permissions do not count).
10805 # Planned next steps: true â†’ @IS_NOT_NIGHTLY_BUILD@ â†’ false
10806 - name: media.devices.enumerate.legacy.enabled
10807   type: bool
10808   value: true
10809   mirror: always
10811 # WebRTC prefs follow
10813 # Enables auto refresh of peerconnection stats by default
10814 - name: media.aboutwebrtc.auto_refresh.peerconnection_section
10815   type: bool
10816   value: @IS_NOT_NIGHTLY_BUILD@
10817   mirror: always
10819 # Enables auto refresh of the transport connection log by default
10820 - name: media.aboutwebrtc.auto_refresh.connection_log_section
10821   type: bool
10822   value: false
10823   mirror: always
10825 # Enables auto refresh of user config by default
10826 - name: media.aboutwebrtc.auto_refresh.user_modified_config_section
10827   type: bool
10828   value: true
10829   mirror: always
10831 # Enables auto refresh of media context by default
10832 - name: media.aboutwebrtc.auto_refresh.media_ctx_section
10833   type: bool
10834   value: false
10835   mirror: always
10837 # Enables RTCPeerConnection support. Note that, when true, this pref enables
10838 # navigator.mediaDevices and getUserMedia() support as well.
10839 # See also media.navigator.enabled
10840 - name: media.peerconnection.enabled
10841   type: RelaxedAtomicBool
10842   value: true
10843   mirror: always
10845 - name: media.peerconnection.scripttransform.enabled
10846   type: RelaxedAtomicBool
10847   value: true
10848   mirror: always
10850 #ifdef MOZ_WEBRTC
10851   # Use MediaDataDecoder API for VP8/VP9 in WebRTC. This includes hardware
10852   # acceleration for decoding.
10853 -   name: media.navigator.mediadatadecoder_vpx_enabled
10854     type: RelaxedAtomicBool
10855 #if defined(NIGHTLY_BUILD) || defined(MOZ_WIDGET_GTK)
10856     value: true
10857 #else
10858     value: false
10859 #endif
10860     mirror: always
10862   # Use MediaDataDecoder API for H264 in WebRTC. This includes hardware
10863   # acceleration for decoding.
10864 -   name: media.navigator.mediadatadecoder_h264_enabled
10865     type: RelaxedAtomicBool
10866   #if defined(_ARM64_) && defined(XP_WIN)
10867     value: false
10868   #else
10869     value: true
10870   #endif
10871     mirror: always
10873 #if defined(MOZ_WIDGET_GTK)
10874   # Use hardware acceleration for VP8 decoding on Linux.
10875 -   name: media.navigator.mediadatadecoder_vp8_hardware_enabled
10876     type: RelaxedAtomicBool
10877     value: false
10878     mirror: always
10879 #endif
10881   # Interval in milliseconds at which to gather WebRTC stats for use in about:webrtc.
10882 -   name: media.aboutwebrtc.hist.poll_interval_ms
10883     type: RelaxedAtomicUint32
10884     value: 250
10885     mirror: always
10887   # History time depth in seconds to keep for webrtc:stats for use in about:webrtc.
10888 -   name: media.aboutwebrtc.hist.storage_window_s
10889     type: RelaxedAtomicUint32
10890     value: 60
10891     mirror: always
10893   # Time in minutes to retain peer connection stats after closing.
10894 -   name: media.aboutwebrtc.hist.prune_after_m
10895     type: RelaxedAtomicUint32
10896     value: 60 * 24 * 2
10897     mirror: always
10899   # Max number of closed PC stats histories to retain
10900 -   name: media.aboutwebrtc.hist.closed_stats_to_retain
10901     type: RelaxedAtomicUint32
10902     value: 8
10903     mirror: always
10905   # Gather PeerConnection stats history for display in about:webrtc. If
10906   # disabled history will only gather when about:webrtc is open. Additionally,
10907   # if disabled and when about:webrtc is not in the foreground history data
10908   # will become sparse.
10909 -   name: media.aboutwebrtc.hist.enabled
10910     type: RelaxedAtomicBool
10911 #if defined(MOZ_WIDGET_ANDROID)
10912     value: false
10913 #else
10914     value: @IS_NIGHTLY_BUILD@
10915 #endif
10916     mirror: always
10918 #endif  # MOZ_WEBRTC
10920 # HTMLMediaElement.allowedToPlay should be exposed to web content when
10921 # block autoplay rides the trains to release. Until then, Nightly only.
10922 - name: media.allowed-to-play.enabled
10923   type: bool
10924   value: @IS_NIGHTLY_BUILD@
10925   mirror: always
10927 # Is support for MediaDevices.ondevicechange enabled?
10928 - name: media.ondevicechange.enabled
10929   type: bool
10930   value: true
10931   mirror: always
10933 # Is support for HTMLMediaElement.seekToNextFrame enabled?
10934 - name: media.seekToNextFrame.enabled
10935   type: bool
10936   value: true
10937   mirror: always
10939 # Is the Audio Output Devices API enabled?
10940 - name: media.setsinkid.enabled
10941   type: bool
10942 #if defined(MOZ_WIDGET_ANDROID)
10943   value: false # bug 1473346
10944 #else
10945   value: true
10946 #endif
10947   mirror: always
10949 # Turn on this pref can enable test-only events for media element.
10950 - name: media.testing-only-events
10951   type: bool
10952   value: false
10953   mirror: always
10955 - name: media.useAudioChannelService.testing
10956   type: bool
10957   value: false
10958   mirror: always
10960 - name: media.audioFocus.management
10961   type: bool
10962 #if defined(MOZ_WIDGET_ANDROID)
10963   value: true
10964 #else
10965   value: false
10966 #endif
10967   mirror: always
10969 - name: media.hardwaremediakeys.enabled
10970   type: bool
10971   value: true
10972   mirror: always
10974 # If this pref is on, then `media.mediacontrol.stopcontrol.timer.ms` would take
10975 # effect and determine the timing to stop controlling media.
10976 - name: media.mediacontrol.stopcontrol.timer
10977   type: bool
10978   value: true
10979   mirror: always
10981 # If media is being paused after a certain period, then we would think that
10982 # media doesn't need to be controlled anymore. Therefore, that media would stop
10983 # listening to the media control key events. The value of this pref is how long
10984 # media would stop listening to the event after it's paused. The default value
10985 # is set to 24 hrs (24*60*60*1000)
10986 - name: media.mediacontrol.stopcontrol.timer.ms
10987   type: RelaxedAtomicUint32
10988   value: 86400000
10989   mirror: always
10991 # If this pref is on, we would stop controlling media after it reaches to the
10992 # end.
10993 - name: media.mediacontrol.stopcontrol.aftermediaends
10994   type: bool
10995   value: true
10996   mirror: always
10998 # We would only use media control to control media which duration is longer
10999 # than this value.
11000 - name: media.mediacontrol.eligible.media.duration.s
11001   type: AtomicFloat
11002   value: 3.0f
11003   mirror: always
11005 - name: media.webrtc.platformencoder
11006   type: RelaxedAtomicBool
11007 #if defined(MOZ_WIDGET_ANDROID)
11008   value: true
11009 #elif defined(MOZ_WIDGET_GTK)
11010   value: false
11011 #else
11012   value: @IS_EARLY_BETA_OR_EARLIER@
11013 #endif
11014   mirror: always
11016 - name: media.webrtc.platformencoder.sw_only
11017   type: RelaxedAtomicBool
11018 #if defined(MOZ_WIDGET_ANDROID)
11019   value: false
11020 #else
11021   value: true
11022 #endif
11023   mirror: always
11025 - name: media.webrtc.software_encoder.fallback
11026   type: RelaxedAtomicBool
11027 #if !defined(MOZ_WIDGET_GTK)
11028   value: true
11029 #else
11030   value: false
11031 #endif
11032   mirror: always
11034 #if defined(XP_MACOSX)
11035 - name: media.webrtc.capture.allow-iosurface
11036   type: RelaxedAtomicBool
11037   value: true
11038   mirror: always
11039 #endif
11041 #if defined(XP_WIN)
11042 - name: media.webrtc.capture.allow-directx
11043   type: RelaxedAtomicBool
11044   value: true
11045   mirror: always
11047 - name: media.webrtc.capture.screen.allow-wgc
11048   type: RelaxedAtomicBool
11049   value: false
11050   mirror: always
11052 - name: media.webrtc.capture.window.allow-wgc
11053   type: RelaxedAtomicBool
11054   value: false
11055   mirror: always
11057 - name: media.webrtc.capture.wgc.allow-zero-hertz
11058   type: RelaxedAtomicBool
11059   value: false
11060   mirror: always
11061 #endif
11063 #if defined(MOZ_WIDGET_GTK)
11064 - name: media.webrtc.capture.allow-pipewire
11065   type: RelaxedAtomicBool
11066   value: true
11067   mirror: always
11069 - name: media.webrtc.camera.allow-pipewire
11070   type: bool
11071   value: false
11072   mirror: once
11073 #endif
11075 - name: media.block-autoplay-until-in-foreground
11076   type: bool
11077 #if !defined(MOZ_WIDGET_ANDROID)
11078   value: true
11079 #else
11080   value: false
11081 #endif
11082   mirror: always
11084 - name: media.webrtc.hw.h264.enabled
11085   type: bool
11086 #if defined(MOZ_WIDGET_ANDROID)
11087   value: true
11088 #else
11089   value: false
11090 #endif
11091   mirror: always
11093  # If true, then we require explicit approval from the embedding app (ex. Fenix)
11094  # on GeckoView to know if we can allow audible, inaudible media or both kinds
11095  # of media to autoplay.
11096 - name: media.geckoview.autoplay.request
11097   type: bool
11098   value: false
11099   mirror: always
11101  # This is used in testing only, in order to skip the prompting process. This
11102  # pref works only when enabling the pref `media.geckoview.autoplay.request`.
11103  # 0=prompt as normal, 1=allow all, 2=deny all, 3=allow audible request,
11104  # 4=deny audible request, 5=allow inaudible request, 6=deny inaudible request.
11105  # 7=leave all requests pending.
11106 - name: media.geckoview.autoplay.request.testing
11107   type: uint32_t
11108   value: 0
11109   mirror: always
11111 - name: media.mediacontrol.testingevents.enabled
11112   type: bool
11113   value: false
11114   mirror: always
11116 #if defined(XP_MACOSX)
11117 - name: media.macos.screenrecording.oscheck.enabled
11118   type: bool
11119   value: true
11120   mirror: always
11121 #endif
11123 # When the playback rate of an HTMLMediaElement is greater than this value, or
11124 # lower than the inverse of this value, the audio is muted.
11125 - name: media.audio.playbackrate.muting_threshold
11126   type: uint32_t
11127   value: 8
11128   mirror: always
11130 # The interval of time in milliseconds between attempts to reopen any
11131 # previously unavailable audio device.
11132 - name: media.audio.device.retry.ms
11133   type: RelaxedAtomicInt32
11134   value: 1000
11135   mirror: always
11137 # Time-stretch algorithm single processing sequence length in milliseconds.
11138 # This determines to how long sequences the original sound is chopped in the
11139 # time-stretch algorithm.
11140 - name: media.audio.playbackrate.soundtouch_sequence_ms
11141   type: RelaxedAtomicInt32
11142   value: 10
11143   mirror: always
11145 # Time-stretch algorithm seeking window length in milliseconds for algorithm
11146 # that finds the best possible overlapping location. This determines from how
11147 # wide window the algorithm may look for an optimal joining location when mixing
11148 # the sound sequences back together.
11149 - name: media.audio.playbackrate.soundtouch_seekwindow_ms
11150   type: RelaxedAtomicInt32
11151   value: 15
11152   mirror: always
11154 # Time-stretch algorithm overlap length in milliseconds. When the chopped sound
11155 # sequences are mixed back together, to form a continuous sound stream, this
11156 # parameter defines over how long period the two consecutive sequences are let
11157 # to overlap each other.
11158 - name: media.audio.playbackrate.soundtouch_overlap_ms
11159   type: RelaxedAtomicInt32
11160   value: 8
11161   mirror: always
11163 # The duration, in milliseconds, of decoded audio to keep around in the
11164 # AudioSink ring-buffer. New decoding operations are started when this limit is
11165 # reached. The total size of the ring-buffer is slightly bigger than this.
11166 - name: media.audio.audiosink.threshold_ms
11167   type: AtomicFloat
11168 #if defined(XP_MACOSX) && defined(MOZ_AARCH64)
11169   value: 1000.0
11170 #else
11171   value: 200.0
11172 #endif
11173   mirror: always
11175 - name: media.video-wakelock
11176   type: RelaxedAtomicBool
11177   value: true
11178   mirror: always
11180 # On Mac, enables using the `<Brand> Media Plugin Helper` executable as the
11181 # GMP child process instead of the plugin-container executable.
11182 #if defined(XP_MACOSX)
11183 -   name: media.plugin_helper_process.enabled
11184     type: RelaxedAtomicBool
11185     value: true
11186     mirror: always
11187 #endif
11189 # Bug 1860492 - Deprecate and remove theora
11190 -  name: media.theora.enabled
11191    type: RelaxedAtomicBool
11192    value: @IS_NOT_NIGHTLY_BUILD@
11193    mirror: always
11195 #---------------------------------------------------------------------------
11196 # Prefs starting with "memory."
11197 #---------------------------------------------------------------------------
11199 - name: memory.phc.enabled
11200   type: bool
11201   value: @IS_EARLY_BETA_OR_EARLIER@
11202   mirror: always
11204 - name: memory.phc.min_ram_mb
11205   type: uint32_t
11206   value: 8000
11207   mirror: always
11209 - name: memory.phc.avg_delay.first
11210   type: uint32_t
11211   value: 65536
11212   mirror: always
11214 - name: memory.phc.avg_delay.normal
11215   type: uint32_t
11216   value: 16384
11217   mirror: always
11219 - name: memory.phc.avg_delay.page_reuse
11220   type: uint32_t
11221   value: 262144
11222   mirror: always
11224 #---------------------------------------------------------------------------
11225 # Prefs starting with "midi."
11226 #---------------------------------------------------------------------------
11228 - name: midi.testing
11229   type: RelaxedAtomicBool
11230   value: false
11231   mirror: always
11233 #---------------------------------------------------------------------------
11234 # Prefs starting with "mousewheel."
11235 #---------------------------------------------------------------------------
11237 # This affects how line scrolls from wheel events will be accelerated.
11238 # Factor to be multiplied for constant acceleration.
11239 - name: mousewheel.acceleration.factor
11240   type: RelaxedAtomicInt32
11241   value: 10
11242   mirror: always
11244 # This affects how line scrolls from wheel events will be accelerated.
11245 # Number of mousewheel clicks when acceleration starts.
11246 # Acceleration can be turned off if pref is set to -1.
11247 - name: mousewheel.acceleration.start
11248   type: RelaxedAtomicInt32
11249   value: -1
11250   mirror: always
11252 # Auto-dir is a feature which treats any single-wheel scroll as a scroll in the
11253 # only one scrollable direction if the target has only one scrollable
11254 # direction. For example, if the user scrolls a vertical wheel inside a target
11255 # which is horizontally scrollable but vertical unscrollable, then the vertical
11256 # scroll is converted to a horizontal scroll for that target.
11257 # Note that auto-dir only takes effect for |mousewheel.*.action|s and
11258 # |mousewheel.*.action.override_x|s whose values are 1.
11259 - name: mousewheel.autodir.enabled
11260   type: bool
11261   value: false
11262   mirror: always
11264 # When a wheel scroll is converted due to auto-dir, which side the converted
11265 # scroll goes towards is decided by one thing called "honoured target". If the
11266 # content of the honoured target horizontally starts from right to left, then
11267 # an upward scroll maps to a rightward scroll and a downward scroll maps to a
11268 # leftward scroll; otherwise, an upward scroll maps to a leftward scroll and a
11269 # downward scroll maps to a rightward scroll.
11270 # If this pref is set to false, then consider the scrolling target as the
11271 # honoured target.
11272 # If set to true, then consider the root element in the document where the
11273 # scrolling target is as the honoured target. But note that there's one
11274 # exception: for targets in an HTML document, the real root element(I.e. the
11275 # <html> element) is typically not considered as a root element, but the <body>
11276 # element is typically considered as a root element. If there is no <body>
11277 # element, then consider the <html> element instead.
11278 - name: mousewheel.autodir.honourroot
11279   type: bool
11280   value: false
11281   mirror: always
11283 - name: mousewheel.system_scroll_override.enabled
11284   type: RelaxedAtomicBool
11285 #if defined(XP_WIN) || defined(MOZ_WIDGET_GTK)
11286   value: true
11287 #else
11288   value: false
11289 #endif
11290   mirror: always
11292 # Prefs for overriding the system mouse wheel scrolling speed on
11293 # content of the web pages.  When
11294 # "mousewheel.system_scroll_override.enabled" is true and the
11295 # system scrolling speed isn't customized by the user, the content scrolling
11296 # speed is multiplied by the following factors.  The value will be used as
11297 # 1/100.  E.g., 200 means 2.00.
11298 # NOTE: Even if "mousewheel.system_scroll_override.enabled" is
11299 # true, when Gecko detects the user customized the system scrolling speed
11300 # settings, the override isn't executed.
11301 - name: mousewheel.system_scroll_override.horizontal.factor
11302   type: RelaxedAtomicInt32
11303   value: 200
11304   mirror: always
11305 - name: mousewheel.system_scroll_override.vertical.factor
11306   type: RelaxedAtomicInt32
11307   value: 200
11308   mirror: always
11310 # Mouse wheel scroll transaction is held even if the mouse cursor is moved.
11311 - name: mousewheel.transaction.ignoremovedelay
11312   type: RelaxedAtomicInt32
11313   value: 100
11314   mirror: always
11316 # Mouse wheel scroll transaction period of time (in milliseconds).
11317 - name: mousewheel.transaction.timeout
11318   type: RelaxedAtomicInt32
11319   value: 1500
11320   mirror: always
11322 # Mouse wheel scroll position is determined by GetMessagePos rather than
11323 # LPARAM msg value
11324 - name: mousewheel.ignore_cursor_position_in_lparam
11325   type: RelaxedAtomicBool
11326   value: false
11327   mirror: always
11329 # If line-height is lower than this value (in device pixels), 1 line scroll
11330 # scrolls this height.
11331 - name: mousewheel.min_line_scroll_amount
11332   type: int32_t
11333   value: 5
11334   mirror: always
11336 # Timeout period (in milliseconds) when the mouse wheel event is no longer
11337 # handled as the same series.
11338 - name: mousewheel.scroll_series_timeout
11339   type: RelaxedAtomicInt32
11340   value: 80
11341   mirror: always
11343 #---------------------------------------------------------------------------
11344 # Prefs starting with "mozilla."
11345 #---------------------------------------------------------------------------
11347 - name: mozilla.widget.raise-on-setfocus
11348   type: bool
11349   value: true
11350   mirror: once
11352 #---------------------------------------------------------------------------
11353 # Prefs starting with "network."
11354 #---------------------------------------------------------------------------
11356 # Force less-secure NTLMv1 when needed (NTLMv2 is the default).
11357 - name: network.auth.force-generic-ntlm-v1
11358   type: RelaxedAtomicBool
11359   value: false
11360   mirror: always
11362 # Sub-resources HTTP-authentication:
11363 #   0 - don't allow sub-resources to open HTTP authentication credentials
11364 #       dialogs
11365 #   1 - allow sub-resources to open HTTP authentication credentials dialogs,
11366 #       but don't allow it for cross-origin sub-resources
11367 #   2 - allow the cross-origin authentication as well.
11368 - name: network.auth.subresource-http-auth-allow
11369   type: uint32_t
11370   value: 2
11371   mirror: always
11373 # Sub-resources HTTP-authentication for cross-origin images:
11374 # - true: It is allowed to present http auth. dialog for cross-origin images.
11375 # - false: It is not allowed.
11376 # If network.auth.subresource-http-auth-allow has values 0 or 1 this pref does
11377 # not have any effect.
11378 - name: network.auth.subresource-img-cross-origin-http-auth-allow
11379   type: bool
11380   value: false
11381   mirror: always
11383 # Resources that are triggered by some non-web-content:
11384 # - true: They are allow to present http auth. dialog
11385 # - false: They are not allow to present http auth. dialog.
11386 - name: network.auth.non-web-content-triggered-resources-http-auth-allow
11387   type: bool
11388   value: false
11389   mirror: always
11391 # Whether to show anti-spoof confirmation prompts when navigating to a url
11392 # with userinfo
11393 - name: network.auth.confirmAuth.enabled
11394   type: bool
11395   value: true
11396   mirror: always
11398 # Whether to display auth prompts if X-Frame-Options header will block loading
11399 # page
11400 - name: network.auth.supress_auth_prompt_for_XFO_failures
11401   type: bool
11402   value: true
11403   mirror: always
11405 # Whether to use challenges in the most secure order. See bug 650091.
11406 - name: network.auth.choose_most_secure_challenge
11407   type: RelaxedAtomicBool
11408   value: true
11409   mirror: always
11411 # whether to redirect the channel for auth redirects. See Bug 1820807
11412 - name: network.auth.use_redirect_for_retries
11413   type: RelaxedAtomicBool
11414   value: @IS_EARLY_BETA_OR_EARLIER@
11415   mirror: always
11417 # Whether to allow truncated brotli with empty output. This also fixes
11418 # throwing an erroring when receiving highly compressed brotli files when
11419 # no content type is specified (Bug 1715401). This pref can be removed after
11420 # some time (Bug 1841061)
11421 - name: network.compress.allow_truncated_empty_brotli
11422   type: RelaxedAtomicBool
11423   value: true
11424   mirror: always
11426 # See the full list of values in nsICookieService.idl.
11427 - name: network.cookie.cookieBehavior
11428   type: RelaxedAtomicInt32
11429   value: 0 # accept all cookies
11430   mirror: always
11432 # The cookieBehavior to be used in Private Browsing mode.
11433 - name: network.cookie.cookieBehavior.pbmode
11434   type: RelaxedAtomicInt32
11435   value: 0 # accept all cookies
11436   mirror: always
11438 # Changes cookieBehavior=5 to block third-party cookies by default
11439 - name: network.cookie.cookieBehavior.optInPartitioning
11440   type: bool
11441   value: false
11442   mirror: always
11444 # Stale threshold for cookies in seconds.
11445 - name: network.cookie.staleThreshold
11446   type: uint32_t
11447   value: 60
11448   mirror: always
11450 - name: network.cookie.sameSite.laxByDefault
11451   type: RelaxedAtomicBool
11452   value: false
11453   mirror: always
11455 # lax-by-default 2 minutes tollerance for unsafe methods. The value is in seconds.
11456 - name: network.cookie.sameSite.laxPlusPOST.timeout
11457   type: uint32_t
11458   value: 120
11459   mirror: always
11461 # For lax-by-default cookies ignore cross-site redirects when the final
11462 # redirect is same-site again.
11463 # https://github.com/httpwg/http-extensions/issues/2104
11464 - name: network.cookie.sameSite.laxByDefault.allowBoomerangRedirect
11465   type: bool
11466   value: true
11467   mirror: always
11469 - name: network.cookie.sameSite.noneRequiresSecure
11470   type: bool
11471   value: @IS_EARLY_BETA_OR_EARLIER@
11472   mirror: always
11474 - name: network.cookie.sameSite.schemeful
11475   type: bool
11476   value: false
11477   mirror: always
11479 - name: network.cookie.thirdparty.sessionOnly
11480   type: bool
11481   value: false
11482   mirror: always
11484 - name: network.cookie.thirdparty.nonsecureSessionOnly
11485   type: bool
11486   value: false
11487   mirror: always
11489 # If we should not store "persistent" cookies at all, i.e., make the
11490 # "persistent" storage be like "private" storage.  This value is only read when
11491 # instantiating persistent storage for the cookie service, which usually only
11492 # happens when the cookie service singleton is created.
11493 - name: network.cookie.noPersistentStorage
11494   type: bool
11495   value: false
11496   mirror: always
11498 # If true then any cookies containing unicode will be rejected
11499 - name: network.cookie.blockUnicode
11500   type: RelaxedAtomicBool
11501   value: false
11502   mirror: always
11504 # If true cookies loaded from the sqlite DB that have a creation or
11505 # last accessed time that is in the future will be fixed and the
11506 # timestamps will be set to the current time.
11507 - name: network.cookie.fixup_on_db_load
11508   type: RelaxedAtomicBool
11509   value: true
11510   mirror: always
11512 # If true content types of multipart/x-mixed-replace cannot set a cookie
11513 - name: network.cookie.prevent_set_cookie_from_multipart
11514   type: RelaxedAtomicBool
11515   value: true
11516   mirror: always
11518 # If we should attempt to race the cache and network.
11519 - name: network.http.rcwn.enabled
11520   type: bool
11521   value: true
11522   mirror: always
11524 - name: network.http.rcwn.cache_queue_normal_threshold
11525   type: uint32_t
11526   value: 8
11527   mirror: always
11529 - name: network.http.rcwn.cache_queue_priority_threshold
11530   type: uint32_t
11531   value: 2
11532   mirror: always
11534 # We might attempt to race the cache with the network only if a resource
11535 # is smaller than this size.
11536 - name: network.http.rcwn.small_resource_size_kb
11537   type: uint32_t
11538   value: 256
11539   mirror: always
11541 - name: network.http.rcwn.min_wait_before_racing_ms
11542   type: uint32_t
11543   value: 0
11544   mirror: always
11546 - name: network.http.rcwn.max_wait_before_racing_ms
11547   type: uint32_t
11548   value: 500
11549   mirror: always
11551 # false=real referer, true=spoof referer (use target URI as referer).
11552 - name: network.http.referer.spoofSource
11553   type: bool
11554   value: false
11555   mirror: always
11557 # Check whether we need to hide referrer when leaving a .onion domain.
11558 # false=allow onion referer, true=hide onion referer (use empty referer).
11559 - name: network.http.referer.hideOnionSource
11560   type: bool
11561   value: false
11562   mirror: always
11564 # Include an origin header on non-GET and non-HEAD requests regardless of CORS.
11565 # 0=never send, 1=send when same-origin only, 2=always send.
11566 - name: network.http.sendOriginHeader
11567   type: uint32_t
11568   value: 2
11569   mirror: always
11571 # Whether to respect the redirected-tainted origin flag
11572 # https://fetch.spec.whatwg.org/#concept-request-tainted-origin
11573 - name: network.http.origin.redirectTainted
11574   type: bool
11575   value: true
11576   mirror: always
11578 # Whether to strip auth headers for redirected fetch/xhr channels
11579 # https://fetch.spec.whatwg.org/#http-redirect-fetch
11580 - name: network.fetch.redirect.stripAuthHeader
11581   type: RelaxedAtomicBool
11582   value: true
11583   mirror: always
11585 # If true, cross origin fetch (or XHR) requests would be keyed
11586 # with a different cache key.
11587 - name: network.fetch.cache_partition_cross_origin
11588   type: RelaxedAtomicBool
11589   value: true
11590   mirror: always
11592 # If true, when browser code itself makes network requests, default to
11593 # omitting credentials.
11594 - name: network.fetch.systemDefaultsToOmittingCredentials
11595   type: RelaxedAtomicBool
11596   value: true
11597   mirror: always
11599 # Whether to strip auth headers for redirected http channels
11600 # https://fetch.spec.whatwg.org/#http-redirect-fetch
11601 - name: network.http.redirect.stripAuthHeader
11602   type: RelaxedAtomicBool
11603   value: true
11604   mirror: always
11606 # Prefs allowing granular control of referers.
11607 # 0=don't send any, 1=send only on clicks, 2=send on image requests as well
11608 - name: network.http.sendRefererHeader
11609   type: uint32_t
11610   value: 2
11611   mirror: always
11612   do_not_use_directly: true
11614 # Whether to add urgency and incremental to request headers
11615 - name: network.http.priority_header.enabled
11616   type: bool
11617   value: true
11618   mirror: always
11620 # The maximum allowed length for a referrer header - 4096 default.
11621 # 0 means no limit.
11622 - name: network.http.referer.referrerLengthLimit
11623   type: uint32_t
11624   value: 4096
11625   mirror: always
11627 #  0=always send, 1=send iff base domains match, 2=send iff hosts match.
11628 - name: network.http.referer.XOriginPolicy
11629   type: uint32_t
11630   value: 0
11631   mirror: always
11632   do_not_use_directly: true
11634 # 0=full URI, 1=scheme+host+port+path, 2=scheme+host+port.
11635 - name: network.http.referer.trimmingPolicy
11636   type: uint32_t
11637   value: 0
11638   mirror: always
11639   do_not_use_directly: true
11641 # 0=full URI, 1=scheme+host+port+path, 2=scheme+host+port.
11642 - name: network.http.referer.XOriginTrimmingPolicy
11643   type: uint32_t
11644   value: 0
11645   mirror: always
11646   do_not_use_directly: true
11648 # Set the default Referrer Policy; to be used unless overriden by the site.
11649 # 0=no-referrer, 1=same-origin, 2=strict-origin-when-cross-origin,
11650 # 3=no-referrer-when-downgrade.
11651 - name: network.http.referer.defaultPolicy
11652   type: uint32_t
11653   value: 2
11654   mirror: always
11656 # Set the default Referrer Policy applied to third-party trackers when the
11657 # default cookie policy is set to reject third-party trackers, to be used
11658 # unless overriden by the site.
11659 # 0=no-referrer, 1=same-origin, 2=strict-origin-when-cross-origin,
11660 # 3=no-referrer-when-downgrade.
11661 # Trim referrers from trackers to origins by default.
11662 - name: network.http.referer.defaultPolicy.trackers
11663   type: uint32_t
11664   value: 2
11665   mirror: always
11667 # Set the Private Browsing Default Referrer Policy, to be used
11668 # unless overriden by the site.
11669 # 0=no-referrer, 1=same-origin, 2=strict-origin-when-cross-origin,
11670 # 3=no-referrer-when-downgrade.
11671 - name: network.http.referer.defaultPolicy.pbmode
11672   type: uint32_t
11673   value: 2
11674   mirror: always
11676 # Set to ignore referrer policies which is less restricted than the default for
11677 # cross-site requests, including 'unsafe-url', 'no-referrer-when-downgrade' and
11678 # 'origin-when-cross-origin'.
11679 - name: network.http.referer.disallowCrossSiteRelaxingDefault
11680   type: bool
11681   value: true
11682   mirror: always
11684 # Whether we ignore less restricted referrer policies for top navigations.
11685 - name: network.http.referer.disallowCrossSiteRelaxingDefault.top_navigation
11686   type: bool
11687   value: false
11688   mirror: always
11691 # Set to ignore referrer policies which is less restricted than the default for
11692 # cross-site requests in the private browsing mode, including 'unsafe-url',
11693 # 'no-referrer-when-downgrade' and 'origin-when-cross-origin'.
11694 - name: network.http.referer.disallowCrossSiteRelaxingDefault.pbmode
11695   type: bool
11696   value: true
11697   mirror: always
11699 # Whether we ignore less restricted referrer policies for top navigations in the
11700 # private browsing mode.
11701 - name: network.http.referer.disallowCrossSiteRelaxingDefault.pbmode.top_navigation
11702   type: bool
11703   value: true
11704   mirror: always
11706 # Set the Private Browsing Default Referrer Policy applied to third-party
11707 # trackers when the default cookie policy is set to reject third-party
11708 # trackers, to be used unless overriden by the site.
11709 # 0=no-referrer, 1=same-origin, 2=strict-origin-when-cross-origin,
11710 # 3=no-referrer-when-downgrade.
11711 # No need to change this pref for trimming referrers from trackers since in
11712 # private windows we already trim all referrers to origin only.
11713 - name: network.http.referer.defaultPolicy.trackers.pbmode
11714   type: uint32_t
11715   value: 2
11716   mirror: always
11718 # Whether certain http header values should be censored out in logs.
11719 # Specifically filters out "authorization" and "proxy-authorization".
11720 - name: network.http.sanitize-headers-in-logs
11721   type: RelaxedAtomicBool
11722   value: true
11723   mirror: always
11725 # Hard code the User-Agent string's CPU architecture. This pref can be removed
11726 # after we're confident there are no webcompat problems.
11728 # For now, don't enable this pref for x86 Linux builds until Firefox
11729 # download page bugs https://github.com/mozilla/bedrock/issues/12966 and
11730 # https://github.com/mozilla/bedrock/issues/14012 are fixed.
11732 # Enable for:
11733 # * Android (any architecture)
11734 # * Linux (any architecture except x86)
11735 # * Other Unix-like platforms except macOS (any architecture)
11736 - name: network.http.useragent.freezeCpu
11737   type: bool
11738 # (When reading the next line, know that preprocessor.py doesn't
11739 # understand parentheses, but && is higher precedence than ||.)
11740 #if defined(ANDROID) || defined(XP_LINUX) && !defined(__i386__) || defined(XP_UNIX) && !defined(XP_LINUX) && !defined(XP_MACOSX)
11741   value: true
11742 #else
11743   value: false
11744 #endif
11745   mirror: always
11747 # Whether or not we use Windows for SSO to Microsoft sites.
11748 - name: network.http.windows-sso.enabled
11749   type: RelaxedAtomicBool
11750   value: false
11751   mirror: always
11753 # Whether windows-sso is enabled for the default (0) container.
11754 # To enable SSO for additional containers, add a new pref like
11755 # `network.http.windows-sso.container-enabled.${containerId}` = true
11756 - name: network.http.windows-sso.container-enabled.0
11757   type: bool
11758   value: true
11759   mirror: never
11761 # The factor by which to increase the keepalive timeout when the
11762 # NS_HTTP_LARGE_KEEPALIVE flag is used for a connection
11763 - name: network.http.largeKeepaliveFactor
11764   type: RelaxedAtomicUint32
11765   value: 10
11766   mirror: always
11768 # Max size, in bytes, for received HTTP response header.
11769 - name: network.http.max_response_header_size
11770   type: RelaxedAtomicUint32
11771   value: 393216
11772   mirror: always
11774 # This preference, if true, causes all UTF-8 domain names to be normalized to
11775 # punycode.  The intention is to allow UTF-8 domain names as input, but never
11776 # generate them from punycode.
11777 - name: network.IDN_show_punycode
11778   type: RelaxedAtomicBool
11779   value: false
11780   mirror: always
11782 # If set to true, IOService.offline depends on IOService.connectivity.
11783 - name: network.offline-mirrors-connectivity
11784   type: RelaxedAtomicBool
11785   value: false
11786   mirror: always
11788 # If set to true, disallow localhost connections when offline.
11789 - name: network.disable-localhost-when-offline
11790   type: RelaxedAtomicBool
11791   value: false
11792   mirror: always
11794 # Enables the predictive service.
11795 - name: network.predictor.enabled
11796   type: bool
11797   value: true
11798   mirror: always
11800 # Set true to allow resolving proxy for localhost
11801 - name: network.proxy.allow_hijacking_localhost
11802   type: RelaxedAtomicBool
11803   value: false
11804   mirror: always
11806 # This pref will still treat localhost URLs as secure even when hijacked
11807 # during testing. This is necessary for automated testing to check that we
11808 # actually treat localhost as a secure origin.
11809 - name: network.proxy.testing_localhost_is_secure_when_hijacked
11810   type: RelaxedAtomicBool
11811   value: false
11812   mirror: always
11814 # Allow CookieJarSettings to be unblocked for channels without a document.
11815 # This is for testing only.
11816 - name: network.cookieJarSettings.unblocked_for_testing
11817   type: bool
11818   value: false
11819   mirror: always
11821 - name: network.predictor.enable-hover-on-ssl
11822   type: bool
11823   value: false
11824   mirror: always
11826 - name: network.predictor.enable-prefetch
11827   type: bool
11828   value: @IS_EARLY_BETA_OR_EARLIER@
11829   mirror: always
11831 - name: network.predictor.page-degradation.day
11832   type: int32_t
11833   value: 0
11834   mirror: always
11835 - name: network.predictor.page-degradation.week
11836   type: int32_t
11837   value: 5
11838   mirror: always
11839 - name: network.predictor.page-degradation.month
11840   type: int32_t
11841   value: 10
11842   mirror: always
11843 - name: network.predictor.page-degradation.year
11844   type: int32_t
11845   value: 25
11846   mirror: always
11847 - name: network.predictor.page-degradation.max
11848   type: int32_t
11849   value: 50
11850   mirror: always
11852 - name: network.predictor.subresource-degradation.day
11853   type: int32_t
11854   value: 1
11855   mirror: always
11856 - name: network.predictor.subresource-degradation.week
11857   type: int32_t
11858   value: 10
11859   mirror: always
11860 - name: network.predictor.subresource-degradation.month
11861   type: int32_t
11862   value: 25
11863   mirror: always
11864 - name: network.predictor.subresource-degradation.year
11865   type: int32_t
11866   value: 50
11867   mirror: always
11868 - name: network.predictor.subresource-degradation.max
11869   type: int32_t
11870   value: 100
11871   mirror: always
11873 - name: network.predictor.prefetch-rolling-load-count
11874   type: int32_t
11875   value: 10
11876   mirror: always
11878 - name: network.predictor.prefetch-min-confidence
11879   type: int32_t
11880   value: 100
11881   mirror: always
11882 - name: network.predictor.preconnect-min-confidence
11883   type: int32_t
11884   value: 90
11885   mirror: always
11886 - name: network.predictor.preresolve-min-confidence
11887   type: int32_t
11888   value: 60
11889   mirror: always
11891 - name: network.predictor.prefetch-force-valid-for
11892   type: int32_t
11893   value: 10
11894   mirror: always
11896 - name: network.predictor.max-resources-per-entry
11897   type: int32_t
11898   value: 100
11899   mirror: always
11901 # This is selected in concert with max-resources-per-entry to keep memory
11902 # usage low-ish. The default of the combo of the two is ~50k.
11903 - name: network.predictor.max-uri-length
11904   type: uint32_t
11905   value: 500
11906   mirror: always
11908 # A testing flag.
11909 - name: network.predictor.doing-tests
11910   type: bool
11911   value: false
11912   mirror: always
11914 # Indicates whether the `fetchpriority` attribute for elements which support it
11915 # (e.g. `<script>`) is enabled.
11916 - name: network.fetchpriority.enabled
11917   type: RelaxedAtomicBool
11918   value: false
11919   mirror: always
11921 # Adjustments to apply to the internal priority of <link rel=preload as=script
11922 # fetchpriority=low/high/auto> and equivalent Link header with respect to the
11923 # case when network.fetchpriority is disabled.
11924 # - When the flag is disabled, Gecko currently sets priority to HIGHEST.
11925 # - When the flag is enabled, it respectively maps to LOW/HIGHEST/HIGHEST.
11926 - name: network.fetchpriority.adjustments.link-preload-script.low
11927   type: int32_t
11928   value: 30
11929   mirror: always
11930 - name: network.fetchpriority.adjustments.link-preload-script.high
11931   type: int32_t
11932   value: 0
11933   mirror: always
11934 - name: network.fetchpriority.adjustments.link-preload-script.auto
11935   type: int32_t
11936   value: 0
11937   mirror: always
11939 # Adjustments to apply to the internal priority of <script type="module"
11940 # fetchpriority=low/high/auto> with respect to the case when
11941 # network.fetchpriority is disabled.
11942 # - When the flag is disabled, Gecko currently sets priority to NORMAL.
11943 # - When the flag is enabled, it respectively maps to LOW/HIGH/NORMAL.
11944 - name: network.fetchpriority.adjustments.module-script.low
11945   type: int32_t
11946   value: 10
11947   mirror: always
11948 - name: network.fetchpriority.adjustments.module-script.high
11949   type: int32_t
11950   value: -10
11951   mirror: always
11952 - name: network.fetchpriority.adjustments.module-script.auto
11953   type: int32_t
11954   value: 0
11955   mirror: always
11957 # Adjustments to apply to the internal priority of async or defer <script
11958 # fetchpriority=low/high/auto> with respect to the case when
11959 # network.fetchpriority is disabled.
11960 # - When the flag is disabled, Gecko currently sets priority to NORMAL.
11961 # - When the flag is enabled, it respectively maps to LOW/HIGH/NORMAL.
11962 - name: network.fetchpriority.adjustments.async-or-defer-script.low
11963   type: int32_t
11964   value: 10
11965   mirror: always
11966 - name: network.fetchpriority.adjustments.async-or-defer-script.high
11967   type: int32_t
11968   value: -10
11969   mirror: always
11970 - name: network.fetchpriority.adjustments.async-or-defer-script.auto
11971   type: int32_t
11972   value: 0
11973   mirror: always
11975 # Adjustments to apply to the internal priority of <script
11976 # fetchpriority=low/high/auto> inside the <head>, with respect to the case when
11977 # network.fetchpriority is disabled.
11978 # - When the flag is disabled, Gecko currently sets priority to NORMAL.
11979 # - When the flag is enabled, it respectively maps to LOW/HIGH/NORMAL.
11980 - name: network.fetchpriority.adjustments.script-in-head.low
11981   type: int32_t
11982   value: 10
11983   mirror: always
11984 - name: network.fetchpriority.adjustments.script-in-head.high
11985   type: int32_t
11986   value: -10
11987   mirror: always
11988 - name: network.fetchpriority.adjustments.script-in-head.auto
11989   type: int32_t
11990   value: 0
11991   mirror: always
11993 # Adjustments to apply to the internal priority of <script
11994 # fetchpriority=low/high/auto> (other than the scripts handled above) with
11995 # respect to the case when network.fetchpriority is disabled.
11996 # - When the flag is disabled, Gecko currently sets priority to NORMAL.
11997 # - When the flag is enabled, it respectively maps to LOW/HIGH/NORMAL.
11998 - name: network.fetchpriority.adjustments.other-script.low
11999   type: int32_t
12000   value: 10
12001   mirror: always
12002 - name: network.fetchpriority.adjustments.other-script.high
12003   type: int32_t
12004   value: -10
12005   mirror: always
12006 - name: network.fetchpriority.adjustments.other-script.auto
12007   type: int32_t
12008   value: 0
12009   mirror: always
12011 # Adjustments to apply to the internal priority of <link rel=preload as=font
12012 # fetchpriority=low/high/auto> with respect to the case when
12013 # network.fetchpriority is disabled.
12014 # - When the flag is disabled, Gecko currently sets priority to HIGH.
12015 # - When the flag is enabled, it respectively maps to LOW/HIGH/HIGH.
12016 - name: network.fetchpriority.adjustments.link-preload-font.low
12017   type: int32_t
12018   value: 20
12019   mirror: always
12020 - name: network.fetchpriority.adjustments.link-preload-font.high
12021   type: int32_t
12022   value: 0
12023   mirror: always
12024 - name: network.fetchpriority.adjustments.link-preload-font.auto
12025   type: int32_t
12026   value: 0
12027   mirror: always
12029 # Adjustments to apply to the internal priority of <link rel=preload as=fetch
12030 # fetchpriority=low/high/auto> with respect to the case when
12031 # network.fetchpriority is disabled.
12032 # - When the flag is disabled, Gecko currently sets priority to NORMAL.
12033 # - When the flag is enabled, it respectively maps to LOW/HIGH/NORMAL.
12034 - name: network.fetchpriority.adjustments.link-preload-fetch.low
12035   type: int32_t
12036   value: 10
12037   mirror: always
12038 - name: network.fetchpriority.adjustments.link-preload-fetch.high
12039   type: int32_t
12040   value: -10
12041   mirror: always
12042 - name: network.fetchpriority.adjustments.link-preload-fetch.auto
12043   type: int32_t
12044   value: 0
12045   mirror: always
12047 # Adjustments to apply to the internal priority of deferred style for
12048 # fetchpriority=low/high/auto> with respect to the case when
12049 # network.fetchpriority is disabled.
12050 # - When the flag is disabled, Gecko currently sets priority to NORMAL.
12051 # - When the flag is enabled, it respectively maps to LOW/NORMAL/NORMAL.
12052 - name: network.fetchpriority.adjustments.deferred-style.low
12053   type: int32_t
12054   value: 10
12055   mirror: always
12056 - name: network.fetchpriority.adjustments.deferred-style.high
12057   type: int32_t
12058   value: 0
12059   mirror: always
12060 - name: network.fetchpriority.adjustments.deferred-style.auto
12061   type: int32_t
12062   value: 0
12063   mirror: always
12065 # Adjustments to apply to the internal priority of <link rel=preload as=style
12066 # fetchpriority=low/high/auto> with respect to the case when
12067 # network.fetchpriority is disabled.
12068 # - When the flag is disabled, Gecko currently sets priority to HIGHEST.
12069 # - When the flag is enabled, it respectively maps to HIGH/HIGHEST/HIGHEST.
12070 - name: network.fetchpriority.adjustments.link-preload-style.low
12071   type: int32_t
12072   value: 10
12073   mirror: always
12074 - name: network.fetchpriority.adjustments.link-preload-style.high
12075   type: int32_t
12076   value: 0
12077   mirror: always
12078 - name: network.fetchpriority.adjustments.link-preload-style.auto
12079   type: int32_t
12080   value: 0
12081   mirror: always
12083 # Adjustments to apply to the internal priority of other non-deferred
12084 # stylesheet load for fetchpriority=low/high/auto with respect to the case when
12085 # network.fetchpriority is disabled.
12086 # - When the flag is disabled, Gecko currently sets priority to NORMAL.
12087 # - When the flag is enabled, it respectively maps to HIGH/HIGHEST/NORMAL.
12088 - name: network.fetchpriority.adjustments.non-deferred-style.low
12089   type: int32_t
12090   value: 0
12091   mirror: always
12092 - name: network.fetchpriority.adjustments.non-deferred-style.high
12093   type: int32_t
12094   value: -20
12095   mirror: always
12096 - name: network.fetchpriority.adjustments.non-deferred-style.auto
12097   type: int32_t
12098   value: 0
12099   mirror: always
12101 # Adjustments to apply to the internal priority of gloable fetch API
12102 # for fetchpriority=low/high/auto with respect to the case when
12103 # network.fetchpriority is disabled.
12104 # - When the flag is disabled, Gecko currently sets priority to NORMAL.
12105 # - When the flag is enabled, it respectively maps to LOW/HIGH/NORMAL.
12106 - name: network.fetchpriority.adjustments.global-fetch-api.low
12107   type: RelaxedAtomicInt32
12108   value: 10
12109   mirror: always
12110 - name: network.fetchpriority.adjustments.global-fetch-api.high
12111   type: RelaxedAtomicInt32
12112   value: -10
12113   mirror: always
12114 - name: network.fetchpriority.adjustments.global-fetch-api.auto
12115   type: RelaxedAtomicInt32
12116   value: 0
12117   mirror: always
12119 # Adjustments to apply to the internal priority of <link rel=preload as=images
12120 # fetchpriority=low/high/auto> and <img fetchpriority=low/high/auto> with
12121 # respect to the case when network.fetchpriority is disabled.
12122 # - When the flag is disabled, Gecko currently sets priority to LOW.
12123 # - When the flag is enabled, it respectively maps to LOW/LOW/HIGH.
12124 # The image code can currently further adjust the priority for image load, see
12125 # imgRequest::BoostPriority and AdjustPriorityForImages.
12126 - name: network.fetchpriority.adjustments.images.low
12127   type: int32_t
12128   value: 0
12129   mirror: always
12130 - name: network.fetchpriority.adjustments.images.high
12131   type: int32_t
12132   value: -20
12133   mirror: always
12134 - name: network.fetchpriority.adjustments.images.auto
12135   type: int32_t
12136   value: 0
12137   mirror: always
12139 # Enables `<link rel="preconnect">` tag and `Link: rel=preconnect` response header
12140 # handling.
12141 - name: network.preconnect
12142   type: RelaxedAtomicBool
12143   value: true
12144   mirror: always
12146 # Enables `<link rel="modulepreload">` tag and `Link: rel=modulepreload`
12147 # response header handling.
12148 - name: network.modulepreload
12149   type: RelaxedAtomicBool
12150   value: true
12151   mirror: always
12153 # Enable 103 Early Hint status code (RFC 8297)
12154 - name: network.early-hints.enabled
12155   type: RelaxedAtomicBool
12156   value: true
12157   mirror: always
12159 # Enable `Link: rel=preconnect` in 103 Early Hint response.
12160 - name: network.early-hints.preconnect.enabled
12161   type: RelaxedAtomicBool
12162   value: true
12163   mirror: always
12165 # The max number of speculative connections we allow for `Link: rel=preconnect`.
12166 # When 0, the speculative connection created due to `Link: rel=preconnect` will
12167 # be limited by "network.http.speculative-parallel-limit".
12168 - name: network.early-hints.preconnect.max_connections
12169   type: uint32_t
12170   value: 10
12171   mirror: always
12173 # How long we should wait for EarlyHintPreloader to be used.
12174 # Under normal circumstances it should be used immidiately.
12175 - name: network.early-hints.parent-connect-timeout
12176   type: uint32_t
12177   value: 10000
12178   mirror: always
12180 # Whether to use the network process or not
12181 # Start a separate socket process. Performing networking on the socket process
12182 # is control by a sepparate pref
12183 # ("network.http.network_access_on_socket_process.enabled").
12184 # Changing these prefs requires a restart.
12185 - name: network.process.enabled
12186   type: RelaxedAtomicBool
12187   mirror: always
12188 #if defined(ANDROID) || defined(MOZ_THUNDERBIRD)
12189   value: false # see bug 1641427
12190 #else
12191   value: true
12192 #endif
12194 # Whether we can send OnDataAvailable to content process directly.
12195 - name: network.send_ODA_to_content_directly
12196   type: RelaxedAtomicBool
12197   value: true
12198   mirror: always
12200 # Whether we can send OnDataFinished to html5parser in content process directly
12201 - name: network.send_OnDataFinished.html5parser
12202   type: RelaxedAtomicBool
12203   value: true
12204   mirror: always
12206 # Whether we can send OnDataFinished in the content process
12207 - name: network.send_OnDataFinished
12208   type: RelaxedAtomicBool
12209   value: true
12210   mirror: always
12212 # Whether we can send OnDataFinished to content process directly.
12213 - name: network.send_OnDataFinished.nsInputStreamPump
12214   type: RelaxedAtomicBool
12215   value: true
12216   mirror: always
12218 # Whether we can send OnDataFinished to cssLoader in content process.
12219 - name: network.send_OnDataFinished.cssLoader
12220   type: RelaxedAtomicBool
12221   value: @IS_EARLY_BETA_OR_EARLIER@
12222   mirror: always
12224 # Whether we can send send OnDataFinished only after dispatching
12225 # all the progress events on the main thread
12226 - name: network.send_OnDataFinished_after_progress_updates
12227   type: RelaxedAtomicBool
12228   value: false
12229   mirror: always
12231 # Perform all network access on the socket process.
12232 # The pref requires "network.process.enabled" to be true.
12233 # Changing these prefs requires a restart.
12234 - name: network.http.network_access_on_socket_process.enabled
12235   type: RelaxedAtomicBool
12236   mirror: always
12237   value: false
12239 # Telemetry of traffic categories. Whether or not to enable HttpTrafficAnalyzer.
12240 - name: network.traffic_analyzer.enabled
12241   type: RelaxedAtomicBool
12242   value: true
12243   mirror: always
12245 # Whether DNS resolution is limited to literals and cached entries.
12246 - name: network.dns.disabled
12247   type: RelaxedAtomicBool
12248   value: false
12249   mirror: always
12251 - name: network.dns.disablePrefetchFromHTTPS
12252   type: bool
12253   value: true
12254   mirror: always
12256 # Max time to shutdown the resolver threads
12257 - name: network.dns.resolver_shutdown_timeout_ms
12258   type: uint32_t
12259   value: 2000
12260   mirror: always
12262 # When true on Windows DNS resolutions for single label domains
12263 # (domains that don't contain a dot) will be resolved using the DnsQuery
12264 # API instead of PR_GetAddrInfoByName
12265 - name: network.dns.dns_query_single_label
12266   type: RelaxedAtomicBool
12267   value: false
12268   mirror: always
12270 # Use platform DNS APIs (where available) to resolve HTTPS queries
12271 - name: network.dns.native_https_query
12272   type: RelaxedAtomicBool
12273 #if defined(EARLY_BETA_OR_EARLIER) && !defined(XP_MACOSX)
12274   value: true
12275 #else
12276   value: false
12277 #endif
12278   mirror: always
12280 # DnsQuery_A is broken for HTTPS queries on Windows 10.
12281 # Once it gets fixed, we can flip this pref to enable it.
12282 # Changes might not take effect until restart.
12283 - name: network.dns.native_https_query_win10
12284   type: RelaxedAtomicBool
12285   value: false
12286   mirror: always
12288 # When true, the HTTPS query will actually call the native
12289 # platform API. When false it will return before the call
12290 # to the platform API
12291 # This pref is necessary because having a HTTPS record
12292 # could cause channels to connect to a different port,
12293 # which is not desirable in automation.
12294 - name: network.dns.native_https_query_in_automation
12295   type: RelaxedAtomicBool
12296   value: false
12297   mirror: always
12299 # When resolving a native HTTPS query with native APIs
12300 # the Android implementation has a max timeout
12301 - name: network.dns.native_https_timeout_android
12302   type: RelaxedAtomicInt32
12303   value: 20000
12304   mirror: always
12306 # When this pref is true, we copy the host name to a fresh string before
12307 # calling into getaddrinfo.
12308 - name: network.dns.copy_string_before_call
12309   type: RelaxedAtomicBool
12310   value: true
12311   mirror: always
12313 - name: network.dns.max_high_priority_threads
12314   type: RelaxedAtomicUint32
12315   value: 40
12316   mirror: always
12318 - name: network.dns.max_any_priority_threads
12319   type: RelaxedAtomicUint32
12320   value: 24
12321   mirror: always
12323 # The proxy type. See nsIProtocolProxyService.idl
12324 #     PROXYCONFIG_DIRECT   = 0
12325 #     PROXYCONFIG_MANUAL   = 1
12326 #     PROXYCONFIG_PAC      = 2
12327 #     PROXYCONFIG_WPAD     = 4
12328 #     PROXYCONFIG_SYSTEM   = 5
12329 - name: network.proxy.type
12330   type: RelaxedAtomicUint32
12331   value: 5
12332   mirror: always
12334 # Whether to use WPAD while configuring proxy with system settings
12335 - name: network.proxy.system_wpad
12336   type: bool
12337   value: false
12338   mirror: always
12340 # Whether to allow the use of WPAD while configuring proxy with system settings
12341 - name: network.proxy.system_wpad.allowed
12342   type: bool
12343   value: false
12344   mirror: always
12346 # Whether the SOCKS proxy should be in charge of DNS resolution.
12347 - name: network.proxy.socks_remote_dns
12348   type: RelaxedAtomicBool
12349   value: false
12350   mirror: always
12352 # When receiving a network change event, the time (in ms) we wait to reload the
12353 # PAC url.
12354 - name: network.proxy.reload_pac_delay
12355   type: RelaxedAtomicUint32
12356   value: 2000
12357   mirror: always
12359 # When parsing "SOCKS" in PAC string, the default version of SOCKS that will be
12360 # used.
12361 - name: network.proxy.default_pac_script_socks_version
12362   type: RelaxedAtomicUint32
12363   value: 4
12364   mirror: always
12366 # Whether to force failover to direct for system requests.
12367 #ifdef MOZ_PROXY_DIRECT_FAILOVER
12368 - name: network.proxy.failover_direct
12369   type: bool
12370   value: true
12371   mirror: always
12372 #endif
12374 # Whether to allow a bypass flag to be set on httpChannel that will
12375 # prevent proxies from being used for that specific request.
12376 - name: network.proxy.allow_bypass
12377   type: bool
12378 #ifdef MOZ_PROXY_BYPASS_PROTECTION
12379   value: false
12380 #else
12381   value: true
12382 #endif
12383   mirror: always
12385 - name: network.proxy.parse_pac_on_socket_process
12386   type: RelaxedAtomicBool
12387   value: false
12388   mirror: always
12390 - name: network.proxy.detect_system_proxy_changes
12391   type: RelaxedAtomicBool
12392   value: false
12393   mirror: always
12395 # If all non-direct proxies have failed, we retry all of them in case they
12396 # are online now.
12397 - name: network.proxy.retry_failed_proxies
12398   type: RelaxedAtomicBool
12399   value: true
12400   mirror: always
12402 # Some requests during a page load are marked as "tail", mainly trackers, but not only.
12403 # This pref controls whether such requests are put to the tail, behind other requests
12404 # emerging during page loading process.
12405 - name: network.http.tailing.enabled
12406   type: bool
12407   value: true
12408   mirror: always
12410 # Whether to run proxy checks when processing Alt-Svc headers.
12411 - name: network.http.altsvc.proxy_checks
12412   type: bool
12413   value: true
12414   mirror: always
12416 - name: network.http.stale_while_revalidate.enabled
12417   type: RelaxedAtomicBool
12418   value: true
12419   mirror: always
12421 # Capacity of the above cache, in kilobytes.
12422 - name: network.ssl_tokens_cache_capacity
12423   type: RelaxedAtomicUint32
12424   value: 2048
12425   mirror: always
12427 # How many records we store per entry
12428 - name: network.ssl_tokens_cache_records_per_entry
12429   type: RelaxedAtomicUint32
12430   value: 2
12431   mirror: always
12433 # The maximum allowed length for a URL - 1MB default.
12434 - name: network.standard-url.max-length
12435   type: RelaxedAtomicUint32
12436   value: 1048576
12437   mirror: always
12439 # DNS Trusted Recursive Resolver
12440 # 0 - default off, 1 - reserved/off, 2 - TRR first, 3 - TRR only,
12441 # 4 - reserved/off, 5 off by choice
12442 - name: network.trr.mode
12443   type: RelaxedAtomicUint32
12444   value: 0
12445   mirror: always
12447 # Default global TRR provider
12448 - name: network.trr.default_provider_uri
12449   type: String
12450   value: "https://mozilla.cloudflare-dns.com/dns-query"
12451   mirror: never
12453 # If true, retry TRR for recoverable errors once.
12454 - name: network.trr.retry_on_recoverable_errors
12455   type: RelaxedAtomicBool
12456   value: true
12457   mirror: always
12459 # If true, don't fallback to native DNS upon network errors.
12460 - name: network.trr.strict_native_fallback
12461   type: RelaxedAtomicBool
12462   value: false
12463   mirror: always
12465 # If true, we'll fallback to native if the retry also times out.
12466 - name: network.trr.strict_native_fallback_allow_timeouts
12467   type: RelaxedAtomicBool
12468   value: true
12469   mirror: always
12471 # Single TRR request timeout (ms) when strict native fallback is enabled.
12472 - name: network.trr.strict_fallback_request_timeout_ms
12473   type: RelaxedAtomicUint32
12474   value: 6000
12475   mirror: always
12477 # If false, the temporary blocklisting feature is disabled.
12478 # This is useful for tests to prevent bleeding extra reqs
12479 # between tasks, since we may attempt to look up the
12480 # parent domain in the background when blocklisting a host.
12481 - name: network.trr.temp_blocklist
12482   type: RelaxedAtomicBool
12483   value: true
12484   mirror: always
12486 # TRR blocklist entry expire time (in seconds). Default is one minute.
12487 # Meant to survive basically a page load.
12488 - name: network.trr.temp_blocklist_duration_sec
12489   type: RelaxedAtomicUint32
12490   value: 60
12491   mirror: always
12493 # Single TRR request timeout, in milliseconds
12494 - name: network.trr.request_timeout_ms
12495   type: RelaxedAtomicUint32
12496   value: 1500
12497   mirror: always
12499 # Single TRR request timeout, in milliseconds for mode 3
12500 - name: network.trr.request_timeout_mode_trronly_ms
12501   type: RelaxedAtomicUint32
12502   value: 30000
12503   mirror: always
12505 # Similar to network.http.http2.ping-timeout, but this is used when the
12506 # Http/2 connection is connected to the TRR server.
12507 - name: network.trr.ping_timeout
12508   type: RelaxedAtomicUint32
12509   value: 3000
12510   mirror: always
12512 # The timeout of the TRR confirmation request
12513 - name: network.trr.confirmation_timeout_ms
12514   type: RelaxedAtomicUint32
12515   value: 6000
12516   mirror: always
12518 # The timeout of the TRR confirmation request
12519 - name: network.trr.confirmation_telemetry_enabled
12520   type: RelaxedAtomicBool
12521   value: true
12522   mirror: always
12524 # Whether to send the Accept-Language header for TRR requests
12525 - name: network.trr.send_accept-language_headers
12526   type: RelaxedAtomicBool
12527   value: false
12528   mirror: always
12530 # Whether to send an empty Accept-Encoding header for TRR requests
12531 - name: network.trr.send_empty_accept-encoding_headers
12532   type: RelaxedAtomicBool
12533   value: true
12534   mirror: always
12536 # Whether to send the User-Agent header for TRR requests
12537 - name: network.trr.send_user-agent_headers
12538   type: RelaxedAtomicBool
12539   value: false
12540   mirror: always
12542 # This pref controls whether to use TRRServiceChannel off main thread.
12543 - name: network.trr.fetch_off_main_thread
12544   type: RelaxedAtomicBool
12545   value: true
12546   mirror: always
12548 # If we should wait for captive portal confirmation before enabling TRR
12549 - name: network.trr.wait-for-portal
12550   type: RelaxedAtomicBool
12551   value: false
12552   mirror: always
12554 # If we should wait for TRR service confirmation to complete before enabling
12555 # TRR for lookups when fallback is enabled. Confirmation is always skipped when
12556 # global mode is TRR-only (no fallback).
12557 - name: network.trr.wait-for-confirmation
12558   type: RelaxedAtomicBool
12559   value: false
12560   mirror: always
12562 # Normally when confirmation fails we wait for the confirmation to succeed
12563 # before attempting to do TRR. When this pref is true, we optimistically
12564 # assume the confirmation will succeed and might attempt TRR anyway.
12565 # If network.trr.wait-for-confirmation is true, this pref is ignored.
12566 - name: network.trr.attempt-when-retrying-confirmation
12567   type: RelaxedAtomicBool
12568   value: false
12569   mirror: always
12571 # Use GET (rather than POST)
12572 - name: network.trr.useGET
12573   type: RelaxedAtomicBool
12574   value: false
12575   mirror: always
12577 # Allow RFC1918 address in responses?
12578 - name: network.trr.allow-rfc1918
12579   type: RelaxedAtomicBool
12580   value: false
12581   mirror: always
12583 # When true, it only sends AAAA when the system has IPv6 connectivity
12584 - name: network.trr.skip-AAAA-when-not-supported
12585   type: RelaxedAtomicBool
12586   value: true
12587   mirror: always
12589 # Whether to apply split horizon mitigations when using TRR.
12590 # These include adding the DNS suffix to the excluded domains
12591 - name: network.trr.split_horizon_mitigations
12592   type: RelaxedAtomicBool
12593   value: true
12594   mirror: always
12596 # Explicitly disable ECS (EDNS Client Subnet, RFC 7871)
12597 - name: network.trr.disable-ECS
12598   type: RelaxedAtomicBool
12599   value: true
12600   mirror: always
12602 # When true, the DNS+TRR cache will be cleared when a relevant TRR pref
12603 # changes. (uri, bootstrapAddress, excluded-domains)
12604 - name: network.trr.clear-cache-on-pref-change
12605   type: RelaxedAtomicBool
12606   value: true
12607   mirror: always
12609 # After this many failed TRR requests in a row, consider TRR borked
12610 - name: network.trr.max-fails
12611   type: RelaxedAtomicUint32
12612   value: 15
12613   mirror: always
12615 # When the TRR confirmation is set to CONFIRM_FAILED due to many failures in
12616 # a row, we set a timer to retry. This has an exponential backoff up to
12617 # 64 seconds.
12618 - name: network.trr.retry-timeout-ms
12619   type: RelaxedAtomicUint32
12620   value: 125
12621   mirror: always
12623 # Retry with no TRR when the response contained only 0.0.0.0 or ::
12624 - name: network.trr.fallback-on-zero-response
12625   type: RelaxedAtomicBool
12626   value: false
12627   mirror: always
12629 # If true we parse the /etc/hosts file and exclude any host names from TRR.
12630 # Reading the file is only done once, when TRR is first enabled - this could be
12631 # soon after startup or when the pref is flipped.
12632 - name: network.trr.exclude-etc-hosts
12633   type: RelaxedAtomicBool
12634   value: true
12635   mirror: always
12637 # Whether to add padding in the doh dns queries (rfc 7830)
12638 - name: network.trr.padding
12639   type: RelaxedAtomicBool
12640   value: true
12641   mirror: always
12643 # The block size to pad to. Capped at 1024 bytes.
12644 # Setting it to 0 doesn't add additional padding, but allows the server to
12645 # respond with padding (RFC7930 Sec 4)
12646 - name: network.trr.padding.length
12647   type: RelaxedAtomicUint32
12648   value: 128
12649   mirror: always
12651 # Whether to skip the NS check for the blocked host.
12652 # Note this is used for test only.
12653 - name: network.trr.skip-check-for-blocked-host
12654   type: RelaxedAtomicBool
12655   value: false
12656   mirror: always
12658 # Whether to use the connection info that is generated asynchronously.
12659 - name: network.trr.async_connInfo
12660   type: RelaxedAtomicBool
12661   value: false
12662   mirror: always
12664 # If true, a failed TRR request that contains an extended DNS error
12665 # matching the hardFail condition in DNSPacket.cpp will not be
12666 # retried with native DNS
12667 - name: network.trr.hard_fail_on_extended_error
12668   type: RelaxedAtomicBool
12669   value: true
12670   mirror: always
12672 # The base URL of the `Learn more` button for skip reasons
12673 - name: network.trr_ui.skip_reason_learn_more_url
12674   type: String
12675   value: "https://firefox-source-docs.mozilla.org/networking/dns/trr-skip-reasons.html#"
12676   mirror: never
12678 # If true, display a warning before fallback to native
12679 - name: network.trr.display_fallback_warning
12680   type: RelaxedAtomicBool
12681   value: false
12682   mirror: always
12684 # Heuristics in this list will trigger the fallback to native warning
12685 - name: network.trr.fallback_warning_heuristic_list
12686   type: String
12687   value: "canary"
12688   mirror: never
12690 # Use Oblivious HTTP when making TRR requests.
12691 - name: network.trr.use_ohttp
12692   type: RelaxedAtomicBool
12693   value: false
12694   mirror: always
12696 # Oblivious HTTP relay URI for TRR requests.
12697 - name: network.trr.ohttp.relay_uri
12698   type: String
12699   value: ""
12700   mirror: never
12702 # URI from which to fetch the configuration for the Oblivious HTTP gateway for TRR requests.
12703 - name: network.trr.ohttp.config_uri
12704   type: String
12705   value: ""
12706   mirror: never
12708 # The URI used for the target DoH server when network.trr.use_ohttp is true
12709 - name: network.trr.ohttp.uri
12710   type: String
12711   value: ""
12712   mirror: never
12714 # Allow the network changed event to get sent when a network topology or setup
12715 # change is noticed while running.
12716 - name: network.notify.changed
12717   type: RelaxedAtomicBool
12718   value: true
12719   mirror: always
12721 # Allow network detection of IPv6 related changes (bug 1245059)
12722 - name: network.notify.IPv6
12723   type: RelaxedAtomicBool
12724 #ifdef XP_WIN
12725   value: false
12726 #else
12727   value: true
12728 #endif
12729   mirror: always
12731 # Whether to check the dnsSuffix on network changes
12732 - name: network.notify.dnsSuffixList
12733   type: RelaxedAtomicBool
12734   value: true
12735   mirror: always
12737 # Whether to check the registry for proxies on network changes that indicate
12738 # that TRR should not be used.
12739 - name: network.notify.checkForProxies
12740   type: RelaxedAtomicBool
12741   value: true
12742   mirror: always
12744 # Whether to check the registry for NRPT rules on network changes that
12745 # indicate that TRR should not be used.
12746 - name: network.notify.checkForNRPT
12747   type: RelaxedAtomicBool
12748   value: true
12749   mirror: always
12751 # Whether NotifyIpInterfaceChange should be called immediately after
12752 # registration in order to record the initial state of the network adapters.
12753 - name: network.notify.initial_call
12754   type: RelaxedAtomicBool
12755   value: true
12756   mirror: always
12758 # Whether to check for DNS resolvers
12759 - name: network.notify.resolvers
12760   type: RelaxedAtomicBool
12761   value: true
12762   mirror: always
12764 # Whether to use the rust implemented DefaultURI for unknown scheme types
12765 - name: network.url.useDefaultURI
12766   type: RelaxedAtomicBool
12767   value: false
12768   mirror: always
12770 # The maximum allowed length for a URL - 32MB default.
12771 # If 0 that means no limit.
12772 - name: network.url.max-length
12773   type: RelaxedAtomicUint32
12774   value: 32 * 1024 * 1024
12775   mirror: always
12777 # Should be removed if no breakage occurs. See bug 1797846
12778 - name: network.url.strip-data-url-whitespace
12779   type: RelaxedAtomicBool
12780   value: false
12781   mirror: always
12783   # If true, will be more strict with status code parsing
12784 - name: network.url.strict_data_url_base64_placement
12785   type: RelaxedAtomicBool
12786   value: true
12787   mirror: always
12789 - name: network.url.strict_protocol_setter
12790   type: RelaxedAtomicBool
12791   value: true
12792   mirror: always
12794 # Force remapping of remote port numbers to allow reaching local testing
12795 # servers or port forwarders listening on non-standard ports.  Note that
12796 # this is not changing the origin URL in the addressbar, only internally
12797 # the port number used.  This is intended to be used along with the
12798 # `network.dns.forceResolve` preference.
12800 # The form is:
12801 #   "80,443,808-888=8080; 563=8081"
12802 # this will remap ports for HTTP, HTTPS and the range of 808-888 included
12803 # to use port 8080, and port 563 to go to 8081.
12804 - name: network.socket.forcePort
12805   type: String
12806   value: ""
12807   mirror: never
12809 # Try and use HTTP2 when using SSL
12810 - name: network.http.http2.enabled
12811   type: RelaxedAtomicBool
12812   value: true
12813   mirror: always
12815 - name: network.http.http2.enabled.deps
12816   type: RelaxedAtomicBool
12817   value: true
12818   mirror: always
12820 - name: network.http.http2.enforce-tls-profile
12821   type: RelaxedAtomicBool
12822   value: true
12823   mirror: always
12825 - name: network.http.http2.chunk-size
12826   type: RelaxedAtomicInt32
12827   value: 16000
12828   mirror: always
12830 - name: network.http.http2.timeout
12831   type: RelaxedAtomicInt32
12832   value: 170
12833   mirror: always
12835 - name: network.http.http2.coalesce-hostnames
12836   type: RelaxedAtomicBool
12837   value: true
12838   mirror: always
12840 - name: network.http.http2.ping-threshold
12841   type: RelaxedAtomicInt32
12842   value: 58
12843   mirror: always
12845 - name: network.http.http2.ping-timeout
12846   type: RelaxedAtomicInt32
12847   value: 8
12848   mirror: always
12850 - name: network.http.http2.send-buffer-size
12851   type: RelaxedAtomicInt32
12852   value: 0
12853   mirror: always
12855 - name: network.http.http2.allow-push
12856   type: RelaxedAtomicBool
12857   value: true
12858   mirror: always
12860 - name: network.http.http2.push-allowance
12861   type: RelaxedAtomicInt32
12862   value: 131072  # 128KB
12863   mirror: always
12865 - name: network.http.http2.pull-allowance
12866   type: RelaxedAtomicInt32
12867   value: 12582912  # 12MB
12868   mirror: always
12870 - name: network.http.http2.default-concurrent
12871   type: RelaxedAtomicInt32
12872   value: 100
12873   mirror: always
12875 - name: network.http.http2.default-hpack-buffer
12876   type: RelaxedAtomicInt32
12877   value: 65536 # 64K
12878   mirror: always
12880 - name: network.http.http2.websockets
12881   type: RelaxedAtomicBool
12882   value: true
12883   mirror: always
12885 - name: network.http.http2.enable-hpack-dump
12886   type: RelaxedAtomicBool
12887   value: false
12888   mirror: always
12890 - name: network.http.http2.move_to_pending_list_after_network_change
12891   type: RelaxedAtomicBool
12892   value: true
12893   mirror: always
12895 # Enable HTTP/3
12896 - name: network.http.http3.enable
12897   type: RelaxedAtomicBool
12898   value: true
12899   mirror: always
12901 # Receive buffer size of QUIC socket
12902 - name: network.http.http3.recvBufferSize
12903   type: RelaxedAtomicInt32
12904   value: 1048576
12905   mirror: always
12907 - name: network.http.http3.enable_qlog
12908   type: RelaxedAtomicBool
12909   value: false
12910   mirror: always
12912 - name: network.http.http3.enable_0rtt
12913   type: RelaxedAtomicBool
12914   value: true
12915   mirror: always
12917 # When a h3 transaction is inserted in the pending queue, the time (ms) we wait
12918 # to create a TCP backup connection.
12919 - name: network.http.http3.backup_timer_delay
12920   type: RelaxedAtomicUint32
12921   value: 100
12922   mirror: always
12924 # The global half open sockets allowed for creating a backup connection.
12925 - name: network.http.http3.parallel_fallback_conn_limit
12926   type: RelaxedAtomicUint32
12927   value: 32
12928   mirror: always
12930 # Receive buffer size of QUIC socket
12931 - name: network.http.http3.max_data
12932   type: RelaxedAtomicUint32
12933   value: 25165824
12934   mirror: always
12936 # Receive buffer size of QUIC socket
12937 - name: network.http.http3.max_stream_data
12938   type: RelaxedAtomicUint32
12939   value: 12582912
12940   mirror: always
12942 # Enable http3 network priority as described in
12943 # <https://www.rfc-editor.org/rfc/rfc9218.html>.
12944 - name: network.http.http3.priority
12945   type: RelaxedAtomicBool
12946   value: true
12947   mirror: always
12949 # Depriorizing background tabs notifies websites when switching to or from the
12950 # tab while still loading resources for the website. On one hand it might
12951 # improve performance when switching to an tab with a website using the same
12952 # QUIC connection. On the other hand it sends more data to the website and
12953 # might be a privacy concern.
12954 - name: network.http.http3.send_background_tabs_deprioritization
12955   type: RelaxedAtomicBool
12956   value: false
12957   mirror: always
12959 - name: network.http.http3.version_negotiation.enabled
12960   type: RelaxedAtomicBool
12961   value: false
12962   mirror: always
12964 # When a Http/3 connection failed, whether to retry with a different IP address.
12965 - name: network.http.http3.retry_different_ip_family
12966   type: RelaxedAtomicBool
12967   value: @IS_EARLY_BETA_OR_EARLIER@
12968   mirror: always
12970 # This is for testing purpose. When true, nsUDPSocket::SendWithAddress will
12971 # return NS_ERROR_CONNECTION_REFUSED for address "::1".
12972 - name: network.http.http3.block_loopback_ipv6_addr
12973   type: RelaxedAtomicBool
12974   value: false
12975   mirror: always
12977 # The congestion control algorithm with which to configure neqo.
12978 # 0 => NewReno
12979 # 1 => Cubic
12980 - name: network.http.http3.cc_algorithm
12981   type: RelaxedAtomicUint32
12982   value: 1
12983   mirror: always
12984   rust: true
12986 # It represents the maximum duration that we used to accumulate
12987 # callback timeouts before we set a timer and break out of the loop.
12988 - name: network.http.http3.max_accumlated_time_ms
12989   type: RelaxedAtomicUint32
12990   value: 1
12991   mirror: always
12992   rust: true
12994 # When true, a http request will be upgraded to https when HTTPS RR is
12995 # available.
12996 - name: network.dns.upgrade_with_https_rr
12997   type: RelaxedAtomicBool
12998   value: true
12999   mirror: always
13001 # Whether to use HTTPS RR as AltSvc
13002 - name: network.dns.use_https_rr_as_altsvc
13003   type: RelaxedAtomicBool
13004   value: true
13005   mirror: always
13007 # Whether to check for NAT64 using the system resolver
13008 - name: network.connectivity-service.nat64-check
13009   type: bool
13010   value: true
13011   mirror: always
13013 # Manually enter the NAT64 prefix that will be used if IPv4 is unavailable.
13014 # The value is formatted as IPv6 with the least significant bits to be dropped.
13015 # For example, 64:ff9b:: is a common prefix. This will not disable
13016 # the NAT64 check, although the value of this pref will be prioritized.
13017 - name: network.connectivity-service.nat64-prefix
13018   type: String
13019   value: ""
13020   mirror: never
13022 # Whether to enable echconfig.
13023 - name: network.dns.echconfig.enabled
13024   type: RelaxedAtomicBool
13025   value: true
13026   mirror: always
13028 # Whether to enable echconfig for http3.
13029 - name: network.dns.http3_echconfig.enabled
13030   type: RelaxedAtomicBool
13031   value: true
13032   mirror: always
13034 # This pref needs to be worked together with network.dns.echconfig.enabled
13035 # being true and there is no record without ECHConfig.
13036 # When we try all records with ECHConfig in HTTPS RRs and still can't connect,
13037 # this pref indicate whether we can fallback to the origin server.
13038 - name: network.dns.echconfig.fallback_to_origin_when_all_failed
13039   type: RelaxedAtomicBool
13040   value: false
13041   mirror: always
13043 # When true, reset the exclusion list when all records are excluded.
13044 - name: network.dns.httpssvc.reset_exclustion_list
13045   type: RelaxedAtomicBool
13046   value: true
13047   mirror: always
13049 # If the http3 connection cannot be ready after the timeout value here, the
13050 # transaction will start another non-http3 conneciton.
13051 # Setting this value to 0 indicates this feature is disabled.
13052 - name: network.dns.httpssvc.http3_fast_fallback_timeout
13053   type: RelaxedAtomicUint32
13054   value: 50
13055   mirror: always
13057 # Whether to force a transaction to wait https rr.
13058 - name: network.dns.force_waiting_https_rr
13059   type: RelaxedAtomicBool
13060   value: true
13061   mirror: always
13063 # The TTL for negative responses of TXT and HTTPS records.
13064 - name: network.dns.negative_ttl_for_type_record
13065   type: RelaxedAtomicUint32
13066   value: 300   # 5 minutes (in seconds)
13067   mirror: always
13069 # Whether to use port prefixed QNAME for HTTPS RR
13070 - name: network.dns.port_prefixed_qname_https_rr
13071   type: RelaxedAtomicBool
13072   value: false
13073   mirror: always
13075 # Whether to use HTTPS RR and ignore NS_HTTP_DISALLOW_HTTPS_RR
13076 # This pref is only set when running tests
13077 - name: network.dns.force_use_https_rr
13078   type: RelaxedAtomicBool
13079   value: false
13080   mirror: always
13082 # This preference can be used to turn off IPv6 name lookups. See bug 68796.
13083 - name: network.dns.disableIPv6
13084   type: RelaxedAtomicBool
13085   value: false
13086   mirror: always
13088 # Whether to add additional record IPs to the cache
13089 - name: network.trr.add_additional_records
13090   type: RelaxedAtomicBool
13091   value: true
13092   mirror: always
13094 # When this pref is true, AddStorageEntry will return an error if the
13095 # OPEN_READONLY & OPEN_SECRETLY flags are passed and no entry exists.
13096 # If no regressions occur this pref should be removed.
13097 - name: network.cache.bug1708673
13098   type: RelaxedAtomicBool
13099   value: false
13100   mirror: always
13102 # How much progress we want to do minimum when purging under pressure.
13103 # On disk, we may see blocking I/O, so for now we keep 0 here.
13104 - name: network.cache.purge_minprogress_disk
13105   type: RelaxedAtomicUint32
13106   value: 0
13107   mirror: always
13109 # How much progress we want to do minimum when purging under pressure.
13110 # In memory, purging is cheap and memory is precious.
13111 - name: network.cache.purge_minprogress_memory
13112   type: RelaxedAtomicUint32
13113   value: 32
13114   mirror: always
13116 # When true we will dispatch a background task (separate process) to
13117 # delete the cache folder at shutdown in order to avoid shutdown hangs.
13118 - name: network.cache.shutdown_purge_in_background_task
13119   type: RelaxedAtomicBool
13120 #if defined(XP_WIN)
13121   value: true
13122 #else
13123   value: false
13124 #endif
13125   mirror: always
13127 # Number of seconds to wait for the cache folder to be renamed before
13128 # the background task forcefully exists.
13129 - name: network.cache.shutdown_purge_folder_wait_seconds
13130   type: RelaxedAtomicUint32
13131   value: 10
13132   mirror: always
13134 # This is used for a temporary workaround for a web-compat issue. If pref is
13135 # true CORS preflight requests are allowed to send client certificates.
13136 - name: network.cors_preflight.allow_client_cert
13137   type: RelaxedAtomicBool
13138   value: false
13139   mirror: always
13141 # If true nsCORSListenerProxy will reject any URL that contains user & password
13142 # regardless if it's a redirect or not. When false nsCORSListenerProxy will
13143 # only reject URLs with a username and password when they happen on a redirected
13144 # channel.
13145 - name: network.cors_preflight.block_userpass_uri
13146   type: RelaxedAtomicBool
13147   value: false
13148   mirror: always
13150 # Whether to record the telemetry event when a JAR channel is failed to load.
13151 - name: network.jar.record_failure_reason
13152   type: RelaxedAtomicBool
13153   value: @IS_EARLY_BETA_OR_EARLIER@
13154   mirror: always
13156 # nsJARInputStream::Available returns the size indicated by the archived entry
13157 # so we need a limit so we don't OOM if the archive is corrupted.
13158 - name: network.jar.max_available_size
13159   type: RelaxedAtomicUint32
13160   value: 256*1024*1024 # 256 Mb
13161   mirror: always
13163 # Whether JAR entries that defate to a different size than RealSize/orglen
13164 # are considered corrupted or not
13165 - name: network.jar.require_size_match
13166   type: RelaxedAtomicBool
13167   value: true
13168   mirror: always
13170 # When decompressing an archived entry we need to allocate a buffer
13171 # large enough to hold the uncompressed entry. This pref specifies the max
13172 # size of such a buffer.
13173 # When set to 0 there is no limit.
13174 - name: network.jar.max_entry_size
13175   type: RelaxedAtomicUint32
13176   value: 256*1024*1024 # 256 Mb
13177   mirror: always
13179 # When this pref is true, we will use the HTTPS acceptable content encoding
13180 # list for trustworthy domains such as http://localhost
13181 - name: network.http.encoding.trustworthy_is_https
13182   type: RelaxedAtomicBool
13183   value: true
13184   mirror: always
13186 # Support http3 version1
13187 - name: network.http.http3.support_version1
13188   type: RelaxedAtomicBool
13189   value: true
13190   mirror: always
13192 # Disable early data on an origin if SSL_ERROR_PROTOCOL_VERSION_ALERT is received
13193 - name: network.http.early_data_disable_on_error
13194   type: RelaxedAtomicBool
13195   value: true
13196   mirror: always
13198 # Disable early data if it fails for more than this number of origins
13199 - name: network.http.early_data_max_error
13200   type: RelaxedAtomicUint32
13201   value: 5
13202   mirror: always
13204   # If true, requests will be canceled if any of the response headers values has a NUL character
13205 - name: network.http.reject_NULs_in_response_header_values
13206   type: RelaxedAtomicBool
13207   value: true
13208   mirror: always
13210   # If true, will be more strict with status code parsing
13211 - name: network.http.strict_response_status_line_parsing
13212   type: RelaxedAtomicBool
13213   value: true
13214   mirror: always
13216   # If true, remove the resumption token when 0RTT failed.
13217 - name: network.http.remove_resumption_token_when_early_data_failed
13218   type: RelaxedAtomicBool
13219   value: true
13220   mirror: always
13222   # The length of cnonce string used in HTTP digest auth.
13223 - name: network.http.digest_auth_cnonce_length
13224   type: uint32_t
13225   value: 64
13226   mirror: always
13228   # If true, HTTP response content-type headers will be parsed using the standards-compliant MimeType parser
13229 - name: network.standard_content_type_parsing.response_headers
13230   type: RelaxedAtomicBool
13231   value: true
13232   mirror: always
13234 # The maximum count that we allow socket prrocess to crash. If this count is
13235 # reached, we won't use networking over socket process.
13236 - name: network.max_socket_process_failed_count
13237   type: RelaxedAtomicUint32
13238   value: 1
13239   mirror: always
13241 - name: network.allow_redirect_to_data
13242   type: RelaxedAtomicBool
13243   value: false
13244   mirror: always
13246 - name: network.allow_raw_sockets_in_content_processes
13247   type: bool
13248   value: false
13249   mirror: once
13251 - name: network.allow_large_stack_size_for_socket_thread
13252   type: RelaxedAtomicBool
13253   value: true
13254   mirror: always
13256 # WebTransport
13257 - name: network.webtransport.enabled
13258   type: RelaxedAtomicBool
13259   value: true
13260   mirror: always
13262 # WebTransport Datagram support
13263 - name: network.webtransport.datagrams.enabled
13264   type: RelaxedAtomicBool
13265   value: true
13266   mirror: always
13268 # WebTransport Datagram size
13269 - name: network.webtransport.datagram_size
13270   type: RelaxedAtomicUint32
13271   value: 1200
13272   mirror: always
13274 # WebTransport Redirect support
13275 - name: network.webtransport.redirect.enabled
13276   type: RelaxedAtomicBool
13277   value: false
13278   mirror: always
13280 # Wifi-scan polling period, in ms, when on a mobile network.
13281 # A value of 0 indicates that no polling should be done.
13282 - name: network.wifi.scanning_period
13283   type: RelaxedAtomicUint32
13284   value: 60000
13285   mirror: always
13287 # When the Access-Control-Allow-Headers is wildcard (*), whether to allow
13288 # CORS-protected requests with the Authorization request header.
13289 - name: network.cors_preflight.authorization_covered_by_wildcard
13290   type: bool
13291   value: true
13292   mirror: always
13294 # Inner schemes that are allowed to display application/http-index-format.
13295 # Set to * to allow all schemes.
13296 - name: network.http_index_format.allowed_schemes
13297   type: String
13298   value: "file,moz-gio"
13299   mirror: never
13301 # Enable off-main-thread decompression of network streams
13302 - name: network.decompression_off_mainthread
13303   type: bool
13304   value: true
13305   mirror: always
13307 #---------------------------------------------------------------------------
13308 # Prefs starting with "nglayout."
13309 #---------------------------------------------------------------------------
13311 # Enable/disable display list invalidation logging --- useful for debugging.
13312 - name: nglayout.debug.invalidation
13313   type: bool
13314   value: false
13315   mirror: always
13317 - name: nglayout.debug.disable_xul_cache
13318   type: bool
13319   value: false
13320   mirror: always
13322 - name: nglayout.initialpaint.delay
13323   type: int32_t
13324   value: 5
13325   mirror: always
13327 - name: nglayout.initialpaint.delay_in_oopif
13328   type: int32_t
13329   value: 5
13330   mirror: always
13332 #---------------------------------------------------------------------------
13333 # Prefs starting with "page_load."
13334 #---------------------------------------------------------------------------
13336 # Time in milliseconds during which certain tasks are deprioritized during
13337 # page load.
13338 - name: page_load.deprioritization_period
13339   type: RelaxedAtomicUint32
13340   value: 5000
13341   mirror: always
13343 #---------------------------------------------------------------------------
13344 # Prefs starting with "pdfjs."
13345 #---------------------------------------------------------------------------
13347 - name: pdfjs.disabled
13348   type: bool
13349   value: false
13350   mirror: always
13352 #---------------------------------------------------------------------------
13353 # Prefs starting with "permissions."
13354 #---------------------------------------------------------------------------
13356 # 1-Accept, 2-Deny, Any other value: Accept
13357 - name: permissions.default.image
13358   type: RelaxedAtomicUint32
13359   value: 1
13360   mirror: always
13362 - name: permissions.default.screen-wake-lock
13363   type: RelaxedAtomicUint32
13364   value: 1
13365   mirror: always
13367 - name: permissions.isolateBy.userContext
13368   type: RelaxedAtomicBool
13369   value: false
13370   mirror: always
13372 - name: permissions.isolateBy.privateBrowsing
13373   type: RelaxedAtomicBool
13374   value: true
13375   mirror: always
13377 #---------------------------------------------------------------------------
13378 # Prefs starting with "places."
13379 #---------------------------------------------------------------------------
13381 # Whether pages alternative frecency is enabled. This and the following related
13382 # prefs only apply at restart.
13383 - name: places.frecency.pages.alternative.featureGate
13384   type: bool
13385   value: false
13386   mirror: once
13388 - name: places.frecency.pages.alternative.highWeight
13389   type: uint32_t
13390   value: 100
13391   mirror: once
13393 - name: places.frecency.pages.alternative.mediumWeight
13394   type: uint32_t
13395   value: 50
13396   mirror: once
13398 - name: places.frecency.pages.alternative.lowWeight
13399   type: uint32_t
13400   value: 20
13401   mirror: once
13403 - name: places.frecency.pages.alternative.halfLifeDays
13404   type: uint32_t
13405   value: 30
13406   mirror: once
13408 - name: places.frecency.pages.alternative.numSampledVisits
13409   type: uint32_t
13410   value: 10
13411   mirror: once
13413 #---------------------------------------------------------------------------
13414 # Prefs starting with "plain_text."
13415 #---------------------------------------------------------------------------
13417 # When false, text in plaintext documents does not wrap long lines.
13418 - name: plain_text.wrap_long_lines
13419   type: bool
13420   value: true
13421   mirror: always
13423 #---------------------------------------------------------------------------
13424 # Prefs starting with "preferences."
13425 #---------------------------------------------------------------------------
13427 - name: preferences.allow.omt-write
13428   type: bool
13429   value: true
13430   mirror: never
13432 #ifdef DEBUG
13433   # If set to true, setting a Preference matched to a `Once` StaticPref will
13434   # assert that the value matches. Such assertion being broken is a clear flag
13435   # that the Once policy shouldn't be used.
13436 -   name: preferences.check.once.policy
13437     type: bool
13438     value: false
13439     mirror: always
13441   # If set to true, StaticPrefs Once policy check will be skipped during
13442   # automation regression test. Use with care. This pref must be set back to
13443   # false as soon as specific test has completed.
13444 -   name: preferences.force-disable.check.once.policy
13445     type: bool
13446     value: false
13447     mirror: always
13448 #endif
13450 #---------------------------------------------------------------------------
13451 # Prefs starting with "print."
13452 #---------------------------------------------------------------------------
13454 # Variation fonts can't always be embedded in certain output formats
13455 # such as PDF. To work around this, draw the variation fonts using
13456 # paths instead of using font embedding.
13457 - name: print.font-variations-as-paths
13458   type: RelaxedAtomicBool
13459   value: true
13460   mirror: always
13462 # Whether we always print silently (without a print dialog).
13463 - name: print.always_print_silent
13464   type: RelaxedAtomicBool
13465   value: false
13466   mirror: always
13468 # Whether we attempt to generate links in Save As PDF output.
13469 - name: print.save_as_pdf.links.enabled
13470   type: RelaxedAtomicBool
13471   value: true
13472   mirror: always
13474 # Whether we attempt to generate and use document-internal PDF destinations.
13475 # This currently sometimes results in an internal cairo error, see bug 1725743;
13476 # disabled by default until that is resolved.
13477 - name: print.save_as_pdf.internal_destinations.enabled
13478   type: RelaxedAtomicBool
13479   value: false
13480   mirror: always
13482 # Whether we use the CSS @page size as the paper size in PDF output.
13483 - name: print.save_as_pdf.use_page_rule_size_as_paper_size.enabled
13484   type: RelaxedAtomicBool
13485   value: @IS_NOT_ANDROID@
13486   mirror: always
13488 # The default DPI for printing.
13490 # For PDF-based output, DPI should ideally be irrelevant, but in fact it is not
13491 # for multiple reasons:
13493 #  * Layout code that tries to respect device pixels (e.g. for snapping glyph
13494 #    positions and baselines, and especially for the "GDI Classic"
13495 #    rendering-mode threshold for certain fonts).
13497 #  * The limitations of the PDF format mean that we can't natively represent
13498 #    certain effects, such as filters, in PDF output, so we need to rasterize
13499 #    the parts of the document with these applied.
13501 #  * Other rasterized things like images and such are also affected by DPI
13502 #    (both in the output, and the images we select via srcset, for example).
13504 # Therefore, using a high DPI is preferable. For now, we use 144dpi to match
13505 # physical printer output on Windows, but higher (e.g. 300dpi) might be better,
13506 # but only if it does not lead to issues such as excessive memory use.
13507 - name: print.default_dpi
13508   type: float
13509   value: 144.0f
13510   mirror: always
13512 # Whether support for monochrome printing is enabled for CUPS.
13513 - name: print.cups.monochrome.enabled
13514   type: RelaxedAtomicBool
13515   value: true
13516   mirror: always
13518 # Disabling this will no-op window.print()
13519 - name: print.enabled
13520   type: RelaxedAtomicBool
13521   value: true
13522   mirror: always
13524 # Determines if and when to center pages on a sheet horiontally when printing.
13525 # With a setting of 2, it's guaranteed that A4 on US Letter will be centered.
13526 #  0: never,
13527 #  1: always,
13528 #  2: when the ratio of sheet to page size after content scaling is near 1.0
13529 - name: print.center_page_on_sheet
13530   type: RelaxedAtomicUint32
13531   value: 2
13532   mirror: always
13534 #---------------------------------------------------------------------------
13535 # Prefs starting with "privacy."
13536 #---------------------------------------------------------------------------
13538 # Annotate trackers using the strict list. If set to false, the basic list will
13539 # be used instead.
13540 - name: privacy.annotate_channels.strict_list.enabled
13541   type: bool
13542   value: @IS_EARLY_BETA_OR_EARLIER@
13543   mirror: always
13545 # Annotate trackers using the strict list in the private browsing mode. If set
13546 # to false, the basic list will be used instead.
13547 - name: privacy.annotate_channels.strict_list.pbmode.enabled
13548   type: bool
13549   value: true
13550   mirror: always
13552 # First Party Isolation (double keying), disabled by default.
13553 - name: privacy.firstparty.isolate
13554   type: RelaxedAtomicBool
13555   value: false
13556   mirror: always
13558 # If false, two windows in the same domain with different first party domains
13559 # (top level URLs) can access resources through window.opener. This pref is
13560 # effective only when "privacy.firstparty.isolate" is true.
13561 - name: privacy.firstparty.isolate.restrict_opener_access
13562   type: RelaxedAtomicBool
13563   value: true
13564   mirror: always
13566 - name: privacy.firstparty.isolate.block_post_message
13567   type: RelaxedAtomicBool
13568   value: false
13569   mirror: always
13571 - name: privacy.firstparty.isolate.use_site
13572   type: RelaxedAtomicBool
13573   value: false
13574   mirror: always
13576 # Enforce tracking protection in all modes.
13577 - name: privacy.trackingprotection.enabled
13578   type: bool
13579   value: false
13580   mirror: always
13582 # Enforce tracking protection in Private Browsing mode.
13583 - name: privacy.trackingprotection.pbmode.enabled
13584   type: bool
13585   value: true
13586   mirror: always
13588 # Annotate channels based on the tracking protection list in all modes
13589 - name: privacy.trackingprotection.annotate_channels
13590   type: bool
13591   value: true
13592   mirror: always
13594 # Block 3rd party fingerprinting resources.
13595 - name: privacy.trackingprotection.fingerprinting.enabled
13596   type: bool
13597   value: false
13598   mirror: always
13600 # Block 3rd party cryptomining resources.
13601 - name: privacy.trackingprotection.cryptomining.enabled
13602   type: bool
13603   value: false
13604   mirror: always
13606 # Block 3rd party socialtracking resources.
13607 - name: privacy.trackingprotection.socialtracking.enabled
13608   type: bool
13609   value: false
13610   mirror: always
13612 # Consider socialtracking annotation as trackers (see ETP).
13613 - name: privacy.socialtracking.block_cookies.enabled
13614   type: bool
13615   value: true
13616   mirror: always
13618 # Block 3rd party emailtracking resources in all mode.
13619 - name: privacy.trackingprotection.emailtracking.enabled
13620   type: bool
13621   value: false
13622   mirror: always
13624 # Block 3rd party emailtracking resources in Private Browsing mode.
13625 - name: privacy.trackingprotection.emailtracking.pbmode.enabled
13626   type: bool
13627   value: true
13628   mirror: always
13630 # Collecting 3rd party emailtracking telemetry.
13631 - name: privacy.trackingprotection.emailtracking.data_collection.enabled
13632   type: bool
13633   value: true
13634   mirror: always
13636 - name: privacy.trackingprotection.testing.report_blocked_node
13637   type: RelaxedAtomicBool
13638   value: false
13639   mirror: always
13641 # Whether to spoof user locale to English (used as part of Resist
13642 # Fingerprinting).
13643 # 0 - will prompt
13644 # 1 - don't spoof
13645 # 2 - spoof
13646 - name: privacy.spoof_english
13647   type: RelaxedAtomicUint32
13648   value: 0
13649   mirror: always
13651 # Send "do not track" HTTP header, disabled by default.
13652 - name: privacy.donottrackheader.enabled
13653   type: bool
13654   value: false
13655   mirror: always
13657 # Potentially send "global privacy control" HTTP header and set navigator
13658 # property accordingly. Communicates user's desire to opt-out/in of
13659 # websites or services selling or sharing the user's information, false by
13660 # default.
13661 # true - Send the header with a value of 1 to indicate opting-out
13662 # false - Do not send header to indicate opting-in
13663 - name: privacy.globalprivacycontrol.enabled
13664   type: RelaxedAtomicBool
13665   value: false
13666   mirror: always
13668 # Controls whether or not GPC signals are sent in private browsing mode.
13669 # This can be overridden by `privacy.globalprivacycontrol.enabled` as true.
13670 - name: privacy.globalprivacycontrol.pbmode.enabled
13671   type: RelaxedAtomicBool
13672   value: false
13673   mirror: always
13675 # Controls whether or not GPC signals are sent. Meant to act as a third option
13676 # of 'undecided' by leaving the navigator property undefined and not attaching
13677 # the Sec-GPC HTTP header.
13678 - name: privacy.globalprivacycontrol.functionality.enabled
13679   type: RelaxedAtomicBool
13680   value: false
13681   mirror: always
13683 # Lower the priority of network loads for resources on the tracking protection
13684 # list.  Note that this requires the
13685 # privacy.trackingprotection.annotate_channels pref to be on in order to have
13686 # any effect.
13687 - name: privacy.trackingprotection.lower_network_priority
13688   type: bool
13689   value: @IS_NIGHTLY_BUILD@
13690   mirror: always
13692 # A subset of Resist Fingerprinting protections focused specifically on timers.
13693 # This affects the Animation API, the performance APIs, Date.getTime,
13694 # Event.timestamp, File.lastModified, audioContext.currentTime,
13695 # canvas.captureStream.currentTime.
13696 - name: privacy.reduceTimerPrecision
13697   type: RelaxedAtomicBool
13698   value: true
13699   mirror: always
13701 # If privacy.reduceTimerPrecision is false, this pref controls whether or not
13702 # to clamp all timers at a fixed 20 microsconds. It should always be enabled,
13703 # and is only specified as a pref to enable an emergency disabling in the event
13704 # of catastrophic failure.
13705 - name: privacy.reduceTimerPrecision.unconditional
13706   type: RelaxedAtomicBool
13707   value: true
13708   mirror: always
13710 # The resistFingerprinting variables are marked with 'Relaxed' memory ordering.
13711 # We don't particurally care that threads have a percently consistent view of
13712 # the values of these prefs. They are not expected to change often, and having
13713 # an outdated view is not particurally harmful. They will eventually become
13714 # consistent.
13716 # The variables will, however, be read often (specifically .microseconds on
13717 # each timer rounding) so performance is important.
13718 - name: privacy.resistFingerprinting
13719   type: RelaxedAtomicBool
13720   value: false
13721   mirror: always
13722   do_not_use_directly: true
13724 # When the .pbmode pref is on, RFP or FPP will be enabled in PBM
13725 # When the non-pbm pref is on, they will be enabled in PBM and non-PBM
13726 - name: privacy.resistFingerprinting.pbmode
13727   type: RelaxedAtomicBool
13728   value: false
13729   mirror: always
13730   do_not_use_directly: true
13732 # privacy.fingerprintingProtection enables a set of fingerprinting protections
13733 # designed to minimize breakage while maximizing protection.
13734 - name: privacy.fingerprintingProtection
13735   type: RelaxedAtomicBool
13736   value: false
13737   mirror: always
13738   do_not_use_directly: true
13740 - name: privacy.fingerprintingProtection.pbmode
13741   type: RelaxedAtomicBool
13742   value: false
13743   mirror: always
13744   do_not_use_directly: true
13746 # We automatically decline canvas permission requests if they are not initiated
13747 # from user input. Just in case that breaks something, we allow the user to
13748 # revert this behavior with this obscure pref. We do not intend to support this
13749 # long term. If you do set it, to work around some broken website, please file
13750 # a bug with information so we can understand why it is needed.
13751 - name: privacy.resistFingerprinting.autoDeclineNoUserInputCanvasPrompts
13752   type: bool
13753   value: true
13754   mirror: always
13756 # This pref can be used to disable mozAddonManager entirely for fingerprinting
13757 # reasons. Someone like Tor browser will use this pref.
13758 # NOTE: We'd like this to be a "hidden" pref once StaticPrefs supports it.
13759 - name: privacy.resistFingerprinting.block_mozAddonManager
13760   type: RelaxedAtomicBool
13761   value: false
13762   mirror: always
13764 # Whether canvas extraction should result in random data. If false, canvas
13765 # extraction results in all-white, opaque pixel data.
13766 - name: privacy.resistFingerprinting.randomDataOnCanvasExtract
13767   type: RelaxedAtomicBool
13768   value: true
13769   mirror: always
13771 # The log level for browser console messages logged in RFPHelper.sys.mjs. Change to
13772 # 'All' and restart to see the messages.
13773 - name: privacy.resistFingerprinting.jsmloglevel
13774   type: String
13775   value: "Warn"
13776   mirror: never
13778 # Enable jittering the clock one precision value forward.
13779 - name: privacy.resistFingerprinting.reduceTimerPrecision.jitter
13780   type: RelaxedAtomicBool
13781   value: true
13782   mirror: always
13784 # Dynamically tune the resolution of the timer reduction for
13785 # `privacy.reduceTimerPrecision` and `privacy.resistFingerprinting`.
13786 - name: privacy.resistFingerprinting.reduceTimerPrecision.microseconds
13787   type: RelaxedAtomicUint32
13788   value: 1000
13789   mirror: always
13791 - name: privacy.resistFingerprinting.target_video_res
13792   type: uint32_t
13793   value: 480
13794   mirror: always
13796 # Enable resetting the fingerprinting randomization key daily for normal windwos.
13797 - name: privacy.resistFingerprinting.randomization.daily_reset.enabled
13798   type: RelaxedAtomicBool
13799   value: false
13800   mirror: always
13802 # Enable resetting the fingerprinting randomization key daily for private windwos.
13803 - name: privacy.resistFingerprinting.randomization.daily_reset.private.enabled
13804   type: RelaxedAtomicBool
13805   value: false
13806   mirror: always
13809 # Anti-tracking permission expiration.
13810 - name: privacy.restrict3rdpartystorage.expiration
13811   type: uint32_t
13812   value: 2592000   # 30 days (in seconds)
13813   mirror: always
13815 # Report Anti-tracking warnings to console lazily
13816 - name: privacy.restrict3rdpartystorage.console.lazy
13817   type: bool
13818   value: true
13819   mirror: always
13821 # Enable the heuristic to allow storage access for windows opened using window.open() after user interaction
13822 - name: privacy.restrict3rdpartystorage.heuristic.opened_window_after_interaction
13823   type: bool
13824   value: true
13825   mirror: always
13827 # Enable the heuristic to allow storage access for windows opened using window.open()
13828 - name: privacy.restrict3rdpartystorage.heuristic.window_open
13829   type: bool
13830   value: true
13831   mirror: always
13833 # Enable the heuristic to allow storage access for windows opened using window.open()
13834 - name: privacy.restrict3rdpartystorage.heuristic.redirect
13835   type: bool
13836   value: @IS_NOT_NIGHTLY_BUILD@
13837   mirror: always
13839 # Anti-tracking permission expiration.
13840 - name: privacy.restrict3rdpartystorage.expiration_redirect
13841   type: uint32_t
13842   value: 2592000   # 30 days (in seconds)
13843   mirror: always
13845 # Anti-tracking user-interaction expiration.
13846 - name: privacy.userInteraction.expiration
13847   type: uint32_t
13848   value: 3888000   # 45 days (in seconds)
13849   mirror: always
13851 # Anti-tracking user-interaction document interval.
13852 - name: privacy.userInteraction.document.interval
13853   type: uint32_t
13854   value: 1800   # 30 minutes (in seconds)
13855   mirror: always
13857 # Enable Anti-tracking testing. When it enables, it will notify the observers
13858 # when user-interaction permission or storage access permission is added. This
13859 # is for testing only.
13860 - name: privacy.antitracking.testing
13861   type: bool
13862   value: false
13863   mirror: always
13865 # Controls the anti-tracking webcompat features. This includes:
13866 # - All URL-Classifier and state partitioning skip lists (prefs and remote
13867 #   settings)
13868 # - Storage access heuristics (opener, redirect, etc.)
13869 # - StorageAccessAPI automatic grants (skips the prompt)
13870 # - Allowing specific tracking channels on user opt-in (e.g. facebook login
13871 #   shim).
13872 - name: privacy.antitracking.enableWebcompat
13873   type: RelaxedAtomicBool
13874   value: true
13875   mirror: always
13877 # Enable the heuristic to allow storage access for recent visited pages
13878 - name: privacy.restrict3rdpartystorage.heuristic.recently_visited
13879   type: bool
13880   value: true
13881   mirror: always
13883 # Valid time gap since last visit
13884 - name: privacy.restrict3rdpartystorage.heuristic.recently_visited_time
13885   type: uint32_t
13886   value: 600    # 10 minutes
13887   mirror: always
13889 # Recent visited pages redirection permission expiration.
13890 - name: privacy.restrict3rdpartystorage.expiration_visited
13891   type: uint32_t
13892   value: 2592000   # 30 days (in seconds)
13893   mirror: always
13895 # Maximum client-side cookie life-time cap. Measured in seconds, set to 0 to
13896 # disable.
13897 - name: privacy.documentCookies.maxage
13898   type: uint32_t
13899   value: 0
13900   mirror: always
13902 - name: privacy.window.maxInnerWidth
13903   type: int32_t
13904   value: 1000
13905   mirror: always
13907 - name: privacy.window.maxInnerHeight
13908   type: int32_t
13909   value: 1000
13910   mirror: always
13912 - name: privacy.sanitize.sanitizeOnShutdown
13913   type: RelaxedAtomicBool
13914   value: false
13915   mirror: always
13917 - name: privacy.clearOnShutdown.cache
13918   type: RelaxedAtomicBool
13919   value: false
13920   mirror: always
13922 - name: privacy.dynamic_firstparty.limitForeign
13923   type: RelaxedAtomicBool
13924   value: false
13925   mirror: always
13927 - name: privacy.dynamic_firstparty.use_site
13928   type: RelaxedAtomicBool
13929   value: true
13930   mirror: always
13932 - name: privacy.partition.network_state
13933   type: RelaxedAtomicBool
13934   value: true
13935   mirror: always
13937 # Partition the OCSP cache by the partitionKey.
13938 - name: privacy.partition.network_state.ocsp_cache
13939   type: RelaxedAtomicBool
13940   value: true
13941   mirror: always
13943 # Partition the OCSP cache by the partitionKey for private browsing mode.
13944 - name: privacy.partition.network_state.ocsp_cache.pbmode
13945   type: RelaxedAtomicBool
13946   value: true
13947   mirror: always
13949 # Always partition web storage APIs except cookies.
13950 - name: privacy.partition.always_partition_third_party_non_cookie_storage
13951   type: RelaxedAtomicBool
13952   value: true
13953   mirror: always
13955 # Exclude session storage from the above preference.
13956 - name: privacy.partition.always_partition_third_party_non_cookie_storage.exempt_sessionstorage
13957   type: RelaxedAtomicBool
13958   value: false
13959   mirror: always
13961 - name: privacy.partition.bloburl_per_partition_key
13962   type: bool
13963   value: true
13964   mirror: always
13966 - name: privacy.window.name.update.enabled
13967   type: bool
13968   value: true
13969   mirror: always
13971 # By default, the network state isolation is not active when there is a proxy
13972 # setting. This pref forces the network isolation even in these scenarios.
13973 - name: privacy.partition.network_state.connection_with_proxy
13974   type: bool
13975   value: false
13976   mirror: always
13978 # Partition the service workers unconditionally when dFPI is enabled.
13979 - name: privacy.partition.serviceWorkers
13980   type: RelaxedAtomicBool
13981   value: true
13982   mirror: always
13984 # Enables / disables the strip on share feature which strips query parameters
13985 # when copying/sharing in-content links or from the url bar.
13986 - name: privacy.query_stripping.strip_on_share.enabled
13987   type: RelaxedAtomicBool
13988   value: false
13989   mirror: always
13991 # Enables / disables the URL query string stripping in normal browsing mode
13992 # which strips query parameters from loading URIs to prevent bounce (redirect)
13993 # tracking.
13994 - name: privacy.query_stripping.enabled
13995   type: RelaxedAtomicBool
13996   value: false
13997   mirror: always
13999 # Same as the pref above, but controls query stripping for private browsing
14000 # mode.
14001 - name: privacy.query_stripping.enabled.pbmode
14002   type: RelaxedAtomicBool
14003   value: false
14004   mirror: always
14006 # The list which contains query parameters that are needed to be stripped from
14007 # URIs. The query parameters are separated by a space.
14008 - name: privacy.query_stripping.strip_list
14009   type: String
14010   value: ""
14011   mirror: never
14013 # This controls if we will do the query string stripping for redirects.
14014 - name: privacy.query_stripping.redirect
14015   type: bool
14016   value: true
14017   mirror: always
14019 # the list which contains sites where should exempt from query stripping
14020 - name: privacy.query_stripping.allow_list
14021   type: String
14022   value: ""
14023   mirror: never
14025 # Main pref to enable / disable the feature.
14026 - name: privacy.bounceTrackingProtection.enabled
14027   type: bool
14028   value: false
14029   mirror: once
14031 # How long to wait for a client redirect after a navigation ends.
14032 - name: privacy.bounceTrackingProtection.clientBounceDetectionTimerPeriodMS
14033   type: uint32_t
14034   value: 10000
14035   mirror: always
14037 # How long user activations will protect a site host from storage deletion.
14038 - name: privacy.bounceTrackingProtection.bounceTrackingActivationLifetimeSec
14039   type: uint32_t
14040   value: 3888000
14041   mirror: always
14043 # How long to wait for interaction after a possible bounce tracking event before
14044 # deleting a site host's storage.
14045 - name: privacy.bounceTrackingProtection.bounceTrackingGracePeriodSec
14046   type: uint32_t
14047   value: 3600
14048   mirror: always
14050 # How often to run the bounce tracking timer algorithm  which purges bounce
14051 # tracker state periodically. Set to 0 to disable purging.
14052 - name: privacy.bounceTrackingProtection.bounceTrackingPurgeTimerPeriodSec
14053   type: uint32_t
14054   value: 3600
14055   mirror: always
14057 # Whether only bounces that access storage should be considered trackers.
14058 - name: privacy.bounceTrackingProtection.requireStatefulBounces
14059   type: bool
14060   value: false
14061   mirror: always
14063 # To be used in test environments to enable observer messages.
14064 - name: privacy.bounceTrackingProtection.enableTestMode
14065   type: bool
14066   value: false
14067   mirror: always
14069 #---------------------------------------------------------------------------
14070 # Prefs starting with "prompts."
14071 #---------------------------------------------------------------------------
14073 # Prompt modal type prefs
14074 # See nsIPromptService::MODAL_TYPE fields for possible values.
14076 # Insecure form submit warning.
14077 - name: prompts.modalType.insecureFormSubmit
14078   type: int32_t
14079   value: 2
14080   mirror: always
14082 # nsHttpChannelAuthProvider#ConfirmAuth anti-phishing prompts.
14083 - name: prompts.modalType.confirmAuth
14084   type: int32_t
14085   value: 2
14086   mirror: always
14088 #---------------------------------------------------------------------------
14089 # Prefs starting with "security."
14090 #---------------------------------------------------------------------------
14092 # Mochitests that need to load resource:// URIs not declared content-accessible
14093 # in manifests should set this pref.
14094 - name: security.all_resource_uri_content_accessible
14095   type: bool
14096   value: false
14097   mirror: always
14099 - name: security.bad_cert_domain_error.url_fix_enabled
14100   type: bool
14101   value: true
14102   mirror: always
14104 - name: security.csp.reporting.script-sample.max-length
14105   type: int32_t
14106   value: 40
14107   mirror: always
14109 - name: security.csp.truncate_blocked_uri_for_frame_navigations
14110   type: bool
14111   value: true
14112   mirror: always
14114 # Limit the number of CSP reports that are send in a specific timespan.
14115 - name: security.csp.reporting.limit.count
14116   type: uint32_t
14117   value: 100
14118   mirror: always
14120 # Time span in seconds for reporting limit.
14121 - name: security.csp.reporting.limit.timespan
14122   type: uint32_t
14123   value: 2
14124   mirror: always
14126 # If true, all toplevel data: URI navigations will be blocked.
14127 # Please note that manually entering a data: URI in the
14128 # URL-Bar will not be blocked when flipping this pref.
14129 - name: security.data_uri.block_toplevel_data_uri_navigations
14130   type: bool
14131   value: true
14132   mirror: always
14134 # Whether window A is allowed to navigate cross-origin window B (that is not
14135 # a descendant frame of A) to a URI that loads externally.
14136 - name: security.allow_disjointed_external_uri_loads
14137   type: bool
14138   value: false
14139   mirror: always
14141 # Allowed by default so it doesn't affect Thunderbird/SeaMonkey, but
14142 # not allowed for Firefox Desktop in firefox.js
14143 - name: security.allow_parent_unrestricted_js_loads
14144   type: RelaxedAtomicBool
14145   value: true
14146   mirror: always
14148 # Allowed by default so it doesn't affect Thunderbird/SeaMonkey, but
14149 # not allowed for Firefox Desktop in firefox.js
14150 - name: security.allow_eval_with_system_principal
14151   type: RelaxedAtomicBool
14152   value: true
14153   mirror: always
14155 # Allowed by default so it doesn't affect Thunderbird/SeaMonkey, but
14156 # not allowed for Firefox Desktop in firefox.js
14157 - name: security.allow_eval_in_parent_process
14158   type: RelaxedAtomicBool
14159   value: true
14160   mirror: always
14162 # Disallowed by default, ensure not disallowed content is loaded in the parent
14163 # process.
14164 - name: security.allow_unsafe_parent_loads
14165   type: bool
14166   value: false
14167   mirror: always
14169 # Pref to block mixed scripts (fonts, plugin content, scripts, stylesheets,
14170 # iframes, websockets, XHR).
14171 - name: security.mixed_content.block_active_content
14172   type: bool
14173   value: @IS_ANDROID@
14174   mirror: always
14176 # Pref to block sub requests that happen within an object.
14177 - name: security.mixed_content.block_object_subrequest
14178   type: bool
14179   value: false
14180   mirror: always
14182 # Pref for mixed display content blocking (images, audio, video).
14183 - name: security.mixed_content.block_display_content
14184   type: bool
14185   value: false
14186   mirror: always
14188 # Prerequisite pref for mixed display content upgrading (images, audio, video).
14189 - name: security.mixed_content.upgrade_display_content
14190   type: bool
14191   value: @IS_NIGHTLY_BUILD@
14192   mirror: always
14194 # Upgrade images when the upgrading is enabled.
14195 - name: security.mixed_content.upgrade_display_content.image
14196   type: bool
14197   value: @IS_NIGHTLY_BUILD@
14198   mirror: always
14200 # Upgrade audio when the upgrading is enabled.
14201 - name: security.mixed_content.upgrade_display_content.audio
14202   type: bool
14203   value: true
14204   mirror: always
14206 # Upgrade videos when the upgrading is enabled.
14207 - name: security.mixed_content.upgrade_display_content.video
14208   type: bool
14209   value: true
14210   mirror: always
14212 # Whether strict file origin policy is in effect. "False" is traditional.
14213 - name: security.fileuri.strict_origin_policy
14214   type: RelaxedAtomicBool
14215   value: true
14216   mirror: always
14218 # The level to which we sandbox the content process. firefox.js sets the
14219 # default to different values on a per-OS basis, and has documentation
14220 # on what the defaults are and what the numbers mean.
14221 - name: security.sandbox.content.level
14222   type: int32_t
14223   value: 0
14224   mirror: always
14225   do_not_use_directly: true # Consumers should use SandboxSettings to ask.
14227 - name: security.sandbox.socket.process.level
14228   type: int32_t
14229   value: 0
14230   mirror: always
14231   do_not_use_directly: true # Consumers should use SandboxSettings to ask.
14233 # This controls the strength of the Windows GPU process sandbox.  Changes
14234 # will require restart.
14235 # For information on what the level number means, see
14236 # SetSecurityLevelForGPUProcess() in
14237 # security/sandbox/win/src/sandboxbroker/sandboxBroker.cpp
14238 - name: security.sandbox.gpu.level
14239   type: int32_t
14240 #if defined(XP_WIN)
14241   value: 1
14242 #else
14243   value: 0
14244 #endif
14245   mirror: always
14247 # Enrollment preferences for the win32k experiment, set and managed by Normandy
14248 - name: security.sandbox.content.win32k-experiment.enrollmentStatus
14249   type: uint32_t
14250   value: 0
14251   mirror: never
14253 - name: security.sandbox.content.win32k-experiment.startupEnrollmentStatus
14254   type: uint32_t
14255   value: 0
14256   mirror: never
14258 #if defined(XP_WIN) && defined(MOZ_SANDBOX)
14260   # Whether win32k is disabled for content processes.
14261   # true means win32k system calls are not permitted.
14262 -   name: security.sandbox.content.win32k-disable
14263     type: RelaxedAtomicBool
14264     value: true
14265     mirror: always
14267   # Note: win32k is currently _not_ disabled for GMP due to intermittent test
14268   # failures, where the GMP process fails very early. See bug 1449348.
14269 -   name: security.sandbox.gmp.win32k-disable
14270     type: RelaxedAtomicBool
14271     value: false
14272     mirror: always
14274   # Whether win32k is disabled for socket processes.
14275   # true means win32k system calls are not permitted.
14276 -   name: security.sandbox.socket.win32k-disable
14277     type: RelaxedAtomicBool
14278     value: true
14279     mirror: always
14281   # Whether CET User Shadow Stack compatible modules only is enabled for the
14282   # relevant process type.
14283 -   name: security.sandbox.content.shadow-stack.enabled
14284     type: RelaxedAtomicBool
14285     value: false
14286     mirror: always
14288 -   name: security.sandbox.rdd.shadow-stack.enabled
14289     type: RelaxedAtomicBool
14290     value: true
14291     mirror: always
14293 -   name: security.sandbox.socket.shadow-stack.enabled
14294     type: RelaxedAtomicBool
14295     value: true
14296     mirror: always
14298 -   name: security.sandbox.gpu.shadow-stack.enabled
14299     type: RelaxedAtomicBool
14300     value: true
14301     mirror: always
14303 -   name: security.sandbox.gmp.shadow-stack.enabled
14304     type: RelaxedAtomicBool
14305     value: true
14306     mirror: always
14308   # Whether a Low Privilege AppContainer (LPAC) is enabled for the relevant
14309   # process type.
14311 #if defined(MOZ_WMF_MEDIA_ENGINE)
14312 -   name: security.sandbox.utility-wmf-cdm.lpac.enabled
14313     type: RelaxedAtomicBool
14314     value: true
14315     mirror: always
14316 #endif
14318   # Whether Arbitrary Code Guard is enabled for the RDD process.
14319 -   name: security.sandbox.rdd.acg.enabled
14320     type: RelaxedAtomicBool
14321     value: true
14322     mirror: always
14324 #ifdef MOZ_WMF
14325   # Whether Arbitrary Code Guard is enabled for the utility WMF audio decoder
14326   # process.
14328 -   name: security.sandbox.utility-wmf.acg.enabled
14329     type: RelaxedAtomicBool
14330     value: true
14331     mirror: always
14332 #endif  // MOZ_WMF
14334   # This controls the depth of stack trace that is logged when Windows sandbox
14335   # logging is turned on. This is only currently available for the content
14336   # process because the only other sandbox (for GMP) has too strict a policy to
14337   # allow stack tracing. This does not require a restart to take effect.
14338 -   name: security.sandbox.windows.log.stackTraceDepth
14339     type: RelaxedAtomicUint32
14340     value: 0
14341     mirror: always
14342 #endif
14344 #if defined(XP_LINUX) && defined(MOZ_SANDBOX)
14345   # Run content processes in headless mode and disallow
14346   # connections to the X server.  Requires:
14347   # * `webgl.out-of-process` (or else WebGL breaks)
14348   # * `widget.non-native-theme.enabled` (scrollbars & form controls)
14349   # Changing it requires a restart because sandbox policy information
14350   # dependent on it is cached.  See bug 1640345 for details.
14351 - name: security.sandbox.content.headless
14352   type: bool
14353   value: true
14354   mirror: once
14355 #endif
14357 # Pref to show warning when submitting from secure to insecure.
14358 - name: security.warn_submit_secure_to_insecure
14359   type: bool
14360   value: true
14361   mirror: always
14363 # Hardware Origin-bound Second Factor Support
14364 - name: security.webauth.webauthn
14365   type: bool
14366   value: true
14367   mirror: always
14369 # WebAuthn CTAP2 support
14370 - name: security.webauthn.ctap2
14371   type: RelaxedAtomicBool
14372   value: true
14373   mirror: always
14374   rust: true
14376 # WebAuthn JSON serialization methods
14377 - name: security.webauthn.enable_json_serialization_methods
14378   type: RelaxedAtomicBool
14379   value: true
14380   mirror: always
14382 # WebAuthn conditional mediation
14383 - name: security.webauthn.enable_conditional_mediation
14384   type: RelaxedAtomicBool
14385   value: true
14386   mirror: always
14388 # Dispatch WebAuthn requests to virtual authenticators (mutually exclusive
14389 # with and webauthn_enable_usbtoken)
14390 - name: security.webauth.webauthn_enable_softtoken
14391   type: RelaxedAtomicBool
14392   value: false
14393   mirror: always
14394   rust: true
14396 # residentKey support when using Android platform API
14397 - name: security.webauthn.webauthn_enable_android_fido2.residentkey
14398   type: RelaxedAtomicBool
14399   value: false
14400   mirror: always
14402 # Dispatch WebAuthn requests to the macOS platform API
14403 - name: security.webauthn.enable_macos_passkeys
14404   type: RelaxedAtomicBool
14405   value: true
14406   mirror: always
14408 # Dispatch WebAuthn requests to authenticator-rs
14409 - name: security.webauth.webauthn_enable_usbtoken
14410   type: RelaxedAtomicBool
14411   value: @IS_NOT_ANDROID@
14412   mirror: always
14413   rust: true
14415 # Skip direct attestation consent prompts (for tests).
14416 - name: security.webauth.webauthn_testing_allow_direct_attestation
14417   type: RelaxedAtomicBool
14418   value: false
14419   mirror: always
14420   rust: true
14422 # Show the Windows Passkey settings link in about:preferences. This is
14423 # set to true if we find that webauthn.dll is sufficiently recent.
14424 - name: security.webauthn.show_ms_settings_link
14425   type: RelaxedAtomicBool
14426   value: false
14427   mirror: always
14429 # Block Worker/SharedWorker scripts with wrong MIME type.
14430 - name: security.block_Worker_with_wrong_mime
14431   type: bool
14432   value: true
14433   mirror: always
14435 # Block the execution of scripts using a wrong type as defined by the file extension
14436 # (OS) mapping when loaded via the file:// protocol.
14437 - name: security.block_fileuri_script_with_wrong_mime
14438   type: bool
14439   value: false
14440   mirror: always
14442 # Cancel outgoing requests from SystemPrincipal:
14443 # but only with scheme http(s) and contentpolicytype subdocument
14444 - name: security.disallow_privileged_https_subdocuments_loads
14445   type: bool
14446   value: true
14447   mirror: always
14449 # but only with scheme data and contentpolicytype subdocument
14450 - name: security.disallow_privileged_data_subdocuments_loads
14451   type: bool
14452   value: true
14453   mirror: always
14455 # Cancel outgoing requests from SystemPrincipal:
14456 # but only with scheme http(s) and contentpolicytype stylesheet
14457 - name: security.disallow_privileged_https_stylesheet_loads
14458   type: bool
14459   value: true
14460   mirror: always
14462 # Cancel outgoing requests from SystemPrincipal:
14463 # but only with scheme http(s) and contentpolicytype script
14464 - name: security.disallow_privileged_https_script_loads
14465   type: bool
14466   value: true
14467   mirror: always
14469 # Cancel outgoing requests from SystemPrincipal:
14470 # where there is no finalURI.
14471 - name: security.disallow_privileged_no_finaluri_loads
14472   type: bool
14473   value: true
14474   mirror: always
14476 # Cancel outgoing requests from privileged about pages:
14477 # but only with scheme http(s) and contentpolicytype script
14478 - name: security.disallow_privilegedabout_remote_script_loads
14479   type: bool
14480   value: true
14481   mirror: always
14483 # Enable preloaded static key pins by default.
14484 - name: security.cert_pinning.enforcement_level
14485   type: RelaxedAtomicUint32
14486   value: 1
14487   mirror: always
14488   do_not_use_directly: true
14490 # OCSP fetching behavior:
14491 # 0: do not fetch OCSP
14492 # 1: fetch OCSP for DV and EV certificates
14493 # 2: fetch OCSP only for EV certificates
14494 - name: security.OCSP.enabled
14495   type: RelaxedAtomicUint32
14496 #ifdef ANDROID
14497   value: 2
14498 #else
14499   value: 1
14500 #endif
14501   mirror: always
14504 # Whether or not OCSP is required.
14505 # true => hard-fail (if an OCSP request times out, stop the connection)
14506 # false => soft-fail (if an OCSP request times out, continue the connection)
14507 - name: security.OCSP.require
14508   type: RelaxedAtomicBool
14509   value: false
14510   mirror: always
14512 # How many milliseconds to wait for an OCSP response before assuming it failed
14513 # (when fetching for soft-fail).
14514 - name: security.OCSP.timeoutMilliseconds.soft
14515   type: RelaxedAtomicUint32
14516 #ifdef RELEASE_OR_BETA
14517   value: 2000
14518 #else
14519   value: 1000
14520 #endif
14521   mirror: always
14523 # How many milliseconds to wait for an OCSP response before assuming it failed
14524 # (when fetching for hard-fail).
14525 - name: security.OCSP.timeoutMilliseconds.hard
14526   type: RelaxedAtomicUint32
14527   value: 10000
14528   mirror: always
14530 # Whether or not to enable OCSP must-staple (in other words, TLS-feature with
14531 # status request).
14532 - name: security.ssl.enable_ocsp_must_staple
14533   type: RelaxedAtomicBool
14534   value: true
14535   mirror: always
14537 # Whether or not to enable OCSP stapling.
14538 - name: security.ssl.enable_ocsp_stapling
14539   type: RelaxedAtomicBool
14540   value: true
14541   mirror: always
14543 # This is checked at startup to see if NSS should be initialized without the
14544 # user's certificate and key databases.
14545 - name: security.nocertdb
14546   type: bool
14547   value: false
14548   mirror: once
14550 # Whether or not to import and trust third party root certificates from the OS.
14551 - name: security.enterprise_roots.enabled
14552   type: RelaxedAtomicBool
14553   value: true
14554   mirror: always
14556 - name: security.intermediate_preloading_healer.enabled
14557   type: RelaxedAtomicBool
14558   value: @IS_NOT_ANDROID@
14559   mirror: always
14561 - name: security.intermediate_preloading_healer.timer_interval_ms
14562   type: RelaxedAtomicUint32
14563   value: 300000
14564   mirror: always
14566 # If true, attempt to load the osclientcerts PKCS#11 module at startup on a
14567 # background thread. This module allows Firefox to use client certificates
14568 # stored in OS certificate storage. Currently only available for Windows and
14569 # macOS.
14570 - name: security.osclientcerts.autoload
14571   type: RelaxedAtomicBool
14572   value: true
14573   mirror: always
14575 # If true, assume tokens accessed via osclientcerts implement RSA-PSS. If a
14576 # given token does not support RSA-PSS, users may see the error
14577 # 'SEC_ERROR_PKCS11_GENERAL_ERROR' if a server indicates it will accept an
14578 # RSA-PSS signature in the client's certificate verify message.
14579 # Setting this to false may allow such connections to succeed, if the server
14580 # also accepts RSA-PKCS1 signatures.
14581 - name: security.osclientcerts.assume_rsa_pss_support
14582   type: RelaxedAtomicBool
14583   value: true
14584   mirror: always
14586 - name: security.pki.cert_short_lifetime_in_days
14587   type: RelaxedAtomicUint32
14588   value: 10
14589   mirror: always
14591 # security.pki.netscape_step_up_policy controls how the platform handles the
14592 # id-Netscape-stepUp OID in extended key usage extensions of CA certificates.
14593 # 0: id-Netscape-stepUp is always considered equivalent to id-kp-serverAuth
14594 # 1: it is considered equivalent when the notBefore is before 23 August 2016
14595 # 2: similarly, but for 23 August 2015
14596 # 3: it is never considered equivalent
14597 - name: security.pki.netscape_step_up_policy
14598   type: RelaxedAtomicUint32
14599 #ifdef RELEASE_OR_BETA
14600   value: 1
14601 #else
14602   value: 2
14603 #endif
14604   mirror: always
14606 # Configures Certificate Transparency support mode:
14607 # 0: Fully disabled.
14608 # 1: Only collect telemetry. CT qualification checks are not performed.
14609 - name: security.pki.certificate_transparency.mode
14610   type: RelaxedAtomicUint32
14611   value: 0
14612   mirror: always
14614 # 0: Disable CRLite entirely.
14615 # 1: Consult CRLite but only collect telemetry.
14616 # 2: Consult CRLite and enforce both "Revoked" and "Not Revoked" results.
14617 # 3: Consult CRLite and enforce "Not Revoked" results, but defer to OCSP for "Revoked".
14618 - name: security.pki.crlite_mode
14619   type: RelaxedAtomicUint32
14620   value: 3
14621   mirror: always
14623 - name: security.tls.version.min
14624   type: RelaxedAtomicUint32
14625   value: 3
14626   mirror: always
14628 - name: security.tls.version.max
14629   type: RelaxedAtomicUint32
14630   value: 4
14631   mirror: always
14633 - name: security.tls.version.enable-deprecated
14634   type: RelaxedAtomicBool
14635   value: false
14636   mirror: always
14638 - name: security.tls.version.fallback-limit
14639   type: RelaxedAtomicUint32
14640   value: 4
14641   mirror: always
14643 # Turn off post-handshake authentication for TLS 1.3 by default,
14644 # until the incompatibility with HTTP/2 is resolved:
14645 # https://tools.ietf.org/html/draft-davidben-http2-tls13-00
14646 - name: security.tls.enable_post_handshake_auth
14647   type: RelaxedAtomicBool
14648   value: false
14649   mirror: always
14651 # Probability of GREASEing a TLS connection with ECH (0-100)
14652 # 0 means never GREASE, 100 means always GREASE
14653 - name: security.tls.ech.grease_probability
14654   type: RelaxedAtomicUint32
14655   value: 100
14656   mirror: always
14658 # Whether to apply ECH GREASE settings to HTTP3/QUIC connections
14659 - name: security.tls.ech.grease_http3
14660   type: RelaxedAtomicBool
14661   value: true
14662   mirror: always
14664 # Whether to retry connections without ECH Grease
14665 - name: security.tls.ech.disable_grease_on_fallback
14666   type: RelaxedAtomicBool
14667   value: false
14668   mirror: always
14670 # ECH GREASE Padding target (1-255)
14671 - name: security.tls.ech.grease_size
14672   type: RelaxedAtomicUint32
14673   value: 100
14674   mirror: always
14676 # Whether to apply GREASE settings to HTTP3/QUIC connections
14677 - name: security.tls.grease_http3_enable
14678   type: RelaxedAtomicBool
14679   value: false
14680   mirror: always
14681   rust: true
14683 - name: security.tls.hello_downgrade_check
14684   type: RelaxedAtomicBool
14685   value: true
14686   mirror: always
14688 - name: security.tls.enable_delegated_credentials
14689   type: RelaxedAtomicBool
14690   value: true
14691   mirror: always
14693 - name: security.tls.enable_0rtt_data
14694   type: RelaxedAtomicBool
14695   value: true
14696   mirror: always
14698 - name: security.tls.enable_kyber
14699   type: RelaxedAtomicBool
14700 #ifdef ANDROID
14701   value: false
14702 #else
14703   value: @IS_NIGHTLY_BUILD@
14704 #endif
14705   mirror: always
14707 - name: security.ssl.treat_unsafe_negotiation_as_broken
14708   type: RelaxedAtomicBool
14709   value: false
14710   mirror: always
14712 - name: security.ssl.require_safe_negotiation
14713   type: RelaxedAtomicBool
14714   value: false
14715   mirror: always
14717 - name: security.ssl.enable_false_start
14718   type: RelaxedAtomicBool
14719   value: true
14720   mirror: always
14722 - name: security.ssl.enable_alpn
14723   type: RelaxedAtomicBool
14724   value: true
14725   mirror: always
14727 - name: security.ssl.disable_session_identifiers
14728   type: RelaxedAtomicBool
14729   value: false
14730   mirror: always
14732 - name: security.ssl3.ecdhe_rsa_aes_128_gcm_sha256
14733   type: RelaxedAtomicBool
14734   value: true
14735   mirror: always
14737 - name: security.ssl3.ecdhe_ecdsa_aes_128_gcm_sha256
14738   type: RelaxedAtomicBool
14739   value: true
14740   mirror: always
14742 - name: security.ssl3.ecdhe_ecdsa_chacha20_poly1305_sha256
14743   type: RelaxedAtomicBool
14744   value: true
14745   mirror: always
14747 - name: security.ssl3.ecdhe_rsa_chacha20_poly1305_sha256
14748   type: RelaxedAtomicBool
14749   value: true
14750   mirror: always
14752 - name: security.ssl3.ecdhe_ecdsa_aes_256_gcm_sha384
14753   type: RelaxedAtomicBool
14754   value: true
14755   mirror: always
14757 - name: security.ssl3.ecdhe_rsa_aes_256_gcm_sha384
14758   type: RelaxedAtomicBool
14759   value: true
14760   mirror: always
14762 - name: security.ssl3.ecdhe_rsa_aes_128_sha
14763   type: RelaxedAtomicBool
14764   value: true
14765   mirror: always
14767 - name: security.ssl3.ecdhe_ecdsa_aes_128_sha
14768   type: RelaxedAtomicBool
14769   value: @IS_NOT_EARLY_BETA_OR_EARLIER@
14770   mirror: always
14772 - name: security.ssl3.ecdhe_rsa_aes_256_sha
14773   type: RelaxedAtomicBool
14774   value: true
14775   mirror: always
14777 - name: security.ssl3.ecdhe_ecdsa_aes_256_sha
14778   type: RelaxedAtomicBool
14779   value: @IS_NOT_EARLY_BETA_OR_EARLIER@
14780   mirror: always
14782 - name: security.ssl3.dhe_rsa_aes_128_sha
14783   type: RelaxedAtomicBool
14784   value: false
14785   mirror: always
14787 - name: security.ssl3.dhe_rsa_aes_256_sha
14788   type: RelaxedAtomicBool
14789   value: false
14790   mirror: always
14792 - name: security.ssl3.rsa_aes_128_sha
14793   type: RelaxedAtomicBool
14794   value: true
14795   mirror: always
14797 - name: security.ssl3.rsa_aes_256_sha
14798   type: RelaxedAtomicBool
14799   value: true
14800   mirror: always
14802 - name: security.ssl3.rsa_aes_128_gcm_sha256
14803   type: RelaxedAtomicBool
14804   value: true
14805   mirror: always
14807 - name: security.ssl3.rsa_aes_256_gcm_sha384
14808   type: RelaxedAtomicBool
14809   value: true
14810   mirror: always
14812 - name: security.ssl3.deprecated.rsa_des_ede3_sha
14813   type: RelaxedAtomicBool
14814   value: true
14815   mirror: always
14817 - name: security.tls13.aes_128_gcm_sha256
14818   type: RelaxedAtomicBool
14819   value: true
14820   mirror: always
14822 - name: security.tls13.chacha20_poly1305_sha256
14823   type: RelaxedAtomicBool
14824   value: true
14825   mirror: always
14827 - name: security.tls13.aes_256_gcm_sha384
14828   type: RelaxedAtomicBool
14829   value: true
14830   mirror: always
14832 #---------------------------------------------------------------------------
14833 # Prefs starting with "signon."
14834 #---------------------------------------------------------------------------
14835 - name: signon.usernameOnlyForm.enabled
14836   type: bool
14837   value: true
14838   mirror: always
14840 #---------------------------------------------------------------------------
14841 # Prefs starting with "slider."
14842 #---------------------------------------------------------------------------
14844 # Scrollbar snapping region.
14845 # - 0: off
14846 # - 1 and higher: slider thickness multiple
14847 - name: slider.snapMultiplier
14848   type: int32_t
14849 #ifdef XP_WIN
14850   value: 6
14851 #else
14852   value: 0
14853 #endif
14854   mirror: always
14856 #---------------------------------------------------------------------------
14857 # Prefs starting with "storage."
14858 #---------------------------------------------------------------------------
14860 # Whether to use a non-exclusive VFS.
14861 # By default we use the unix-excl VFS, for the following reasons:
14862 # 1. It improves compatibility with NFS shares, whose implementation
14863 #    is incompatible with SQLite's locking requirements (reliable fcntl), and
14864 #    in particular with WAL journaling.
14865 #    Bug 433129 attempted to automatically identify such file-systems,
14866 #    but a reliable way was not found and the fallback locking is slower than
14867 #    POSIX locking, so we do not want to do it by default.
14868 # 2. It allows wal mode to avoid the memory mapped -shm file, reducing the
14869 #    likelihood of SIGBUS failures when disk space is exhausted.
14870 # 3. It provides some protection from third party database tampering while a
14871 #    connection is open.
14872 # Note there's no win32-excl VFS, so this has no effect on Windows.
14873 - name: storage.sqlite.exclusiveLock.enabled
14874   type: RelaxedAtomicBool
14875   value: @IS_NOT_ANDROID@
14876   mirror: always
14878 #---------------------------------------------------------------------------
14879 # Prefs starting with "svg."
14880 #---------------------------------------------------------------------------
14882 # This pref controls whether the 'context-fill' and 'context-stroke' keywords
14883 # can be used in SVG-as-an-image in the content processes to use the fill/
14884 # stroke specified on the element that embeds the image. (These keywords are
14885 # always enabled in the chrome process, regardless of this pref.) Also, these
14886 # keywords are currently not part of any spec, which is partly why we disable
14887 # them for web content.
14888 - name: svg.context-properties.content.enabled
14889   type: RelaxedAtomicBool
14890   value: false
14891   mirror: always
14893 # This pref controls whether the `prefers-color-scheme` value of SVG images
14894 # reacts to the embedder `color-scheme` in content.
14895 - name: svg.embedder-prefers-color-scheme.content.enabled
14896   type: RelaxedAtomicBool
14897   value: true
14898   mirror: always
14900 # Enables the 'context-fill' and 'context-stroke' keywords for particular
14901 # domains. We expect this list to be Mozilla-controlled properties, since the
14902 # 'context-*' keywords are not part of any spec. We expect to remove this
14903 # preference and the 'context-` keyword support entirely in the
14904 # not-too-distant future when a standardized alternative ships. This preference
14905 # is _not_ for allowing web content to use these keywords. For performance
14906 # reasons, the list of domains in this preference should remain short in
14907 # length.
14908 - name: svg.context-properties.content.allowed-domains
14909   type: String
14910   value: ""
14911   mirror: never
14913 # Is support for the new getBBox method from SVG 2 enabled?
14914 # See https://svgwg.org/svg2-draft/single-page.html#types-SVGBoundingBoxOptions
14915 - name: svg.new-getBBox.enabled
14916   type: bool
14917   value: false
14918   mirror: always
14920 # Whether SVGGraphicsElement.nearestViewportElement and SVGGraphicsElement.farthestViewportElement are enabled.
14921 - name: svg.nearestAndFarthestViewportElement.enabled
14922   type: bool
14923   value: @IS_NOT_EARLY_BETA_OR_EARLIER@
14924   mirror: always
14926 # Whether SVGAElement.text is enabled.
14927 - name: svg.SVGAElement.text.enabled
14928   type: bool
14929   value: false
14930   mirror: always
14932 # Tweak which elements are allowed in <svg:use> subtrees, and in which
14933 # circumstances. See RemoveForbiddenNodes in SVGUseElement.cpp for the spec
14934 # text.
14936 # - 0: Don't restrict ever.
14937 # - 1: Restrict only cross-document.
14938 # - 2/other: restrict always.
14940 # We allow the behavior to be configurable via this pref. Our chosen default
14941 # value forbids non-graphical content in <svg:use> clones of cross-document
14942 # elements. This is a compromise between our more-permissive pre-existing
14943 # behavior (which SVG 2 seems to call for, and maps to pref value 0) and the
14944 # behavior of other UAs (which SVG 1.1 seems to call for, and maps to pref
14945 # value 2).
14946 - name: svg.use-element.graphics-element-restrictions
14947   type: int32_t
14948   value: 1
14949   mirror: always
14951 # Whether to restrict <svg:use> element recursion levels.
14953 # - 0: Don't restrict ever.
14954 # - 1: Restrict everywhere
14955 # - 2/other: Restrict only in the parent process.
14957 - name: svg.use-element.recursive-clone-limit.enabled
14958   type: int32_t
14959   value: 2
14960   mirror: always
14962 # What is the recursion limit for svg use element cloning if enabled.
14963 - name: svg.use-element.recursive-clone-limit
14964   type: uint32_t
14965   value: 8
14966   mirror: always
14968 # Whether <svg:use> with a data: URL as href is allowed
14969 - name: svg.use-element.data-url-href.allowed
14970   type: bool
14971   value: false
14972   mirror: always
14974 #---------------------------------------------------------------------------
14975 # Prefs starting with "telemetry."
14976 #---------------------------------------------------------------------------
14978 - name: telemetry.number_of_site_origin.min_interval
14979   type: uint32_t
14980   value: 300000
14981   mirror: always
14983 - name: telemetry.fog.test.localhost_port
14984   type: RelaxedAtomicInt32
14985   value: 0
14986   mirror: always
14987   rust: true
14989 - name: telemetry.fog.test.activity_limit
14990   type: RelaxedAtomicUint32
14991   value: 120
14992   mirror: always
14993   rust: true
14995 - name: telemetry.fog.test.inactivity_limit
14996   type: RelaxedAtomicUint32
14997   value: 1200
14998   mirror: always
14999   rust: true
15001 - name: telemetry.fog.artifact_build
15002   type: RelaxedAtomicBool
15003   value: false
15004   mirror: always
15006 #---------------------------------------------------------------------------
15007 # Prefs starting with "test."
15008 #---------------------------------------------------------------------------
15010 - name: test.events.async.enabled
15011   type: RelaxedAtomicBool
15012   value: false
15013   mirror: always
15015 - name: test.mousescroll
15016   type: RelaxedAtomicBool
15017   value: false
15018   mirror: always
15020 #---------------------------------------------------------------------------
15021 # Prefs starting with "thread."
15022 #---------------------------------------------------------------------------
15024 # If control tasks aren't enabled, they get medium high priority.
15025 - name: threads.control_event_queue.enabled
15026   type: RelaxedAtomicBool
15027   value: true
15028   mirror: always
15030 # If the service is available, set threads to low-power mode when in the background.
15031 - name: threads.use_low_power.enabled
15032   type: RelaxedAtomicBool
15033   value: @IS_NIGHTLY_BUILD@
15034   mirror: always
15037 # If the process priority is set to background, put the main thread in the background.
15038 # Currently off by default.
15039 - name: threads.lower_mainthread_priority_in_background.enabled
15040   type: bool
15041   value: @IS_NIGHTLY_BUILD@
15042   mirror: always
15044 #---------------------------------------------------------------------------
15045 # Prefs starting with "timer."
15046 #---------------------------------------------------------------------------
15048 # Since our timestamp on macOS does not increment while the system is asleep, we
15049 # should ignore sleep/wake notifications to make timer thread process timers.
15050 - name: timer.ignore_sleep_wake_notifications
15051   type: RelaxedAtomicBool
15052 #ifdef XP_MACOSX
15053   value: true
15054 #else
15055   value: false
15056 #endif
15057   mirror: always
15059 # Amount of time by which it is always acceptable to delay the firing of a timer.
15060 # Any timer may be delayed by up to this amount in order to enable timers to be
15061 # bundled together for efficiency.
15062 - name: timer.minimum_firing_delay_tolerance_ms
15063   type: AtomicFloat
15064   value: 1.0
15065   mirror: always
15067 # Maximum amount of time by which it is ever acceptable to delay the firing of a timer.
15068 # Setting this to zero will effectively disable timer coalescing.
15069 - name: timer.maximum_firing_delay_tolerance_ms
15070   type: AtomicFloat
15071   value: 10000.0
15072   mirror: always
15074 #ifdef XP_WIN
15075   # Controls whether or not TimerThread will automatically increase the Windows timer
15076   # resolution when appropriate conditions are met.
15077 -   name: timer.auto_increase_timer_resolution
15078     type: RelaxedAtomicBool
15079 #ifdef NIGHTLY_BUILD
15080     value: true
15081 #else
15082     value: false
15083 #endif
15084     mirror: always
15085 #endif
15087 #---------------------------------------------------------------------------
15088 # Prefs starting with "toolkit."
15089 #---------------------------------------------------------------------------
15091 # Makes removeDirectory background task wait for the given milliseconds before removal.
15092 - name: toolkit.background_tasks.remove_directory.testing.sleep_ms
15093   type: RelaxedAtomicUint32
15094   value: 0
15095   mirror: always
15097 # Returns true if BHR is disabled.
15098 - name: toolkit.content-background-hang-monitor.disabled
15099   type: bool
15100   value: false
15101   mirror: always
15103 - name: toolkit.scrollbox.smoothScroll
15104   type: RelaxedAtomicBool
15105   value: true
15106   mirror: always
15108 - name: toolkit.scrollbox.horizontalScrollDistance
15109   type: RelaxedAtomicInt32
15110   value: 5
15111   mirror: always
15113 - name: toolkit.scrollbox.verticalScrollDistance
15114   type: RelaxedAtomicInt32
15115   value: 3
15116   mirror: always
15118 # The lateWriteChecksStage and fastShutdownStage below represent the stage
15119 # of shutdown after which we (for lateWriteChecksStage) crash / gather
15120 # telemetry data on file writes, or (for fastShutdownStage) we call _exit(0).
15121 # Higher values are earlier during shutdown, and the full enumeration can
15122 # be found in AppShutdown.h in the AppShutdownPhase enum.
15123 - name: toolkit.shutdown.lateWriteChecksStage
15124   type: int32_t
15125 #ifdef MOZ_CODE_COVERAGE
15126   value: 0
15127 #else
15128   value: 2
15129 #endif
15130   mirror: always
15132 # See the comment above toolkit.shutdown.lateWriteChecksStage. A higher value
15133 # for this pref means we call _exit(0) earlier during shutdown.
15134 - name: toolkit.shutdown.fastShutdownStage
15135   type: int32_t
15136 #if !defined(DEBUG) && !defined(MOZ_ASAN) && !defined(MOZ_TSAN) && !defined(MOZ_CODE_COVERAGE) && !defined(MOZ_VALGRIND) && !defined(MOZ_PROFILE_GENERATE) && !defined(JS_STRUCTURED_SPEW)
15137   value: 1
15138 #else
15139   value: 0
15140 #endif
15141   mirror: always
15143 # Sending each remote accumulation immediately places undue strain on the IPC
15144 # subsystem. Batch the remote accumulations for a period of time before sending
15145 # them all at once. This value was chosen as a balance between data timeliness
15146 # and performance (see bug 1218576).
15147 - name: toolkit.telemetry.ipcBatchTimeout
15148   type: uint32_t
15149   value: 2000
15150   mirror: always
15152 - name: toolkit.telemetry.geckoview.batchDurationMS
15153   type: RelaxedAtomicUint32
15154   value: 5000
15155   mirror: always
15157 - name: toolkit.telemetry.geckoview.maxBatchStalenessMS
15158   type: RelaxedAtomicUint32
15159   value: 60000
15160   mirror: always
15162 - name: toolkit.telemetry.geckoview.streaming
15163   type: RelaxedAtomicBool
15164   value: false
15165   mirror: always
15167 - name: toolkit.telemetry.testing.overrideProductsCheck
15168   type: RelaxedAtomicBool
15169   value: false
15170   mirror: always
15172 #---------------------------------------------------------------------------
15173 # Prefs starting with "ui."
15174 #---------------------------------------------------------------------------
15176 - name: ui.key.generalAccessKey
15177   type: int32_t
15178   value: -1
15179   mirror: always
15181 # Use 17 for Ctrl, 18 for Alt, 91 or 224 for Meta, 0 for none.
15182 - name: ui.key.accelKey
15183   type: uint32_t
15184 #ifdef XP_MACOSX
15185   value: 224
15186 #else
15187   value: 17
15188 #endif
15189   mirror: always
15191 # See above for the key codes to use.
15192 - name: ui.key.menuAccessKey
15193   type: uint32_t
15194 #ifdef XP_MACOSX
15195   value: 0
15196 #else
15197   value: 18
15198 #endif
15199   mirror: always
15201 # Only used if generalAccessKey is -1.
15202 - name: ui.key.chromeAccess
15203   type: int32_t
15204 #ifdef XP_MACOSX
15205   # 0 = disabled, 1 = Shift, 2 = Ctrl, 4 = Alt, 3 =  ctrl+shift, 8 = Meta
15206   value: 2
15207 #else
15208   # 0 = disabled, 1 = Shift, 2 = Ctrl, 4 = Alt, 5 =  Alt+Shift, 8 = Win
15209   value: 4
15210 #endif
15211   mirror: always
15213 # Only used if generalAccessKey is -1.
15214 - name: ui.key.contentAccess
15215   type: int32_t
15216 #ifdef XP_MACOSX
15217   # 0 = disabled, 1 = Shift, 2 = Ctrl, 4 = Alt, 3 = ctrl+shift, 8 = Meta
15218   value: 6
15219 #else
15220   # 0 = disabled, 1 = Shift, 2 = Ctrl, 4 = Alt, 5 =  Alt+Shift, 8 = Win
15221   value: 5
15222 #endif
15223   mirror: always
15225 #ifdef XP_WIN
15226 - name: ui.key.layout.load_when_first_needed
15227   type: bool
15228   value: @IS_EARLY_BETA_OR_EARLIER@
15229   mirror: always
15230 #endif
15232 # Does the access key by itself focus the menu bar?
15233 - name: ui.key.menuAccessKeyFocuses
15234   type: bool
15235 #if defined(XP_WIN) || defined(MOZ_WIDGET_GTK)
15236   # On Windows and Linux, we now default to showing the menu bar only when alt
15237   # is pressed.
15238   value: true
15239 #else
15240   value: false
15241 #endif
15242   mirror: always
15244 # Whether native key bindings in the environment or builtin shortcut key
15245 # definitions in Gecko are used first in <input> and <textarea>
15246 - name: ui.key.textcontrol.prefer_native_key_bindings_over_builtin_shortcut_key_definitions
15247   type: bool
15248   value: true
15249   mirror: always
15251 #ifdef MOZ_WIDGET_GTK
15252 # Only GtkTextView (native multiline text viewer/editor) supports "select-all"
15253 # signal so that we cannot know "select-all" key bindings only with GtkEntry.
15254 # When this pref is set to true, if a key combination does not cause any
15255 # signals in GtkEntry, try to check the key combination is mapped to
15256 # "select-all" in GtkTextView or not.  If it's mapped to other commands, they
15257 # are just ignored.
15258 - name: ui.key.use_select_all_in_single_line_editor
15259   type: bool
15260   value: true
15261   mirror: always
15262 #endif
15264 # Duration of timeout of incremental search in menus (ms).  0 means infinite.
15265 - name: ui.menu.incremental_search.timeout
15266   type: uint32_t
15267   value: 1000
15268   mirror: always
15270 # If true, all popups won't hide automatically on blur
15271 - name: ui.popup.disable_autohide
15272   type: RelaxedAtomicBool
15273   value: false
15274   mirror: always
15276 # Negate scroll, true will make the mouse scroll wheel move the screen the
15277 # same direction as with most desktops or laptops.
15278 - name: ui.scrolling.negate_wheel_scroll
15279   type: RelaxedAtomicBool
15280   value: @IS_ANDROID@
15281   mirror: always
15283 # Delay in milliseconds for tooltips
15284 - name: ui.tooltip.delay_ms
15285   type: uint32_t
15286   value: 500
15287   mirror: always
15289 # If the user puts a finger down on an element and we think the user might be
15290 # executing a pan gesture, how long do we wait before tentatively deciding the
15291 # gesture is actually a tap and activating the target element?
15292 - name: ui.touch_activation.delay_ms
15293   type: int32_t
15294   value: 100
15295   mirror: always
15297 # If the user has clicked an element, how long do we keep the :active state
15298 # before it is cleared.
15299 - name: ui.touch_activation.duration_ms
15300   type: int32_t
15301   value: 50
15302   mirror: always
15304 # Prevent system colors from being exposed to CSS or canvas.
15305 - name: ui.use_standins_for_native_colors
15306   type: RelaxedAtomicBool
15307   value: false
15308   mirror: always
15310 # Whether context menus should only appear on mouseup instead of mousedown,
15311 # on OSes where they normally appear on mousedown (macOS, *nix).
15312 # Note: ignored on Windows (context menus always use mouseup).
15313 - name: ui.context_menus.after_mouseup
15314   type: bool
15315   value: false
15316   mirror: always
15318 # Whether click-hold context menus are enabled.
15319 - name: ui.click_hold_context_menus
15320   type: RelaxedAtomicBool
15321   value: false
15322   mirror: always
15324 # How long to wait for a drag gesture before displaying click-hold context menu,
15325 # in milliseconds.
15326 - name: ui.click_hold_context_menus.delay
15327   type: RelaxedAtomicInt32
15328   value: 500
15329   mirror: always
15331 # When enabled, the touch.radius and mouse.radius prefs allow events to be
15332 # dispatched to nearby elements that are sensitive to the event. See
15333 # PositionedEventTargeting.cpp. The 'mm' prefs define a rectangle around the
15334 # nominal event target point within which we will search for suitable elements.
15335 # 'visitedWeight' is a percentage weight; a value > 100 makes a visited link be
15336 # treated as further away from the event target than it really is, while a
15337 # value < 100 makes a visited link be treated as closer to the event target
15338 # than it really is.
15340 - name: ui.touch.radius.enabled
15341   type: bool
15342   value: @IS_ANDROID@
15343   mirror: always
15345 - name: ui.touch.radius.topmm
15346   type: uint32_t
15347 #ifdef ANDROID
15348   value: 2
15349 #else
15350   value: 12
15351 #endif
15352   mirror: always
15354 - name: ui.touch.radius.rightmm
15355   type: uint32_t
15356 #ifdef ANDROID
15357   value: 3
15358 #else
15359   value: 8
15360 #endif
15361   mirror: always
15363 - name: ui.touch.radius.bottommm
15364   type: uint32_t
15365 #ifdef ANDROID
15366   value: 2
15367 #else
15368   value: 4
15369 #endif
15370   mirror: always
15372 - name: ui.touch.radius.leftmm
15373   type: uint32_t
15374 #ifdef ANDROID
15375   value: 3
15376 #else
15377   value: 8
15378 #endif
15379   mirror: always
15381 - name: ui.touch.radius.visitedWeight
15382   type: uint32_t
15383   value: 120
15384   mirror: always
15386 - name: ui.mouse.radius.enabled
15387   type: bool
15388   value: @IS_ANDROID@
15389   mirror: always
15391 - name: ui.mouse.radius.topmm
15392   type: uint32_t
15393 #ifdef ANDROID
15394   value: 2
15395 #else
15396   value: 12
15397 #endif
15398   mirror: always
15400 - name: ui.mouse.radius.rightmm
15401   type: uint32_t
15402 #ifdef ANDROID
15403   value: 3
15404 #else
15405   value: 8
15406 #endif
15407   mirror: always
15409 - name: ui.mouse.radius.bottommm
15410   type: uint32_t
15411 #ifdef ANDROID
15412   value: 2
15413 #else
15414   value: 4
15415 #endif
15416   mirror: always
15418 - name: ui.mouse.radius.leftmm
15419   type: uint32_t
15420 #ifdef ANDROID
15421   value: 3
15422 #else
15423   value: 8
15424 #endif
15425   mirror: always
15427 - name: ui.mouse.radius.visitedWeight
15428   type: uint32_t
15429   value: 120
15430   mirror: always
15432 - name: ui.mouse.radius.reposition
15433   type: bool
15434   value: @IS_ANDROID@
15435   mirror: always
15437 # When true, the ui.mouse.radius.* prefs will only affect simulated mouse
15438 # events generated by touch input. When false, the prefs will be used for all
15439 # mouse events.
15440 - name: ui.mouse.radius.inputSource.touchOnly
15441   type: bool
15442   value: true
15443   mirror: always
15445 # When true, selection is not collapsed at the right click point if there is a
15446 # non-collapsed selection.
15447 - name: ui.mouse.right_click.collapse_selection.stop_if_non_collapsed_selection
15448   type: bool
15449   value: true
15450   mirror: always
15452 # When true, selection is not collapsed at the right click point if the clicked
15453 # node is not editable.
15454 - name: ui.mouse.right_click.collapse_selection.stop_if_non_editable_node
15455   type: bool
15456   value: false
15457   mirror: always
15459 # When true, the caret is not moved to the right click point in focused editable
15460 # content.
15461 - name: ui.mouse.right_click.move_caret.stop_if_in_focused_editable_node
15462   type: bool
15463   value: false
15464   mirror: always
15466 #---------------------------------------------------------------------------
15467 # Prefs starting with "urlclassifier."
15468 #---------------------------------------------------------------------------
15470 # Update server response timeout for Safe Browsing.
15471 - name: urlclassifier.update.response_timeout_ms
15472   type: uint32_t
15473   value: 30000
15474   mirror: always
15476 # Download update timeout for Safe Browsing.
15477 - name: urlclassifier.update.timeout_ms
15478   type: uint32_t
15479   value: 90000
15480   mirror: always
15482 #---------------------------------------------------------------------------
15483 # Prefs starting with "view_source."
15484 #---------------------------------------------------------------------------
15486 - name: view_source.editor.external
15487   type: bool
15488   value: false
15489   mirror: always
15491 - name: view_source.wrap_long_lines
15492   type: bool
15493   value: @IS_ANDROID@
15494   mirror: always
15496 - name: view_source.syntax_highlight
15497   type: bool
15498   value: true
15499   mirror: always
15501 - name: view_source.tab_size
15502   type: int32_t
15503   value: 4
15504   mirror: always
15506 #---------------------------------------------------------------------------
15507 # Prefs starting with "webgl." (for pref access from Worker threads)
15508 #---------------------------------------------------------------------------
15510 - name: webgl.1.allow-core-profiles
15511   type: RelaxedAtomicBool
15512 #ifdef XP_MACOSX
15513   value: true
15514 #else
15515   value: false
15516 #endif
15517   mirror: always
15519 - name: webgl.angle.force-d3d11
15520   type: RelaxedAtomicBool
15521   value: false
15522   mirror: always
15524 - name: webgl.angle.try-d3d11
15525   type: RelaxedAtomicBool
15526 #ifdef XP_WIN
15527   value: true
15528 #else
15529   value: false
15530 #endif
15531   mirror: always
15533 - name: webgl.angle.force-warp
15534   type: RelaxedAtomicBool
15535   value: false
15536   mirror: always
15538 - name: webgl.auto-flush
15539   type: RelaxedAtomicBool
15540   value: true
15541   mirror: always
15543 - name: webgl.auto-flush.gl
15544   type: RelaxedAtomicBool
15545   value: false
15546   mirror: always
15548 - name: webgl.can-lose-context-in-foreground
15549   type: RelaxedAtomicBool
15550   value: true
15551   mirror: always
15553 - name: webgl.cgl.multithreaded
15554   type: RelaxedAtomicBool
15555   value: true
15556   mirror: always
15558 - name: webgl.colorspaces.prototype
15559   type: RelaxedAtomicBool
15560   value: false
15561   mirror: always
15563 - name: webgl.debug.incomplete-tex-color
15564   type: RelaxedAtomicUint32
15565   value: 0
15566   mirror: always
15568 - name: webgl.default-antialias
15569   type: RelaxedAtomicBool
15570   value: @IS_NOT_ANDROID@
15571   mirror: always
15573 - name: webgl.default-no-alpha
15574   type: RelaxedAtomicBool
15575   value: false
15576   mirror: always
15578 - name: webgl.disable-angle
15579   type: RelaxedAtomicBool
15580   value: false
15581   mirror: always
15583 - name: webgl.disable-wgl
15584   type: RelaxedAtomicBool
15585   value: false
15586   mirror: always
15588 - name: webgl.dxgl.enabled
15589   type: RelaxedAtomicBool
15590 #ifdef XP_WIN
15591   value: true
15592 #else
15593   value: false
15594 #endif
15595   mirror: always
15597 - name: webgl.dxgl.needs-finish
15598   type: RelaxedAtomicBool
15599   value: false
15600   mirror: always
15602 - name: webgl.disable-fail-if-major-performance-caveat
15603   type: RelaxedAtomicBool
15604   value: true
15605   mirror: always
15607 - name: webgl.disable-DOM-blit-uploads
15608   type: RelaxedAtomicBool
15609 #if defined(MOZ_AARCH64) && defined(XP_MACOSX)
15610   value: true
15611 #else
15612   value: false
15613 #endif
15614   mirror: always
15616 - name: webgl.disabled
15617   type: RelaxedAtomicBool
15618   value: false
15619   mirror: always
15621 - name: webgl.enable-debug-renderer-info
15622   type: RelaxedAtomicBool
15623   value: true
15624   mirror: always
15626 - name: webgl.enable-draft-extensions
15627   type: RelaxedAtomicBool
15628   value: false
15629   mirror: always
15631 - name: webgl.enable-privileged-extensions
15632   type: RelaxedAtomicBool
15633   value: false
15634   mirror: always
15636 - name: webgl.enable-renderer-query
15637   type: RelaxedAtomicBool
15638   value: true
15639   mirror: always
15641 - name: webgl.enable-surface-texture
15642   type: RelaxedAtomicBool
15643   value: true
15644   mirror: always
15646 - name: webgl.enable-webgl2
15647   type: RelaxedAtomicBool
15648   value: true
15649   mirror: always
15651 - name: webgl.fake-verts.max
15652   type: RelaxedAtomicUint32
15653   value: 10*1000*1000  # 10M as vec4 is count*4*4 = 160MB
15654   mirror: always
15656 # Only works on Mac for now.
15657 - name: webgl.forbid-hardware
15658   type: RelaxedAtomicBool
15659   value: false
15660   mirror: always
15662 # Only works on Mac for now.
15663 - name: webgl.forbid-software
15664   type: RelaxedAtomicBool
15665   value: true  # It's generally better to encourage fallback to e.g. canvas2d.
15666   mirror: always
15668 - name: webgl.force-enabled
15669   type: RelaxedAtomicBool
15670   value: false
15671   mirror: always
15673 - name: webgl.force-index-validation
15674   type: RelaxedAtomicInt32
15675   value: 0
15676   mirror: always
15678 - name: webgl.gl_khr_no_error
15679   type: RelaxedAtomicBool
15680 #ifdef XP_WIN
15681   value: false
15682 #elif defined(MOZ_WIDGET_GTK)
15683   # Bug 1862039 - All versions of Mesa as of Nov 2023 have issues with
15684   # GL_CONTEXT_FLAG_NO_ERROR_BIT. We should aspire to reenable it at
15685   # some point when the bugs are fixed.
15686   # See also https://gitlab.freedesktop.org/mesa/mesa/-/issues/10062
15687   value: false
15688 #else
15689   value: true
15690 #endif
15691   mirror: always
15693 - name: webgl.lose-context-on-memory-pressure
15694   type: RelaxedAtomicBool
15695   value: false
15696   mirror: always
15698 - name: webgl.max-contexts
15699   type: RelaxedAtomicUint32
15700   value: 1000
15701   mirror: always
15703 - name: webgl.max-contexts-per-principal
15704   type: RelaxedAtomicUint32
15705   value: 300
15706   mirror: always
15708 - name: webgl.max-size-per-texture-mib
15709   type: RelaxedAtomicUint32
15710   value: 1024
15711   mirror: always
15713 - name: webgl.max-vert-ids-per-draw
15714   type: RelaxedAtomicUint32
15715   value: 30*1000*1000
15716   mirror: always
15718 - name: webgl.max-warnings-per-context
15719   type: RelaxedAtomicUint32
15720   value: 32
15721   mirror: always
15723 - name: webgl.min_capability_mode
15724   type: RelaxedAtomicBool
15725   value: false
15726   mirror: always
15728 - name: webgl.msaa-force
15729   type: RelaxedAtomicBool
15730   value: false
15731   mirror: always
15733 - name: webgl.msaa-samples
15734   type: RelaxedAtomicUint32
15735   value: 4
15736   mirror: always
15738 - name: webgl.out-of-process
15739   type: RelaxedAtomicBool
15740   value: true
15741   mirror: always
15743 - name: webgl.out-of-process.worker
15744   type: RelaxedAtomicBool
15745   value: true
15746   mirror: always
15748 - name: webgl.out-of-process.force
15749   type: RelaxedAtomicBool
15750   value: false
15751   mirror: always
15753 - name: webgl.out-of-process.shmem-size
15754   type: RelaxedAtomicUint32
15755   value: 100000 # 100KB
15756   mirror: always
15758 - name: webgl.out-of-process.async-present
15759   type: RelaxedAtomicBool
15760   value: true
15761   mirror: always
15763 # Forces async present to wait for a sync, even while using remote textures.
15764 - name: webgl.out-of-process.async-present.force-sync
15765   type: RelaxedAtomicBool
15766   value: false
15767   mirror: always
15769 #if defined(MOZ_WIDGET_ANDROID)
15770 - name: webgl.out-of-process.enable-ahardwarebuffer
15771   type: bool
15772   value: false
15773   mirror: once
15774 #endif
15776 # Override the blocklist to assume that GL is threadsafe.
15777 - name: webgl.threadsafe-gl.force-enabled
15778   type: bool
15779   value: false
15780   mirror: once
15782 # Override the blocklist to assume that GL is not threadsafe.
15783 - name: webgl.threadsafe-gl.force-disabled
15784   type: bool
15785   value: false
15786   mirror: once
15788 - name: webgl.use-canvas-render-thread
15789   type: bool
15790   value: true
15791   mirror: once
15793 - name: webgl.override-unmasked-renderer
15794   type: DataMutexString
15795   value: ""
15796   mirror: always
15798 - name: webgl.override-unmasked-vendor
15799   type: DataMutexString
15800   value: ""
15801   mirror: always
15803 - name: webgl.power-preference-override
15804   type: RelaxedAtomicInt32
15805   value: 0
15806   mirror: always
15808 - name: webgl.prefer-16bpp
15809   type: RelaxedAtomicBool
15810   value: false
15811   mirror: always
15813 - name: webgl.sanitize-unmasked-renderer
15814   type: RelaxedAtomicBool
15815   value: true
15816   mirror: always
15818 - name: webgl.allow-immediate-queries
15819   type: RelaxedAtomicBool
15820   value: false
15821   mirror: always
15823 - name: webgl.allow-fb-invalidation
15824   type: RelaxedAtomicBool
15825   value: false
15826   mirror: always
15829 - name: webgl.perf.max-warnings
15830   type: RelaxedAtomicInt32
15831   value: 0
15832   mirror: always
15834 - name: webgl.perf.max-acceptable-fb-status-invals
15835   type: RelaxedAtomicInt32
15836   value: 0
15837   mirror: always
15839 - name: webgl.perf.spew-frame-allocs
15840   type: RelaxedAtomicBool
15841   value: true
15842   mirror: always
15844 #---------------------------------------------------------------------------
15845 # Prefs starting with "widget."
15846 #---------------------------------------------------------------------------
15848 # Global user preference for disabling native theme in content processes.
15850 # NOTE(emilio): When changing this make sure to update the non_native_theme
15851 # entry in python/mozbuild/mozbuild/mozinfo.py and test_fission_autostart.py
15852 - name: widget.non-native-theme.enabled
15853   type: RelaxedAtomicBool
15854   value: true
15855   mirror: always
15857 # Whether the non-native theme should always use system colors. Useful mostly
15858 # for testing forced colors mode.
15859 - name: widget.non-native-theme.always-high-contrast
15860   type: RelaxedAtomicBool
15861   value: false
15862   mirror: always
15864 # The style of scrollbars to use. Here are the current options:
15866 #   0: Default platform scrollbar style.
15867 #   1: macOS scrollbars
15868 #   2: GTK scrollbars
15869 #   3: Android scrollbars
15870 #   4: Windows 10 scrollbars
15871 #   5: Windows 11 scrollbars
15873 # Note that switching to non-default scrollbars is experimental and other
15874 # scrollbar-related prefs may interfere with the experience. For example,
15875 # setting the GTK thumb size may have no effect when using non-GTK scrollbars
15876 # on GTK.
15877 - name: widget.non-native-theme.scrollbar.style
15878   type: uint32_t
15879   value: 0
15880   mirror: always
15882 # An override that allows to override the default platform size. The size in CSS
15883 # pixels at full zoom of the minimum scrollbar width.
15884 - name: widget.non-native-theme.scrollbar.size.override
15885   type: uint32_t
15886   value: 0
15887   mirror: always
15889 # Whether we should use themed values for dark scrollbars.
15890 - name: widget.non-native-theme.scrollbar.dark-themed
15891   type: RelaxedAtomicBool
15892   value: true
15893   mirror: always
15895 # Whether the active thumb color should always use the themed colors, even if
15896 # dark scrollbars are in use.
15897 - name: widget.non-native-theme.scrollbar.active-always-themed
15898   type: RelaxedAtomicBool
15899   value: true
15900   mirror: always
15902 # Whether we use the Windows CSS scrollbar sizes, or the scrollbar sizes
15903 # defined above.
15904 - name: widget.non-native-theme.win.scrollbar.use-system-size
15905   type: bool
15906   value: true
15907   mirror: always
15909 # Whether Windows 11 scrollbars are always drawn with the thinner "overlay"
15910 # scrollbar style.
15911 - name: widget.non-native-theme.win11.scrollbar.force-overlay-style
15912   type: bool
15913   value: false
15914   mirror: always
15916 # The amount of space that the thumb should fill the scrollbar, from zero to
15917 # one.
15918 - name: widget.non-native-theme.gtk.scrollbar.thumb-size
15919   type: float
15920   value: 0.75
15921   mirror: always
15923 # The minimum size of the scroll thumb, in the scrollbar direction.
15924 - name: widget.non-native-theme.gtk.scrollbar.thumb-cross-size
15925   type: uint32_t
15926   value: 40
15927   mirror: always
15929 # Whether the thumb should be rounded for the non-native scrollbars.
15930 - name: widget.non-native-theme.gtk.scrollbar.round-thumb
15931   type: bool
15932   value: true
15933   mirror: always
15935 # Whether buttons shouldn't be suppressed for non-native scrollbars.
15936 - name: widget.non-native-theme.gtk.scrollbar.allow-buttons
15937   type: bool
15938   value: false
15939   mirror: always
15941 # Whether we should use the default accent color or the theme-provided one for
15942 # content (e.g. for form controls and CSS system colors).
15944 # Turned off on Windows, for now (we always use the default blue-ish
15945 # accent-color there). We might want to turn this on there, though it's worth
15946 # thinking on what the behavior should be for grey-ish accent colors (which are
15947 # a thing on Windows and can cause confusion with things like disabled form
15948 # controls). Maybe it's just fine.
15949 - name: widget.non-native-theme.use-theme-accent
15950   type: RelaxedAtomicBool
15951 #if defined(XP_WIN) && !defined(MOZ_THUNDERBIRD)
15952   value: false
15953 #else
15954   value: true
15955 #endif
15956   mirror: always
15958 # Whether we should try to use WebRender to render widgets.
15959 - name: widget.non-native-theme.webrender
15960   type: bool
15961   value: true
15962   mirror: always
15964 # Whether the outline style should be one big stroke or two contrasting strokes
15965 - name: widget.non-native-theme.solid-outline-style
15966   type: bool
15967   value: false
15968   mirror: always
15970 # Preference to disable dark scrollbar implementation.
15971 # This is mainly for testing because dark scrollbars have to be semi-
15972 # transparent, but many reftests expect scrollbars to look identical
15973 # among different backgrounds.
15974 # However, some users may want to disable this as well.
15975 - name: widget.disable-dark-scrollbar
15976   type: bool
15977   value: false
15978   mirror: always
15980 - name: widget.disable_file_pickers
15981   type: RelaxedAtomicBool
15982   value: false
15983   mirror: always
15985 - name: widget.window-transforms.disabled
15986   type: RelaxedAtomicBool
15987   value: false
15988   mirror: always
15990 #ifdef XP_MACOSX
15992 # Whether to shift by the menubar height on fullscreen mode.
15993 # 0: never
15994 # 1: always
15995 # 2: auto (tries to detect when it is needed)
15996 - name: widget.macos.shift-by-menubar-on-fullscreen
15997   type: RelaxedAtomicUint32
15998   value: 2
15999   mirror: always
16001 - name: widget.macos.native-context-menus
16002   type: RelaxedAtomicBool
16003   value: true
16004   mirror: always
16006 - name: widget.macos.titlebar-blend-mode.behind-window
16007   type: RelaxedAtomicBool
16008   value: false
16009   mirror: always
16010 #endif
16012 # Whether native GTK global menubar support is enabled.
16013 # Disabled because there are some minor bugs and it needs deeper integration
16014 # with the front-end.
16015 - name: widget.gtk.global-menu.enabled
16016   type: RelaxedAtomicBool
16017   value: false
16018   mirror: always
16020 # Whether GTK global menubar support is enabled using wayland's experimental
16021 # dbus_annotation protocol:
16022 # https://gitlab.freedesktop.org/wayland/wayland-protocols/-/merge_requests/52
16023 # Disabled until it has a final shape and it is available in compositors.
16024 - name: widget.gtk.global-menu.wayland.enabled
16025   type: RelaxedAtomicBool
16026   value: false
16027   mirror: always
16029 # Whether native GTK context menus are enabled.
16030 # Disabled because at the very least there's missing custom icon support.
16031 - name: widget.gtk.native-context-menus
16032   type: RelaxedAtomicBool
16033   value: false
16034   mirror: always
16036 # Whether we use overlay scrollbars on GTK.
16037 - name: widget.gtk.overlay-scrollbars.enabled
16038   type: RelaxedAtomicBool
16039   value: true
16040   mirror: always
16042 # Whether we hide the pointer while typing on Linux
16043 - name: widget.gtk.hide-pointer-while-typing.enabled
16044   type: RelaxedAtomicBool
16045   value: true
16046   mirror: always
16048 # Whether we honor the scrollbar colors from the gtk theme.
16049 - name: widget.gtk.theme-scrollbar-colors.enabled
16050   type: bool
16051   value: true
16052   mirror: always
16054 # Whether libadwaita colors are used rather than the default ones.
16055 - name: widget.gtk.libadwaita-colors.enabled
16056   type: bool
16057   value: true
16058   mirror: always
16060 # Whether to use gtk titlebar actions for middle click instead of Firefox
16061 # build in one
16062 - name: widget.gtk.titlebar-action-middle-click-enabled
16063   type: bool
16064   value: false
16065   mirror: always
16067 # Whether to ignore middle click events on widget level.
16068 - name: widget.gtk.middle-click-enabled
16069   type: bool
16070   value: true
16071   mirror: always
16073 # Whether we enable rounded bottom corners on GTK by default.
16075 # The implementation is a bit hacky (see details in bug 1850827) so behind a
16076 # pref for emergency purposes.
16077 - name: widget.gtk.rounded-bottom-corners.enabled
16078   type: bool
16079   value: false
16080   mirror: always
16081   rust: true
16083 # Whether non-native titlebar buttons are enabled for lightweight themes.
16084 - name: widget.gtk.non-native-titlebar-buttons.enabled
16085   type: RelaxedAtomicBool
16086   value: true
16087   mirror: always
16089 # Whether selection colors for the non-system theme get passed from the system
16090 # GTK theme.
16091 - name: widget.gtk.alt-theme.selection
16092   type: bool
16093   value: true
16094   mirror: always
16096 # Whether form control accent colors for the non-system theme get passed from
16097 # the system GTK theme.
16098 - name: widget.gtk.alt-theme.accent
16099   type: bool
16100   value: true
16101   mirror: always
16103 # Whether the scrollbar thumb active color from the non-system theme gets
16104 # passed from the system GTK theme.
16105 - name: widget.gtk.alt-theme.scrollbar_active
16106   type: bool
16107   value: true
16108   mirror: always
16110 # Whether we should try to grab the pointer on popups.
16111 #  0: Never
16112 #  1: Always
16113 #  2: Auto (depending on the system)
16114 - name: widget.gtk.grab-pointer
16115   type: int32_t
16116   value: 2
16117   mirror: always
16119 # Whether we should try ignore bogus leave-notify events from the window
16120 # manager.
16121 #  0: Never
16122 #  1: Always
16123 #  2: Auto (depending on the system)
16124 - name: widget.gtk.ignore-bogus-leave-notify
16125   type: int32_t
16126   value: 2
16127   mirror: always
16129 # Whether to use gtk legacy cursor API.
16130 - name: widget.gtk.legacy-cursors.enabled
16131   type: bool
16132   value: false
16133   mirror: always
16135 # Whether to use gtk high contrast themes to disable content styling like on
16136 # windows high contrast mode.
16137 - name: widget.content.gtk-high-contrast.enabled
16138   type: bool
16139   value: true
16140   mirror: always
16142 #ifdef MOZ_WAYLAND
16143 - name: widget.wayland.fractional-scale.enabled
16144   type: bool
16145   value: false
16146   mirror: once
16148 # Use opaque region for MozContainer wl_surface
16149 - name: widget.wayland.opaque-region.enabled
16150   type: bool
16151   value: true
16152   mirror: once
16154 # Use frame callback based vsync
16155 - name: widget.wayland.vsync.enabled
16156   type: bool
16157   value: true
16158   mirror: once
16160 # Whether to keep firing vsync at layout.throttled_frame_rate after we've been
16161 # occluded.
16162 - name: widget.wayland.vsync.keep-firing-at-idle
16163   type: bool
16164   value: false
16165   mirror: always
16166 #endif
16168 #ifdef MOZ_WIDGET_GTK
16169 # Whether to use DMABuf backend.
16170 - name: widget.dmabuf.enabled
16171   type: bool
16172   value: true
16173   mirror: once
16175 # Whether to override the DMABuf blocklist.
16176 - name: widget.dmabuf.force-enabled
16177   type: bool
16178   value: false
16179   mirror: once
16181 #ifdef NIGHTLY_BUILD
16182 # Keep those pref hidden on non-nightly builds to avoid people accidentally
16183 # turning it on.
16185 # Use DMABuf for content textures.
16186 # For testing purposes only.
16187 - name: widget.dmabuf-textures.enabled
16188   type: RelaxedAtomicBool
16189   value: false
16190   mirror: always
16191 #endif
16193 # Use DMABuf backend for WebGL.
16194 - name: widget.dmabuf-webgl.enabled
16195   type: RelaxedAtomicBool
16196   value: true
16197   mirror: always
16199 # Use gdk_window_move_to_rect to move Wayland popups when available.
16200 - name: widget.wayland.use-move-to-rect
16201   type: bool
16202   value: true
16203   mirror: once
16205 # The time we should spend on a DBUS call to the FileManager1 interface before
16206 # giving up and trying an alternative method.
16208 # -1 for the default system timeout, INT_MAX for "infinite time".
16210 # This happens right now on the main thread so 1 second should be enough, we
16211 # should consider moving it to a background task and just use the default
16212 # timeout.
16213 - name: widget.gtk.file-manager-show-items-timeout-ms
16214   type: int32_t
16215   value: 1000
16216   mirror: always
16218 # The timeout we should spend on a DBUS call to the Settings proxy before
16219 # giving up.
16221 # -1 for the default system timeout, INT_MAX for "infinite time".
16223 # This runs just once, but during startup, so make sure it doesn't take too
16224 # long. Three seconds should be way more than enough, and if we don't get the
16225 # reply on time then the only potential issue is that we use a light instead of
16226 # dark interface or vice versa.
16227 - name: widget.gtk.settings-portal-timeout-ms
16228   type: int32_t
16229   value: 3000
16230   mirror: always
16232 # Whether to use gtk portal for the file picker.
16233 #  - 0: never
16234 #  - 1: always
16235 #  - 2: auto (true for flatpak or GTK_USE_PORTAL=1, false otherwise)
16236 - name: widget.use-xdg-desktop-portal.file-picker
16237   type: int32_t
16238   value: 2
16239   mirror: always
16241 # Whether to use gtk portal for the mime handler.
16242 #  - 0: never
16243 #  - 1: always
16244 #  - 2: auto (for now only true for flatpak, see bug 1516290)
16245 - name: widget.use-xdg-desktop-portal.mime-handler
16246   type: int32_t
16247   value: 2
16248   mirror: always
16250 # Whether to try to use XDG portal for settings / look-and-feel information.
16251 # https://flatpak.github.io/xdg-desktop-portal/#gdbus-org.freedesktop.portal.Settings
16252 #  - 0: never
16253 #  - 1: always
16254 #  - 2: auto
16255 - name: widget.use-xdg-desktop-portal.settings
16256   type: int32_t
16257   value: 2
16258   mirror: always
16260 # Whether to use XDG portal for geolocation.
16261 # https://flatpak.github.io/xdg-desktop-portal/#gdbus-org.freedesktop.portal.Location
16262 #  - 0: never
16263 #  - 1: always
16264 #  - 2: auto
16265 - name: widget.use-xdg-desktop-portal.location
16266   type: int32_t
16267   value: 2
16268   mirror: always
16269 # Whether to use XDG portal for opening to a file.
16270 # https://flatpak.github.io/xdg-desktop-portal/#gdbus-org.freedesktop.portal.OpenURI
16271 #  - 0: never
16272 #  - 1: always
16273 #  - 2: auto (true for flatpak or GTK_USE_PORTAL=1, false otherwise)
16274 - name: widget.use-xdg-desktop-portal.open-uri
16275   type: int32_t
16276   value: 2
16277   mirror: always
16278 #endif
16280 #ifdef XP_WIN
16281 # WindowsUIUtils::Share to wait for user action on Windows share dialog
16282 # `true` means the promise resolves when user completes or cancels the share
16283 # action. This can be unsafe since selecting copy action fires no DataPackage
16284 # event as of 21H1.
16285 # `false` means the promise resolves when the share data is passed to
16286 # DataPackage.
16287 # This affects the behavior of `navigator.share()`.
16288 - name: widget.windows.share.wait_action.enabled
16289   type: bool
16290   value: false
16291   mirror: always
16293 - name: widget.windows.window_occlusion_tracking.enabled
16294   type: bool
16295   value: true
16296   mirror: always
16298 # Whether overlay scrollbars respect the system settings.
16299 # Note that these can be overridden by the ui.useOverlayScrollbars pref.
16300 - name: widget.windows.overlay-scrollbars.enabled
16301   type: bool
16302   value: true
16303   mirror: always
16305 # Whether we allow accessing the UWP system color pallete.
16306 - name: widget.windows.uwp-system-colors.enabled
16307   type: bool
16308   value: true
16309   mirror: always
16311 # Whether we use the accent color for highlight as some other UWP apps do.
16313 # false for now since it can cause some contrast-with-background issues
16314 # specially with grey accents, see bug 1776588.
16315 - name: widget.windows.uwp-system-colors.highlight-accent
16316   type: bool
16317   value: false
16318   mirror: always
16320 - name: widget.windows.window_occlusion_tracking_display_state.enabled
16321   type: bool
16322   value: false
16323   mirror: always
16325 - name: widget.windows.window_occlusion_tracking_session_lock.enabled
16326   type: bool
16327   value: true
16328   mirror: always
16330 # Whether to give explorer.exe a delated nudge to recalculate the fullscreenness
16331 # of a window after maximizing it.
16332 - name: widget.windows.fullscreen_remind_taskbar
16333   type: RelaxedAtomicBool
16334   value: true
16335   mirror: always
16337 # Whether to open the Windows file and folder pickers "remotely" (in a utility
16338 # process) or "locally" (in the main process).
16340 # Valid values:
16341 #  *  0: auto (possibly release-channel-dependent)
16342 #  *  1: remotely, falling back to locally
16343 #  *  2: remotely, no fallback
16344 #  * -1: locally, no fallback
16345 - name: widget.windows.utility_process_file_picker
16346   type: RelaxedAtomicInt32
16347   value: 0
16348   mirror: always
16350 # The number of messages of each type to keep for display in
16351 # about:windows-messages
16352 - name: widget.windows.messages_to_log
16353   type: RelaxedAtomicUint32
16354   value: 6
16355   mirror: always
16357 # Whether to flush the Ole clipboard synchronously.
16358 # Possible values are:
16359 #  * 0: never
16360 #  * 1: always
16361 #  * 2 (or others): when needed
16362 - name: widget.windows.sync-clipboard-flush
16363   type: uint32_t
16364   value: 2
16365   mirror: always
16367 # Whether to apply a hack (adjusting the window height by -1px and back again)
16368 # upon first entering fullscreen intended to work around a bug exhibited under
16369 # on some Windows 11 machines under some configurations. (See bug 1763981.)
16371 # Semantics:
16372 #  * 0: never
16373 #  * 1: always
16374 #  * 2: auto
16375 - name: widget.windows.apply-dwm-resize-hack
16376   type: RelaxedAtomicInt32
16377   value: 2
16378   mirror: always
16379 #endif
16381 # Whether to disable SwipeTracker (e.g. swipe-to-nav).
16382 - name: widget.disable-swipe-tracker
16383   type: bool
16384   value: false
16385   mirror: always
16387 # Various metrics to control SwipeTracker.
16388 - name: widget.swipe.velocity-twitch-tolerance
16389   type: float
16390   value: 0.0000001f
16391   mirror: always
16393 - name: widget.swipe.success-velocity-contribution
16394   type: float
16395   value: 0.05f
16396   mirror: always
16398 # When using pixel deltas for pan input, how many pixels do we consider a whole
16399 # swipe?
16401 # The values for this pref are derived from trial and error in an effort to
16402 # match the existing behavior on the respective platforms.
16403 - name: widget.swipe.pixel-size
16404   type: float
16405 #if defined(XP_MACOSX)
16406   value: 550.0f
16407 #else
16408   value: 1100.0f
16409 #endif
16410   mirror: always
16412 # When using page deltas for pan input, how many pages do we consider a whole
16413 # swipe navigation?
16415 # This is only relevant for GTK which is as of right now the only platform
16416 # which supports page-based pan gestures.
16417 - name: widget.swipe.page-size
16418   type: float
16419   value: 40.0f
16420   mirror: always
16422 - name: widget.transparent-windows
16423   type: bool
16424   value: true
16425   mirror: once
16427 # Whether the clipboard cached are used while getting system clipboard data.
16428 - name: widget.clipboard.use-cached-data.enabled
16429   type: bool
16430 #if defined(XP_MACOSX)
16431   value: true
16432 #else
16433   value: false
16434 #endif
16435   mirror: always
16437 # Whether to render in to a child SurfaceControl rather than directly into the SurfaceView
16438 - name: widget.android.use-surfacecontrol
16439   type: bool
16440   value: false
16441   mirror: once
16443 #---------------------------------------------------------------------------
16444 # Prefs starting with "zoom."
16445 #---------------------------------------------------------------------------
16447 - name: zoom.maxPercent
16448   type: uint32_t
16449 #ifdef ANDROID
16450   value: 400
16451 #else
16452   value: 500
16453 #endif
16454   mirror: always
16456 - name: zoom.minPercent
16457   type: uint32_t
16458 #ifdef ANDROID
16459   value: 20
16460 #else
16461   value: 30
16462 #endif
16463   mirror: always
16465 #---------------------------------------------------------------------------
16466 # End of prefs
16467 #---------------------------------------------------------------------------